【CAN学习】CAN(CAN2.0)协议

CAN 2.0协议是控制器局域网标准,分为2.0A和2.0B,支持标准和扩展帧格式。

CAN总线采用NRZ编码,广播通信,优先级由CAN ID决定。

标准帧优先于扩展帧,设备通过位填充进行信号同步。

协议还详细规定了帧格式、错误处理机制和编码方式。

资料

资料:

【【18.1】深度剖析CAN总线结构与传输协议——Kevin带你读《STM32Cube高效开发教程基础篇》】【18.1】深度剖析CAN总线结构与传输协议——Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili

非常详细的STM32 CAN通信的贴子,从总线细节到编程实现_stm32使用ll库can通讯-优快云博客

📎CAN总线入门教程.pptx

CAN协议相关工具

注意要有CAN协议分析仪才可以

珠海创芯科技有限公司 - 珠海创芯科技

📎CAN分析仪资料20240911.zip

珠海创芯科技有限公司 - 珠海创芯科技

主流通信协议对比:

1. CAN协议 - 物理层

1.1. CAN协议简介:高速CAN、低速CAN

CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。

CAN的国际标准(ISO11519以及ISO11898) - 差异点如下:

  • 基本应用

CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议。近年来,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境。

车载网络构想图:


1.2. CAN硬件电路:开环、闭环

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

高速CAN - 闭环网络

低速CAN - 闭环网络

图中的 CAN 通讯网络是

  • 一种遵循 ISO11898 标准的高速、短距离“闭环网络”
  • 最大传输距离为 40m,最高通讯速率为 1Mbps
  • 总线的两端各要求有一个“120 欧”的电阻

图中的 CAN 通讯网络是

  • 一种遵循 ISO11519-2 标准的低速、远距离“开环网络”
  • 最大传输距离为 1km,最高通讯速率为 125kbps
  • 两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻。

两个120欧电阻方便电路回归隐性电平

不闭环是在电平标准中,差分电平没有0的部分,不需要两个快速同步电平

同时这也带来了回归隐性电平慢的速率降低,但是电压差规定更大了,方便更远距离传输


1.3. CAN电平标准:

1.3.1. 电平标准

注意:区分逻辑电平、显隐电平(显性代表操作了)、差分电平

默认逻辑电平1 - 隐性电平

  • CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位
  • 高速CAN规定:
    • 电压差为 0V 时 表示逻辑1(隐性电平)
    • 电压差为 2V 时 表示逻辑0(显性电平)
  • 低速CAN规定:
    • 电压差为 -1.5V时 表示逻辑1(隐性电平)
    • 电压差为 3V 时 表示逻辑0(显性电平)

1.3.2. CAN电平转换芯片

基本的转换芯片(不全)

TJA1050 - CAN收发器(高速)

2. CAN协议 - 协议层

2.1. CAN总线帧格式:

开始发送总线帧时,总线应处于空闲状态(隐性电平 - 1)

2.1.1. 数据帧:发送指定CAN-ID报文

标准格式 - 数据帧:

字段名称

字段长度

(单位:位)

电平(显/隐电平)

作用

备注

帧起始

SOF

起始位

1

显性 0

  • 打破总线空闲(总线处于空闲状态(隐性电平 - 1))

仲裁段

Identifier(ID)

报文ID

11

任意电平

  • ID小的优先发送,大的等待下一次总线空闲再尝试发送

基于仲裁规则

  • 不同功能数据帧,其ID不同

类似I2C的 7位从机地址+1位读写位(仲裁段)的设计

在CAN中:数据帧==写入;遥控帧==读取

RTR

远程请求标志位

(区分总线帧格式)

1

显性 0

  • 用于区分数据帧(显性0)/遥控帧(隐性1)
  • (数据帧 == 写入数据)

控制段

IDE

ID扩展标志位

(选择数据帧格式)

1

显性 0

  • 选择当前数据帧的格式
    • 为 标准(显性0)/扩展(隐性1)格式 数据帧

r0

保留位

1

显性 0

  • 后续扩展功能

DLC

指定发送数据长度

4

任意电平

  • 设定发送数据的有效字节个数(0-16字节)
  • 配合后面的数据段使用

数据段

Data

数据内容

0-64

任意电平

  • 存放要发送的数据

CRC段

CRC Sequence

CRC校验码

15

任意电平

  • 对SOF到数据段末尾,进行CRC算法,得到校验码
  • 接收端接收后,也会对这段内容进行CRC算法,验证发送的校验码(判断传输错误)

CRC界定符

界定符

1

隐性 1

  • 在ACK槽之前,发生方释放总线(回归 隐性1)

界定,分隔;释放总线

ACK段

ACK槽

(ACK Slot)

应答位

(由接收设备写入)

1

