概述
接口
在UART通信中,两个UART直接相互通信。发送UART将来自CPU等控制设备的并行数据转换为串行形式,并将其串行发送到接收UART,接收UART然后将串行数据转换回接收设备的并行数据。数据从发送UART的Tx引脚流向接收UART的Rx引脚,硬件连接比较简单,仅需要3条线,如果两个设备UART电平不一致需要转换电平再连接。
通信协议
UART串口传输的数据被组织成数据包。每个数据包包含1个起始位,5至9个数据位,可选的奇偶校验位和1或1.5或2个停止位,协议如下:
| 起始位 | 数据位 | 奇偶校验位 | 停止位 |
|---|---|---|---|
| 1bit | 5-9bit | 0-1bit | 1-2bit |
空闲位:UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平,表示当前线路上没有数据传输。
起始位:开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。因为总线空闲时为高电平所以开始一次通信时先发送一个明显区别于空闲状态的信号即低电平。
数据位:起始位之后就是要传输需要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位,使用低电平表示‘0’高电平表示‘1’完成数据位的传输。
奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。校验位其实是调整个数,串口校验分几种方式:
- 无校验(no parity)
- 奇校验(odd parity):如果数据位中“1”的数目是偶数,则校验位为“1”,如果“1”的数目是奇数,校验位为“0”。
- 偶校验(even parity):如果数据为中“1”的数目是偶数,则校验位为“0”,如果为奇数,校验位为“1”。
- mark parity:校验位始终为1(不常用)。
- parity:校验位始终为0(不常用)。
停止位:数据结束标志,可以是1位,1.5位,2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。
传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。
波特率
示例
上图是uart协议传输0x55,0xAA,0x03等多个数据,通过示波器的uart解码而得到的波形示意图,由于未设置奇偶校验位,故在上图未显示出来,设置的停止位为1位;比特流格式为LSB,故从低位开始传输,接收三个数据分别为1010 1010、0101 0101、1100 0000,实际的数据应该反过来,即0101 0101(0x55)、1010 1010(0xAA)、0000 0011(0x03)。
最后
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218059.html原文链接:https://javaforall.net
