CAN总线

一、CAN简介

CAN总线(Controller Area Network Bus)控制器局域网总线.

CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。

1、CAN总线特征:

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

2、主流通信协议对比

名称

引脚双工时钟电平设备应用场景
UARTTX、RX全双工异步单端点对点两个设备互相通信
I2CSCL、SDA半双工同步单端多设备一个主控外挂多个模块
SPISCK、MOSI、MISO、SS全双工同步单端多设备一个主控外挂多个模块(高速)
CANCAN_H、CAN_L半双工异步差分多设备多个主控互相通信

USR

I2C

SPI

3、CAN硬件电路

  1. 每个设备通过CAN收发器挂载在CAN总线网络上;
  2. CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连;
  3. 高速CAN使用闭环网络,CAN_H和CAN_L两端添加120欧的终端电阻
  4. 低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2k欧的终端电阻

4、CAN电平标准

CAN总线采用差分信号,即两线电平差(Vcan_h-Vcan_l)传输数据位

高速CAN规定:

                电平差为0V时表示逻辑1(隐性电平)

                电平差为2V时表示逻辑0(显性电平)

低速CAN规定:

                电平差为-1.5V时表示逻辑1(隐性电平)

                电平差为3V时表示逻辑0(显性电平)

5、CAN收发器-TJA1050(高速CAN)

6、CAN物理层特性

7、CAN总线帧格式

CAN总线规定了以下5种类型的帧:

帧类型用途
数据帧发送设备主动发送数据(广播帧)
遥控帧接收设备主动请求数据(请求式)
错误帧某个设备检测出错误时向其他设备通知错误
过载帧接收设备通知其尚未做好接收准备
帧间隔用于将数据帧及遥控帧与前面的帧分离开

1、数据帧

  • 数据帧各部分用途简介:
  • SOFStart of Frame):帧起始,表示后面一段波形为传输的数据位
  • IDIdentify):标识符,区分功能,同时决定优先级
  • RTRRemote Transmission Request ):远程请求位,区分数据帧和遥控帧
  • IDEIdentifier Extension):扩展标志位,区分标准格式和扩展格式
  • SRRSubstitute Remote Request):替代RTR,协议升级时留下的无意义位
  • r0/r1Reserve):保留位,为后续协议升级留下空间
  • DLCData Length Code):数据长度,指示数据段有几个字节
  • Data:数据段的1~8个字节有效数据
  • CRCCyclic Redundancy Check):循环冗余校验,校验数据是否正确
  • ACKAcknowledgement):应答位,判断数据有没有被接收方接收
  • CRC/ACK界定符:为应答位前后发送方和接收方释放总线留下时间
  • EOFEnd of Frame ):帧结束,表示数据位已经传输完毕

数据帧的发展历史

  • CAN1.2时期,仅存在标准格式,IDE当时仍保留r1。

  • CAN2.0时期,ID不够用,出现了扩展格式,增加了ID的位数,为了区分标准格式与扩展格式,协议将标准中的r1赋予了新的功能。

2、遥控帧

遥控帧无数据段,其他部分与数据帧相同



3、错误帧

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

4、过载帧

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失

5、帧间隔

将数据帧和远程帧 与前面的帧分离开
3 位的帧间隔配合 7 位的 EOF 8 位的错误 / 过载界定符,可以实现更复杂的优先级控制策略(任何设备检测到连续 11 个隐性电平,即认为总线空闲)

6、位填充

  • 7、波形实例

  • 标准数据帧,报文ID0x555,数据长度1字节,数据内容为0xAA

  • 标准数据帧,报文ID0x666,数据长度2字节,数据内容为0x12, 0x34

  • 扩展数据帧,报文ID0x0789ABCD,数据长度1字节,数据内容为0x56

  • 标准遥控帧,报文ID0x088,数据长度1字节,无数据内容

8、接收方数据采样

  • CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长
  • 发送方以约定的位时长每隔固定时间输出一个数据位
  • 接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位
  • 理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近

接收方数据采样遇到的问题

接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心

接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离

9、位时序

为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近, CAN 总线对每一个数据位的时长进行了更细的划分,分为同步段( SS )、传播时间段( PTS )、相位缓冲段 1 PBS1 )和相位缓冲段 2 PBS2 ),每个段又由若干个最小时间单位( Tq )构成

10、硬同步

每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到 SOF 的下降沿时,接收方会将自己的位时序计时周期拨到 SS 段的位置,与发送方位的时序计时周期保持同步
硬同步只在帧的第一个下降沿( SOF 下降沿)有效
经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近

11、再同步

  • 若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW 通过加长 PBS1 段,或缩短PBS2 段,以调整同步
  • 再同步可以发生在第一个下降沿之后的每个数据位跳变边沿

11、波特率计算

12、多个设备同时发送遇到的问题

13、资源分配规则1 - 先占先得

若当前已经有设备正在操作总线发送数据帧 / 遥控帧,则其他任何设备不能再同时发送数据帧 / 遥控帧(可以发送错误帧 / 过载帧破坏当前数据)
任何设备检测到连续 11 个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧 / 遥控帧
一旦有设备正在发送数据帧 / 遥控帧,总线就会变为活跃状态,必然不会出现连续 11 个隐性电平,其他设备自然也不会破坏当前发送
若总线活跃状态其他设备有发送需求,则需要等待总线变为空闲,才能执行发送需求

14、资源分配规则2 - 非破坏性仲裁

15、非破坏性仲裁过程

16、数据帧和遥控帧的优先级

17、标准格式和扩展格式的优先级

18、错误类型

19、错误状态

20、错误计数器

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小蜗牛,大大梦想

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

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

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

打赏作者

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

抵扣说明:

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

余额充值