EDN China > 设计实例 > 工业电子 > 网络与总线 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

(多图) GPIO实现高可靠性RS485/422通信的研究

/?? 2014年02月18日 ?? 收藏0

3.基本流程设计

为提高软件的质量和可维护性,收发通讯实现时均采用位、字节和帧三个处理层次。每层相对独立,低层处理的结果通过状态传递方式通知上一层。

研究中采用的数据传输格式:1bit起始位“0”,8bit数据位(先低后高),无校验位,1bit停止位“1”,每个字节累计为10bit。

3.1 发送通信流程

主动发送数据形式的流程如下:

1)底层:位发送。在波特率控制的时间间隔内将发送数据管脚置为和当前bit一致的电平状态。

2)中间层:字节发送,如图3所示。发送当前bit,发送完位计数器+1,如果位数达到10位,则当前字节发送结束,并通知顶层;3)顶层:帧发送,如图4所示。首先检测串口当前状态是否为发送允许,如果不是则将串口置为接收禁止、发送允许状态,确定了发送允许后进入帧发送。帧发送按照报文格式顺序发送各字节,发送结束将串口设为发送禁止、接收允许状态。

3.2 接收通信流程

接收通信需要把每一个bit的数据准确地检测出来,确定字节的起止位,判断帧的起止字节,也就是说通过分析和计算将数据格式和通信协议所规定的每一个细节精确定位。对于帧起始时刻的判断,根据图1数据格式知在数据传输的过程中,即使数据位为全“1”或全“0”,由于有起始位和停止位的存在,也不会出现连续10个bit的“1”或“0”的情况,于是当连续出现10个bit的“1”时,则数据线处于停止传输的状态;而连续出现10个bit的“0”时,则数据线处于异常状态。于是接收通信开始后至少连续10个bit的“1”之后的“0”可以作为帧的起始位。这里的“帧”不是指通信协议中的完整报文,只是指收到的一段数据,至于当前字节是否为报文头,则需根据协议判断。好处是不漏任何数据,可靠接收约定报文。

接收通信流程如下:

1)底层:位接收,如图5所示。位接收在由波特率确定的时间间隔到达时,采样接收数据线的电平状态作为当前bit值,同时判断帧起始位,帧开始后的位接收完成,通知中间层进行字节处理。

2)中间层:字节接收,如图6所示。当新bit接收完成时,将当前Bit值按照格式组合到字节数据。当字节位计数器满一个字节时,如果满足起始位“0”和停止位“1”的条件,字节接收完成,并通知顶层进行帧接收控制,否则字节无效。

3)顶层:帧接收,如图7所示。首先检测串口当前状态是否为接收允许,如果不是则将串口置为接收允许、发送禁止状态,在确任接收允许后开始收数。在新字节接收完成后,将新字节写入接收缓冲区,同时根据通信协议启动报文识别,直到收到一帧完整的报文,结束接收通信。根据实际需要可以加入通信超时控制。

【分页导航】


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

GPIO? RS485? RS422? 通信?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