其他分享
首页 > 其他分享> > CAN通信讲解(2)——数据帧和遥控帧

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

作者:互联网

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

目录

2.1 帧的种类

CAN协议帧分为5种,

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

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

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

2.2 数据帧和遥控帧

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

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

简称全程含义
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基础,这些行业基本知识点还是要掌握的。

标签:优先级,遥控,通信,ID,讲解,数据,节点,显性
来源: https://blog.csdn.net/happygaohualei/article/details/122308259