CAN协议
·
CAN
CAN总线历史
- CAN ( Controller Area Network 控制局域网),是 ISO国际标准化的串行通信协议。
- CAN 最初出现在80年代末的汽车工业中,由德国 Bosch 公司最先提出。提出 CAN 总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。
- 1993年,CAN 已成为国际标准 ISO11898(高速应用)和 ISO11519(低速应用)。 CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。

CAN总线结构
物理线路
- 采用双绞线,两根信号线的电压差 CAN_High、CAN_Low 表示CAN总线的电平,与传输的逻辑信号1或0对应。
- 对应于逻辑1的称为隐性(Recessive)电平,对应于逻辑0成为显性(Dominant)电平。

高速CAN和低速CAN

-
CAN总线上的一个终端设备称为一个节点(Node),在CAN网络中,没有主设备和从设备的区别。
-
一个CAN节点的硬件部分一般由CAN控制器和CAN收发器两个部分组成。
- CAN控制器负责CAN总线的逻辑控制,实现CAN传输协议。
- CAN收发器主要负责MCU逻辑电平与CAN总线电平之间的转换。
-
高速CAN 隐性电平压差为0,显性电平压差为2.0
-
低速CAN 隐性电平压差为-1.5,显性电平压差为3.0
闭环
总线两端各连接一个120欧的电阻,两根信号线形成回路。
- 适合高速 短距离
- 闭合且低阻抗,信号质量好
- CAN总线终端电阻的作用有3个:
- 提高抗干扰能力,让高频低能量的信号迅速走掉
- 确保总线快速进入隐性状态,让寄生电容的能量更快走掉
- 提高信号质量,放置在总线的两端,让反射能量降低

开环
两根信号线独立,各自串联一个2.2k欧的电阻。
- 适合低速 长距离

CAN各类型帧
帧的种类
- CAN网络通信是通过5中类型的帧(Frame)进行的
- 数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier: 以下称 ID),扩展格式有 29 个位的 ID。各种帧的结构如下
| 帧类型 | 帧用途 |
|---|---|
| 数据帧(Data frame) | 节点发送的包含ID和数据的帧,用于发送单元向接收单元传送数据的帧。 |
| 遥控帧(Remote frame) | 节点向网络上的其他节点发出的某个ID的数据请求,发送节点收到遥控帧后就可以发送相应ID的数据帧, |
| 错误帧(Error frame) | 节点检测出错误时,向其他节点发送的通知错误的帧 |
| 过载帧(Overload frame) | 接收单元未做好接收数据的准备时发送的帧,发送节点收到过载帧后可以暂缓发送数据帧 |
| 帧间空间(Inter-frame space) | 用于将数据帧、遥控帧与前后的帧分隔开来 |
数据帧
数据帧由 7 个段构成。数据帧的构成如图所示。
- 帧起始:表示数据帧开始的段。
- 仲裁段:表示该帧优先级的段。
- 控制段:表示数据的字节数及保留位的段。
- 数据段:数据的内容,可发送 0~8 个字节的数据。
- CRC 段:检查帧的传输错误的段。
- ACK 段:表示确认正常接收的段。
- 帧结束:表示数据帧结束的段。

- 扩展格式下 仲裁段和控制段均有差异
- RTR位(Remote Transmission Request Bit), 译作远程传输请求位, 它是用于区分数据帧和遥控帧的,当它为显性电平时表示数据帧,隐性电平时表示遥控帧。
- IDE位(Identifier Extension Bit), 译作标识符扩展位, 它是用于区分标准格式与扩展格式,当它为显性电平时表示标准格式,隐性电平时表示扩展格式。
- SRR位(Substitute Remote Request Bit), 只存在于扩展格式,它用于替代标准格式中的RTR位。 由于扩展帧中的SRR位为隐性位,RTR在数据帧为显性位,所以在两个ID相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。
遥控帧
接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据段。
- 帧起始:表示帧开始的段。
- 仲裁段:表示该帧优先级的段。
- 控制段:表示数据的字节数及保留位的段。
- CRC 段:检查帧的传输错误的段。
- ACK 段:表示确认正常接收的段。
- 帧结束:表示遥控帧结束的段。




错误帧
用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
错误标志
- 错误标志包括主动错误标志和被动错误标志两种。
- 主动错误标志:6 个位的显性位。
- 被动错误标志:6 个位的隐性位。
错误界定符
- 错误界定符由 8 个位的隐性位构成。

过载帧
过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。
过载标志
- 6 个位的显性位。过载标志的构成与主动错误标志的构成相同。
过载界定符号
- 8 个位的隐性位。过载界定符的构成与错误界定符的构成相同。

帧间隔
- 帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
- 过载帧和错误帧前不能插入帧间隔
- 间隔
- 3 个位的隐性位。
- 总线空闲
- 隐性电平,无长度限制(0 亦可)。本状态下,可视为总线空闲,要发送的单元可开始访问总线
- 延迟传送(发送暂时停止)
- 8 个位的隐性位。只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

CAN总线仲裁及位同步
总线仲裁
- 在总线空闲态,最先开始发送消息的单元获得发送权。
- 多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送
- 具有相同 ID 的数据帧和遥控帧在总线上竞争时,因数据帧的RTR 为显性,遥控帧RTR为隐性,故数据帧先发送
- 标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,故标准格式数据帧先发送
- 仲裁失败的单元,直接变为接收模式
位时序
1 位分为 4 个段,这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成,这称为位时序。
-
一个位的TQ总量应在8-25个之间,TQ数量越多数据采样越稳定 但传输速度降低
-
采样点在PBS1 和 PBS2 之间,尽量设置其 位置在 整个位的 87.5%,以这个标准跳转PSB1 PSB2的TQ数量
-

