复习项目时,顺带复习一下基础的通信协议UART、SPI和I2C,先从UART看起。
1、UART概念
UART全称为通用异步收发器。在UART通信中,两个UART可以直接通信。
发送端的UART将来自控制设备(CPU)的并行数据转换为串行数据,以串行方式将其发送到接收端的UART,然后由接收端的UART将串行数据转换为并行数据以用于接收设备的正常处理。
因此UART只需要两条线RX/TX即可在两个UART之间传输数据。
2、帧格式
UART传输的数据被封装成数据包。每个数据包包含1个起始位,5~9个数据位(取决于UART的具体设置),一个可选的奇偶校验位以及1个或2个停止位,具体如下图所示
主要由起始位、数据位、校验位和停止位构成一帧数据。
起始位
因为UART没有控制线,所以要让接收方知道什么时候开始接收数据,在发送数据之间先发一位低电平作为数据发送的起始标志,接收方在IDLE时,一旦检测到高电平到低电平的转换,就以波特率的频率读取数据位中的每一位数据。
数据位
正在传输的数据。
有校验位时,5~8位,没有校验位时,最高可9位。
校验位
可有可无,奇偶校验、和校验、CRC校验。
军工类一般spec要求CRC校验(实际项目用的和校验)。
停止位
发送端UART将数据传输线从低电平拉高,表示数据包传输结束。
因为数据是在传输线上定的,所以通信中不同设备可能出现不同步,停止位不仅代表传输结束,也给了设备校正时钟同步的时间。
停止位的位数越多,不同时钟同步的容错越高,但是同样的数据传输相对较慢。
3、波特率
波特率指串口数据的传输速度,在使用UART协议前一定要将两端的波特率同步,保证发送端的数据在接收端可以正确采集。
常见波特率:300、1200、2400、9600、19200、38400、115200。代表每秒钟传输的数据位数。
假设系统时钟为100MHz,波特率为9600。那么传输1bit需要的时间为:
100MHz对应时钟周期为10ns,因此需要10416个时钟周期可以传输1bit数据。
这也是设计要点:需要一个10416的分频电路来对100MHz时钟进行处理,因此在设计UART时,需要分频电路根据波特率处理全局时钟,按照分频后的时钟节奏来发送数据和接收数据。
4、传输过程
发送端UART从数据总线转换并行数据,将起始位、校验位、停止位添加到数据包中。
数据包从发送端UART串行发送到接收端UART,接收端按照波特率对数据线进行采样。
接收端UART解析数据,保存数据位,丢弃数据包中的其它位。
接收端UART将串行数据转换回并行数据,并传输回数据总线。
5、优缺点
优点
a. 通信只需要两条数据线;
b. 无需时钟信号;
c. 有奇偶校验位,方便通信的差错检查;
d. 只需要接收端和发送端设置好数据包结构,即可稳定通信;
缺点
a. 数据帧最大支持9位数据;
b. 不支持多主机或多从机的主从系统;
参考资料: