当前位置:网站首页>总结了嵌入式开发中几种常见的设备通信协议
总结了嵌入式开发中几种常见的设备通信协议
2022-06-21 19:26:00 【李肖遥】
关注、星标公众号,直达精彩内容
来源:网路素材
嵌入式设备在运行中需要设置参数,这个工作经常由PC机来实现,需要为双方通信设计协议,有代表性协议是如下三种:

从上表可以看到,一般嵌入式设备内存和运算性能都有限,因此固定二进制是首选通信协议。
一. 简单性
保证协议是一个简单的方案,晦涩难懂往往意味着实现困难和容易出错。协议的结构宜采用平面方式,每个域作用明确,数据域尽可能设计得长度和位置固定,注释详尽,文档清晰,实例丰富,让人尽快上手和理解。
协议一般都需要以下域:帧头,长度,帧类型,目标地址,源地址,数据,校验,帧尾。
二. 可扩展
必须保证将来增加功能和更改硬件后协议仍能胜任工作,这往往是通过预留空间来实现,协议的变更应该只是量的增加,不至于引起协议结构的变化。
三. 低耦合
理想情况下每个协议包是原子信息,即本协议包不与其他协议包牵连,以防止通讯丢帧和设置牵连带来的错误。
四. 稳定性
协议包长度适宜:太小包含的信息过少,协议包的种类繁多,容易引起通讯混乱和牵连错误;太大包含的信息过多,可读性较差,组帧和解帧的工作困难,还会带来通讯易受干扰的缺陷,一般协议长度以最小原子性信息为标尺。
协议必须包括校验机制,以便于接收方判别协议包正确完整接收,如果出错需要较好的机制来确保通讯成功(如重传)。
五. 高效率
按信息类型区分协议包类别,如:设置网络信息参数,设置当前运行参数,可以区分开来,方便程序处理。
将同种操作编码为一个子集是一种高效手段,如Read操作,编码为0x0010,Write操作,编码为0x0020。
数据尽可能设计成同构模式,如果实在有差异,至少将同类型数据放置在一起,这样程序可以充分利用指针和线性寻址加速处理。
六. 易实现
尽量减少复杂算法的使用,如,通讯链路稳定,数据帧的校验码可以由CheckSum代替CRC。除非资源非常紧张,否则不要将过多的信息挤压在一个数据里,因为它会带来可读性差和实现困难。
七.软件开发
尽可能地让硬件ISR完成驱动工作,不要让“进程”参与复杂的时序逻辑,否则处理器将步履蹒跚且逻辑复杂!如:
接收固定长度的数据帧,可以使用DMA,每接收完一帧DMA_ISR向进程发消息。小心处理DMA断层异常(接收的数据帧长度正常但数据错误,数据为上帧的后半部分+本帧的前半部分)。
接收不定长的数据帧,可以使用状态机,当接收到“帧尾数据”时向进程发消息。小心数据紊乱和超时异常(数据紊乱时需要将状态机及时复位,超时一般使用定时器监控)。
八. 考虑硬件
如果通信链路是高速总线(如SPORT可达100Mbps),一般设计成一帧产生一次中断,它通过长度触发的DMA来实现,需要将协议设计成固定长度,如附录A。它具备高效率,但灵活性较差。
如果通信链路是低速总线(如UART一般100kbps),一般接收一字节产生一次中断,可以将协议设计成变长帧,如附录B。它具备高灵活性,但效率较低。

上图显示了PC发送数据帧的格式,总长为64字节,是4字节的整倍数,符合绝大部分32位处理器结构体对齐的特性。
0x3C:INT8U,帧头,可见字符’<’
Len:INT8U,本帧的总数据长度,在图4即为64
Dst:INT8U,标识目标设备的ID号
Src:INT8U,标识源设备的ID号
Data:56字节的存储区,内容依赖于具体的通信帧(实例见表2)
Cmd:INT16U,数据帧的类别
CS:INT8U, 对它前面所有数据(62字节)进行8位累加和校验
0x7D:INT8U, 帧尾,可见字符’}’
Data域数据结构实例:

一个基于变长格式的UART通信协议实例:

PC与iWL880A(一种无线通信产品,详见www.rimelink.com)通信帧采用变长格式,如下图所示。大部分设备(常见为PC机)对于接收以“回车符”的机制很好处理,协议中的Tail就等于0x0D(换行符)。
版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
关注我的微信公众号,回复“加群”按规则加入技术交流群。点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。边栏推荐
- 吴军给大学生的书单
- Check information on the Internet after the college entrance examination, and pay attention to prevent websites without SSL certificates
- Simulate the input and get the contents of print output
- 【服务器数据恢复】EMC某型号服务器raid5数据恢复案例
- 高性能内网DNS系统介绍
- SQL教程之数据科学家需要掌握的五种 SQL 技能
- FS9935 高效率恒流限流 WLED 驱动IC
- Book list given by Wu Jun to college students
- The Summer Challenge realizes a standard layout of Huawei app with openharmony ETS
- YB5212A充电IC充电芯片sop8
猜你喜欢

Harbor high availability cluster design and deployment (practice + video), based on offline installation

Oracle Flashback和RMAN示例

EasyCVR智能边缘网关硬件如何设置通电自启动?

什么是GCaMP6f?钙离子成像技术。

Redis HyperLogLog 是什么?这些场景使用让我枪出如龙一笑破苍穹

Adum1401arwz-rl adenault digital signal isolation module

【owt】p2p Signaling Server 运行

Xcode插件管理工具Alcatraz

带你区分几种并行

Idea has this class but can't find it
随机推荐
Show you how to distinguish several kinds of parallelism
亿腾医药在港招股书第三次“失效”:上市实质延后,红杉等为股东
如何使用Memcached实现Django项目缓存
Take off, annual salary: 400000+
[summary of smart trash cans based on Hetai ht32f52352]
Influxdb optimization configuration item
用户态热补丁原理与应用
期货开户平台哪家好?安全正规的期货公司有哪些?
Oracle Flashback和RMAN示例
产品创新 | 物极必反,回归真实生活的创新社交APP
Laravel imports and exports excel using phpoffice
Servlet使用
STL之vector扩容机制
什么是GCaMP6f?钙离子成像技术。
Shutter tabbarview component
Adum1401arwz-rl adenault digital signal isolation module
AB打包有的Shader没有触发IPreprocessShaders的回调
Simple integration of client go gin IX create
Which futures account opening platform is good? What are the safe and regular futures companies?
Vertical and horizontal network shooting range community Modbus Protocol
