一、CAN 总线通信的 OSI (Open Systems Interconnection)
OSI:开放系统互联模型,将网络通信过程分为 7 层(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),那么 CAN 总线通信在 OSI 模型中是如何对应的呢?
图 1-1 OSI 模型与 CAN 总线的对应关系
物理层:主要功能是物理介质和信号传输,定义了 CAN 总线信号在双绞线上的电压形式。由 ISO 11898-2 定义高速 CAN ,支持最高 1 Mbps 的通信速率;由 ISO 11898-3 定义低速容错 CAN,支持较低速率(通常为 125 kbps)和容错功能;其中包括总线电平、电缆、连接器等物理特性。
数据链路层:对于数据链路层来说,定义了 CAN 帧的各个域的用途,包括帧格式、错误检测、仲裁机制。
网络层:主要功能是数据包的路由和寻址。使用 CAN 标识符(ID) 进行消息寻址和过滤;CAN 总线本身是广播通信,所有节点都能接收到消息,但通过标识符过滤选择处理。ISO 11898-1 定义了 CAN 数据链路层和网络层的基本功能。
传输层:ISO 15765-2 是诊断服务在 CAN 总线上传输的实现方式,对应于 OSI 是层 4,传输层。对于 classical CAN 总线来说,它一帧只能承载 8 个字节,而上层的诊断服务却可能超过 8 个字节,这时候就需要传输层对数据进行分包重组流控制。ISO 15765-2 还定义了应用层、传输层、数据链路层之间的编程接口,其实就是 request, confirm, indication 这几个原语的定义。ISO 15765-4 定义了基于 CAN 总线实现 OBD 通信的方式。(诊断有很多大于 8 字节的包,传诊断服务的时候 TP 传输协议是怎么实现的,时间参数是怎么定义的。)
会话层:主要功能建立、管理和终止会话,通常由应用层实现,CAN 总线本身不提供会话管理功能。
表示层:主要功能数据格式转换、加密和压缩。通常由应用层直接处理,CAN 总线本身不涉及表示层的具体实现。
应用层:主要功能是提供应用程序接口和协议,实现具体的功能(如诊断、控制等)。包括诊断协议:如 UDS(Unified Diagnostic Services,统一诊断服务),由 ISO 14229-1 定义 ;自定义应用协议:根据具体需求定义的消息格式和通信规则。ISO 14229-1 定义了 UDS 协议,用于车辆诊断,对应于 OSI 的层 7,即应用层,就是怎么用 CAN 总线实现诊断的服务,请求和应答格式是什么样的。
二、CAN分层架构
图 2-1 CAN 总线架构
如图 2-1 为 CAN 的分层架构。CAN 架构在这个 ISO 11898 标准部分中代表了两层,分别是数据链路层(DLL)和物理层(PL)。
数据链路层(DLL)
逻辑链路控制子层(LLC):负责接受过滤、过载通知和恢复管理。
媒体访问控制子层(MAC):负责数据封装、数据解封装、帧编码(位填充和位删除)、介质访问管理、错误检测、错误信号、确认、序列化和反序列化。
物理层(PL)
物理层负责比特编码、比特解码和同步化。
监督器(Supervisor)
监督器包括两个主要功能模块:
故障限制(Fault confinement,MAC-LME):负责管理 MAC 子层的故障,防止故障扩散到整个网络。
总线故障管理(Bus failure management,PLS-LME):负责管理物理层的故障,确保物理层的稳定运行。
三、CAN数据类型
CAN 总线协议的数据类型可以根据其帧格式和传输速率进行分类,可以将 CAN 数据类型分为四种主要类型:
Classical Base Frame Format (CBFF)
这是传统的 CAN 数据帧格式,使用标准帧格式(11 位标识符)。
最高支持 1Mbit/s 的传输速率。
数据段最多包含 8 个字节的数据。
适用于不需要高速传输和大数据量传输的应用。
Classical Extended Frame Format (CEFF)
这是传统的 CAN 扩展帧格式,使用扩展帧格式(29 位标识符)。
同样最高支持 1Mbit/s 的传输速率。
数据段最多包含 8 个字节的数据。
提供更大的地址空间,适用于需要更多标识符的应用。
FD Base Frame Format (FBFF)
这是 CAN FD(CAN with Flexible Data-rate)的基础帧格式,使用标准帧格式(11 位标识符)。
支持高达 5Mbit/s(在短距离内)或更高的传输速率。
数据段最多可以包含 64 个字节的数据。
适用于需要高速传输和大数据量传输的应用。
FD Extended Frame Format (FEDF)
这是 CAN FD 的扩展帧格式,使用扩展帧格式(29 位标识符)。
同样支持高达 5Mbit/s(在短距离内)或更高的传输速率。
数据段最多可以包含 64 个字节的数据。
提供更大的地址空间,适用于需要高速传输、大数据量传输以及更多标识符的应用。
CAN FD(CAN with Flexible Data-rate)是 CAN 协议的一个扩展,它允许在不同的网络段使用不同的比特率,从而在高速传输时提高数据吞吐量,同时在低速传输时降低电磁干扰。CAN FD 帧格式与传统 CAN 帧格式的主要区别在于数据段的长度和支持的传输速率。
四、CAN帧类型
1.帧类型
图 4-1 CAN 帧类型
如图 4-1,CAN 的帧类型主要分为数据帧、遥控帧、错误帧、过载帧、间隔帧。
CAN帧类型
数据帧:用于 CAN 节点之间进行数据传输的帧。数据帧可以是标准格式(11 位 ID)或扩展格式(29 位 ID),并且包含数据段,可发送 0 到 8 个字节的数据。数据帧由 7 个段构成,包括帧起始、仲裁段、控制段、数据段、CRC 段、ACK 段和帧结束。
遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧。遥控帧没有数据段,主要用于请求其他节点发送特定 ID 数据。
错误帧:当节点检测出错误时,用于向其他单元通知错误的帧。错误帧用于错误检测和通知,确保数据传输的可靠性。
过载帧:用于接收单元通知其尚未做好接收准备的帧。过载帧用于通知总线延迟处理下一帧,以避免数据丢失。
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧,确保帧之间有足够的时间间隔,避免数据冲突。
2.数据帧
数据帧包括标准帧(11 位标识符)和扩展帧(29 位标识符),如下图 4-2、图 4-3 分别体现标准帧和扩展帧的帧结构:
图 4-2 标准帧结构
图 4-3 扩展帧结构
图 4-4 远程帧与扩展帧
如图 4-4:
帧起始(SOF):标识一个数据帧的开始,用与同步,为一个显性位(0),只有在总线空闲期间节点才能够发送 SOF;
仲裁场(ID、RTR、IDE 和 SRR):
ID:标识符,唯一确定一条报文,表明报文的含义和优先级(标准帧为 11 位,扩展帧为 29 位)。
RTR:远程传送请求位(数据帧,RTR=0; 远程帧,RTR=1)。
IDE:标准符扩展位(标准帧为 11 位 ID,扩展帧为 29 位 ID)。
SRR:远程代替请求位(SRR=1)。
控制场(r0、r1 和 DLC):
r0、r1:保留位,置 0。
DLC(数据长度码):表示数据场的字节数(有效的 DLC 位 0-8;DLC9-15 无效)。
数据场:字节长度为 0-8 个字节长度,包含 CAN 数据帧发送的内容。
CRC:用与进行 CRC 校验。
图 4-5 CRC 校验
CRC 界定符:界定 CRC 序列,固定格式,为 1 个隐形位。CRC 界定符之前进行位填充。
图 4-6 位填充
ACK(应答):确定报文被至少一个节点正确接收。
图 4-7 ACK 应答
ACK 应答场:发送节点在 ACK 发送隐性位,正确接收到报文的节点 ACK 发送显性,未正确接收到报文的节点 ACK 发送隐性。发送节点检测应答位是否被显性覆盖,如果没有则 ACK 报错。
帧结束(EOF):7 个连续的隐性位,表示数据帧结束。节点在检测到 11 个连续的隐性位后认为总线空闲。
图 4-8 总线空闲
位填充区域:SOF 之前的总线空闲区域,不需要同步,无需进行位填充;CRC 之后的位域都是固定格式,不允许填充操作。
图 4-9 位填充区域
3.远程帧
远程帧:远程帧的应用场景主要包括请求某个指定节点发送数据,而且避免总线冲突。如果需要 CAN 上某个节点向你发送数据,你可以用这个节点的 ID,发送一个 Remote frame(远程帧),这样节点接收到这个 Remote frame 之后会自动发送数据给你。发送的数据就是数据帧。在汽车应用程序中,远程帧几乎不使用,因为 CAN 数据传输主要基于信息生产者的主动发送,并不基于其他节点的请求。然而,在某些情况下,如果某一时刻,节点 A 急需车速信息,而节点 B 可能还需要过一定时间才能发送信息,节点 A 可以通过发送远程帧请求节点 B 发送车速信息。 |
图 4-10 对应标准数据帧的远程帧
图 4-11 对应扩展数据帧的远程帧
4.帧间空间
图 4-12 主动错误节点使用的帧间空间格式
图 4-13 被动错误节点使用的帧间空间格式
5.错误帧
图 4-14 主动错误节点使用的错误帧格式
图 4-15 被动错误节点使用的错误帧格式
五、CAN位时序构成和同步
位时序构成
Sync_Seg(同步段):期望在这个时间段内检测到边缘。
Prop_Seg(传播时间段):在这个时间段内应该做补偿物理延迟时间。
Phase_Seg1(相位缓冲段 1):用于补偿边缘相位误差。
Phase_Seg2(相位缓冲段 2):用于补偿边缘相位误差。
Sample point(采样点):采样点的位置应该是 Phase_Seg1 的末尾。
-
采样点位于相位缓冲段 1 和相位缓冲段 2 之间。
-
通常设置在位时间的 75%-90% 处。
图 5-1 位时序构成
同步
硬同步:硬同步只发生在 SOF 位,所有接收节点调整各自当前位的同步段,调整宽度不限。
图 5-2 硬同步
发送节点 NodeA 在发送 SOF 位时,SOF 位的下降沿在 SS 段,这时接收节点 NodeB 发现自己当前位的 SS 段和发送节点 SOF 位的 SS 段不同步,故 NodeB 强行将自己当前的 SS 段拉到与 SOF 位的 SS 段同步。
再同步:重新同步,硬同步只能保证 SOF 位的同步,无法保证后续位的同步,故这就需要重新同步。重新同步发生在 PBS1 或 PBS2 中,分为两种情况。
PBS1 延长:发送节点 NodeA 比接收节点 NodeB 的时间慢,显然接收节点要进行不同,故要将 PBS1 延长 N 个 Tq 的时间,此时,发送节点 NodeA 和接收节点 NodeB 的采样点就同步了。
图 5-3 再同步
PBS2 缩短:发送节点 NodeA 要比接收节点 NodeB 的时间快,故 NodeB 的采样点就要滞后,但是因为有 PBS2 的存在,采样点不会相差太大,当前本次位的采样点没法完全同步,但是为了下一位完全同步,接收节点 NodeB 会缩短 PBS2。