can总线

  • can是什么
    • can的作用
    • can的优点
    • can总线拓扑
      • can控制器
      • can收发器
      • 物理层特性
      • 终端电阻
    • can的特点
      • 多主控制
      • 消息发送
      • 通信速度
      • 远程数据请求
      • 错误
      • 故障封闭
      • 连接节点多
      • 速度快,距离远
    • can总线错误
      • 主动错误状态
      • 被动错误状态
      • 总线关闭状态
      • 状态转换
      • 错误计数
  • can协议
    • 模型
    • 标准规格
      • ISO标准
      • 面向汽车的协议分类
  • can帧协议
    • 帧(can2.0)
      • 数据帧
      • 远程帧
      • 错误帧
      • 过载帧
      • 帧间隔
    • 帧(can fd)
    • 仲裁
    • 位填充
    • 错误
      • 错误的种类
      • 错误帧输出
    • 位时序
      • 硬件同步
      • 再同步
      • 调整同步的规则

can是什么

  CAN是Controller Area Network的简称,是一种有效支持分布式控制或实时控制的串行通信网络,最早是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,1986年,BOSCH开发出面向汽车的CAN通信协议,后来,CAN总线通过ISO 11898和ISO 11595进行了标准化,现在在欧洲是汽车网络的标准协议。

can的作用

  CAN总线的作用就是把不同的部件连接起来,然后这些部件都执行同一套标准协议,这样的好处是兼容性高,信息可靠共享,并且能减少整车的线束数量。如下是车载网络示意图:

can的优点

  • 低成本:ECU通过单个CAN系统进行通信,这样减少错误,重量,接线和成本
  • 完全集中:CAN总线提供了一个接入点,可以与所有网络ECU进行通信,信息可靠共享
  • 稳定:CAN总线具有强大的抗电干扰和抗电磁干扰能力,非常适合对安全要求严格的应用
  • 高效:通过ID对CAN帧进行优先级排序,优先级最高的数据可以立即访问总线,而不会引起其他帧的中断

can总线拓扑

  CAN总线拓扑图如下:

can控制器

  • 接收收发器的数据,进行解析后发送给CPU
  • 接收CPU的指令数据,然后发送给CAN收发器

can收发器

  • 接收CAN总线上的差分数据,将数据转换为TTL电平,发送给控制器
  • 将CAN控制器的TTL电平信号转换为差分信号,发送到总线传输

物理层特性

  CAN收发器根据CANH和CANL的差值来判断总线电平,总线电平有两种:显性电平和隐性电平。
  CAN2.0规定的总线Value如下:

  显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平(0&1)。而隐形电平则具有包容性,只有所有的单元都输出隐性电平,总线上才为隐性电平(0&0)。

终端电阻

  高频(高速)信号传输时,信号波长相对传输线较短,信号在传输线终端会形成反射波,干扰原信号,所以需要在传输线末端加终端电阻,使信号到达传输线末端后不反射。低频(低速)信号则不用。
  CAN总线两端的终端电阻应该与通讯电缆的阻抗相同,典型值为120Ω(不总是120Ω),其作用是匹配总线阻抗,提高数据通信的抗干扰性及可靠行。

can的特点

多主控制

  • 总线空闲时,所有的单元都可开始发送消息(多主控制)
  • 最先访问总线的单元可获得发送权(CSMA/CA 方式)
  • 多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权

消息发送

  在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据ID决定优先级。ID并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
  因为没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

通信速度

  同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。
  不同网络间则可以有不同的通信速度。

远程数据请求

  发送“远程帧”,请求其他单元发送数据。

错误

  • 错误检测功能:所有的单元都可以检测错误
  • 错误通知功能:检测出错误的单元会立即同时通知其他所有单元
  • 错误恢复功能:正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止

故障封闭

  CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等),还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离(bus-off)出去。

连接节点多

  CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。
  但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

速度快,距离远

can总线错误

主动错误状态

  主动错误状态是可以正常参加总线通信的状态。处于该状态的单元,检测出错误时,输出主动错误标志。

被动错误状态

  被动错误状态是易引起错误的状态。处于该状态的单元,检测出错误时,输出被动错误标志,但是:

  1. 虽能参加总线通信,为不妨碍其它单元通信,接收时不能积极地发送错误通知
  2. 即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的
  3. 发送结束后不能马上再次开始发送,在下次发送前,在间隔帧期间内必须插入“延迟传送”(连续8个隐性位)

总线关闭状态

  总线关闭状态是该单元不能参加总线上通信的状态。处于该状态的单元,信息的接收和发送均被禁止。

状态转换

  上述状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关系如下:

