1. 帧的种类
通信是通过以下 5 种类型的帧进行的
- 数据帧
- 遥控帧
- 错误帧
- 过载帧
- 帧间隔
另外, 数据帧和遥控帧有标准格式(CAN2.0A)和和扩展格式(CAN2.0B)两种格式:
- 标准格式有 11 个位的标识符(Identifier: 以下称 ID)
- 扩展格式有 29 个位的 ID
各种帧的用途:
帧 | 帧用途 |
---|---|
数据帧 | 用于发送单元向接收单元传送数据的帧 |
遥控帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧 |
错误帧 | 用于当检测出错误时向其它单元通知错误的帧 |
过载帧 | 用于接收单元通知其尚未做好接收准备的帧 |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开来的帧 |
2. 数据帧
数据帧由 7 个段构成:
接下来,详细的了解一下数据帧的构成
3. 帧起始
表示数据帧开始的段 SOF
1 个位的显性位,电平的逻辑值为“0”
4. 仲裁段
表示该帧优先级的段
标准格式和扩展格式在此的构成有所不同
- 标准格式
ID 有 11 个位,从 ID28 到 ID18 被依次发送
禁止高 7 位都为隐性,禁止设定: ID=1111111XXXX - 扩展格式
ID 有 29 个位,基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示
基本 ID 和标准格式的 ID 相同,禁止高 7 位都为隐性,禁止设定:基本 ID=1111111XXXX
在 ID号前11位相同的情况下,有几个位值得说一下:
简称 | 全称 | 名称 | 特点 | 作用 |
---|---|---|---|---|
RTR位 | Remote Tranmission Request Bit | 远程发送请求位 | 在数据帧中,恒为显性位0;在遥控帧中,恒为隐性1 | 相同格式下,保证 数据帧 优先级高于 遥控帧 |
SRR位 | Substitutes for Remote Requests Bit | 替代远程请求位 | 在扩展帧(数据帧或遥控帧)中,恒为隐性1; 在标准数据帧的中,对应的位RTR,恒为显性位0 | 保证 标准数据帧 优先级高于 扩展数据帧 |
IDE 位 | Identifier Extension Bit | 识别符扩展位 | 在扩展帧(数据帧或遥控帧)中,恒为隐性1;在标准帧(数据帧或遥控帧)中,IDE位于控制段,恒为显性0 | 保证 标准遥控帧 优先级高于 扩展遥控帧 |
在CAN总线中没有地址的概念,CAN总线是通过报文ID来实现收发数据的
CAN节点上都会有一个验收滤波ID表,其位于CAN节点的验收滤波器中
如果总线上的报文ID号在某个节点的验收滤波ID表中
那么这一帧报文就能通过该节点验收滤波器的验收,该节点就会接收这一帧报文
比如:
Node_A
发送了一帧ID号为 ID_1
的报文 Msg_1
Node_B
的验收滤波ID表中恰好有 ID_1
于是乎 Msg_1
就会被 Node_B
接收
5. 控制段
表示数据的字节数及保留位的段,由 6 个位构成
标准格式和扩展格式的构成有所不同
- 保留位(r0、r1)
保留位必须全部以显性电平发送
但接收方可以接收显性、隐性及其任意组合的电平 - 数据长度码(DLC)
数据长度码与数据的字节数的对应关系:
数据字节数 | DLC3 | DLC2 | DLC1 | DLC0 |
---|---|---|---|---|
0 | D | D | D | D |
1 | D | D | D | R |
2 | D | D | R | D |
3 | D | D | R | R |
4 | D | R | D | D |
5 | D | R | D | R |
6 | D | R | R | D |
7 | D | R | R | R |
8 | R | D | D | D |
数据的字节数必须为 0~8 字节
但接收方对 DLC = 9~15 的情况并不视为错误
6. 数据段
数据的内容,可发送 0~8 个字节的数据
从 最高有效位MSB(Most Significant Bit)开始输出
7. CRC 段
检查帧的传输错误的段
由 15 个位的 循环冗余校验CRC 顺序 和 1 个位的 CRC 界定符(用于分隔的位)构成
CRC 顺序是根据多项式生成的 CRC 值
CRC 的计算范围包括帧起始、仲裁段、控制段、数据段
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误
8. ACK 段
表示确认正常接收的段
由 确认字符ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成
- 发送单元的 ACK 段
发送单元在 ACK 段发送 2 个位的隐性位 - 接收单元的 ACK 段
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位, 通知发送单元正常接收结束
这称作“发送 ACK”或者“返回 ACK”
发送 ACK 的是:在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元
发送单元不发送 ACK
所谓正常消息是指不含填充错误、格式错误、 CRC 错误的消息
9. 帧结束
表示数据帧结束的段 EOF
由 7 个位的隐性位构成
10. 遥控帧
接收单元 向 发送单元 请求发送数据 所用的帧
遥控帧由 6 个段组成(帧起始、仲裁段、控制段、CRC 段、ACK 段、 帧结束)
遥控帧 没有 数据帧 的数据段
- 数据帧和遥控帧的不同:
- 遥控帧的 远程发送请求位
RTR
位为隐性位 1,没有数据段 - 没有数据段的数据帧和遥控帧可通过
RTR
位区别开来
- 遥控帧中,标准帧 的
RTR
对位扩展帧的SRR
皆为隐性,怎么保证标准帧优先级高于扩展帧?
在遥控帧中可通过 识别符扩展位IDE
保证
在扩展格式中,IDE
恒为隐性1;在标准格式中,IDE
恒为显性0 - 遥控帧没有数据段,控制段中的数据长度码
DLC
该如何表示?
遥控帧的数据长度码以所请求数据帧的数据长度码表示 - 没有数据段的数据帧有何用途?
例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况
参考:
《CAN入门书》
相关推荐:
CAN笔记(5) 协议标准规格
CAN笔记(4) 协议基本概念
CAN笔记(3) 错误状态
CAN笔记(2) CAN特点
CAN笔记(1) CAN简介
谢谢!
转载:https://blog.csdn.net/qq_32618327/article/details/100518702