概述
背景
在做一些物联网项目的时候,会涉及到几个mcu之间通信交互,比如我们做的设备,是一款智能家居设备,我们的设备中有两颗mcu,而这两颗mcu之间是需要进行通信联调的。
需求分析
做的每一款产品,客户体验要好,就要求这个产品稳定型要好,就要求两颗mcu之间地通信必须稳定可靠,这就需要它们之间高效地进行信息交互。
系统介绍
在嵌入式应用中,目前常用的硬件接口有UART、SPI和I2C等串行接口。这里我们以最简单地uart为例,来详解两种MCU间的通信协议设计。
整体产品设计框架,当两个MCU之间需要进行通信的时候,发送方将API接口的数据信息A,丢给通信协议,通信协议按照特定帧格式把数据打包,通过UART接口发送给对方。接收方收到数据时,MCU运行相应的通信协议,把数据解包,就可以得到发送方的原始数据,将其交付给上层程序。体系结构如图所示。
底层uart驱动
设备产品要求不同,UART的工作方式也有所区别,主要表现在波特率、停止位、数据字长度等参数的设置。当两个mcu通过UART连接时,所有参数必须完全一致,否则通信出错。在此,要特别注意波特率的设置:当线路质量好的时候,波特率可以设置得高点,以获得较高的传输速率;线路质量差的时候,就要减小波特率,以降低误码率。
波特率不应设置得太高,避免造成寄存器数据溢出,进而造成死机或者接受数据异常。
数据缓存
我们在应用层处理数据的时候,可能此刻底层uart又会接受到数据,如果用同一组定义的数组,那应用层的数据,就会被改。所以定义接受缓存。
通信协议解析
一般的通信协议格式:T + L+V+C
T:
命令标志(1个字节)0x5A代表a设备发送给b设备,0xa5代表b设备发送给a设备
L;
数据长度:(1个字节,虽然使用L位可以表示很长的数据帧,但在应用中应尽量采用短帧,以避免各种干扰因素造成少数数据位出错,导致大量数据无效,影响通信效率。同时,应该设置一个最大发送长度,以便设置超时重传计时器的值。
V:
数据(N个字节,最大长度200)
C:
CRC 校验,用于校验接收到的数据是否在传输过程中出错。
将缓存里收到的数据,按规定的协议解析。同理,若要发送数据,将要发送的数据添加起始标识符和长度后,计算CRC-16校验码,附在最后,形成一个完整的数据帧,然后通过UART发送出去。
数据信息
将接受到的数据,通过规定的通信协议格式解析以后,收到的V,就是应用层需要的数据信息。
API接口
应用层接口,将接受到的数据信息,去做一些逻辑处理。
两mcu之间,能高效通信,执行有效命令,命令解析是重点,这里介绍做命令解析的思路。
我们使用的是uart dma接受方式,所以中断接受后的数据在dma地址里放着,长度最大值为10个字节。
大概思路是:
1. 从第一个字节开始,找帧头0x5a,如果第一个字节不是帧头,以此类推,从第二个字节开始找。如果没有在收到的这包数据里,没有找到包头,丢掉这包数据。
2. 如果在这包数据里,找到帧头,则对这包数据做crc校验。如果crc校验成功,则把这包数据,存在接受缓存,让上层应用层使用,如果crc校验不过,则重新找帧头,
有问题及建议,联系jy1231_10@163.com
最后
以上就是幸福手机为你收集整理的双机通信协议背景需求分析系统介绍的全部内容,希望文章能够帮你解决双机通信协议背景需求分析系统介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复