当前位置: 首页 > news >正文

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. 帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。由三个隐性电平组成。过载帧和错误帧前不能插入帧间隔。
在这里插入图片描述

三、位填充

填充范围:从帧起始到 CRC 字段。
填充规则:在相同极性的5个连续位之后使用位填充。填充位与其前面的位极性相反。
在这里插入图片描述
在这里插入图片描述

四、波形分析

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Anolis OS 8.8 CentOS8离线安装mysql-8.0.9
  • Docker简介在Centos和Ubuntu环境下安装Docker
  • 医疗监测数据检测系统源码分享
  • Chrome和Chromium浏览器有什么不同?
  • 鸿蒙之Hello Word 遇坑总结 mac系统 不能预览 提示 Only files in a module can be previewed 解决办法
  • 第十一周:机器学习笔记
  • arcgisPro地理配准
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线程 工作流程分析
  • SQL Server数据库简单的事务日志备份恢复
  • 系统 IO
  • 数据库管理-第241期 KingBaseES V9 on RHEL8(20240912)
  • Docker镜像文件、容器、卷和网络存放位置
  • AcWing算法基础课-789数的范围-Java题解
  • ASPICE评估全流程解析:汽车软件开发组织能力的系统化评估
  • 文件格式转换:EXCEL和CSV文件格式互相转换
  • 【译】JS基础算法脚本:字符串结尾
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • es6(二):字符串的扩展
  • JavaScript 奇技淫巧
  • jdbc就是这么简单
  • mysql 5.6 原生Online DDL解析
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue-cli3搭建项目
  • 复习Javascript专题(四):js中的深浅拷贝
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于web的全景—— Pannellum小试
  • 什么是Javascript函数节流?
  • 数据科学 第 3 章 11 字符串处理
  • 通过git安装npm私有模块
  • linux 淘宝开源监控工具tsar
  • raise 与 raise ... from 的区别
  • ​卜东波研究员:高观点下的少儿计算思维
  • #java学习笔记(面向对象)----(未完结)
  • #知识分享#笔记#学习方法
  • ( 10 )MySQL中的外键
  • (0)Nginx 功能特性
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C#)一个最简单的链表类
  • (pycharm)安装python库函数Matplotlib步骤
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (笔试题)分解质因式
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十六)Flask之蓝图
  • (四) Graphivz 颜色选择
  • .libPaths()设置包加载目录
  • .NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • ?php echo ?,?php echo Hello world!;?
  • [2019红帽杯]Snake