CAN总线的数据解析


title: CAN总线的数据解析

CAN报文的种类和帧格式解析

1.1 报文种类

数据帧:用于发送节点向接受节点传送数据(最常用)
远程帧:用于接收节点向某个发送节点请求数据
错误帧:用于当某节点检测出错误时向其他节点通知错误帧
过载帧:用于接收节点向发送节点通知自身接收能力的帧
帧间隔:将数据帧或远程帧与前面的帧分离的帧

1.2数据帧格式解析

数据帧组成:

帧起始仲裁段控制段数据段CRC段ACK段帧结束

一、帧起始

帧起始,SOF,由1个显性位组成
在总线空闲的时候,发送节点发出帧起始,其他接收节点从这个帧起始位进行同步。

二、仲裁段

标准格式:

ID[0: 10]RTR

扩展格式:

ID[0: 10]SRRIDEID[11: 28]RTR
  • 扩展帧:29位ID,前11ID位置与标准帧ID编码位置相同
  • SRR:代替远程帧请求位,占1bit,为显性
  • IDE:识别符扩展位,占1bit
    标准帧中该位位于控制段,为显性
    扩展帧中该位位于仲裁段,为隐性
  • RTR:远程帧发送标识位,占1bit,为显性

三、控制段

标准格式:

IDEr0DLC

扩展格式:

r1r0DLC
  • IDE:识别符扩展位,占1bit
    标准帧中该位位于控制段,为显性
    扩展帧中该位位于仲裁段,为隐性
  • DLC:数据段的长度码,占4bit,BCD编码,范围0~8
    PS:接收方对DLC=9~15的情况并不视为错误
  • r0、r1:保留位0和1,各占1bit,总是用显性电平填充

四、数据段

Data: Byte0 ~ Byte7,八位字节
传输时首先发送MSB(最高位),大端模式(Motoroal)
在报文解析软件(如PE5)中可以自行设置解析报文格式为Motrola/Intel

一般在发送报文的时候会设置报文的发送模式,Motorola(大端模式,低位高地址,高位低地址)或者Intel(小端模式,高位高地址,低位低地址)
个人觉得用Intel好一些比较容易理解,报文数据解析起来也方便。
这里说一下我使用Motrola发报文遇到的问题以及为什么使用Intel模式好
这里我在使用Motrola发送数据再用PE5解析报文的时候发现,如果我发的数据是先发了4个bit随后再发1个byte的数据。再用PE5解析的时候Byte0那个内存0——3bit位没有数据(因为Motrolas数据从高地址开始),随后那个1Byte的数据从Byte1开始存储数据。等于说Byte0那个内存0——3bit就浪费了。用Intel模式就不会出现这个问题。

五、CRC段

这个段我们不需要去关注太多,知道这是判断数据帧是否有效就行。就是发送的数据和接收节点收到的报文是否正确。
简单说一下此段的帧格式:

CRC值[0: 14]CRC界定符

六、ACK段

发送节点根据此段判断报文是否发送成功。
结构:

ACK应答位ACK界定符(1个隐性电平)

ACK应答位:
发送节点:发送隐性电平
接收正确的节点:发送显性电平
总线显与结果:显性电平

七、帧结束

由7个连续的隐性位组成

八、帧间隔ITM

帧间隔ITM:
3个连续的隐性位组成
总线空闲:
11个连续隐性位,帧间隔ITM在末尾的连续3个隐性位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值