收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一、CAN总线简介
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。
在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。
由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。
此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。
CAN总线特点:
- 多主控制
- 系统柔软性
- 速度快,距离远
- 具有错误检测、错误通知和错误恢复功能
- 故障封闭功能
- 连接节点多
CAN总线标准
CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。
ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同,但物理层不同。
总线拓扑图
闭环总线网络----ISO11898
闭环总线网络高速、短距离,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个120 欧的电阻。
开环总线网络----ISO11519
开环总线网络低速、远距离,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2千欧的电阻。
差分信号
CAN总线采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。
在差分信号中,逻辑0和逻辑1是用两根差分信号线的电压差来表示。
当处于逻辑1,CAN_High和CAN_Low的电压差小于0.5V时(0V),称为隐性电平(Recessive);
当处于逻辑0,CAN_High和CAN_Low的电压差大于0.9V时(2V),称为显性电平(Dominant)。
差分信号的传输的优点:
- 抗干扰能力强
- 能有效抑制它对外部的电磁干扰
- 时序定位精确
二、CAN 协议
CAN 帧格式
为了更有效地控制通讯,CAN 一共规定了 5 种类型的帧。
它们的类型及用途说明如表所示:
帧 | 帧用途 |
---|---|
数据帧 | 用于发送单元向接收单元传送数据的帧 |
遥控帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧 |
错误帧 | 用用于当检测出错误时向其它单元通知错误的帧 |
过载帧 | 用于接收单元通知其尚未做好接收准备的帧 |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开来的帧 |
1. 数据帧
数据帧由 7 个段构成,具体数据帧构成图如下:
(1)帧起始(标准、扩展格式相同)
表示帧开始的段,1个位的显性位。
(2)仲裁段(标准、扩展格式不同)
仲裁段结构图如下图所示:
表示该帧优先级的段,标准格式和扩展格式在仲裁段的构成有所不同。
标准格式 ---- 共12位:11位基本ID 和 1位RTR位
- 帧ID
标准格式的 ID 有 11 个位,从 ID28 到 ID18 被依次发送。
禁止高7位都为隐性(禁止设定:ID=1111111XXXX)。 - RTR位 ---- 远程传输请求位
用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧
扩展格式 ---- 共32位:11位基本ID 、1位SRR位、1位IDE位、18位扩展ID和1位RTR位。
- 帧ID
扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX)。 - SRR 位
只存在于扩展格式,它用于替代标准格式中的 RTR位。
由于扩展帧中的 SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。 - IDE 位 ---- 标识符扩展位
用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式 - RTR位 ---- 远程传输请求位
用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧
(3)控制段(标准、扩展格式不同)
控制段结构图如下图所示:
表示数据的字节数及保留位的段,标准格式和扩展格式的构成有所不同。
由 6 个位构成:
标准格式:1位IDE位、1位r0保留位 和 4位DLC数据长度码
- IDE 位 ---- 标识符扩展位
用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式 - 保留位 ---- r0
保留位必须全部以显性电平发送。
但接收方可以接收显性、隐性及其任意组合的电平。 - 数据长度码 ---- DLC
表示发送/接收的数据长度(字节)。
数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。
扩展格式:2位 r0 和 r1 保留位 和 4位DLC数据长度码
- 保留位 ---- r0、r1
保留位必须全部以显性电平发送。
但接收方可以接收显性、隐性及其任意组合的电平。 - 数据长度码 ---- DLC
表示发送/接收的数据长度(字节)。
数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。
数据长度码与数据的字节数的对应关系如下表所示:
数据长度码 | 数据字节数 |
---|---|
DLC3 | DLC2 |
D-显-0 | D-显-0 |
D-显-0 | D-显-0 |
D-显-0 | D-显-0 |
D-显-0 | D-显-0 |
D-显-0 | R-隐-1 |
D-显-0 | R-隐-1 |
D-显-0 | R-隐-1 |
D-显-0 | R-隐-1 |
R-隐-1 | D-显-0 |
(4)数据段(标准、扩展格式相同)
数据段可包含 0~8 个字节的数据。
从 MSB(最高位)开始输出。
(5)CRC段(标准、扩展格式相同)
CRC 段是检查帧传输错误的帧。
由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)构成。
CRC 顺序—15位
CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
CRC 界定符
用于分隔的位
(6)ACK段(标准、扩展格式相同)
ACK 段用来确认是否正常接收。
由 1位 ACK 槽(ACK Slot) 和1位 ACK 界定符 构成。
ACK 槽(ACK Slot)
发送单元在 ACK 段发送 2 个位的隐性位。
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,
通知发送单元正常接收结束。这称作“发 送 ACK”或者“返回 ACK”。
ACK 界定符
用于分隔的位
(7)帧结束(标准、扩展格式相同)
帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
2. 遥控帧(远程帧)
接收单元向发送单元请求发送数据所用的帧。
遥控帧由 6 个段组成,遥控帧没有数据帧的数据段。
具体遥控帧构成图如下:
遥控帧的 RTR 位为隐性位,没有数据段。
3. 错误帧
用于在接收和发送消息时检测出错误通知错误的帧。
错误帧由错误标志和错误界定符构成。
(1)错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6个位的显性位。
被动错误标志:6个位的隐性位。
(2)错误界定符
错误界定符由 8 个位的隐性位构成。
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img-b5fROtRV-1715880300140)]
[外链图片转存中…(img-rA07YSTu-1715880300140)]
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!