错误计数

  错误计数值根据一定的条件发生变化,一帧数据的接收/发送可能同时满足多个条件。错误计数器在错误标志的第一个位出现的时间点上开始计数:

can协议

模型

  CAN协议包含OSI基本参照模型中的传输层、数据链路层及物理层:

  • LLC:主要进行接收信息滤波、过载通知、错误恢复
  • MAC:主要进行数据封装/拆封、帧编码、媒体访问管理、错误检测/通知、应答,在can控制器硬件中执行
  • PLS:主要进行位编码/解码、位定时、同步(根据同步段SS实现)
  • PMA:为can收发器的电气特性

标准规格

ISO标准

  CAN协议经ISO标准化后有ISO11898和ISO11519两种,两者对于数据链路层的定义相同,但物理层不同::

  • ISO11898是CAN高速通信标准。目前,ISO11898追加新规约后,成为ISO11898-1新标准
  • ISO11519是CAN低速通信标准。目前,ISO11519-2是ISO11519-1追加新规约后的版本

面向汽车的协议分类

can帧协议

  注:本章节所有图示,D表示显性电平,R表示隐形电平。

帧(can2.0)

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

数据帧

  数据帧有标准帧和扩展帧两种格式,标准帧有11位ID,扩展帧有29位的ID。
  标准数据帧的数据长度为51 + (0~64) = (51~117)位。

  • 帧起始:1个显性位,表示帧开始的段
  • 仲裁段:表示数据的优先级的段,禁止高7位均为隐形
    RTR用于标识是否是远程帧(0-数据帧/1-远程帧)。
    标准帧和扩展帧的仲裁段不同:(扩展帧)IDE为标识符选择位(0-使用标准标识符/1-使用扩展标识符),SRR为代替远程请求位(隐性),它代替了标准帧中的RTR
  • 控制段:6位组成,提供数据段的字节数
    r0和r1(扩展帧是r1,标准帧是IDE)是保留位,必须以显性电平发送,但是接收单元可以接收任意电平。DLC是数据长度码。
  • 数据段:包含0~8个字节的数据,从MSB开始输出
  • CRC段:检查帧传输错误的帧,由15位CRC顺序和1位CRC界定符(用于分隔)组成
    CRC的计算范围包括帧起始、仲裁段、控制段、数据段,接收单元计算CRC值比较不一致时会通报错误。
  • ACK段:确认帧是否正常接收,由1位ACK槽和1位ACK界定符组成
    发送单元在ACK段发送2个隐性位。接收单元正确接收到有效帧时,在ACK槽向发送单元发送1个显性位,处于总线关闭状态或者正在休眠的接收单元不会返回ACK。
  • 帧结束:表示该该帧的结束的段,由7个隐性位组成。

远程帧

  • 远程帧有标准帧和扩展帧两种格式
  • 远程帧没有数据段,但其与没有数据段的数据帧不同
  • 远程帧和数据帧通过仲裁段的RTR区分,远程帧的DLC可以是任意值(这一点不确定)
  • 没有数据段的数据帧可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况

错误帧


  接收和发送消息时检测出错误通知错误的帧,由错误标志和错误界定符组成:

  • 主动错误标志:6个显性位
  • 被动错误标志:6个隐性位
  • 错误界定符:8个隐性位

过载帧


  接收单元通知其尚未完成接收准备的帧,由过载标志和过载界定符组成:

  • 过载标志:6个显性位
  • 过载界定符:8个隐性位

帧间隔


  分隔数据帧和遥控帧的帧。数据帧和遥控帧通过插入帧间隔与前面任意帧(数据帧/遥控帧/错误帧/过载帧)分开。过载帧和错误帧前不能插入帧间隔。

  • 间隔:3个隐性位
  • 总线空闲:隐性电平,无长度限制(0 亦可),此时视为总线空闲,要发送的单元可以开始访问总线
  • 延迟传送(发送暂时停止):8个隐性位,只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含

帧(can fd)

TODO

仲裁

  1. 在总线空闲时,最先开始发送消息的单元获得发送权
  2. 多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁,连续输出显性电平最多的单元可继续发送,仲裁失败的单元下一位开始转为接收单元
  3. 具有相同ID的数据帧和远程帧,数据帧具有优先权,因为数据帧仲裁段最后一位RTR为显性
  4. 标准帧和扩展帧,标准帧具有优先权,因为数据帧仲裁段的IDE为显性

