【通信总线】CAN 总线简介及应用

一、CAN总线简介

简单来说,CAN最早是由德国Bosch公司推出,为解决现代汽车中众多控制单元、测试仪器之间的实时数据交换而开发的一种串行通信协议。随着CAN总线的大规模推广,目前被广泛应用于工业自动化、船舶、医疗设备、工业设备等行业领域。
差分信号
CAN总线物理层主要包括总线电压和物理介质及接口的规定,在ISO11898-2、ISO11898-3、J1939-11中均有相应的描述。其中CAN总线电压采用差分信号,具有“隐性”“显性”两种逻辑状态,显性覆盖隐性,差分电压表示𝑽_𝒅𝒊𝒇𝒇=𝑽_(𝑪𝑨𝑵_𝑯)-𝑽_(𝑪𝑨𝑵_𝑳)。隐性状态下,CAN_H和CAN_L电压固定在中值电压大小,差分电压(高速CAN)基本为(2.5V/2.5V),其数字信号用“1”表示。显性状态下,由大于最小门限值的差分电压(高速CAN)表示(3.5V/1.5V),一般为2V,其数字信号用“0”表示。

物理介质和接口主要为拓扑结构、CAN线选取、电路设计。
CAN总线系统的拓扑图一般采用总线型拓扑结构,总线与支线的长度根据实际情况选取。
通信线缆主要选择特征阻抗为120欧姆的双绞线。
电路设计

二、CAN总线报文格式

CAN报文帧格式有数据帧、远程帧、帧间空间、错误帧、超载帧,其中,错误帧、过载帧和帧间隔都是由硬件实现的,无法用软件控制,下面我们主要看一下常用的数据帧与远程帧。

2.1 数据帧区分

CAN
根据报文ID长度的不同,数据帧主要分为标准帧(11位ID)和扩展帧(29位ID),ID主要是确定报文的仲裁优先级,ID的数值越小,优先级越高。
SOF:帧起始位,显性位表示,标识一个数据帧的开始,用于同步。
ID:表明报文的含义,可以包括报文的源地址和目标地址。
RTR:用于区分数据帧和远程帧,数据帧RTR=0,远程帧=1。
IDE:用于区分标准帧和扩展帧,标准帧IDE=0,扩展帧IDE=1.
SRR:该位无实际意义,SRR永远置1,在扩展帧中表明在该位代替了标准帧中的RTR。
r0、r1:保留位,置0.
DLC:表明数据场中包含数据的字节数,DLC=0~8.
Data Field:数据场,包含CAN数据帧发送的内容。
CRC:用于CRC校验。
DEL:CRC界定符,固定1个隐性位,CRC界定符前进行位填充。
ACK:确定报文被至少一个节点正确接收。
DEL:固定格式,1个隐性位
EOF:表示数据帧结束,固定格式,7个连续的隐性位。
ITM:固定格式,3个连续的隐性位
DEL+EOF+ITM:11个连续的隐性位,节点检测到11个连续隐性位后,认为总线进入空闲阶段,此时节点可以发送报文。

2.2 标准帧-11位

标准帧
在标准帧ID中,前3位为报文优先级,后8位SA为源地址

2.3 扩展帧-29位

扩展帧
在扩展帧ID中,P为优先级,R为保留位,DP是数据页,PF是PDU格式,PS是特定PDU,SA是源地址,R、DP、PF、PS共同组成PGN。
P:优先级可以从最高0设置到最低7,所有控制/命令类报文的默认优先级为3,其他报文如信息、专用、请求和相应的默认优先级是6.
DP:当前报文的数据页,一般只使用00或01,10保留将来使用。
PF:用于区分PDU格式,PDU1格式的取值范围为0-239,PDU2格式的取值范围为240-255.
PS:若PF为PDU1格式,则PS表示目标地址,若PF为PDU2格式,则PS值表示群扩展。PDU1格式表示为点对点通讯,PDU2格式表示为全局广播,若PS=255,表示网络上的所有设备均可接收该条报文。
SA:表示报文发送设备对应的地址,即源地址。
PGN:参数群编号,若车辆协议满足J1939标准,则可通过PGN查找相应的报文数据场定义。

三、CAN测试工具

从使用的Windows下的CAN测试工具来看,用的最多的还是CAN Test,CAN Test是周立功can卡的官方测试调试工具,也是SBCAN-I/II 智能CAN接口卡配套驱动程序,能够用来接收、发送、查看、分析和记录CAN报文,可实现CAN数据的收发,监测CAN总线上的数据。如需使用请自行下载。

1、CAN Test一般常用USBCAN1或USBCAN2(根据通道选择)
CAN Test2、进入CAN Test操作界面,常用功能包括滤波设置,隐藏/显示发送帧,DBC文件加载以及选择接收时间标识。
界面

四、CAN总线报文处理

CAN编码
CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式。
当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,Intel格式与Motorola格式基本没有区别,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位。
当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,Intel格式将该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节(LSB)的低位。例:信号长度为两字节,Byte0为低位,Byte1为高位。
Motorola格式该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节(LSB)的低位。例:信号长度为两字节,Byte0为高位,Byte1为低位。

五、CAN应用

目前常用的CAN总线主要有周期型CAN消息及事件型CAN消息。周期型主要是按照厂家规定的发送周期及数据内容以一定的周期发送相应的CAN报文;事件型通常为一发一收模式,由控制主机发送相应的CAN报文查询指令(远程帧或特定数据帧),从机自动回复相应的查询内容。

在开发过程中,对于一些常用的参数,建议由节点厂家发送周期型CAN消息,对于一些诊断类型或其他不常用的消息,建议采用事件型消息,当然在实际使用中可灵活多变,总之,最终目的是将你所需要的CAN消息获取到,不管用什么方法,这才是重中之重。

黎明就在眼前

  • 7
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡泡吐泡泡啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值