CAN学习笔记
CAN简介
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO *1 国际标准化的串行通信协议。广泛地应用于工业自动化、汽车、船舶、医疗设备、工业设备等方面。
优势:
- 数据传输速度高(最高1Mbit/s)
- 抗干扰能力强(差分数据线)
- 有自我诊断能力(错误侦测)
CAN协议
物理层
CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High和 CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
ISO11898 标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻。
闭环总线网络
ISO11519-2 标准的低速、远距离“开环网络”,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2 千欧”的电阻。
开环环总线网络
协议层
CAN使用的是两条差分信号线,只能表达一个信号,简洁的物理层决定了 CAN 必
然要配上一套更复杂的协议,如何用一个信号通道实现同样、甚至更强大的功能呢?CAN
协议给出的解决方案是对数据、操作命令(如读/写)以及同步信号进行打包,打包后的这些
内容称为报文,这些报文再被封装成帧进行传输。
通信是通过以下 5 种类型的帧进行的。
帧 | 用途 |
---|---|
数据帧 | 用于发送单元向接收单元传送数据的帧。 |
遥控帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧,又称为远程帧。 |
错误帧 | 用于当检测出错误时向其它单元通知错误的帧。 |
过载帧 | 用于接收单元通知其尚未做好接收准备的帧。 |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开来的帧。 |
数据帧
数据帧由 7 个段构成。
段 | 用途 |
---|---|
帧起始 | 表示数据帧开始的段。 |
仲裁段 | 表示该帧优先级的段。 |
控制段 | 表示数据的字节数及保留位的段。 |
数据段 | 数据的内容,可发送 0~8 个字节的数据。 |
CRC 段 | 检查帧的传输错误的段。 |
ACK 段 | 表示确认正常接收的段。 |
帧结束 | 表示数据帧结束的段 |
- 帧起始
表示数据帧开始的段,标准、扩展格式相同,1 个位的显性位。
- 仲裁段
表示该帧优先级的段。标准帧和扩展帧格式在本段有所区别。
3. 控制段
表示数据的字节数及保留位的段,标准帧和扩展帧的控制段稍有不同。
- 数据段
数据的内容,可发送 0~8个字节的数据。从最高位(MSB)开始输出,标准帧和扩展帧在这个段的定义都是一样的。
- CRC 段
检查帧的传输错误的段。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用
于分隔的位)组成,标准帧和扩展帧在这个段的格式也是相同的。
此段 CRC 的值计算范围包括:帧起始、仲裁段、控制段、数据段。接收方以同样的算法计
算 CRC 值并进行比较,不一致时会通报错误。
6. ACK 段
表示确认正常接收的段。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位组成。标准帧和扩展帧在这个段的格式也是相同的。
发送单元的 ACK,发送 2 个位的隐性位,而接收到正确消息的单元在 ACK 槽(ACK Slot)
发送显性位,通知发送单元正常接收结束,这个过程叫发送 ACK/返回 ACK。发送 ACK 的是
在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送 ACK)。所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。
- 帧结束
表示数据帧结束的段。这个段也比较简单,标准帧和扩展帧在这个段格式一样,由 7 个位的隐性位组成。