嵌入式设备的三种常见通信协议

嵌入式设备在运行期间需要设置参数。

这项工作通常由PC来实现。

必须设计用于双方之间通信的协议。

共有三种代表性的协议,如下所示:从上表可以看出,通用嵌入式设备的内存和计算性能都受到限制,因此固定二进制是首选的通信协议。

一。

简单性保证协议是一个简单的解决方案。

模糊且难以理解通常意味着难以实施且容易出错。

协议的结构应该扁平化,每个字段都应扮演明确的角色,数据字段的长度和位置应尽可能固定,并带有详细的注释,清晰的文档和丰富的示例,以便人们可以尽快开始并了解。

该协议通常需要以下字段:帧头,长度,帧类型,目标地址,源地址,数据,校验和和帧结束。

二。

可扩展性必须确保协议在添加功能和将来更改硬件后仍然能够正常工作。

这通常是通过保留空间来实现的。

协议的更改仅应增加协议的数量,而不会引起协议结构的更改。

三。

低耦合理想情况下,每个协议包都是原子信息,也就是说,该协议包不与其他协议包一起使用,以防止通信帧丢失和设置引起的错误。

四。

稳定性协议报文的长度是适当的:协议报文的长度太小,信息量太少,协议报文的类型很多,很容易引起通信混乱和隐患。

太大会包含太多信息,可读性差,并且难以进行成帧和成帧工作,还会带来通信易受干扰的缺陷。

通常,协议的长度基于最小的原子信息。

协议必须包括验证机制,以便接收方可以判断协议包已正确,完整地接收到。

如果存在错误,则需要一种更好的机制来确保通信成功(例如重传)。

五岁以下根据信息类型有效区分协议包类型,例如:设置网络信息参数和设置当前操作参数,可以区分并方便程序处理。

将相同类型的操作编码为子集是一种有效的方法。

例如,读操作编码为0x0010,写操作编码为0x0020。

数据应尽可能以均质模式设计。

如果存在实际差异,请至少将相同类型的数据放在一起,以便程序可以充分利用指针和线性寻址来加快处理速度。

六。

易于实现以最小化复杂算法的使用。

例如,通信链路是稳定的,并且数据帧的校验码可以用CheckSum for CRC代替。

除非资源非常紧张,否则不要将过多的信息压缩到一个数据中,因为它将带来差的可读性和实现困难。

七。

在软件开发中,让硬件ISR尽可能地完成驱动工作,并且不要让“过程”完成。

参与复杂的顺序逻辑,否则处理器将步履蹒跚,逻辑将变得复杂!例如,要接收固定长度的数据帧,可以使用DMA,并且每次接收到帧时DMA_ISR都会向该进程发送一条消息。

请小心处理DMA故障异常(接收到的数据帧长度正常但数据错误,数据是前一帧的后半部分+该帧的前半部分)。

为了接收可变长度的数据帧,当“帧结束数据”被发送时,您可以使用状态机来向过程发送消息。

收到。

请注意数据混乱和超时异常(数据混乱时需要及时重置状态机,并且通常使用计时器来监视超时)。

8.考虑硬件。

如果通信链路是高速总线(例如高达100Mbps的SPORT),则通常将其设计为每帧生成一个中断,这是通过长度触发的DMA实现的,并且协议需要设计为固定长度,例如附录A。

它效率很高,但灵活性较差。

如果通信链路是低速总线(通常是100kbps,例如UART),通常接收一个字节会产生一个中断,并且该协议可以设计为可变长度帧,如附录B所示。

它具有很高的灵活性,但效率低下。

上图显示了PC发送的数据帧的格式。

总长度为64个字节,是4个字节的整数倍,符合对齐特征

产品知识/行业、品牌资讯