串行通信协议--CAN(Controller Area Network Bus,控制器局域网总线)

参考视频学习整理:
CAN总线入门教程–江协科技 – 讲的特别好
RENESAS的《CAN入门书》

一、CAN总线简介

CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。可以组成多个不同速率的CAN总线网络,但是每个网络里的数据率是一样的。

CAN总线特征:

  • 两根通信线(CAN_H、CAN_L),线路少,无需共地;差分信号通信,抗干扰能力强(差分信号受干扰时保持压差不变),信号双绞线传输
  • 高速CAN(ISO11898):125k~1Mbps, <40m
    低速CAN(ISO11519):10k~125kbps, <1km
  • 异步,无需时钟线,通信速率由设备各自约定
    半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序
  • 11位/29位报文ID,用于区分消息功能,同时决定优先级
  • 可配置1~8字节的有效载荷
  • 可实现广播式和请求式两种传输方式
  • 应答、CRC校验、位填充、位同步、错误处理等特性

波特率计算,Tq是CAN 1bit 传输分段的最小时间
在这里插入图片描述
在这里插入图片描述
不同协议对比
在这里插入图片描述

1.1 CAN的硬件连接

  每个设备通过CAN收发器挂载在CAN总线网络上,CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连

高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻,总线需添加终端电阻:作用是消除信号回波返射,防止信号跳变时出现振荡,再一个起平衡差分信号电压的作用并且防止电平冲突且可以实现线与。发0时电阻将电平拉低,发1时则不操作总线自然输出1。
在这里插入图片描述
低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻,电阻主要是起防止回波反射作用。
在这里插入图片描述

1.2 CAN的电平标准

  CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位

  • 高速CAN规定:
    电压差为0V时表示逻辑1(隐性电平)
    电压差为2V时表示逻辑0(显性电平)
  • 低速CAN规定:
    电压差为-1.5V时表示逻辑1(隐性电平)
    电压差为3V时表示逻辑0(显性电平)

在这里插入图片描述
CAN收发器 – TJA1050—实现CAN总线的电平转换
在这里插入图片描述

二、CAN总线帧格式

CAN有五种帧类型:数据帧是使用最多的
在这里插入图片描述

2.1 数据帧格式

在这里插入图片描述

  1. 起始帧
    SOF(Start of Frame):帧起始,表示后面一段波形为传输的数据位
  2. 仲裁段
    ID(Identify):标识符,区分功能,同时决定优先级 11位
    RTR(Remote Transmission Request ):远程请求位,区分0为数据帧和1为遥控帧
  3. 控制帧
    IDE(Identifier Extension):扩展标志位,区分标准格式和扩展格式,IDE接收后才区分是不是拓展格式,之前都是完全一样的。
    SRR(Substitute Remote Request):替代RTR,协议升级时留下的无意义位
    r0/r1(Reserve):保留位,为后续协议升级留下空间
    DLC(Data Length Code):数据长度,指示数据段有几个字节
  4. 数据段
    Data:数据段的1~8个字节有效数据
  5. CRC段
    CRC(Cyclic Redundancy Check):循环冗余校验,校验数据是否正确,后还有1bit界定符
  6. ACK段
    ACK(Acknowledgement):应答位,判断数据有没有被接收方接收,这里是接收方操作一下总线。0没有应当,1被应答
    ACK界定符:为应答位前后发送方和接收方释放总线留下时间
  7. 帧结束
    EOF(End of Frame ):帧结束,表示数据位已经传输完毕

2.2 遥控帧格式

遥控帧无数据段,RTR为隐性电平1,其他部分与数据帧相同,主要用于向某个设备请求数据。
在这里插入图片描述

2.3 错误帧–后续错误

  总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备。
在这里插入图片描述

2.3.1 错误共有5种: 位错误、填充错误、CRC错误、格式错误、应答错误

在这里插入图片描述

2.3.2 通过错误计数值来切换错误状态

  默认主动错误标志:主动发 0,在总线上线与破坏总线数据。被动错误发1 只破坏自己发送的数据。 不同的状态切换通过错误计数来实现。
在这里插入图片描述
在这里插入图片描述

2.4 其他帧

  • 过载帧
    当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失。
  • 帧间隔
    将数据帧和遥控帧与前面的帧分离开。

三、CAN总线位填充

  位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据。如出现添加后又5连续的情况还要继续填充,结束段不用填充。
在这里插入图片描述
位填充作用:

  • 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机
  • 将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性
  • 保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲

四、CAN总线位同步

  CAN总线没有时钟线,是一种异步收发的协议。总线上的所有设备通过约定波特率的方式确定每一个数据位的时长,发送方以约定的位时长每隔固定时间输出一个数据位,接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位。理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近。
在这里插入图片描述
异步情况最大的问题就是时钟偏差导致的数据采样错误因此需要进行位同步

4.1 位时序(为了位同步做准备)

  对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成。具体个段怎么分配根据要求走。
在这里插入图片描述

  • 同步段(SS):数据变化边沿出现在段中为正确同步
  • 传播时间段(PTS):吸收网络传输中的各种物理延迟
  • 相位缓冲段(PBS1)和(PBS2):在两段之间变化点进行采样,调节大小可以控制采样时刻

4.2 硬同步(对齐起始)

  硬同步只在帧的第一个下降沿(SOF其实位置下降沿)有效,每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步。
在这里插入图片描述

4.3 再同步(补偿时钟误差-接收方补)

  若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据最大再同步补偿宽度(SJW=1~4Tq)通过加长PBS1段,或缩短PBS2段,以调整同步,再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。改变接收方的1bit计数接收的长度去对齐发送
在这里插入图片描述

五、CAN总线资源分配 --(一个差分线的多个设备怎么用)

4.1 先占先得 – 先请求的先发送

  若当前已经有设备正在操作总线发送数据帧/遥控帧,则其他任何设备不能再同时发送数据帧/遥控帧(可以发送错误帧/过载帧破坏当前数据),任何设备检测到连续11个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧/遥控帧,其他设备先等待。

4.2 非破坏性仲裁 – 同时请求进行仲裁

  若多个设备的发送需求同时到来或因等待而同时到来,则CAN总线协议会根据ID号+RTR(仲裁段)进行非破坏性仲裁,ID号小的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送。

实现非破坏性仲裁需要两个要求:

  • 线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态,即:0 & X & X = 0,1 & 1 & 1 = 1
  • 回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实地发送出去了,根据线与特性,发出0读回必然是0,发出1读回不一定是1(有其他设备发送产生线与就可能读回0)

仲裁实例 – 仅在仲裁段进行操作

  多设备也是这个过程,就是比仲裁段,ID号出现晚的1出现的晚。整个过程最终胜利者都是正确的并没有受到任何破坏或者影响。仲裁是发送在传输过程中的,所以是一位位操作的是可能出现位填充的,但是能判断到填充说明前面都一样都是五位一样所以不会影响仲裁。
在这里插入图片描述
特殊情况: 如果是数据帧和遥控帧ID号一样时,数据帧的优先级高于遥控帧的ID相同,数字帧的RTR为0,优先级高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伊丽莎白鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值