-
SJW 应 <= PBS2

位同步
硬同步
- 只有在 总线由空闲切换到工作时的第一帧的 第一个下降沿,节点会硬件自动同步 从这个下降沿开始重置为 SS段,此处不考虑SJW
重同步
- 在接收过程中 每当检测到总线上边沿触发时 判断是否是在SS段内,若不是 则调整PBS1 或 PBS2 ,调整范围不能超过CJW,可分多次调整
硬件同步和再同步遵从如下规则:
- 1 个位中只进行一次同步调整。
- 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
- 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
- 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要满足下面条件。
- 发送单元观测到自身输出的显性电平有延迟时不进行再同步。
- 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。
CAN总线错误
错误类型

CAN节点状态
- 正常情况下,CAN节点处于主动错误的状态,在主动错误状态下发生错误时,发送错误帧(6个连续显性电平位+8个连续隐性电平位)。
- CAN节点在发送错误计数器或接收错误计数器大于127时,CAN节点将进入“被动错误”状态,并发送错误帧(6个连续隐性电平位+8个连续隐性电平位)。
- 在发送错误或者接收错误减少之后,又会切换回“主动错误”状态。
- 当发送错误计数器大于255时,CAN节点将进入“总线关闭(Bus_Off)”状态,脱离CAN总线,不影响其他CAN节点的通讯。
- 值得注意的是,应用程序负责将CAN控制器切换到“总线关闭(Bus_Off)”的状态,CAN控制器不会自动切换到“总线关闭”状态。


CAN总线特点
- 实时性: CAN总线具有优越的实时性能,适用于需要及时传输数据的应用,如汽车控制系统、工业自动化等。仲裁机制和帧优先级的设计保证了低延迟和可预测性。
- 多主机系统: CAN支持多主机系统,多个节点可以同时发送和接收数据。这种分布式控制结构使得系统更加灵活,适用于复杂的嵌入式网络。CAN总线上的节点既可以发送数据又可以接收数据,没有主从之分。但是在同一个时刻,只能由一个节点发送数据,其他节点只能接收数据。
- 差分信号传输: CAN使用差分信号传输,通过两个线路(CAN_H和CAN_L)之间的电压差来传递信息。这种差分传输方式提供了良好的抗干扰性能,使得CAN总线适用于工业环境等有电磁干扰的场合。
- 仲裁机制: CAN总线采用非破坏性仲裁机制,通过比较消息标识符的优先级来决定哪个节点有权继续发送数据。这种机制确保了总线上数据传输的有序性,避免了冲突。
- 广播通信: CAN总线采用广播通信方式,即发送的数据帧可以被总线上的所有节点接收。这种特性有助于信息的共享和同步,同时减少了系统的复杂性。
- 低成本: CAN总线的硬件成本相对较低,适用于大规模的系统集成。由于CAN控制器在硬件上实现了仲裁机制,无需额外的主机处理器,减小了成本和复杂性。
- 灵活性: CAN协议灵活适应不同的应用场景,支持不同的波特率和通信速率。这使得CAN总线可以被广泛用于各种嵌入式系统,从低速的传感器网络到高速的汽车控制系统。
- 错误检测和处理: CAN总线具有强大的错误检测和处理机制。通过CRC检查和其他错误检测手段,CAN能够识别和处理传输过程中可能发生的错误,提高了通信的可靠性。
- 多种帧类型: CAN总线上的节点没有地址的概念。CAN总线上的数据是以帧为单位传输的,帧又分为数据帧、遥控帧等多种帧类型,帧包含需要传输的数据或控制信息。
- 线与逻辑: CAN总线具有“线与”的特性,也就是当由两个节点同时向总线发送信号时,一个是发送显性电平(逻辑0),另一个发送隐性电平(逻辑1),则总线呈现为显性电平。这个特性被用于总线总裁,也就是哪个节点优先占用总线进行发送操作。
- 特定标识符 :每一个帧有一个标识符(Identifier,一下简称ID)。ID不是地址,它表示传输数据的类型,也可以用于总线仲裁时确定优先级。例如,在汽车的CAN总线上,假设用于碰撞检测的节点输出数据帧ID为01,车内温度检测节点发送数据帧的ID为05等。
- 滤波特性: 每个CAN节点都接收数据,但是可以对接收的帧根据ID进行过滤。只有节点需要的数据才会被接收并进一步处理,不需要的数据会被自动舍弃。例如,假设安全气囊控制器只接受碰撞检测节点发出的ID为01的帧,这种ID的过滤时有硬件完成的,以便安全气囊控制器在发送碰撞时能及时响应。
- 半双工: CAN总线通信时半双工的,即总线不能同时发送和接收。在多个节点竞争总线进行发送时,通过ID的优先级进行仲裁,竞争胜出的节点继续发送,竞争失败的节点立刻转入接收状态。
- 无时钟信号: CAN总线没有用于同步的时钟信号,所以需要规定CAN总线通信的波特率,所以节点都是用同样的波特率进行通信。
CAN标准规格


更多推荐


所有评论(0)