任意电平

  • 有接收方接收到数据 - 显性0:
  1. 发送方在此位,释放总线(回归默认状态-隐性1);
  2. 接收到数据的接收方之一,此时会主动拉开总线(显性0);
  • 无接收方收到数据 - 隐性1:
  1. 发送方检验该位为隐性1时,说明无接受方接收成功,可配置再次尝试发送
  2. 或者不管

可允许多个接收方都拉开总线(显性0),多设备接收;

要明白,整个数据帧是由发送方和接收方共同组成的,两者一位发,一位读;

ACK界定符

界定符

1

  • 应答的接收方在此时释放总线(隐性1)

帧结束

EOF

结束符

7

  • 发送7个隐性1

类似串口的停止位

扩展格式 - 数据帧

字段名称

字段长度

(单位:位)

电平(显/隐电平)

作用

备注

Identifier(ID)

报文ID

11

任意电平

SRR

(兼容)占用位

1

隐性 1

代替原来的RTR,适配仲裁规则

IDE

ID扩展标志位

(选择数据帧格式)

1

显性 0

  • 选择当前数据帧的格式
    • 为 标准(显性0)/扩展(隐性1)格式 数据帧

Identifier(ID)

18

RTR

远程请求标志位

(区分总线帧格式)

1

显性 0

  • 用于区分数据帧(显性0)/遥控帧(隐性1)
  • (数据帧 == 写入数据)

r1

保留位

1

隐性 1

r0

保留位

1

隐性 1

DLC

指定发送数据长度

4

任意电平

  • 设定发送数据的有效字节个数(0-16字节)
  • 配合后面的数据段使用

与标准格式相同

两种格式的区别:

相同点:

  1. 两者的ID+RTR,扩展格式中SRR,IDE是为了兼容标准格式

2.1.2. 遥控帧:请求接收指定CAN-ID的报文

可实现请求式数据传输(注意都是广播发送)

接收方:广播发送指定报文ID(想查询的报文)

指定报文ID的设备(发送方):广播发送该报文

注意,如果是高频传输,不要用这种请求式,占用总线资源,一直在广播发送即可

遥控帧无数据段,(通过RTR区分)RTR为隐性电平1,其他部分与数据帧相同

RTR

远程请求标志位

(区分总线帧格式)

1

显性 0

  • 用于区分数据帧(显性0)/遥控帧(隐性1)
  • (数据帧 == 写入数据)

2.1.3. 错误帧:有设备发现当前帧出现错误,发送错误帧破坏数据

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

2.1.4. 过载帧:接收方收到大量数据而无法处理时发送过载帧

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

2.1.5. 帧间隔:发送完一个数据/遥控帧后,发送帧间隔,总线才变为空闲

将数据帧和遥控帧 与 前面的帧分离开

2.2. 位填充:总线帧发出时的处理(除去过载/错误帧)

非错误帧/过载帧时,连续发5个相同电平时,自动追加一个相反电平的填充位

CAN通信总线帧波形 - 实例分析

2.3. 位同步:

2.3.1. 接收方数据采样

2.3.2. 接收方数据采样遇到的问题【解决方法在2.4.3之后】

2.3.3. 位时序

2.3.4. 硬同步:解决采样初始点未对齐

2.3.5. 再同步:解决时钟误差导致的采样点偏离问题——实时调整每段采样周期

2.4. 波特率计算:

2.5. 仲裁机制:

2.5.1. 多设备同时发送遇到的问题

2.5.2. 资源分配规则1:先占先得——解决多设备不同时发送问题

2.5.3. 资源分配规则2:非破坏性仲裁——解决多设备同时发送问题

基于线与、回读机制(各个设备发完后读总线数据);

根据各个设备的仲裁段进行非破坏性仲裁;

设备ID优先级 - [ID越小优先级越高] —— 非破坏性仲裁过程

RTR优先级(总线帧格式优先级) - [数据帧 > 遥控帧] —— 非破坏性仲裁过程

IDE位优先级(数据帧格式优先级) - [标准格式 > 扩展格式] —— 非破坏性仲裁过程

注意:

  • 位填充不会影响优先级,很巧妙
  • 所有仲裁失败的设备/单元,会等到下一次总线空闲,再次尝试发起发送请求,参与新仲裁/直接发送

2.6. 错误处理:

额外的安全保障机制

【没有全部学完】

2.6.1. 错误类型

错误共有5种:

  • 位错误:
    • 基于回读机制(发送电平 != 回读的总线电平)
    • 注意:仲裁时的这种情况不属于位错误
  • 填充错误
  • CRC错误
  • 格式错误
  • 应答错误

2.6.2. 错误状态

  • 主动错误状态的设备正常参与通信并在检测到错误时发出主动错误帧
  • 被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧
  • 总线关闭状态的设备不能参与通信
  • 每个设备内部管理一个TEC和REC,根据TEC和REC的值确定自己的状态

2.6.3. 错误计数器

CAN通信错误波形 - 实例分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值