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

嵌入式学习笔记 - CAN总线

一 CAN总线物理结构

以闭环网络为例,闭环网络速度快可达1M,传输距离近通常最长不超过40米,开环网络传输距离远通常可达km,速度100kb左右

二 CAN总线使用差分信号传输:

三 差分信号的优点:

四  CAN总线上每一个数据位的结构分解

CAN总线上每一个数据位被分解为4个段,SS段,PTS段,PBS1段,PBS2段

Tq是CAN总线上各节点商量好的一个值,各节点之间是一样的,比如都为1us,

那么如下的示例中,CAN总线上每一个逻辑电平包含19位,也就是包含19个Tq,然后每个节点根据与总线的相位差可以调整每一个逻辑电平的Tq的数量

五 CAN总线同步

CAN总线虽然有两根传输线,但是由于是差分线,实际上等效于只有一根线在传输数据,也就是各节点之间没有时钟信号线,他们按照约定的时钟(相同的Tq)进行信号传输,各自都按照这个时钟在运行着,当总线发出起始信号时,节点便调整自己的相位使自己的相位与总线一致,造成这个相位差的原因可以是多方面的,收发器不同的物理结构等,同步方式有两种硬同步以及重新同步如下图:

硬同步只能用于在帧起始位。

六 CAN 总线怎么处理低优先级数据帧

上图为数据帧的结构,CAN总线通过仲裁段判定数据的优先级,

以下是Deepseek的回答,非常详细与清楚:

     低优先级帧的仲裁失败处理

  1. 逐位仲裁与退出发送

    • 当多个节点同时发送数据时,低优先级帧在ID逐位比较中因发送隐性位(逻辑1)而检测到总线电平为显性位(逻辑0),立即退出发送并转为接收模式27。
    • 例如:ID为0x200(二进制001000000000)的帧与ID为0x100(二进制000100000000)的帧竞争中,前3位001000对比时,0x200在第3位退出发送78。
  2. 自动重传机制

    • 仲裁失败的节点通过硬件自动缓存原始数据,并在检测到总线空闲时立即尝试重传,无需软件干预56。
    • 重传次数受硬件错误计数器限制,若累计错误超阈值则节点进入总线关闭状态8。

     低优先级帧的发送机会保障

  1. 总线空闲检测

    • CAN总线空闲定义为连续11位隐性电平(逻辑1)3,低优先级帧在总线空闲时可直接发起发送5。
    • 若此时其他节点同时发送,则再次触发仲裁流程78。
  2. 动态优先级反转规避

    • 尽管CAN协议本身无主动优先级反转处理机制,但通过以下策略规避:
      • ID分配策略‌:将需要实时响应的关键功能分配更小ID值(如ABS制动0x060优先级高于车窗控制0x3E0)17。
      • 负载均衡‌:限制高优先级帧的发送频率,避免长期占用总线6。

     低优先级帧的延迟优化

  1. 错误帧中断与恢复

    • 低优先级帧在传输中若发生错误(如CRC校验失败),发送节点立即发送错误帧(全显性位)强制终止当前传输,自身进入重同步状态后重新发送48。
    • 错误帧具有最高优先级,可打断正在传输的低优先级帧8。
  2. 时间触发调度(协议扩展)

    • 在时间敏感型网络(如CAN FD TSN)中,通过‌时间槽分配‌为低优先级帧预留固定发送窗口,绕过仲裁机制直接传输1。
    • 例如:新能源车BMS的周期数据帧(ID: 0x18FF50E5)被分配至特定时间槽,不受实时仲裁影响1。

七  STM32 CAN 控制器筛选器工作模式总结

CAN的筛选器可以工作在16位宽或者32位宽模式,

CAN的筛选器可以工作在标识符屏蔽位模式或者标识符列表模式。

最终可以总结为以下表格:

http://www.xdnf.cn/news/7494.html

相关文章:

  • 房贷利率计算前端小程序
  • 图论学习笔记 3
  • 电磁感应在量子计算中如何应用
  • Adv. Sci.|南医大倪春辉团队破局肺纤维化:锁定脂肪酸氧化与糖酵解 “失衡点”,挖掘关键治疗靶点
  • python宠物用品商城系统
  • 深度解析Vue项目Webpack打包分包策略 从基础配置到高级优化,全面掌握性能优化核心技巧
  • 【Java的批量操作】
  • 【leetcode】59. 斐波那契数
  • RK3568 OH5.1 源码编译及问题
  • 海康威视摄像头C#开发指南:从SDK对接到安全增强与高并发优化
  • React+TypeScript多步骤表单:告别表单地狱的现代解决方案
  • 请问交换机和路由器的区别?vlan 和 VPN 是什么?
  • Python + moviepy:根据图片或数据高效生成视频全流程详解
  • 链表的面试题8之环形链表
  • 关闭 Ubuntu 20.04 的 GNOME Shell和PulseAudio
  • Java 03(代码块,内部类,lambda表达式)
  • python八股文汇总(持续更新版)
  • 《医院运营管理典型应用数据资源建设指南2025》全面分析
  • Apache Apisix配置ip-restriction插件以限制IP地址访问
  • CesiumEarth v1.15 更新
  • 在Windows系统中使用C++与Orthanc交互:基于DICOMweb的医学影像应用开发
  • Fiddler抓包教程->HTTP和HTTPS基础知识
  • 八股文--JVM(2)
  • Python 计算机网络TCP网络应用程序开发
  • 解决npm install报错:getaddrinfo ENOTFOUND registry.nlark.com
  • 数据分析_商务运营考核指标体系搭建
  • AI筑基,新质跃升|英码科技亮相华为广东新质生产力创新峰会,发布大模型一体机新品,助力产业智能化转型
  • 鸿蒙PC新物种发布!华为MateBook Pro/ Fold深度解析:折叠屏革命与生态破局
  • 塔式服务器都有哪些重要功能?
  • MATLAB跳动的爱心