您的位置:首页 > 房产 > 家装 > Linux内核编程(十六)CAN总线驱动

Linux内核编程(十六)CAN总线驱动

2024/10/6 0:35:48 来源:https://blog.csdn.net/qq_48361010/article/details/142299124  浏览:    关键词:Linux内核编程(十六)CAN总线驱动

本文目录

  • 一、基础知识点
  • 二、CAN协议
    • 1. 数据帧
    • 2. 遥控帧
    • 3. 错误帧
    • 4. 过载帧
    • 5. 帧间隔

  
在这里插入图片描述

一、基础知识点

  1. 什么是CAN总线?
       CAN (Controller Area Network) 是博世公司于 1986 年开发的一种串行通信协议,主要应用于汽车领域。CAN 协议的诞生是为了减少汽车中线束的数量,使得汽车中的电子控制单元(ECU)能够互相通信。ECU 是汽车中的最小控制模块,通过 CAN 总线,各个 ECU 模块可以在同一个局域网内实现高效的数据传输和通信。CAN 总线就像是汽车电子的“局域网”,让不同模块之间能够无缝协作。

  2. CAN标准
       ISO 11898(高速 CAN):该标准定义了 CAN 的通信速率范围为 125 kbps 到 1 Mbps,主要用于需要高速数据传输的应用场景,如动力总成和汽车的关键控制系统。
       ISO 11519(低速 CAN):该标准定义了 CAN 的通信速率低于 125 kbps,适用于对传输速度要求不高、但对抗干扰和容错能力要求较高的应用场景,如车内的舒适性系统和传感器网络。

  3. CAN收发器
    CAN收发器主要功能是将CAN控制器的TTL信号转换成CAN总线的差分信号。
    在这里插入图片描述

  4. 两台设备使用CAN总线的硬件连接
    (1)CPU自带CAN控制器在这里插入图片描述
    (2)CPU不带CAN控制器
    在这里插入图片描述
       can 总线俩端 120欧姆为终端电阻,是为了消除总线上的信号反射。上图中当然可以一台设备的cpu带CAN控制器,一台设备不带CAN控制器也可以相互通信。

  5. CAN的电气属性
    在这里插入图片描述
       使用差分信号,当 CANH(CAN 高线)和 CANL(CAN 低线)之间的电压相等(CANH = CANL = 2.5V),总线上处于隐形状态,这代表逻辑“1”。当 CANH 和 CANL 之间的电压相差 2V(CANH = 3.5V,CANL = 1.5V),总线进入显性状态,代表逻辑“0”。
       由于 CAN 使用差分信号传输,这种设计能够很好地抵抗电磁干扰。物理层通常采用双绞线作为传输介质,进一步增强了抗干扰能力,确保数据传输的稳定性和可靠性。

二、CAN协议

CAN 通信通过以下 5 种类型的帧进行:

类型作用
数据帧用于发送实际数据,包含要传输的消息内容。
遥控帧用于请求数据帧,没有实际数据,只是请求其他节点发送某个数据帧。
错误帧用于检测和报告传输过程中的错误,确保总线的通信完整性。
过载帧用于向总线发出过载信号,以延迟数据传输。
帧间隔用于区分相邻帧,提供帧之间的间隔。

   另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11个位的标识符(称 ID),扩展格式有 29个位的ID。

1. 数据帧

(1)概念:CAN 通信主要通过数据帧来发送数据,数据帧负责携带数据,从发送设备传输到接收设备。
(2)类型:标准数据帧(常用):使用 11 位的标识符。扩展数据帧:使用 29 位的标识符。
在这里插入图片描述

(3)标准数据帧格式: 标准数据帧格式包含 7 个不同的位场。
在这里插入图片描述

位场作用
帧起始标识数据帧的开始。
仲裁字段用于决定总线的优先级,包含 11 位标识符和远程请求位。
控制字段用于表示数据长度(数据长度代码,DLC),决定数据字段的字节数。
数据字段实际传输的数据内容,长度为 0-8 字节。
CRC 字段用于传输过程中的错误检测,包含 CRC 校验值和 CRC 定界符。
ACK应答字段接收节点发送确认信号,表示成功接收到数据。
帧结束标识数据帧的结束,帧终止。

(4)帧格式分析
在这里插入图片描述
帧起始和帧结束
   帧起始:由1个显性位(逻辑“0”)组成,表示数据帧的开始。
   帧结束:由7个连续的隐性位(逻辑“1”)组成,表示数据帧的结束。

仲裁字段: 仲裁字段包括 11 位 ID 位,1位 RTR 位,共 12 位。
   ID 位:仲裁字段包括 11 位的标识符(ID 位),用于区分不同功能的数据帧,也用于确定优先级。根据 CAN 总线的仲裁机制,ID 值越小,优先级越高。当多个节点同时发送时,ID 小的数据帧会优先传输。禁止设置高7位为隐性(禁止设定 ID = 1111111xxXX),因为这种情况下仲裁会受到影响。
   RTR 位:远程传输请求(Remote Transmission Request,RTR)标志位,用于区分数据帧和遥控帧。数据帧的 RTR 位必须为显性 0(逻辑“0”)。遥控帧的 RTR 位必须为隐性 1(逻辑“1”)
   在仲裁规则中,若数据帧和遥控帧具有相同的 ID,则数据帧的优先级大于遥控帧。

