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

can总线相关

CAN 总线是一种基于“差分信号”和“多主竞争”的串行通信协议,具备极强的抗干扰能力和完善的错误处理机制,广泛应用于汽车电子、工业控制、医疗设备等对可靠性要求极高的场景。

高速can总线结构

can收发器:

负责把MCU输出的逻辑电平转换成总线上的差分信号,同时把总线上的差分信号转换成MCU能识别的逻辑电平。简单说,MCU内部只是逻辑(0/1),CAN收发器负责把逻辑“翻译”成物理信号(差分电压)。

物理总线:双绞线

为了抗干扰,CANH 和 CANL 这两根物理导线,在出厂时就被紧紧地像麻花一样扭在一起。外部电磁干扰会同时作用在两根线上,双绞能保证两根线受到的干扰“几乎一模一样”,这样接收器做减法时,干扰才能被完美抵消。

“共模干扰抑制”:因为双绞线靠得极近(紧紧扭在一起),所以外部电磁干扰会在两根线上产生完全相同的电压(共模信号)。接收器只提取两根线的差值,干扰就被完美地“相减消除”了

CAN 总线采用双绞线差分传输。根据 ISO 11898 标准,电平定义如下:

  • 显性电平(Dominant):对应逻辑“0”。此时总线驱动器主动施加电流,CANH 与 CANL 之间形成约 2V 的差分电压。

  • 隐性电平(Recessive):对应逻辑“1”。此时总线驱动器被释放(高阻态),CANH 与 CANL 之间无差分电压(0V),依靠终端电阻维持共模电平。

关键物理属性:显性电平在电气上具备主动驱动的能力,能够强制覆盖隐性电平。只要总线上任意节点输出显性“0”,该总线物理状态就必然呈现显性“0”,这种特性被称为“线与(Wired-AND)”机制

普通串口下,两个节点同时发数据,一个发 1,一个发 0,总线上会发生“电气对拉(短路)”现象(一个芯片内部电源正极强行对地短路)。这会导致信号直接失真,严重时会导致发送器的 I/O 口烧毁,或者触发保护机制。

而在can总线下,当两个节点在同一时刻争抢 CAN 总线时,它们会经历一场毫秒级的“非破坏性逐位仲裁”。首先,双方同时发送显性电平的起始帧,随后在各自的 11 位标识符(ID)上开始“掰手腕”:由于 0 是显性、能强制覆盖隐性的 1,且每个节点都具备“边发边听”的硬件机制,发送隐性位(1)的节点若在回读时检测到总线为显性(0),便会立刻判定自己仲裁失败,并在不丢失任何数据的前提下自动退让,转为监听等待;而发送显性位(0)的节点则胜出,毫无中断地继续发送完剩余的数据帧。输掉的节点不会重传或崩溃,它只会在总线再次空闲后自动排队重试。

整个网络在电气上构成了一个从发送端到接收端无反射的完整回路。而两端的120Ω 电阻,就是防止信号跑到终点撞墙反弹的“吸收堵头”,它同时为总线空闲提供了稳定的基准电压,是 CAN 总线能够高速、长距离稳定通信的物理地基

左端接 5V/3.3V,右端接地,两个 120Ω 电阻串联,电流流过它们时,会在中间产生一个稳定的2.5V分压。这就给总线提供了一个“不说话的基准电压”。当某个节点要强行发送“0”(显性)时,它必须把 CANH 拉到 3.5V,把 CANL 拉低到 1.5V,形成 2V 压差。

数据类型

数据帧

  1. 帧起始(SOF):固定的 1 位显性(0)。告诉总线:“我要发数据了!”

  2. 仲裁场(ID):11 位(标准帧)或 29 位(扩展帧)。这是决定优先级的字段。即我们之前讲的“掰手腕”。

  3. 控制场(DLC):4 位。告诉总线:“我后面要发几个字节的数据?”(注意:CAN 数据场最长只有 8 个字节)。

  4. 数据场(Data Field):0~8 个字节(64 位)。这是真正的载荷,您可以把自己定义的数据塞进去。

  5. CRC 校验场:15 位。计算前面的数据,防止传输中受干扰出错。

  6. ACK 场:2 位。接收方如果收到正确的数据,会自动回一个“收到”的信号。

  7. 帧结束(EOF):7 位隐性(1)。宣告这次通信结束。

设备树

内核裁剪

http://www.cnnetsun.cn/news/4227239.html

相关文章:

  • 抖助手第066个开关:隐藏全屏观看的位置、验证方法与入口边界
  • Dify实战-人工输入节点-AI起草人工审批的工作流怎么做
  • 【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_114.[第12章 RAG评估体系] 生成评估:BLEU、ROUGE和BERTScore
  • 第10篇-通道架构与Telegram配置
  • Winform/Sunny.UI的DataGridView数据展示、uiPagination分页
  • 转:怎样招到优秀的核心人才
  • 【中国方言题库|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致
  • Raid卡命名及代表含义
  • C++进阶知识5.0
  • 深圳EMC现场测试辐射传导测试
  • scrapy爬取动态页面的正确姿势
  • 基于springboot2+vue2的租房管理系统
  • 基于SpringBoot的大学生竞赛管理系统
  • 交叉效率 DEA 激进型模型计算准确性验证 —— 基于 DEA Performance 的数值验算
  • Codex 多文件协同修改,小心处理依赖冲突与连锁反应
  • 《易学・贲䷕|道影子新解 022》
  • 食品加工技术课程概述
  • 四子棋智能体构建与在线对抗决策应用
  • 飞船乘客状态预测与金融风控建模启发
  • AI Agent 面试题 340:工具调用的成本计量和预算控制机制
  • 董宇辉的尽头是山姆?——个人IP如何转化为零售品牌
  • MyBatis 的注解式开发
  • 【TDengine】 TDengine 的内存管理模型是怎样的?缓存机制如何工作?
  • 【TDengine】TDengine 使用了哪些压缩算法?压缩率通常能达到多少?
  • 交叉编译零门槛:graphics.gd无需SDK构建Android、iOS与Web版Godot游戏
  • Video2X 完整上手:三步把模糊老视频放大到 4K、30fps 变 60fps
  • ArcGIS零起点实战教程|空间规划师必学GIS技能课(视频+数据包+工具集)
  • BlobRunner x64实现深度剖析:内联汇编为何失效,挂起线程如何救场
  • 记录C++ 11
  • 57-基于深度学习的农作物虫害检测识别系统(yolo26、yolo12、yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)2027毕业版