历史上的今天
今天是:2024年10月23日(星期三)
2019年10月23日 | 如何用Pico示波器进行CAN总线解码分析
2019-10-23 来源:21ic
Pico示波器具有串行解码的功能,能够对CAN、FlexRay、I²C、I²S、SPI、LIN或UART等串行总线进行解码。Pico示波器比较适合做串行解码,因为它们的深度存储器可以让软件采集较长时间、不间断的数据,尤其是6000系列能够在几秒内采集数千个数据帧存入到512M的样本存储器。下面将介绍如何用一个款Pico示波器进行CAN总线数据解码。
1关于CAN总线解码
1.1 什么是CAN总线?
数据通信时,物理线路上传输的信号是由一系列高低电平组成的,这些高低电平携带了我们所需要的信息,在数据接收端,我们需要将这些物理电平按照原始的编码规则进行解析,从而得到实际的物理信号。
CAN(控制器区域网络)总线是一种在汽车和工业机械中使用的串行协议,允许微控制器相互通讯。该标准最初由 Robert Bosch GmbH 于 1983 年制定。它使用双绞线上传输差分信号,分别为CAN高(CAN H )和CAN低(CAN L),当线路受到共模干扰之后,信号差值不变,信号依然能够正确被解析。
1.2 CAN总线上传输的电平特点
CAN 总线上发布了ISO11898和ISO11519两个通信标准,分别对应高速CAN和容错CAN。此两个标准差分电平的特性不同。本文主要介绍如何用Pico示波器进行ISO11898标准的CAN总线解码。

CAN高电平大概为3.5V左右,CAN低电平大概为1.5V左右,CAN差分电平大概在2V左右。一般情况下,我们可以从三种CAN总线波形上进行解码:
1)从CAN-H总线上传输的电平,阈值设置为3V左右即可
2)从CAN-L总线上传输的电平,阈值设置为1.6V左右即可
3)从差分波形(CANH-CANL)上进行解码,阈值设置为1.5左右即可。从差分波形上解码更加准确,因为差分波形滤除了线路上的共模干扰信号。
但是很遗憾,目前PicoScope6软件的串行解码功能只能从CANH或CANL波形上进行解码,暂时还无法实现从差分波形上进行解码。
2 PicoScope6 串行解码功能

3解码设置
Pico的任何一台示波器都具有串行解码的功能,不同系列的区别在于示波器硬件参数高时,采集到的波形更加平滑,噪声小。在进行解码时,我们可以只从CAN高波形上进行解码,或只从CAN低波形上进行解码,或者同时对CANH和CANL波形进行解码。
3.1 仅从CAN低波形上进行解码设置
1将CAN网络中的CANL端接入到示波器A通道(示波器通道任意选择)探头的正极,CAN网络的GND连接探头的负极。
2 点击PicoScope6工具菜单,选择串行解码功能。弹出串行解码设置窗口。

1)设置A通道协议:CAN Low
2)设置CAN低判断阈值,如1.6V。该阈值用于判断CAN-L电平是“0”或“1”.
3)设置总线波特率,即目前测试网络的波特率,例如500K波特。
4)设置显示模式,选择“在视图中”或“在窗口中”查看CAN数据。
In View: 在视图中,在波形显示窗口查看解码之后的CAN数据。
In Window: 在窗口中,在表格中查看解码之后的CAN数据。
3.2仅从CAN高波形上进行解码设置
1将CAN网络中的CANH端接入到示波器A通道(示波器通道任意选择)探头的正极,CAN网络的GND连接探头的负极。
2 点击PicoScope6工具菜单,选择串行解码功能。弹出串行解码设置窗口。

设置步骤如下:
1)设置A通道协议:CAN High
2)设置CAN低判断阈值,如3V。该阈值用于判断CAN-L电平是“0”或“1”.
3)设置总线波特率,即目前测试网络的波特率,例如500K波特。
4)设置显示模式,选择“在视图中”或“在窗口中”查看CAN数据。
In View: 在视图中,在波形显示窗口查看解码之后的CAN数据。
In Window: 在窗口中,在表格中查看解码之后的CAN数据。
3.3从CAN高波形和CAN低波形上同时解码
1将CAN网络中的CANH端接入到示波器A通道(示波器通道任意选择)探头的正极,CAN网络的GND连接探头的负极。
2将CAN网络中的CANH端接入到示波器B通道(示波器通道任意选择)探头的正极,CAN网络的GND连接探头的负极。
注意:CANH和CANL使用的测试通道可以自由选择。只是在进行解码设置时,对应正确即可。
3 点击PicoScope6工具菜单,选择串行解码功能。弹出串行解码设置窗口。
在一个窗口分别设置CANH和CANL的解码设置,具体参考3.1和3.2章节的设置。如下图所示:

4 使用注意事项
Pico示波器进行串行解码有一个技术难点:Pico示波器的解码以完整的一个CAN数据帧为单位,即只有采集到完整的一帧CAN报文,才能将该数据帧完整的解析出来。
1 采集CANH和CANL波形时,注意时基的设置。即保证每一个波形页面至少能够采集到一个完整的数据帧,此时才能够解析出CAN报文。对于CAN总线来说,时基设置在1ms/div或者大于1ms/div即可。
2 注意采样率的设置,要保证采集到的波形不失真。例如CAN总线的波特率为500Kbps,那么采样率只有大于1MS/s,才能够采集到正确的波形(满足乃奎斯特定律)。
3 示波器的波形(一个显示页面)与波形之前是不连续的,总是或多或少一些间隙。所以当在进行CAN总线解码时,波形页面的边缘会有一些无法被解析的数据帧,主要原因是波形页面边缘将一个完成的数据帧截断了,以至于无法得到争取的解析。如下图所示:

史海拾趣
|
摘要:本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外,还具有调电存储、声光提示等功能,依据实际的情况还可以添加遥控功能 ...… 查看全部问答> |
|
在我们熟知的PCB设计软件,给出的泪滴,在功能上并不是完善的,只是纯粹的将过孔和焊盘,补上泪滴就OK,并没有考虑到有些错误,如:过孔和焊盘若是有小段track,到底是补还是不补泪滴。针对这样的一个情况,青越锋从DRC角度出发,是不会补泪滴的, ...… 查看全部问答> |
|
我在编写流驱动的时候,系统启动突然停止了。 串口输出信息: [dm9: Tries to map io space with 18000000 [dm9: The mapped address is D0B80000 [dm9: Chip signature is 90000A46 [dm9: Chip signature is 90000A46 STRINGS:***@@****DL ...… 查看全部问答> |
|
第一次开发CAN总线,由于任务急就用周立功老师开发的“sja1000_Peli”, 请问这个库能用SAEJ1939协议吗? 其中已知PGN=0xFD08,SA=0X3F, 那么“WriteSJARegBlock(16,Recevive_CAN_Filter,8); //配置验收代码/屏蔽寄存器”时 ...… 查看全部问答> |
|
KEIL MDK开发工具源自德国 Keil 公司,被全球超过 10 万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。KEIL MDK 集成了业内最领先的技术,包括μVision4集成开发环境与RealView 编译器。支持ARM7、AR ...… 查看全部问答> |
|
各位高手,我用ICCAVR编译了一个小程序,现在avr studio一加载ICCAVR编译生成的.cof就开始报错。而以前是好的,现在加载以前的文件也是好的, 报错提示:LDLED.cof is not a AVR Studio 4-savefile 会是什么原因呢?请高手指点指点… 查看全部问答> |




