关注、星标公众号,直达精彩内容

嵌入式设备在运行中需要设置参数,这个工作经常由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-

| 整理文章为传播相关技术,版权归原作者所有 |

| 如有侵权,请联系删除 |

往期好文合集

市场疯了?ST明年起全线涨价

嵌入式的坑在哪方面?

“2020年嵌入式软件秋招经验和对嵌入式软件未来的一点思考”

最 后

若觉得文章不错,转发分享,也是我们继续更新的动力。

5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等!

在公众号内回复「更多资源」,即可免费获取,期待你的关注~

三种常见嵌入式设备通信协议相关推荐

  1. 嵌入式设备和固件中的自动漏洞检测(二):动态分析与符号执行技术

    原文链接:Automatic Vulnerability Detection in Embedded Devices and Firmware: Survey and Layered Taxonomi ...

  2. 嵌入式设备web服务器比较

    现在在嵌入式设备中所使用的web服务器主要有:boa.thttpd.mini_httpd.shttpd.lighttpd.goaheand.appweb和apache等. Boa 1.介绍 Boa诞生 ...

  3. 嵌入式linux的运行过程,ARM嵌入式设备Linux系统启动步骤和方式

    > 1). 简介本文引用地址:http://www.eepw.com.cn/article/201607/294237.htm 本文简单介绍ARM嵌入式设备基于嵌入式Linux操作系统时候的启动 ...

  4. 计算机管理储存u盘无法使用,U盘无法识别的三种常见情况

    如今,U盘的使用已是非常普遍的,经常用来储存和拷贝数据.但是难免我们在使用的时候,遇到些问题.比如U盘无法被识别就是最常的问题之一了.那么,U盘无法识别要怎么办呢?今天U大侠小编就和大家说说U盘无法识 ...

  5. 嵌入式设备的容器化App

                                                                                                        ...

  6. IoT物联网嵌入式设备中30种常见传感器模块简介及原理讲解

    IoT物联网嵌入式设备中30种常见传感器模块简介及原理讲解 0.前言 一.光学传感器模块: 1. 光敏传感器模块: 2. 红外避障模块 3. 循迹传感器模块 4. U型光电传感器模块 5. 红外接收模 ...

  7. 打开桌面计算机投屏到扩展屏,苹果电脑投屏到显示器的三种常见方式

    苹果电脑投屏到显示器的三种常见方式 AWIND奇机无线投屏器作为专业的跨屏设备,在"商教领域"备受用户青睐.对于AWIND奇机无线投屏器来说,苹果电脑投屏到显示器[投影机.电视机. ...

  8. 嵌入式设备web服务器

    操作系统:ubuntu10.04 前言:     为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能.这就需要在设备中实现web服务器.     现在在嵌入式设备中所使用的we ...

  9. 华清远见嵌入式开发学习的6大阶段

    分享一下华清远见嵌入式开发学习的6大阶段.19年嵌入式培训经验,值得一看. 第一阶段:嵌入式系统开发基础理论 阶段目标 掌握Linux操作系统的使用,精通使用C语言编程,熟练掌握嵌入式Linux的开发 ...

最新文章

  1. babel6 babel7_当您已经准备好Babel时设置Flow
  2. 如何解决C/C++中stack overflow问题
  3. 【EF Code First】 一对一、一对多的多重关系配置
  4. redis cluster 集群重新启动关闭
  5. 安卓2.2都有哪些键盘快捷指令?
  6. Java中Collection与Collections的区别
  7. eclispse调试为什么什么都看不到_【科普6】单号出了为什么还是看不到物流信息?...
  8. 百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等
  9. 聊聊高并发下库存加减那些事儿——“异步扣减库存”
  10. Nginx站点缓存设置
  11. adb shell常用命令收录
  12. 脚本中调用别的脚本,如何得到执行结果?
  13. 第04篇:手写JavaRPC框架之搞定网络通信
  14. Hebb和Delta学习规则
  15. nodejs之http-proxy几点常见问题 1
  16. 移动Win7用户文件夹(我的文档)默认位置至D盘
  17. vscode中backspace按键失效
  18. Thinkpad E420移除白名单
  19. wps中有半根横线无法选中无法删除
  20. Redis的内存用完了会发生什么?

热门文章

  1. error when defining a rule - SAP loyalty management的积分定义规则
  2. where does ZCRM_OPPORTUNITY_0001_BE come from
  3. AWS的Elastic IP和Private IP的区别
  4. 在Eclipse自带的built-in server里运行PHP文件
  5. how is object structure really created - when the child equipment is downloaded
  6. 使用report 打印category 03的IBASE hierarchy
  7. SAP ABAP实用技巧介绍系列之 XSLT copy和copy-of
  8. SAP CRM CRM_PARTNER_READ_MULTI_OB
  9. Eclipse被卡死了或者失去响应了后分析根源的一个小技巧
  10. Netweaver和CloudFoundry是如何运行Web应用的?