两种MCU间的串行通信协议设计
2.2.3 线路检测机制
虽然本例中的UART接口是一种有线通信,而且线缆长度不超过20 cm,但仍有可能出现插口松脱、线缆铜芯断裂等情况,造成线路中断。对于转换成RS232电平的应用,虽然RS232的最大传输距离不超过15 m,但如果在恶劣的环境中使用,仍无法完全避免线路发生中断。因
此,有效的线路检测机制是必需的。
本设计中,当本端系统状态为Null时,每间隔1 s就发送一个线路探测帧,类型ID=0x00,通信内容=0x55。同时,如果本端在5 s内收不到任何新数据或者线路探测帧,则表明线路中断,向上层程序发送线路中断报告。对于需要交互秒时间信息的应用,线路探测帧可以省略,只检测秒时间信息就可以达到线路探测的目的。
2.2.4 校正机制
因为串行通信普遍存在误码的问题,因此简单有效的校正机制是必须的。由于采用的是点到点的串行接口,数据帧都是按照发送的先后顺序到达接收端,不会出现后一帧比前一帧早到的情况,只需要采用CRC-16和简单的ARQ机制,再加上超时重传机制,就可以提供高可靠的数据传输。
接收方收到一个完整的数据帧之后,必须给发送方返回一个ACK帧,该帧的类型ID=0xFF。通信内容根据校验的结果有所不同:校验正确的,Data=1;校验失败的,Data=0。
发送方发送完一个完整的数据帧之后,启动超时重传计时器。如果在计时器超时之前没有收到ACK帧,或者收到的ACK帧的Data为0,就重发上一个数据帧;当收到ACK帧之后,计时器归零。发送方只有在收到Data为1的ACK帧后,才能发送下一个数据帧。当连续超时5次时,表明线路中断,向上层程序发送线路中断报告。
ACK帧和线路检测帧无须应答。发送这两种帧之后,无须设置超时重传计时器。
2.2.5 接口控制
接口控制主要管理UART接口的收发,在此采用中断的方式来实现。若有数据需要发送,则必须等发送缓存为空时,才能把数据写入到发送缓存,否则会把旧的数据覆盖掉,造成数据丢失。当数据写入结束后,产生一个发送中断,通知MCU把数据通过UART接口发送出去。当收到一个数据时,UART产生一个中断信号,通知MCU把数据放入接收缓存,保存完成后清除中断信号,等待接收下一个数据。只需修改接口控制部
分,就可以适用于不同的硬件接口。
3 实验结果以及分析
为了验证本串行通信协议的有效性,连接STM32和MST776的UART接口,在这两个MCU上运行本通信协议,并在线缆上引出两个探测点,使用MAX232芯片进行电平转换,然后接到PC机的RS232接口上,进行数据检测。通过Windows的超级终端,可以在PC机上看到UART接口收发数据的状况。同时,通过JTAG接口可以看到通信协议向上层程序交付的数据。
实验结果表明,本通信协议工作正常,收发数据正确,校正机制和线路检测机制都工作良好。运行本通信协议后,两个MCU都没有出现数据溢出、死机等情况。这表明本文设计的串口通信协议能够实现预期的功能,令Cortex-M3与C51之间可以有效地进行信息交互。
结语
本文基于Cortex-M3与C51之间的通信需求,设计了一种基于数据帧的通信协议,使得两个MCU间可以进行有效的信息交互。本设计已经在某型多媒体系统上得到应用,使用效果很好,表现非常稳定。本设计具有良好的可移植性和通用性,在另一个嵌入式项目中,经过对程序的少量修改,也在SPI接口上得到了应用。
- PLC、FCS、DCS三大控制系统区别(07-07)
- 从4G到V2V 车联网还需要哪些通信协议?(07-02)
- 用SoC设计简化可穿戴设备的开发(07-24)
- 详谈如何解决物联网应用难题(07-20)
- 计算2.4 GHz频段模块的路径损耗(09-06)
- ZigBee vs WiFi,物联网通讯协议哪个赢(12-10)