0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何排查串口通信问题?

jf_pJlTbmA9 来源:鱼鹰谈单片机 作者:鱼鹰谈单片机 2023-09-18 10:58 次阅读

来源:公众号【鱼鹰谈单片机

作者:鱼鹰Osprey

ID :emOsprey

工作过程中,总是会遇到各种各样的通信问题,除了掌握软件知识,必要的硬件技能也必不可少,比如万用表示波器、逻辑分析仪等,如此才能做到精准定位,早点打卡下班~~

鱼鹰根据个人多年的嵌入式开发经验,在此斗胆总结一番,希望可以给一些新人提供排查方向。

在此,以串口通信为例,介绍排查步骤或方向:

wKgZomUD6siALJNuAABL5abR-lg887.png

红色代表可能出错的位置

1、示波器看波形

通信,不管是单向通信还是双向通信,必然存在两个器件,所以我们需要重点关注这两个,而两者之间必然存在物理连接--导线(无线除外),遇到通信问题,应该首先保证导线连接正常、电压正常,如果这一点都没有确定,直接跳过该步骤,很大可能做无用功,查来查去,最终可能查了一个寂寞。

串口双向通信,一般会设计成主从方式,即一个主器件通过双方约定好的协议主动向从机发起数据传输,并且从机永远是被动应答。这样保证在多从机通信的情况下,不会出现数据错乱的情况(如果多个从机同时发送数据,可能造成交通拥堵,毕竟一个方向只有一条道)。

这种情况下,可以让主机定时发送固定数据帧(比如版本查询,这样可以减少变量),通过查看示波器来确定从机是否有返回数据。

如此,我们可以确定两个问题:

1、观察主机发送引脚波形是否正常(串口平时一般为高电平,发数据时才会变化)、同时需要确定电压是否正常、波特率可看可不看、具体传输数据也是,因为该阶段只是从大的方向进行排查;

2、从机是否有回应。

这里又分为两种情况:

1)从机没有回应:

此时我们需要在接下来的排查步骤中确定几个问题:

<1>从机发送功能是否正常?

<2>主机发送的数据从机是否已经正常接收?

<3>主机发送的数据协议是否正确。

2)从机有回应。

这种情况下,问题就比较简单,重点排查上层协议即可(可以保证从机的收、发没有问题)。

这里特别注意的是,波形测量位置一定是在最终点,而不是中间某个探测点或者模拟开关之类的器件。

比如,主机发送引脚,测量位置应该在从机芯片的接收引脚,而测量主机的接收则在主机芯片的接收引脚,才不会导致结果误判。

2、根据波形情况,确定主从器件发送、接收功能

如果说步骤 1 发现主机没有正常传输波形产生,就要根据情况再确定一些问题。

1、如果发现波形失真、变形、电压不正常等情况,请呼叫硬件工程师一起排查。

2、主机芯片发送引脚可以看到波形,但从机接收引脚看不到,请使用万用表确定是否虚焊接。相反方向也排查一遍。

3、主机或从机不能正常发送或接收。

如果你使用了 DMA 发送,又使用了《终极串口接收方式,极致效率》笔记介绍的方式接收,那么你可以从以下方向进行排查(其他更简单的方式类似):

1)发送、接收引脚时钟是否开启、输入输出模式是否配置正常,发送引脚一般复用输出、接收一般上拉输入(如果只是引脚配置错误,发送 DMA的 计数器会变化,但是没有实际波形输出);

2)串口外设寄存器配置是否正常。如果全是 0 ,说时钟没有打开,或者未调用初始化函数,其次查看对应的 DMA 请求位(发送、接收,如果这个没有开启,DMA 计数器不会变化)、串口使能位等;波特率可以等发出波形再看,毕竟你现在连数据都没有。

3)查看 DMA 配置是否正常,外设、内存地址寄存器、计数器、使能位、对应通道的传输标志位(F4 如果传输标志不清除,无法启动下一次传输),总之把对应结构体的成员看一遍就对了,可能一个小配置错了,就导致整个传输失败。

4)如果是特殊引脚,看是否需要关闭默认功能,开启普通 GPIO 功能

5)如果是复映射功能,查看对应的映射寄存器是否配置正确,配置时,可能需要开启对应的时钟。

以上排查方法对发送、接收都适合。排查后,可以通过短接 Tx、Rx 引脚的方式确定发送、接收是否异常。如果是单方向的,可以配合串口模块测试。

终极杀招:

如果上述排查都没有发现问题,还是失败,要么换板子,要么换一个可以用的简单例程修改后测试,此时可以对比例程调试模式下的寄存器配置(寄存器配置截图后对比)。

另外, 排查时需要特别注意的是,不能只看代码,不看实际寄存器的值。因为有的时候,代码也可能有各种各样的问题(比如时钟如果没有打开,那么即使有对应的配置代码,你一个寄存器值也写不进去),只有看最终寄存器的值才最安心。这里也多次强调了时钟的重要性,不过一般这种问题很容易排查。

以上排查方向,配合鱼鹰的调试系列文章,消化好!

3、协议问题

上述排查,应该基本解决了双方通信问题的,即自发自收应该没有问题。但不代表双方就能够正常通信了。

这里可能存在几个问题:

1、双方波特率设置不匹配(这个问题比较容易查,直接看波形或寄存器(寄存器可能还没那么靠谱,外设一致可以)即可)

2、上层协议不匹配,比如 CRC 校验有问题、帧头定义有误等等……

3、对方解析函数有问题。