控制字段:包含1 位 IDE 位、1 位 R0 保留位、4 位 DLC 位。
   IDE 位:用于区分数据帧类型。标准数据帧的 IDE 位固定为显性 0(逻辑“0”),扩展数据帧的 IDE 位为隐性 1(逻辑“1”)。
   R0 位:保留位,固定为显性 0(逻辑“0”),目前没有特定用途。
   DLC 位:4 位数据长度代码(DLC),用于表示数据字段中包含的数据字节数,范围为 0 到 8 字节。

数据字段:数据字段可以承载 0 到 64 位的数据,也就是 0 到 8 字节的数据。这是实际传输的数据内容。

CRC 校验字段:由 15 位 CRC 校验位和 1 位 CRC 界定符组成。
  前 15 位用于 CRC 校验,确保传输过程中的数据完整性。
  CRC 界定符:必须为隐性 1(逻辑“1”),用来分隔 CRC 校验位和后续字段。

ACK 字段:ACK 字段由 2 位组成:1 位确认槽位和 1 位确认界定符。
 &emsp确认槽位:接收方在此位置发送显性位(逻辑“0”)来表示成功接收数据。
 &emsp确认界定符:必须为隐性 1(逻辑“1”),用于确认信号的分隔。

2. 遥控帧

  遥控帧与数据帧的主要区别在于没有数据字段,因此遥控帧可以看作是去掉数据字段的数据帧。有些资料中也称遥控帧为远程帧。和数据帧一样,遥控帧也分为两种格式:标准格式和扩展格式。两种格式的遥控帧都包含以下 6 个部分:帧起始、仲裁字段、控制字段、CRC字段、应答字段、帧结尾。

●遥控帧用于接收设备主动请求数据。具体流程如下:
(1)发送方的正常广播:发送设备通过 CAN 总线广播数据帧,其他设备通过 ID 来识别并接收自己需要的数据。
(2)接收方的请求:如果接收设备需要的数据还没有被发送方广播,它可以通过发送一个遥控帧来请求该数据。遥控帧与数据帧类似,但没有携带实际数据,而是用相同的 ID 表示请求的内容。
(3)发送方响应:当其他设备(通常是拥有该数据的发送设备)接收到这个遥控帧后,它会识别出这是一个数据请求,并根据 ID 确定需要发送的数据内容。
(4)广播数据:发送设备在响应遥控帧后,会通过 CAN 总线广播该请求的数据帧,所有接收设备(包括发送遥控帧的接收方)都可以接收并使用这条数据。
  因此,遥控帧的作用是让接收设备在需要特定数据时,主动发出请求,触发发送设备广播该数据,确保接收方能够得到所需的数据。

在这里插入图片描述

3. 错误帧

  错误帧是在 CAN 总线通信中用于检测和报告错误的特殊帧。当某个节点检测到数据传输过程中发生错误时,会立即发送错误帧,通知其他节点停止当前数据传输,并重发数据帧。通过错误帧,CAN 总线确保了通信的可靠性,并且在发生错误时可以进行快速恢复和数据重发。

●错误帧由两个部分组成:错误标志(主动、被动)、错误定界符。
主动错误标志:由 6 个连续的显性位(逻辑“0”)组成,用于主动报告错误。主动错误标志由检测到错误的节点发送。
被动错误标志:由 6 个隐性位(逻辑“1”)组成,用于被动报告错误,表示该节点已经进入了“被动错误状态”。
错误定界符:由 8 个隐性位(逻辑“1”)组成,用于标识错误帧的结束。

4. 过载帧

  当接收节点准备好接收下一帧数据的时间不足时,它会发送过载帧(Overload Frame)来通知发送节点延迟下一次数据发送。这种机制确保了在接收节点负载较重时,数据传输能够得到有效管理,避免了数据丢失或通信冲突。

●过载帧格式:过载标志、过载界定符。
  过载标志:由 6 个连续的显性位(逻辑“0”)组成,与主动错误标志的构成相同。该标志用来指示接收节点需要额外的时间来处理接收到的数据,或准备接收下一帧数据。
  过载界定符:由 8 个隐性位(逻辑“1”)组成,与错误界定符的构成相同。该界定符标识过载帧的结束。

●过载帧的工作机制:
(1)当接收节点需要更多时间来准备接收下一帧数据时,它会立即发送一个过载帧。
(2)如果接收节点仍然无法准备好接收更多数据,它可以发送最多两条连续的过载帧来进一步延迟数据发送。
(3)发送节点在接收到过载帧后,会暂停当前的数据传输,并在接收到过载帧后的时间后重新尝试发送数据。

5. 帧间隔

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com