UART串口数据分析
串口基础知识详细介绍:
该链接详细介绍了串并行、单双工、同异步、连接方式
https://blog.csdn.net/weixin_43386810/article/details/127156063
该文章将介绍串口数据的电平变化、波特率计算、脉宽计算以及数据传输量的计算。
捕获工具:逻辑分析仪(LA1010)
波特率:115200
数据位:8bit
校验位:无
停止位:1bit
1.空闲态: UART总线不在传输数据的时候,总线处于空闲状态,为高电平
2.起始信号 开始信号,串口通信的开始标志位
3.数据位 串口发送数据,先发低位,再发高位
4.奇/偶校验位:校验数据是否正确
奇校验:数据位和校验位1的个数为奇数 假设数据位0x55(0101 0101),校验位1 假设数据位0x51(0101 0001),校验位0
偶校验:数据位和校验位1的个数为偶数 假设数据位0x55(0101 0101),校验位0 假设数据位0x51(0101 0001),校验位1
5.停止信号:发送数据结束,回到高电平状态,校准时钟信号 一帧数据发送结束后,需要校准时钟信号,为什么需要校准时钟信号呢? 因为串口采用的是异步通信方式,双方都有自己独立的时钟源,虽然设置了双方的时钟源保持一致, 但是在发送数据时,每发送一帧数据时,都会产生误差,越往后,发送的数据,累计误差越大, 所以每发送一帧数据之后,需要校准时钟信
使用逻辑分析仪(LA1010)进行捕获和分析串口数据。
截取其中一帧数据进行分析,无数据传输时为高电平:
起始位 1bit(绿色)、高电平 --> 低电平。
数据位 8bit(白色)、高 / 低电平。
停止位 1bit(红色)、高 / 低电平位 --> 高电平。
下图为起始位、数据位、停止位的具体时间:
C2-C1:起始位 8.64us。
A2-A1:数据位中的某一位 8.61us。
B2-B1:停止位 8.62us。
可以看出起始位和停止位都是1bit。
根据数据位时间8.61us可以计算出大概波特率为:
1000 000 us / 8.61us ≈ 116144 bit/s
计算得出1s时间可传输约116144 bit 数据,和设定的115200波特率基本符合,偏差为约0.99%。
通信设备(主机和从机)之间的波特率偏差可以影响通信的稳定性和可靠性。一般来说,在串口通信中,波特率的偏差在正负5%以内是可以正常通信的。
波特率的偏差指的是实际通信速率与预期通信速率之间的差异。例如,如果主机和从机之间的波特率设定为115200 bps,那么在实际通信中,波特率可以偏差在115200 bps的正负5%范围内,即109440 bps到120960 bps之间。
超出正负5%的波特率偏差可能导致接收到的数据出现误码,通信错误率增加,甚至无法正常通信。因此,为了确保通信的稳定性,通常在主机和从机之间的波特率设置时应尽量控制在正负5%以内的偏差范围内。
一帧数据包含起始位、停止位、数据位,一共10 bit 数据,即传输一字节数据需要:
8.61us * 10bit = 86.1us
当我们传输一组33字节的数据,则需要:
33Byte * 86.1us = 2841.3us = 2.8413ms
通过标尺验证该计算方法准确性:
和计算的2.8413ms差别不大,计算正确。