CAN笔记(6) CAN协议(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_32618327/article/details/100518702


1. 帧的种类

通信是通过以下 5 种类型的帧进行的

  • 数据帧
  • 遥控帧
  • 错误帧
  • 过载帧
  • 帧间隔

另外, 数据帧和遥控帧有标准格式(CAN2.0A)和和扩展格式(CAN2.0B)两种格式:

  1. 标准格式有 11 个位的标识符(Identifier: 以下称 ID)
  2. 扩展格式有 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位相同的情况下,有几个位值得说一下:

扫描二维码关注公众号,回复: 7218257 查看本文章
简称 全称 名称 特点 作用
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 段、 帧结束)
遥控帧 没有 数据帧 的数据段

在这里插入图片描述

  • 数据帧和遥控帧的不同:
  1. 遥控帧的 远程发送请求位RTR 位为隐性位 1,没有数据段
  2. 没有数据段的数据帧和遥控帧可通过 RTR 位区别开来
  • 遥控帧中,标准帧 的RTR 对位扩展帧的SRR皆为隐性,怎么保证标准帧优先级高于扩展帧?
    在遥控帧中可通过 识别符扩展位IDE 保证
    在扩展格式中,IDE恒为隐性1;在标准格式中,IDE恒为显性0
  • 遥控帧没有数据段,控制段中的数据长度码DLC该如何表示?
    遥控帧的数据长度码以所请求数据帧的数据长度码表示
  • 没有数据段的数据帧有何用途?
    例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况

参考:
《CAN入门书》


相关推荐:
CAN笔记(5) 协议标准规格
CAN笔记(4) 协议基本概念
CAN笔记(3) 错误状态
CAN笔记(2) CAN特点
CAN笔记(1) CAN简介


谢谢!

猜你喜欢

转载自blog.csdn.net/qq_32618327/article/details/100518702
CAN
今日推荐