CAN通信讲解(2)——数据帧和遥控帧
作者:互联网
本文注意参考了《CAN入门书》,源于此书图片不再特殊标注
目录
2.1 帧的种类
CAN协议帧分为5种,
- 数据帧
- 遥控帧
- 错误帧
- 过载帧
- 帧间隔(不是间隔帧)
其中数据帧和遥控帧有标准格式和扩展格式两种
帧 | 用途 |
---|---|
数据帧 | 发送固定ID数据 |
遥控帧 | 请求固定ID数据 |
错误帧 | 检查出错误通知其他节点 |
过载帧 | 接收过载通知其他节点 |
帧间隔 | 用于将数据帧或遥控帧与前面帧间隔开来 |
2.2 数据帧和遥控帧
数据帧和遥控帧十分相似,对比理解
- 数据帧有7段:帧起始、仲裁段、控制端、数据段、CRC段、ACK段、帧结束
- 遥控帧有6段:帧起始、仲裁段、控制端、
数据段、CRC段、ACK段、帧结束
遥控帧只是缺少数据段
数据帧和遥控帧有标准格式和扩展格式两种
图片源自
简称 | 全程 | 含义 |
---|---|---|
RTR | Remote Tranmission Request(远程发送请求) | 隐性1=遥控帧,显性0=数据帧, 保证优先级数据帧>遥控帧 |
IDE | Identifier Extension (ID扩展位) | 隐性1=扩展帧,显性0=标准帧,保证优先级标准帧>扩展帧 |
SRR | Substitute for Remote Request(代替远程请求) | 恒为显性1,扩展时让TRT后移 |
SOF | Start Of Frame(帧起始) | 恒为1bit 显性0 |
EOF | End Of Frame(帧结束) | 恒为7bit 隐性1 |
DLC | Data 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