CAN总线 - 扫盲

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总线 - 扫盲_第1张图片

can的优点

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

can总线拓扑

  CAN总线拓扑图如下:
CAN总线 - 扫盲_第2张图片

can控制器

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

can收发器

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

物理层特性

  CAN收发器根据CANH和CANL的差值来判断总线电平,总线电平有两种:显性电平和隐性电平。
  CAN2.0规定的总线Value如下:
CAN总线 - 扫盲_第3张图片
  显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平(0&1)。而隐形电平则具有包容性,只有所有的单元都输出隐性电平,总线上才为隐性电平(0&0)。

终端电阻

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

can的特点

多主控制

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

消息发送

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

通信速度

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

远程数据请求

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

错误

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

故障封闭

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

连接节点多

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

速度快,距离远

CAN总线 - 扫盲_第4张图片

can总线错误

主动错误状态

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

被动错误状态

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

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

总线关闭状态

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

状态转换

  上述状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关系如下:
CAN总线 - 扫盲_第5张图片
CAN总线 - 扫盲_第6张图片

错误计数

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

can协议

模型

  CAN协议包含OSI基本参照模型中的传输层、数据链路层及物理层:
CAN总线 - 扫盲_第8张图片

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

标准规格

ISO标准

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

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

面向汽车的协议分类

CAN总线 - 扫盲_第9张图片

can帧协议

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

帧(can2.0)

  CAN通过以下四种类型的帧进行通信:
CAN总线 - 扫盲_第10张图片

数据帧

  数据帧有标准帧和扩展帧两种格式,标准帧有11位ID,扩展帧有29位的ID。
  标准数据帧的数据长度为51 + (0~64) = (51~117)位。
CAN总线 - 扫盲_第11张图片

  • 帧起始: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个隐性位组成。

远程帧

CAN总线 - 扫盲_第12张图片

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

错误帧

CAN总线 - 扫盲_第13张图片
  接收和发送消息时检测出错误通知错误的帧,由错误标志和错误界定符组成:

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

过载帧

CAN总线 - 扫盲_第14张图片
  接收单元通知其尚未完成接收准备的帧,由过载标志和过载界定符组成:

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

帧间隔

CAN总线 - 扫盲_第15张图片
  分隔数据帧和遥控帧的帧。数据帧和遥控帧通过插入帧间隔与前面任意帧(数据帧/遥控帧/错误帧/过载帧)分开。过载帧和错误帧前不能插入帧间隔。

  • 间隔: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种错误检测:
CAN总线 - 扫盲_第16张图片

  • 位错误
    • 位错误由向总线输出数据帧/远程帧/错误帧/过载帧的单元,和输出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)