位填充

  为确保数据帧不会被当作错误帧(连续6个显性或隐性位)和正确识别帧结束标志(连续7个隐性位),同时CAN网络同步需要足够多的上升沿,在数据帧/远程帧的帧起始、仲裁段、控制段、数据段和CRC顺序段(不包括CRC界定符),如果相同的电平持续5位,添加1位电平相反的补码:

  • 发送单元在发送数据帧/远程帧时, SOF~CRC段间的数据,相同电平如果持续5位,需要在下一位插入1位与前5位相反的电平
  • 接收单元在接收数据帧/远程帧时, SOF~CRC 段间的数据,相同电平如果持续5位,如果下一位的电平与前 5 位相同,将被视为错误并发送错误帧,如果相反,需要删除这一位再接收

错误

错误的种类

  CAN协议规定了5种错误检测:

  • 位错误

    • 位错误由向总线输出数据帧/远程帧/错误帧/过载帧的单元,和输出ACK/错误的单元来检测
    • 在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失败,而不是位错误
    • 在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误
    • 发送单元在ACK段输出隐性电平,但检测到显性电平时,将被判断为其它单元的ACK应答,而非位错误
    • 输出被动错误标志(6个隐性位),但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同电平的6个位,并不视为位错误
  • 格式错误
    • 接收单元检测出EOF(7个隐性位)的最后一位(第8个位)为显性电平,也不视为格式错误
    • 接收单元检测出数据长度码(DLC)中 9∼15 的值时,也不视为格式错误

错误帧输出

  • 检测出满足错误条件的单元,输出错误帧通报错误
  • 主动错误状态的单元输出的错误帧为主动错误标志;被动错误状态的单元输出的错误帧为被动错误标志
  • 发送单元发送完错误帧后,将再次发送数据帧或远程帧
  • 除CRC错误在ACK界定符的下一位开始输出错误帧,其余错误均在检测出错误的下一位开始输出错误帧

位时序

  CAN标准把总线上的每一位都细分为同步段(SS)、传播段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个Time Quantum(Tq)组成,称为位时序。每个段有几个Tq是可以编程的,过设定位时序(can波特率),多个单元可同时采样,也可任意设定采样点。
  CAN协议的通信方法为NRZ(Non-Return to Zero)方式,各个位的开头和结尾都没有附加同步信号。发送单元以位时序同步的方式开始发送数据,接收单元根据总线上电平的变化进行同步并接收数据。但是,发送单元和接收单元存在的时钟频率误差和传输路径(电缆、驱动器等)的相位延迟,都可能会引起同步偏差。因此接收单元通过硬件同步或再同步的方法调整时序进行接收。

硬件同步

  接收单元在总线空闲状态检测出帧起始时进行同步调整。在检测出边沿的地方不考虑同步跳转(SJW)的值而认为是SS段。

再同步

  接收单元在接收过程中检测出总线上的电平变化时进行同步调整。每当检测出边沿时,根据SJW的值加长PBS1段,或缩短PBS2段,以调整同步。但如果发生了超出SJW值的误差时,最大调整量不能超过SJW的值

调整同步的规则

  1. 1个位中只进行一次同步调整
  2. 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步
  3. 在总线空闲且存在隐性电平到显性电平的边沿时,一定要进行硬件同步
  4. 在总线非空闲时检测到的隐性电平到显性电平的边沿,如果满足条件1和条件2,将进行再同步。但是:
    • 发送单元检测到自身输出的显性电平有延迟时,不进行再同步
    • 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步

参考:

  1. 华清远见西安中心.嵌入式CAN总线入门篇(底层细节).https://www.bilibili.com/read/cv8775991/
  2. 吮指原味张.面对初学者的CAN总线入门教程(一)_CAN总线宏观介绍.https://blog.csdn.net/mahoon411/article/details/109739994?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162985842216780261930944%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=162985842216780261930944&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-1-109739994.pc_v2_rank_blog_default&utm_term=can&spm=1018.2226.3001.4450
  3. 吮指原味张.面对初学者的CAN总线入门教程(二)_CAN协议基本概念及其规格标准.https://blog.csdn.net/mahoon411/article/details/109752223?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163843578416780265467612%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163843578416780265467612&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-2-109752223.pc_v2_rank_blog_default&utm_term=can&spm=1018.2226.3001.4450
  4. 吮指原味张.面对初学者的CAN总线入门教程(三)_CAN通信中帧、优先级、位填充、错误、位时序以及同步的介绍.https://blog.csdn.net/mahoon411/article/details/109779325?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163843578416780265467612%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163843578416780265467612&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-3-109779325.pc_v2_rank_blog_default&utm_term=can&spm=1018.2226.3001.4450

