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

CAN学习笔记

学习链接:CAN学习笔记(1)_can sjw-CSDN博客

内容全部取自链接,非原创。用于自己学习和记录,如有错误请指正。如果侵权了,请联系我删掉。

CAN主要有两种物理层,1.闭环的ISO11898  2.开环的ISO11519-2

闭环的框图:

备注:

1.可以留意总线网络中有CAN控制器和CAN收发器。通常一些带CAN外设的MCU及代表的是带有CAN控制器。 CAN收发器需要单独的IC。

2.120欧电阻用于总线可以快速的回归隐形状态。提高稳定性。

备注:1.2.2K电阻的作用也是可以让总线快速的回归隐性作用。

           2.MCU中的CAN控制器外设给到CAN收发器的是TTL逻辑电平,经过CAN收发器转换成差分信号。

CAN 的隐形和显性介绍:

隐性是逻辑1

显性是逻辑0

CAN一个位的介绍:

CAN的一个位包含了:SS,PTS.PBS1.PBS2

其中SS 占一个tq,tq是时间片。

波特率:一位数据位的主要由SS 段+PTS 段+PBS1 段+PBS2段,进而根据每秒可以传输的数据位的个数来确定通讯中的波特率。

SJW是什么?

---------------------------------------------------------------------------------------------------------------------------------

重要!!!

CAN的同步问题

CAN 同步分为两个部分:

1.硬同步

2.重新同步

硬同步:

硬同步问题1:总线上出现帧起始信号的下降沿,到节点内部原来的同步位置为什么会产生一个比较大的偏移?

这个地方是一个位发生的事情,总线在出现帧起始信号下降沿SOF的时候,假设就是A节点发的,但是B节点在接收这个显性的时候正好在PTS或者PBS段,B节点发现SOF不在SS段,B节点就会同步SS使SOF在SS段。

补充图理解:

重新同步:

针对下图这种相位有点偏移的,需用到重新同步。

充分理解相位超前和相位滞后

为什么会有相位超前和相位滞后这个也要理解一下//这个上面疑问已经解答了,实际就是总线在出现SOF之后,落在某一节点的SS PTS PBS1 PBS2可能的任意一个位置。

为什么有了硬件同步,还需要重新同步?

当硬同步结束后,在后续的数据传输过程中,必须保证每一个由隐性电平到显性电平的跳变沿也必须落在SS段内。否则,产生重新同步。

疑问1:硬同步不是在每个CAN位都会硬同步的吗?

按照另一个博主的阐述好像确实只会硬同步一次。4 CAN同步机制-CSDN博客

还是有一个问题就是,硬同步是在每一帧的第一个帧吗?

是的。

来自文心一言的回答:

CAN硬同步通常是在每一帧的第一个位,即帧起始位(SOF)进行的。这一同步机制是CAN总线通信中的重要组成部分,用于确保所有节点在接收到新的数据帧时能够重新同步其位时序。

CAN硬同步的详细解释:

  1. 同步目的
    • 由于CAN总线属于异步通讯,没有专门的时钟信号线,因此节点间必须约定好波特率以确保通信顺畅。然而,由于每个节点的晶振可能存在微小差异,长时间通信后会产生累计误差。硬同步的目的就是在每一帧开始时,通过帧起始位的同步,消除或减小这些累计误差。
  2. 同步过程
    • 当总线处于空闲状态时,一旦有节点开始发送数据帧,该帧的起始位(SOF)会触发一次硬同步。此时,所有接收节点都会调整自己的同步段(SS)位置,使其与发送节点的帧起始位SS段对齐。
    • 这种对齐操作通常是通过接收节点检测帧起始位的下降沿,并据此调整自己的时序来实现的。无论接收节点之前的位时序如何,一旦检测到帧起始位,都会立即进行硬同步,重新开始计算位时间。
  3. 同步效果
    • 硬同步确保了所有节点在接收新数据帧时都能从同一起点开始计算位时间,从而消除了前一帧可能产生的累计误差。
    • 然而,由于晶振差异和线路延迟等因素的存在,硬同步并不能保证后续位时序的完全同步。因此,在CAN总线通信中,还需要通过重同步机制来进一步调整位时序。

注意事项:

  • 硬同步只在总线空闲且检测到帧起始位时才进行。
  • 在消息帧的随后位中,如果检测到从1到0的跳变(且该跳变落在同步段之外),则会引起重同步操作。
  • CAN总线通信中的位填充机制也有助于提高同步质量,通过增加从1到0的跳变机会来增多重同步的数量。

综上所述,CAN硬同步确实是在每一帧的第一个帧起始位进行的,它是CAN总线通信中确保节点间同步的重要机制之一。

 补充:

未完待续。

相关文章:

  • flink的窗口
  • 实现Linux C++进程意外退出时信号处理与堆栈打印
  • 视频监控汇聚和融合平台的特点、功能、接入方式、应用场景
  • 1.4 ROS2集成开发环境搭建
  • 容器部署rabbitmq集群迁移
  • 李白的酒量之谜
  • 【Spring Boot】JPA 的查询方式
  • 【Linux】多线程(一万六千字)
  • 关于 AD21导入电子元器件放置“3D体”STEP模型失去3D纹理贴图 的解决方法
  • Elasticsearch集群部署(上)
  • 名企专访|对抗价格内卷,格行随身WiFi如何持续三年爆火引领潮流
  • springboot 自定义的全局捕获异常失效
  • 并发编程面试题2
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • go sync包(五) WaitGroup
  • [译]如何构建服务器端web组件,为何要构建?
  • JavaScript设计模式与开发实践系列之策略模式
  • PermissionScope Swift4 兼容问题
  • Shadow DOM 内部构造及如何构建独立组件
  • 服务器之间,相同帐号,实现免密钥登录
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 线性表及其算法(java实现)
  • 原生Ajax
  • 《天龙八部3D》Unity技术方案揭秘
  • ​2020 年大前端技术趋势解读
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 透过事物看本质的能力怎么培养?
  • (ibm)Java 语言的 XPath API
  • (libusb) usb口自动刷新
  • (pojstep1.3.1)1017(构造法模拟)
  • (六)vue-router+UI组件库
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)http-server应用
  • (转)shell调试方法
  • (转)程序员技术练级攻略
  • (转)创业家杂志:UCWEB天使第一步
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core引入性能分析引导优化
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net FrameWork总结
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net8.0与halcon编程环境构建
  • .netcore如何运行环境安装到Linux服务器
  • .NET关于 跳过SSL中遇到的问题
  • /etc/sudoers (root权限管理)
  • [20170705]diff比较执行结果的内容.txt
  • [C/C++随笔] char与unsigned char区别
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备