CAN通信讲解(2)——数据帧和遥控帧

本文注意参考了《CAN入门书》,源于此书图片不再特殊标注

数据帧和遥控帧格式类似,放在一起串讲

2.1 帧的种类

CAN协议帧分为5种,

  1. 数据帧
  2. 遥控帧
  3. 错误帧
  4. 过载帧
  5. 帧间隔(不是间隔帧)

其中数据帧和遥控帧有标准格式扩展格式两种

用途
数据帧发送固定ID数据
遥控帧请求固定ID数据
错误帧检查出错误通知其他节点
过载帧接收过载通知其他节点
帧间隔用于将数据帧或遥控帧与前面帧间隔开来

2.2 数据帧和遥控帧

数据帧和遥控帧十分相似,对比理解

  • 数据帧有7段:帧起始、仲裁段、控制端、数据段、CRC段、ACK段、帧结束
  • 遥控帧有6段:帧起始、仲裁段、控制端、数据段、CRC段、ACK段、帧结束

遥控帧只是缺少数据段
数据帧和遥控帧有标准格式扩展格式两种
在这里插入图片描述
在这里插入图片描述
图片源自

简称全程含义
RTRRemote Tranmission Request(远程发送请求)隐性1=遥控帧,显性0=数据帧, 保证优先级数据帧>遥控帧
IDEIdentifier Extension (ID扩展位)隐性1=扩展帧,显性0=标准帧,保证优先级标准帧>扩展帧
SRRSubstitute for Remote Request(代替远程请求)恒为显性1,扩展时让TRT后移
SOFStart Of Frame(帧起始)恒为1bit 显性0
EOFEnd Of Frame(帧结束)恒为7bit 隐性1
DLCData Length Code(数据长度)普通CAN来说0~8

2.3 仲裁过程

CAN总线不像IIC一样,每个节点有自己的唯一固定地址,CAN总线上的每个节点都可以发1个或多个ID,接收者只需要接收它关心的ID就行,因为哪个节点发哪个ID是提前统一分配好的,所以可以理解成某个ID是某个CAN节点的”固定地址“之一,同一时刻有可能不同节点同时发送数据,所以需要通过ID仲裁方式,让ID大的(优先级低)节点主动放弃控制权,让ID小(优先级高)的节点先发送数据。
在这里插入图片描述
图片源自

线与机制:总线上显性位能覆盖隐性位,两个节点如果一个发显性信号,一个发隐性信号,最后总线上呈现显性信号。
ID号越小优先级越高:通过线与机制发现显性优先级高,逻辑0优先级高,0约多号越小优先级越高
回读机制:节点在向总线发送报文过程中,会对总线电平进行回读,如果自己发显性0,回读肯定显性0,如果自己发隐性1,回读可能是显性0,则说明有ID更小的节点同时也在发数据,自己要马上终止发送。
非破坏性仲裁机制:即使出现多节点同时发送,ID小(优先级高)节点数据不会遭到破坏,也不会延时,ID大(优先级低)节点会主动终止发送主动延时。

在这里插入图片描述
图片源自

CAN总线上有四个节点:Node_A、Node_B、Node_C、Node_D。发送的报文的ID号分别为5、7、3、6,可以看出ID=7延时最严重,ID=3虽然优先级最高,但ID=5仲裁段已经发出,在发数据段时ID=3也只能临时等待了,其他同理。

2.4 各段详解

以标准数据帧为例(忽略扩展帧)
在这里插入图片描述

图片源自

帧起始:1bit 显性位,总线空闲都是隐性电平位,通过显性代表有报文发出
仲裁段:11bit ID位+ RTR(远程发送请求,标准数据帧中恒显性0)
控制段:IDE(ID扩展,显性0)+ r0(保留位,保留一般要求显性0)+ DLC(数据段长度)
数据段:可变长度数据
CRC段:15bit CRC + 1bit 隐性1(代表CRC结束)

着重讲解ACK段
在这里插入图片描述
图片源自

ACK只有两bit,最后一位ACK界定符代表ACK结束,恒为隐性1。而ACK槽(ack slot)对于发送节点需要发隐性1,而接收节点需要收到正确报文(无填充错误,格式错误,CRC错误)后将此位拉到显性0,接收节点通过回读机制就知道有节点正确接收到此报文。

帧结束:连续7bit 隐性1(总线空闲也是隐性1,所以看示波器不好区分)

2.5 小结

CAN在汽车行业使用最多的就是标准数据帧,而遥控帧几乎用不到,扩展帧也用的极少,8字节数据承载能力毕竟有限,升级版的CANFD一次最多承载64字节也在逐渐代替普通CAN,但归根结底普通CAN是基础,标准帧又是普通CAN基础,这些行业基本知识点还是要掌握的。

>>返回总目录

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值