多字节串口收发IP设计(二)串口通信扫盲
串口是学习单片机、FPGA等平台,遇到的第一个需要掌握并且常用的低速通信接口。
串口通信协议看上去虽然简单,但是实现一个稳定、可靠的通信接口却不简单。
俗话说,擒贼先擒王,磨刀不误砍柴工。
学习串口,首先要理解串口是什么,有什么,怎么用。
串口是一种异步、全双工、串行通信接口。
异步:传输过程中,没有时钟信号,需要双方约定相同的帧配置和波特率,即可进行数据传输。
全双工:RX仅进行数据接收,TX仅进行数据发送,由于使用两根信号线,收发可以同时进行。
串行:数据传输在一根信号线上进行,只能按bit传输,一位一位的传输。
常用的RS232、RS485、RS422等接口,其核心控制逻辑也是串口。
连接方式
串口设备的硬件连接方式非常简单,仅需要连接两根线即可。
需要注意的的设备1的TX要连接设备2的RX,设备1的RX要连接设备2的TX。
如果TX连接TX,RX连接RX,会导致通信失败。
在连接设备之前一定要仔细检查,以免浪费大量时间用于调试、排故。
通信格式
数据包格式如下图所示:停止位+数据位+校验位+停止位。
起始位:1位,逻辑0有效,表示传输数据的开始。
数据位:5~8位,一般为8位,表示为逻辑0或逻辑1。
校验位:0~1位,校验位可选(无校验,奇校验,偶校验)。
停止位:1~2位,逻辑1有效,表述传输数据的结束。
空闲位:逻辑1有效,表示无数据传输。
传输速率
传输速率一般称为波特率,是指1秒内传输数据的bit数。
一般常用9600bps、19200bps、115200bps等,波特率越高,误码率越高。
时钟数计算方法:模块工作时钟50MHz,波特率115200bps,那么传输1bit所用的时钟数为:50_000_000/115200=434。
串并转换
虽然串口数据在传输时是按照串行方式,但在数据处理时需要将串行数据转换为并行数据。
根据串口的通信格式可知,串行数据发送时是低字节先发送。
奇偶校验
在串口数据传输时,基于环境的不确定性,导致串行数据会出现错误,为了检验数据是否产生了错误,需要增加校验方式来检验数据的正确性。
一般常用的校验方式包括:奇偶校验、累加和校验、CRC循环冗余码校验等,串口一般采用奇偶校验的方式。
奇校验ODD
奇校验ODD:数据位+校验位中的逻辑1为奇数。
如果数据位中的1的个数为奇数,则校验位为0,这样总的逻辑1为奇数。
如果数据位中的1的个数为偶数,则校验位为1,这样总的逻辑1为奇数。
数据位 | 校验位 | |||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
偶校验EVEN
偶校验EVEN:数据位+校验位中的逻辑1为偶数。
如果数据位中的1的个数为奇数,则校验位为1,这样总的逻辑1为偶数。
如果数据位中的1的个数为偶数,则校验位为0,这样总的逻辑1为偶数。
数据位 | 校验位 | |||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |