微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 两种MCU间的串行通信协议设计

两种MCU间的串行通信协议设计

时间:04-12 来源:互联网 点击:

引言
Cortex-M3是ARM公司推出的32位处理器,使用了最新一代的ARMv7架构,具有高性能、低功耗和低成本的优点。对那些对功耗与成本敏感、但又要求较高性能的嵌入式应用来说,Correx-M3无疑是最佳解决方案;而对成本要求苛刻、运算能力要求不高的设备来说,嵌入成熟稳定的8051处理器,已经成为了业内的流行做法。目前,越来越多的嵌入式系统同时使用了上述两种MCU,因此如何使Cortex-M3与8051之间可以高效地进行信息交互,是实现设计目标的关键。

1 方案设计
要进行信息交互,离不开物理接口。在嵌入式应用中,目前常用的接口有UART、SPI和I2C等串行接口。UART接口只需两根数据线就可以工作,时序控制简单,大部分设备都整合了这种接口。而且,经过电平转换后UART的TTL电平可以转换成RS232电平,RS232接口是计算机标准配置的通信接口,可以通过超级终端查看串口的数据,便于使用PC机对线路进行检测分析。因此,本设计采用UART接口作为Cortex-M3与C51之间的通信接口。
考虑到各种需求,本文设计了一种基于UART接口的,用于Cortex-M3和C51之间的通信协议,使Cortex-M3与C51之间可以高效地进行信息交互。当两个MCU之间需要进行通信的时候,发送方把原始数据下放给通信协议,通信协议按照特定格式把数据打包,通过UART接口发送给对方。接收方收到数据时,MCU运行相应的通信协议,把数据解包,就可以得到发送方的原始数据,将其交付给上层程序。体系结构如图1所示。

如果使用其他串行接口,原理大体相同,只需对硬件作相应改动,即对接口控制模块稍作修改即可投入使用。
下面以实际工程中某种多媒体系统为例详细说明。该系统采用了以Cortex-M3为内核的STM32处理器和嵌入了C51核的MST776视频处理芯片,使用UART接口进行通信。

2 具体实现
2.1 硬件设置
具体的器件不同,UART的工作方式也有所区别,主要表现在波特率、停止位、数据字长度等参数上。当两个器件用UART连接时,所有参数必须完全一致,否则通信很容易出错。在此,要特别注意波特率的设置:当线路质量好的时候,波特率可以设置得高点,以获得较高的传输速率;线路质量差的时候,就要减小波特率,以降低误码率。
本设计中,STM32与MST776都整合了UART接口,只需配置少量电阻;同时,线缆长度不超过20 cm,使用环境的电磁干扰小,波特率可以设置为38 400bps,甚至更高。另外,考虑到C51的处理速度较低,因此波特率不应设置得太高,避免造成C51侧数据溢出,进而造成死机。
本设计只需使用两根数据线来实现两个MCU之间的互连,把STM32上选定的UART接口的TX与对端的UART接口的RX相连,把RX与对端的UART接口的TX相连。
2.2 软件设计
2.2.1数据帧解析
Cortex-M3侧和C51侧采用同样的数据帧格式,以简化编程的难度,增强程序的可移植性。数据帧由起始标识符、数据长度、类型ID、通信内容、循环冗余校验码构成,如图2所示。

(1)起始标识符
起始标识符的作用主要是用于定界,把不同的数据帧在一连串的数据中分离开来。起始标识符内的数据不能与数据帧中可能出现的任何数据相同,否则会引起歧义,导致定界失败,造成数据错误。在本例中,为2个字节,选用0xFF+0xAA,因为该组合与其他数据具有排他性,不会引起歧义。
(2)数据长度
数据长度的计算方法为,从该位开始,到最后一个数据位结束,也就是CRC校验位之前的一个字节。虽然使用Length位可以表示很长的数据帧,但在应用中应尽量采用短帧,以避免各种干扰因素造成少数数据位出错,导致大量数据无效,影响通信效率。同时,应该设置一个最大发送长度,以便设置超时重传计时器的值。本例采用1个字节,最大帧长为260个字节。
(3)类型ID
根据实际需要,类型ID可以采用1个或多个字节,用于表示该数据帧的作用类型。本例中,采用1个字节,可以表示256种作用类型,例如设备参数帧(如音量)、线路探测帧或应答帧。
(4)通信内容
通信内容与类型ID结合,表达特定意义。相同的Data,但ID不同的话,表达的信息不一样。根据不同的ID,Data的长度可能会有所不同。
(5)循环冗余校验码
循环冗余校验码用于校验接收到的数据是否在传输过程中出错。本例中采用CRC-16算法,占2个字节,对从起始标识符开始到最后一个通信内容位的所有数据进行运算,把得到的结果附在最后。
2.2.2 收发流程
发送流程:将要发送的数据添加起始标识符和长度后,计算CRC-16校验码,附在最后,形成一个完整的数据帧,然后通过UART发送出去。发送完毕后启动超时重传计时器。
接收流程:当接收到一个字节的数据时,根据系统状态采取不同的操作。当数据上交后,上层程序根据类型ID和通信内容来作出相应的响应。具体流程如图3所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top