“保姆级”车载CAN总线教程(二)-堪称全网“最细”系列

目录

1.CAN总线的帧类型

1.1数据帧

1.2错误检测与错误帧

2.位填充机制


上节从宏观上对CAN总线的发展及工作原理等进行了介绍,本节内容将是整个CAN总线的核心内容,即可谓之“硬菜”,堪称全网“最细”。

1.CAN总线的帧类型

CAN的帧主要包括以下几种:数据帧(Data Frame)、远程帧(Remote Frame)、错误帧(Error Frame)、过载帧(Overload Frame)及间隔帧(Interframe Space)。本节只介绍常用的数据帧及错误帧。

1.1数据帧

数据帧主要包含以下几个部分:

1.SOF, Start of Frame 帧起始

标识一个数据帧的开始,用于同步;一个显性位;只有在总线空闲时才能发送SOF。

2.仲裁场

→ID:标识符,标准帧11位,拓展帧29位,用于确定报文优先级;

→RTR:远程传送请求位,数据帧RTR=0/远程帧RTR=1;

→IDE:标识符拓展位,标准帧IDE=0/拓展帧IDE=1;

→SRR:远程代替请求位,SRR=1;

3.控制场

→r0, r1保留位,置0;

→DLC:数据长度码,0-8,4位;

4.数据场

→0-8个BYTE;

5.CRC场

→CRC:用于进行CRC校验,15位,首先发送节点根据发送的序列计算一个CRC,然后接收节点根据接受的序列计算一个CRC,通过比较两个CRC是否相等来判断该数据帧是否有效;

→CRC界定符:界定CRC序列,固定一个隐性位,界定符之前进行位填充;

6.ACK场

→ACK:确定报文被至少一个节点正确接收。发送节点在ACK发送隐性位;正确接收报文的节点→ACK发送显性;未正确接受报文的节点→ACK发送隐性;发送节点检测应答位是否被显性位覆盖,如果没有→ACK错误;

7.侦结束

→7个连续隐性位表示数据帧结束;节点在检测到11个连续隐性位后认为总线空闲;

8.ITM

1.2错误检测与错误帧

1.错误检测

→ 位监测位错误(如下两种位错误)

(1)节点检测到的位与自身发送的位数值不同;

(2)仲裁ACK位期间送出“隐性”位,而检测到“显性”位不导致位错误;

→ 填充检测填充错误

在使用位填充编码的帧场(帧起始至CRC序列)中,不允许出现6个连续相同的电平位;

→ CRC检测CRC错误

节点计算的CRC序列与接收到的CRC序列不同;

→ 格式检测格式错误

固定格式位场(如CRC界定符、ACK界定符、侦结束等)含有一个或更多非法位;

→ ACK检测ACK错误

发送节点在ACK位期间未检测到“显性”位;

Summary:

  1. 发送节点→位错误、格式错误、ACK错误;
  2. 接受节点→填充错误、格式错误、CRC错误;

2.错误帧

→ 检测错误→发送错误帧→通知报文错误;

→ 错误帧的发送

(1)位错误、填充错误、格式错误或ACK错误产生后→当前发送的下一帧发送错误帧;

(2)CRC错误→紧随ACK界定符后的位发送错误帧;

(3)错误帧发送后→总线空闲时重发出错的数据帧;

 主动错误

→ 主动错误帧格式:

主动错误标志(6个显性位)+错误标志叠加(0-6个显性位)+错误界定符(8个隐性位)+IMT;

→ 被动错误帧格式

被动错误标志(6个隐性位)+错误标志叠加(0-6个显性位)+错误界定符(8个隐性位)+IMT;

3.节点错误状态

  1. 主动错误状态→可收可发,使用主动错误标志;
  2. 被动错误状态→可收可发,使用被动错误标志;
  3. 总线关闭状态→不参与任何总线活动;

正常通信,但无法保证收发报文的正确性

根据CAN协议的规定,CAN节点内,有两个计数器:发送错误计数器(TEC)和接收错误计数器(REC)。CAN节点错误状态的转换(下图),就是基于这两个计数器来进行的。

2.位填充机制

(1)发送节点发送5连续的相同极性位后,在位流中自动插入一个极性相反的位→位填充

(2)接受节点对相同极性位的数量进行检测,从位流中将填充位去掉→清除填充

(3)SOF之前的总线空闲区域,不需要同步,无需进行位填充;

(4)CRC之后的位域都是固定格式,不允许位填充操作;

作用:

(1)CAN网络同步需要足够多的上升沿,这是CAN网络规定位填充的目的之一。

(2)确保数据帧不会被当作错误帧(由6个连续的显性或隐形位组成)、确保正确识别帧结束标志(7连续隐形位)。

本节内容就先分享至此,下节继续介绍其同步机制,大家可关注+收藏,以慢慢消化。

完美的一天就该收获满满,共勉!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汽车测试M哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值