串口通信问题排查
排查原则:
- 软件从发送处理到接收处理,核查驱动、控制及发送接收数据是否正常。
- 硬件从发送到接收,针对信号经过的各段,分段核对信号是否正常。示波器、逻辑分析仪。
- 用万用表、示波器、逻辑分析仪等工具,确保电路电源、接地正常,信号物理链路导通正常,信号波形及电平正常。
串口通信问题排查方法
-
检查中间件
串口通信必然存在发送端和接收端,且两者通过中间件(例如导线),遇到问题,首先应该保证导线连接正常。如果这一部分没有确定,直接排查其他方向,很可能在做无用功。
-
排查硬件层
通过逻辑分析仪、示波器等仪器来判断发送端、接收端在发送、接收、空闲时的引脚波形是否正常。串口空闲时为高电平,有数据时才会有电平变化。同时需要确定电压是否正常。波形测量的位置先从最终点开始测量,然后依次排查中间部分的探测点,来判断问题位置。
如果发现波形变形、失真、电压不正常等情况,请让硬件工程师协助进行排查。在其起始点可以看到波形,但是终点看不到,需要使用万用表来确定是否引脚存在虚焊。
-
检查串口驱动层
如果排查了硬件无问题以后,但是发送端串口没有波形,这时候就需要检查串口驱动是否配置成功了。可以先将发送端的Tx、Rx引脚短接,进行回环测试。最好先用一个简单例程进行测试,尽量排除多个变量的影响。排查时需要特别注意的是,不能只看代码逻辑,要注重实际调试,善于利用软件调试窗口来观察相关寄存器的值。
-
应用协议层
通过以上方向的排查,可以证明自发自收没有问题。接下来就验证双方是否可以正常通信。
应用协议层可能存在的问题有:
- 发送端与接收端数据协议有问题,例如CRC、帧头帧尾校验、解析数据包等方面。
- 发送端与接收端串口配置的参数:波特率、校验位不一致,导致无法通信。
另外也需注意下面这几点:
- 由于信号容易被干扰,建议使用带屏蔽线,并且接线一定要严格,需要接地的最好接地。有些rs485总线通信,还需要考虑接上终端电阻来匹配。如果是RS232总线通信,尽量不要让线太长。
- 因为很多设备通过外部晶振或者内部时钟计算的波特率都是存在误差的。这样的话如果一旦报文过长,会导致误差累积,进而出现串口识别乱码或者收不到的情况。
- 在一些可能会存在干扰的地方,可以考虑使用奇校验或者偶校验,这样可以将错误的报文过滤掉或者尽量使用一些数据校验协议,防止数据出错。
其他串口通信排查方法:
- 通信共地,检查并确保设备间的GND(地线)连接是正确的。
- 串口参数,通信双方的串口参数包括波特率、数据位、停止位和校验位等。
- 硬件连接,使用示波器等硬件分析工具来检查线路上的电压、数据格式和波特率等参数是否正确。
- 设备兼容,不同的设备之间电气特性、波特率等可能存在兼容性问题。
- 数据传输,检查软件设置和硬件连接,确保没有误操作或损坏的部件。
- 回环检测,Loopback检测是一种诊断方法,将串口的发送和接收端短接来测试串口是否正常工作。
- 软件配置,检查软件中的串口配置,确保与硬件设置相匹配。
- 外部干扰,某些环境下电磁干扰可能会影响串口通信的质量,尝试更换通信线或使用屏蔽线。
- 电源问题,不稳定的电源或电源不足也可能导致通信故障。