重学STM32---(九)之CAN通信(一)
1、CAN 是什么
CAN 是 Controller Area Network的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。
2、CAN 特点
-
多主控制
-
消息的发送:在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
-
系统的柔软性
-
通信速度
-
....等等
3、错误状态的种类
(1) 主动错误状态
主动错误状态是可以正常参加总线通信的状态。处于主动错误状态的单元检测出错误时,输出主动错误标志。
(2) 被动错误状态
被动错误状态是易引起错误的状态。处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。
处于被动错误状态的单元检测出错误时,输出被动错误标志。
另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8 个位的隐性位)。
(3) 总线关闭态
总线关闭态是不能参加总线上通信的状态。信息的接收和发送均被禁止。这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。
4、总线拓扑
CAN 收发器根据两根总线(CAN_High 和 CAN_Low)的电位差来判断总线电平。
总线电平分为显性电平和隐性电平两种。 总线必须处于两种电平之一。 总线上执行逻辑上的线“与”时,显性电平为“0”,隐性电平为“1”。物理层的特征如图所示。
5、CAN 协议
1、帧的种类
通信是通过以下 5 种类型的帧进行的。
- 数据帧
- 遥控帧
- 错误帧
- 过载帧
- 帧间隔
另外, 数据帧和遥控帧有标准格式和扩展格式两种格式。 标准格式有 11 个位的标识符 (Identifier: 以下称 ID) ,扩展格式有 29 个位的 ID。
2、数据帧
数据帧由 7 个段构成,数据帧的构成如图所示。
- 帧起始: 表示数据帧开始的段。
- 仲裁段: 表示该帧优先级的段。
- 控制段: 表示数据的字节数及保留位的段。
- 数据段: 数据的内容,可发送 0~8 个字节的数据。
- CRC 段:检查帧的传输错误的段。
- ACK段: 表示确认正常接收的段。
- 帧结束: 表示数据帧结束的段。
数据帧和遥控帧的不同
- 遥控帧的 RTR 位为隐性位,没有数据段。
- 没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。
遥控帧没有数据段,数据长度码该如何表示 ?
- 遥控帧的数据长度码以所请求数据帧的数据长度码表示。
没有数据段的数据帧有何用途 ?
- 例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。
3、优先级的决定
在总线空闲态,最先开始发送消息的单元获得发送权。多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。仲裁的过程如图所示。
4、错误的种类
错误共有 5 种。多种错误可能同时发生。
- 位错误
- 填充错误
- CRC 错误
- 格式错误
- ACK错误
错误的种类、错误的内容、错误检测帧和检测单元如表所示:
5、位时序
由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。
- 同步段(SS)
- 传播时间段(PTS)
- 相位缓冲段 1(PBS1)
- 相位缓冲段 2(PBS2)
这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。
1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。
1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和 Tq 数如表 11 所示。1 个位的构成如图所示:
详情请参考CAN入门教程。
关注公众号"小败日记",搬砖过程遇到的问题,大家一起探讨,资源共享