|串口通信问题排查指南

|串口通信问题排查指南

文章图片

|串口通信问题排查指南

在我们从事嵌入式相关的项目开发时 , 经常会遇到各种各样的串口通信问题 。
笔者根据自己平时的调试开发经验 , 总结了一份排查指南 , 希望可以给大家提供一些排查问题的方向和办法 。

串口通信是指外设和计算机、或外设和外设之间通过数据信号线、地线等按位进行传输数据的一种通信方式 。 该通信方式的通信格式包括起始位、数据位、校验位、停止位 , 如下图所示 。 串口通信的特点为成本低但传输速度慢 。 串口通信的距离可以从几米到几千米 。

上面简单介绍了一下串口通信 , 接下来让我们进入正题了 。 我们排查串口通信问题的方向基本为以下几部分 , 如图所示 。

1.检查中间件
串口通信必然存在发送端和接收端 , 且两者通过中间件(例如导线) , 遇到问题 , 首先应该保证导线连接正常 。 如果这一部分没有确定 , 直接排查其他方向 , 很可能在做无用功 。
2.排查硬件层
通过逻辑分析仪、示波器等仪器来判断发送端、接收端在发送、接收、空闲时的引脚波形是否正常 。 串口空闲时为高电平 , 有数据时才会有电平变化 。 同时需要确定电压是否正常 。 波形测量的位置先从最终点开始测量 , 然后依次排查中间部分的探测点 , 来判断问题位置 。
如果发现波形变形、失真、电压不正常等情况 , 请让硬件工程师协助进行排查 。 在其起始点可以看到波形 , 但是终点看不到 , 需要使用万用表来确定是否引脚存在虚焊 。
3.检查串口驱动层
如果排查了硬件无问题以后 , 但是发送端串口没有波形 , 这时候就需要检查串口驱动是否配置成功了 。 可以先将发送端的Tx、Rx引脚短接 , 进行回环测试 。 最好先用一个简单例程进行测试 , 尽量排除多个变量的影响 。 排查时需要特别注意的是 , 不能只看代码逻辑 , 要注重实际调试 , 善于利用软件调试窗口来观察相关寄存器的值 。
4.应用协议层
通过以上方向的排查 , 可以证明自发自收没有问题 。 接下来就验证双方是否可以正常通信 。 应用协议层可能存在的问题有:
①发送端与接收端数据协议有问题 , 例如CRC、帧头帧尾校验、解析数据包等方面 。
②发送端与接收端串口配置的参数:波特率、校验位不一致 , 导致无法通信 。
另外大家也需要注意下面这几点:
①由于信号容易被干扰 , 建议使用带屏蔽线 , 并且接线一定要严格 , 需要接地的最好接地 。 有些485通信 , 还需要考虑接上终端电阻来匹配 。 如果是RS232通信 , 尽量不要让线太长 。
②因为很多设备通过外部晶振或者内部时钟计算的波特率都是存在误差的 。 这样的话如果一旦报文过长 , 会导致误差累积 , 进而出现串口识别乱码或者收不到的情况 。
③在一些可能会存在干扰的地方 , 可以考虑使用奇校验或者偶校验 , 这样可以将错误的报文过滤掉或者尽量使用一些数据校验协议 , 防止数据出错 。
【|串口通信问题排查指南】以上就是笔者总结的串口通信方面的排查指南 , 文中如有出错之处 , 望指正 , 希望大家共同进步!