CAN笔记(6) CAN协议(一)
CAN笔记(6) CAN协议(一)
- 1. 帧的种类
- 2. 数据帧
- 3. 帧起始
- 4. 仲裁段
- 5. 控制段
- 6. 数据段
- 7. CRC 段
- 8. ACK 段
- 9. 帧结束
- 10. 遥控帧
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简介
谢谢!
CAN笔记(6) CAN协议(一)相关推荐
- IOS之学习笔记十五(协议和委托的使用)
1.协议和委托的使用 1).协议可以看下我的这篇博客 IOS之学习笔记十四(协议的定义和实现) https://blog.csdn.net/u011068702/article/details/809 ...
- 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute 分类: TCP/IP详解学习笔记计算机网络2006-04-20 18:147970人阅读评论(1)收 ...
- 网络安全笔记1——Internet协议的安全性
网络安全笔记1--Internet协议的安全性 参考课程:中国大学MOOC<网络安全>--北京航空航天大学 文章目录 网络安全笔记1--Internet协议的安全性 <font co ...
- 网络协议学习笔记-IGMP协议
网络协议学习笔记-IGMP协议 http://hi.baidu.com/clxye/item/3db870336d86c0c11a969614 IGMP协议(Internet Group Man ...
- 【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程
[嵌入式硬件芯片开发笔记]HART协议调制解调芯片AD5700配置流程 XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制 ...
- TCP/IP详解学习笔记(9)-TCP协议概述
终于看到了TCP协议,这是TCP/IP详解里面最重要也是最精彩的部分,要花大力气来读.前面的TFTP和BOOTP都是一些简单的协议,就不写笔记了,写起来也没啥东西. TCP和UDP处在同一层---运输 ...
- TCP/IP详解--学习笔记(9)-TCP协议概述
终于看到了TCP协议,这是TCP/IP详解里面最重要也是最精彩的部分,要花大力气来读.前面的TFTP和BOOTP都是一些简单的协议,就不写笔记了,写起来也没啥东西. TCP和UDP处在同一层---运输 ...
- FPGA学习笔记_UART串口协议_串口接收端设计
FPGA学习笔记 1. UART串口协议以及串口接收端设计 1 原理图 2 Verilog 代码 3 Modelsim仿真 4. FPGA板级验证 1.1 串口协议接收端设计 目标:FPGA接收其他设 ...
- TCPIP详解Protocol 读书笔记(三) IP协议讲解
TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 文章目录 TCP/IP详解:Protocol 读书笔记(三) Chapter3 IP:网际协议 IP协议 IP数据 ...
- 【安全牛学习笔记】DNS协议隧道、DNS协议隧道-dns2tcp
DNS协议隧道 防火墙禁止TCP出站访问流量 - SSH隧道.端口准发全部失效 - 使用基于UPD协议的隧道 - DNS的工作原理适合用于实现隧道 DNS工作原理 - DNS隧道原理: 注册受自己控制 ...
最新文章
- 如果乔布斯还在,今天他65岁了
- Servicehot和你说说运维自动化的那些事儿
- Linux 常见的六大 IPC 通信方式
- 关于Git的几个使用技巧
- 跨域资源请求(除jsonp以外)的方法
- Windows Server 2012 R2服务器集群测试
- 江苏2021168查询高考成绩,重磅!高考成绩查询!!
- turbo码java实现_Turbo码的迭代译码算法的设计与软件实现
- java 调用宏_通过java代码实现调用excel当中的宏的操作。
- Tbase安装遇错解决办法
- hosts文件在哪里,怎样配置修改hosts文件
- 关于 Sketch 你可以知道的几个小秘密 (快捷键用法)
- 生动的ajax图片显示效果,LightBox
- img标签 src路径正确 但图片不显示
- 展望计算机未来发展趋势,计算机的未来展望
- es根据字段长度过滤_es根据字段长度过滤_如何进行elasticsearch查询以过滤字段的最大值?...
- python32位和64位有什么区别_python32位和64位有什么区别
- 无源晶振电路设计和改进
- python实现GUI自动化(控制鼠标)|屏幕快照图像识别基础
- winds搭建bugfree环境