CAN基础概念

文章目录

  • 目的
  • 控制器、收发器、总线
  • 帧格式
  • CAN2.0和CAN-FD
  • 波特率与采样点
  • 工作模式
  • 总结

目的

CAN是非常常用的一种数据总线,被广泛用在各种车辆系统中。大多数时候CAN的控制器和收发器干了比较多的工作,从而对于写代码使用来说比较简单。这篇文章将对CAN使用上相关的基础内容做个说明。

控制器、收发器、总线

CAN的电气连接主要分 控制器、收发器、总线 。控制器目前很多单片机都内置有;收发器通常是外置的(常见的比如TJA1050);总线由 H、L 两条差分信号线构成,通常总线的两端需要有两个120Ω的终端电阻,使 H、L 间呈60Ω。
CAN基础概念_第1张图片

CAN的总线上可以挂载多个节点,节点并不分主从,想发数据发就行,CAN控制器会依据数据头部带的ID信息进行仲裁,优先级高的数据继续发送。大多数CAN控制器包含先进先出的发送和接收邮箱,可以设置发送失败后自动重发。CAN控制器可以设置接收消息ID过滤器,只有符合条件的ID并且CRC校验通过的数据(CAN的一条完整的数据是自带CRC校验的)才会存放到接收邮箱中。
CAN基础概念_第2张图片

CAN控制器硬件自带收发邮箱、接收带过滤器以及自带校验等,对于应用层写代码使用来说是比较方便的。

帧格式

CAN的数据是一帧一帧传输的,可以分为 数据帧、遥控帧、错误帧、过载帧、间隔帧 ,大多数时候我们只要关系数据帧即可。

一帧数据中头部是包含ID的,ID分为标准ID和扩展ID,区别只是位数不同。
CAN基础概念_第3张图片

CAN2.0和CAN-FD

目前来说在用的CAN主要分为 CAN2.0CAN-FDCAN2.0 数据帧一帧最大可以传输8字节,最高波特率为1000kbps。 CAN-FD 可以向下兼容 CAN2.0 ,最大的变化在于数据段,一帧最大可以传输64字节,并且数据段波特率可以和其他部分不一样,最大可以到8000kbps。
CAN基础概念_第4张图片

很多情况下称 CAN2.0bxCAN

波特率与采样点

CAN的波特率设置有点特别。经过分频后到达CAN控制器的的时钟信号以一个个 tq 来表示,CAN通讯中每个 bit 由多个时间段组成,每个时间段包含若干个 tq
CAN基础概念_第5张图片

SYNC_SEG 段固定占 1tqBS1BS2 可以配置多个 tq 。通过调整时钟频率和 BS1BS2tq 数量可以调整CAN通讯波特率。另外需要注意的是 BS1BS2 之间的时刻是真正采集数据值的时刻,通常需要控制 (SS + BS1) / (SS + BS1 + BS2)75%~85% 之间。
CAN基础概念_第6张图片

上图的 SJW 用于控制动态调节 BS1BS2 长短(总长度不变),从而提供一定的采样点冗余。

通常来有一种做法是固定CAN的时钟为40MHz,不进行分频,然后调节 BS1BS2 来调整波特率。常用的波特率设置如下:

波特率 BS1 BS2
125kbps 239 80
250kbps 119 40
500kbps 59 20
1000kbps 29 10
2000kbps 14 5
4000kbps 7 2
5000kbps 5 2
8000kbps 3 1

需要注意的是这里的 BS1 段只是STM32中的分段方式,很多时候该段其实可以细分为 PTSBS1 两部段。

工作模式

CAN控制器通常可以工作在下面几种模式下(不同芯片对于各模式的叫法可能不同)。各个模式的区别只是输入输出信号连接不同。
CAN基础概念_第7张图片

总结

CAN本身东西是不少的,但如果只是需要使用CAN来进行数据收发的话需要了解的内容并不算多。

你可能感兴趣的:(电子相关,嵌入式,总线,通讯协议,单片机,汽车)