目录
1. CAN 协议的基本概念
2. CAN 协议及标准规格
2.1 ISO 标准化的 CAN 协议
2.2 ISO11898 和 ISO11519-2 的不同点
3. CAN协议
3.1 帧的种类
3.2 数据帧
3.3 遥控帧
3.4 错误帧
3.5 过载帧
4. CAN协议帧的其他要点
4.1 帧间隔
4.2 优先级的决定
4.2.1 数据帧和遥控帧的优先级
4.2.2 标准格式和扩展格式的优先级
4.3 位填充
4.4 错误的种类
4.5 位时序
5. 总结
1. CAN 协议的基本概念
CAN 协议如表 所示涵盖了
ISO
规定的 OSI(Open Systems Interconnection
开放式系统间互联)基本参照模型中的传输层、数据链路层及物理层。
CAN 协议中关于 ISO/OSI
基本参照模型中的传输层、数据链路层及物理层,具体有哪些定义如图
所示。
2. CAN 协议及标准规格
2.1 ISO 标准化的 CAN 协议
CAN 协议经
ISO
标准化后有
ISO11898
标准和
ISO11519-2
标准两种。
ISO11898
和
ISO11519-2
标准对于数据 链路层的定义相同,但物理层不同。
(1)
关于
ISO11898
ISO11898 是通信速度为
125kbps-1Mbps
的
CAN
高速通信标准。 目前,ISO11898
追加新规约后,成为
ISO11898-1
新标准。
(2)
关于
ISO11519
ISO11519 是通信速度为
125kbps
以下的
CAN
低速通信标准。ISO11519-2 是
ISO11519-1
追加新规约后的版本。
下图表示
CAN
协议和
ISO11898
及
ISO11519-2
标准的范围。
2.2 ISO11898 和 ISO11519-2 的不同点
(1)
物理层的不同点
如下图所示,
ISO11898
和
ISO11519-2
在
CAN
协议中物理层的标准有所不同。
CAN
协议的物理层如下图
所 示,定义了三个子层,ISO11898
和
ISO11519-2
在物理层中的
PMA
层和
MDI
层有所不同。
在物理层(PMA 层、MDI 层),ISO11898 和 ISO11519-2 的主要不同点如下表所示:
![](https://i-blog.csdnimg.cn/blog_migrate/af31caecda1c852b875278412fc45129.png)
3. CAN协议
3.1 帧的种类
通信是通过以下
5
种类型的帧进行的。
另外,
数据帧和遥控帧有标准格式和扩展格式两种格式。
标准格式有 11
个位的标识符(
Identifier:
以下称
ID
), 扩展格式有 29
个位的
ID
。
各种帧的用途如下表所示,各种帧的构成如下图
所示。
3.2 数据帧
![](https://i-blog.csdnimg.cn/blog_migrate/29604aa4be47ea1698f3a642ec1cae62.png)
数据帧由
7
个段构成。
数据帧的构成如上图
所示。
(1) 帧起始
(标准、扩展格式相同)
表示数据帧开始的段。1个位的显性位。
【注】显性电平和隐性电平:
- 总线上的电平有显性电平和隐性电平两种。
- 总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。
- “显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)
(2) 仲裁段(
标准格式和扩展格式构成有所不同)
表示该帧优先级的段。
- 标准格式的 ID 有 11 个位。从 ID28 到 ID18 被依次发送。禁止高 7 位都为隐性。 (禁止设定:ID=1111111XXXX)
- 扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和 标准格式的 ID 相同。禁止高 7 位都为隐性。(禁止设定:基本 ID=1111111XXXX)
(3) 控制段
表示数据的字节数及保留位的段。控制段由
6
个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。
【注】:
*
1
保留位(
r0
、
r1
)
保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
*
2
数据长度码(
DLC
)
数据长度码与数据的字节数的对应关系如表
8
所示。
数据的字节数必须为
0
~
8
字节。但接收方对
DLC = 9
~
15
的情况并不视为错误。
![](https://i-blog.csdnimg.cn/blog_migrate/7970563bdd81e522dfcefc88411c3425.png)
(4) 数据段
(标准、扩展格式相同)
数据的内容,可发送 0
~
8 个字节的数据,
从
MSB
(最高位)开始输出。
(5) CRC 段
(标准
/
扩展格式相同)
检查帧的传输错误的段。15 个位的 CRC 顺序和1个位的 CRC 界定符(用于分隔的位)构成。
【注】:CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。 接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
(6) ACK 段
表示确认正常接收的段。ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。
![](https://i-blog.csdnimg.cn/blog_migrate/52457c044632a67e8a23dbfd3e3c0008.png)
【注】:
*
1
发送单元的
ACK
段
发送单元在
ACK
段发送
2
个位的隐性位。
*
2
接收单元的
ACK
段
接收到正确消息的单元在
ACK
槽
(ACK Slot)
发送显性位,通知发送单元正常接收结束。这称作
“
发
送
ACK”
或者
“
返回
ACK”
。
(7) 帧结束
表示数据帧结束的段。7 个位的隐性位构成。
3.3 遥控帧
接收单元向发送单元请求发送数据所用的帧。遥控帧由
6
个段组成。遥控帧没有数据帧的数据段。
遥控帧的构成如下图
所示。
![](https://i-blog.csdnimg.cn/blog_migrate/30860062bee81cd068203be746021526.png)
遥控帧的 RTR 位为隐性位,没有数据段。
没有数据段的数据帧和遥控帧可通过 RTR
位区别开来。
遥控帧的数据长度码以所请求数据帧的数据长度码表示。
例如,可用于各单元的定期连接确认/
应答、或仲裁段本身带有实质性信息的情况下。
下面对帧的构成进行说明。
3.4 错误帧
用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
错误帧的构成如下图
所示。
(1)
错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:
6
个位的显性位。
被动错误标志:
6
个位的隐性位。
(2)
错误界定符
错误界定符由
8
个位的隐性位构成。
3.5 过载帧
过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。 过载帧的构成如下图
所示。
(1)
过载标志
6
个位的显性位。
过载标志的构成与主动错误标志的构成相同。
(2)
过载界定符
8
个位的隐性位。
过载界定符的构成与错误界定符的构成相同。
4. CAN协议帧的其他要点
4.1 帧间隔
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、 遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
帧间隔的构成如下图
所示。
(1)
间隔
3 个位的隐性位。
(2)
总线空闲
隐性电平,无长度限制(0 亦可)。
本状态下,可视为总线空闲,要发送的单元可开始访问总线。
(3)
延迟传送(发送暂时停止)
8 个位的隐性位。
只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。
4.2 优先级的决定
在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继 续发送。
仲裁的过程如下图
所示。
![](https://i-blog.csdnimg.cn/blog_migrate/903eb94ce449fc61a6e48c7b0e09bc36.png)
4.2.1 数据帧和遥控帧的优先级
具有相同
ID
的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(
RTR
)为显性位的数据帧具有优先权, 可继续发送。
数据帧和遥控帧的仲裁过程如下图
所示。
![](https://i-blog.csdnimg.cn/blog_migrate/ef8a2da15d2a1f300d85d9a4dd82a5ba.png)
4.2.2 标准格式和扩展格式的优先级
标准格式
ID
与具有相同
ID
的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的
RTR
位为显性位 的具有优先权,可继续发送。
标准格式和扩展格式的仲裁过程如下图
所示。
4.3 位填充
位填充是为防止突发错误而设定的功能。当同样的电平持续 5
位时则添加一个位的反型数据。 位填充的构成如下图
所示。
(1)
发送单元的工作
在发送数据帧和遥控帧时,SOF
~
CRC
段间的数据,相同电平如果持续
5
位,在下一个位(第
6
个位)则 要插入 1
位与前
5
位反型的电平。
(2)
接收单元的工作
在接收数据帧和遥控帧时,SOF
~
CRC
段间的数据,相同电平如果持续
5
位,需要删除下一个位(第
6
个 位)再接收。如果这个第 6
个位的电平与前
5
位相同,将被视为错误并发送错误帧。
4.4 错误的种类
错误共有
5
种。多种错误可能同时发生。
- 位错误
- 填充错误
- CRC 错误
- 格式错误
- ACK 错误
错误的种类、错误的内容、错误检测帧和检测单元如下表
所示。
![](https://i-blog.csdnimg.cn/blog_migrate/75d75acb80a3d24c068e59b9620fa8c4.png)
(1)
位错误
位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK
的单元、输出错误的单元来
检测。
在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误。
在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。
发送单元在 ACK
段输出隐性电平,但检测到显性电平时,将被判断为其它单元的
ACK
应答,而非位错误。
输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同 6
个位的值(显性或隐性),并不视为位错误。
(2)
格式错误
即使接收单元检测出
EOF
(7 个位的隐性位)的最后一位(第
8
个位)为显性电平,也不视为格式错误。
即使接收单元检测出数据长度码(DLC
)中
9
∼
15
的值时,也不视为格式错误。
4.5 位时序
由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为
4
段。
- 同步段(SS)
- 传播时间段(PTS)
- 相位缓冲段 1(PBS1)
- 相位缓冲段 2(PBS2)
这些段又由可称为
Time Quantum
(以下称为
Tq
)的最小时间单位构成。
1
位分为
4
个段,每个段又由若干个
Tq
构成,这称为位时序。
1
位由多少个
Tq
构成、每个段又由多少个
Tq
构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。
各段的作用和
Tq
数如下表
所示。
1
个位的构成如下图
所示。
![](https://i-blog.csdnimg.cn/blog_migrate/1aee3d891ddcb1d01dd494a665ebd9f2.png)
【注】:所谓采样点是读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。
5. 总结
目前CAN总线中使用最广泛的正是CAN 2.0 A/B协议,上述协议正是如此,也称作传统CAN(Classic CAN)。其中CAN 2.0A协议仅支持标帧格式,而CAN 2.0B协议支持标准帧格式(Stand Frame,11位标识符)和扩展帧格式(Extend Frame,29位标识符),CAN 2.0B协议的存在只是为了解决标识符不够用的情况(标识符也称作CAN ID,位于数据帧或遥控帧的仲裁场),所以CAN 2.0B和CAN 2.0A一样每个数据帧最多传输8个字节的数据。标准帧和扩展帧可以在同一条CAN总线上传输。仅支持CAN 2.0A的设备会丢弃接收到的扩展数据帧/扩展遥控帧(因为控制场的保留位不符合语法),但是不会报错。