CAN总线 - 扫盲相关推荐

  1. PCIe扫盲——PCIe总线怎样做到在软件上兼容PCI总线

    转自:http://blog.chinaaet.com/justlxy/p/5100053245 前面的文章中多次说道,PCIe总线在软件上是向前兼容PCI总线的.因此,PCIe总线完整的继承了PCI ...

  2. 以太网扫盲(一)各种网络总线 mii总线,mdio总线介绍

    本文主要介绍以太网的MAC(Media Access Control,即媒体访问控制子层协议)和PHY(物理层)之间的MII(Media Independent Interface ,媒体独立接口), ...

  3. PCIe扫盲——PCI总线基本概念

    转载地址:http://blog.chinaaet.com/justlxy/p/5100053077 PCI是Peripheral Component Interconnect(外设部件互连标准)的缩 ...

  4. PCIe扫盲——PCI总线的中断和错误处理

    转自:http://blog.chinaaet.com/justlxy/p/5100053096 PCI总线使用INTA#.INTB#.INTC#和INTD#信号向处理器发出中断请求.这些中断请求信号 ...

  5. 4.PCIe扫盲——PCI总线中的Reflected-Wave Signaling

    PCI Spec规定了每个PCI总线上最多可以连接多达32个PCI设备,但是实际上却远远达不到32个,33MHz的32位PCI总线一般只能连接10到12个负载. 注:如果使用插槽连接,则一个连接算两个 ...

  6. PCIe扫盲——PCI总线中的Reflected-Wave Signaling

    转自:http://blog.chinaaet.com/justlxy/p/5100053079 PCI Spec规定了每个PCI总线上最多可以连接多达32个PCI设备,但是实际上却远远达不到32个, ...

  7. PCIe扫盲——PCIe总线基本概念

    转载地址:http://blog.chinaaet.com/justlxy/p/5100053225 PCIe总线的提出可以算是代表着传统并行总线向高速串行总线发展的时代的到来.实际上,不仅是PCI总 ...

  8. ---Pcie基本概念普及(扫盲篇--巨适合新手)

    转发:添加链接描述 PCIE由早期得PCI扩展衍生而来并且对兼容PCI,两者得主要区别在于并行到串行得切换,且速率更快.目前主板上越来越多得设备都挂载到PCI总线下面,甚至部分硬盘也会挂载PCI总线下 ...

  9. NDIS与WinSock关系之自我扫盲

           起来真是雷人,最近几天纠结与一个最基本的概念,就是NDIS与WinSock关系,想来想去都没有想明白,真实汗Ing,赶紧找了篇精美的文章来扫盲一下. 原文如下: 文章转自http://w ...

最新文章

  1. linux pthread_join 使用记录
  2. WebJars——web端静态资源的jar包
  3. IIS 部署asp.net Core程序注意事项
  4. python嵌套列表法实现树_python – 将嵌套的括号树转换为嵌套列表
  5. 关于tensorflow的碎片
  6. 阿里如何将“高峰前扩容、高峰后缩容”的梦想照进现实?
  7. PHP轻量级在线客服系统源码 自适应手机移动端
  8. java map 数组_java技术Spring集合属性
  9. PHP连数据库生成数据字典
  10. Qt Q_ENUM使用 枚举字符串互转
  11. VMware15.5.1+macos catalina 10.5+unlocker 3.1 解决unlocker下载文件报错问题
  12. c语言标准体重测试指数分男女,测测你的体脂率附男女标准体脂率对照表
  13. mongodb Cursor
  14. 解决file_get_contents乱码
  15. web前端读取串口数据
  16. linux 使用了哪个存储阵列卡,Linux中RAID概述及配置实验
  17. 身体健康才是福报!41岁蚂蚁金服总裁助理毛军华因病去世
  18. 基于图像识别和文字识别用 Python 提取视频字幕
  19. Excel 设置下拉框-显示中文而实际数字
  20. 初级SHELL脚本(如何书写一个CentOS7的更改单网卡IP的shell脚本)

热门文章

  1. 微信小程序电商源码:外卖小程序,电商小程序,门店类小程序,展示类小程序,批发商城小程序、分销小程序。
  2. 单页Web应用 5 构建Model
  3. html 播放ftp上的视频文件,如何让 FTP 支持播放视频文件?
  4. [Spark基础]-- spark submmit大会(2017年6月5日 - 7日)
  5. 吃鱼还是吃肉,国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。 现在你要根据小宝宝的身高体重,给出补充营养
  6. 2020 非常火的 11 个微前端框架
  7. 输入框显示表情图标-vue篇
  8. 移动云计算服务端技术-课程总结1
  9. squid代理服务之透明代理的配置方法
  10. android检测sim卡状态,android 判断网络连接、sim卡信息以及ping操作是否网络连接正常...