MCU_Coder 发表于 2023-6-6 13:01:55

使用逻辑分析仪排查CAN总线错误


本文介绍如何使用逻辑分析仪测量分析CAN总线信号,解决实际工作中碰到的常见CAN总线错误问题。
1.        CAN节点数据收发过程
CAN总线是双绞线,分别是CANH和CANL两根线。总线上的信号电平分为这两条线之间的差分电压。
隐形电平:两条线静态时均为2.5V左右,压差为0,此时状态表示为逻辑1,也被称作隐性。
显形电平:当两条线电压值出现差异时,通常CAN_H=3.5V和CAN_L=1.5V,压差2-3V时,此时状态表示为逻辑0,也称作显性。
CAN总线上的逻辑是“线与”的形式,显性电平可以覆盖隐性电平,因此0可以覆盖1。

CAN总线以“帧(Frame)”形式进行通信。帧的格式如下图:



2.        CAN总线物理层抓包
由于CAN信号是差分信号,在测试过程中需要将差分信号转换为TTL信号,然后进行测试。如下图,使用NXP TJA1050芯片,提供CAN PHY差分接收能力。
逻辑分析仪采用Saleae Logic16(https://www.saleae.com/),将采样出来的实时数据送入电脑内存中,可以自动分析多种常用通信协议,包括CAN协议解析,直接得到分析数据。
   

3.        Saleae Logic16软件配置
Saleae Logic16软性可以从下面链接下载:https://www.saleae.com/downloads/
插上逻辑分析仪USB接口,打开Saleae Logic16软件,设置采样深度,采样频率,使用通道等配置。在Saleae Logic16中Analyzer选项增加CAN protocol协议。单击“Start”后就可以得到CAN Bus数据流。


4.        故障分析
通过Saleae Logic16抓取TJA 1050 PHY Rx脚的数据,并对数据进行CAN protocol协议分析。可以看到CAN波特率出现问题。由于波特率125K变为124K,导致CAN bus出现bit stuff error数据场填充错误。

If 5 zeros are sent in a row, CAN requires that a 1 be sent next. That extra bit will be thrown away by the receiver.
If 5 ones are sent in a row, CAN requires that a 0 be sent next. That extra bit will be thrown away by the receiver.

5.        CAN帧数据
将CAN波形转换为frame帧数据文本文件,可以看到NAK,表示发送节点没有收到其他节点回复的显性确认位,则被称为ACK 错误。

6.        总结
使用Saleae Logic16逻辑分析仪可以方便快捷从CAN PHY物理层定位网络通讯故障,是CAN总线开发测试的有效工具。

akey3000 发表于 2023-6-6 13:40:42

不错,学习

tang_qianfeng 发表于 2023-6-6 13:48:09

这是卖逻辑分析仪的吧

ywq 发表于 2023-6-11 17:26:52

谢谢分享~
页: [1]
查看完整版本: 使用逻辑分析仪排查CAN总线错误