这个时候,配合逻辑分析仪分析是最方便的,到底是从机问题还是主机问题一目了然,当然你直接在Tx、Rx上并上两个串口模块的 Rx 去接收串口数据也是可以的~~

以上排查步骤不一定按顺序排查,但一般查看波形都是优先选择。

4、其他通信

在此继续介绍一下 SPI 通信可能出现的问题:

1、SPI 发送数据后,没有延时即立刻开始接收(此时从机可能没有反应过来,也就没有数据输出),SPI 的波形可能失真(通过示波器可以观察出来),也可能波形挺好,但接收就是有问题;

2、 CS 控制时机不对,或者也可能需要延时一段时间。

3、SPI 波特率太高,导致器件无法识别。测试时最好使用最低波特率,但也不排除太低波特率反而不行的情况,所以多试试几种。

总之,测试代码应该要考虑最极端的情况(比如延时久一点,波特率慢一点),调通之后再优化这些参数,提高通信效率。

另外,如果有参考例程,可以直接对比例程输出的波形进行修改,直到你的代码输出波形(注意,这里直接对比波形)和例程保持一致,如果还是有问题,那么换从机器件再试。当然,电源这里也一定要先确定没有问题。

一般来说,只要 CS、CLK、MOSI 控制时序正确,器件的 MISO 引脚一定会有数据输出(即使你没有接主机的 MISO),如果你能看到 MISO 输出波形,但主机还是没有正确接收,那么就查主机的 MISO 引脚配置和延时情况了。

I2C 通信:

1、和 SPI 类似,查看时序问题

2、注意地址问题,有可能说明书的地址和实际的地址之间换算可能需要移位。

3、注意从机锁死问题,传输前发几个停止信号过去试试

来源:鱼鹰谈单片机

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 万用表
    +关注

    关注

    87

    文章

    1850

    浏览量

    123527
  • 示波器
    +关注

    关注

    111

    文章

    5659

    浏览量

    181777
  • 串口通信
    +关注

    关注

    32

    文章

    1577

    浏览量

    54865
收藏 人收藏

    评论

    相关推荐

    如何排查FPGA与USB之间的芯片通信问题?

    ”,而在SBBulkSourceSink固件中没有显示这个错误,可不可以证明我的FPGA和USB之间通信成功?另外,我该如何排查FPGA与USB之间的芯片通信问题?
    发表于 02-27 06:46

    无线通信中如何排查电磁波干扰?

    无线通信中如何排查电磁波干扰?
    发表于 03-07 07:18

    如何去排查移动通信基站的射频干扰?有哪些流程?

    如何去排查移动通信基站的射频干扰?有哪些流程?
    发表于 05-24 06:36

    串口通信调试(PC与PC串口通信

    【LabVIEW从入门到精通】4.1.6 串口通信调试(PC与PC串口通信
    发表于 01-08 15:43 0次下载

    串口通信调试(PC与智能仪器串口通信

    【LabVIEW从入门到精通】4.1.6 串口通信调试(PC与智能仪器串口通信
    发表于 01-08 15:42 0次下载

    LabVIEW串口通信详解

    LabVIEW串口通信详解,基于LabVIEW来分析串口通信
    发表于 03-15 13:55 468次下载

    niosii的UART串口通信

    niosii的UART串口通信niosii的UART串口通信
    发表于 04-06 17:03 0次下载

    LESSON7_串口通信

    串口通信串口双机通信通信技术。
    发表于 04-13 14:23 0次下载

    串口通信资料

    串口通信的信息,涵盖串口,网络编程,原理图等。包括接口技术,通信网络
    发表于 05-10 14:24 13次下载

    【嵌入式】STM32串口通信

    【嵌入式】STM32串口通信一、串口通信协议1.串口通信简介2.
    发表于 12-20 19:29 17次下载
    【嵌入式】STM32<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    串口通信的了解

    串口通信小试牛刀一、串口通信的了解(一)串口协议1、简介串口
    发表于 12-20 19:32 11次下载
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b>的了解

    STM32与中显串口屏的通信

    STM32与中显串口屏的通信本文将简要介绍STM32单片机和武汉中显串口屏之间的通信实现过程。不过使用大彩、迪文这些公司的串口屏的同学也能参
    发表于 12-24 18:54 51次下载
    STM32与中显<b class='flag-5'>串口</b>屏的<b class='flag-5'>通信</b>

    Qt实现串口通信

    要实现串口通信,需要知道串口通信需要的信息
    的头像 发表于 04-23 17:34 3196次阅读
    Qt实现<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    【请查收】串口通信问题排查指南

    点击蓝字关注小亿在我们从事嵌入式相关的项目开发时,经常会遇到各种各样的串口通信问题。笔者根据自己平时的调试开发经验,总结了一份排查指南,希望可以给大家提供一些排查问题的方向和办法。
    的头像 发表于 07-02 15:01 643次阅读
    【请查收】<b class='flag-5'>串口</b><b class='flag-5'>通信</b>问题<b class='flag-5'>排查</b>指南

    【分享】什么是串口通信串口常见通信问题如何解决?

    在之前的文章中小编介绍了什么是CAN总线,包括CAN总线的数据格式和通信特点等方面的内容,今天将分享串口通信相关知识内容。CAN总线、串口通信
    的头像 发表于 06-21 17:45 1327次阅读
    【分享】什么是<b class='flag-5'>串口</b><b class='flag-5'>通信</b>?<b class='flag-5'>串口</b>常见<b class='flag-5'>通信</b>问题如何解决?