CAN总线

STM32F4 CAN # 一. CAN协议概念

收发器

接收

将CAN_High 及 CAN_Low的差分信号转化为CAN_Rx的TTL信号

发送

将CAN_Tx的TTL信号转化为差分信号,传送到CAN_High 及 CAN_Low差分信号

通讯节点

CAN 通讯节点由一个 CAN 控制器及 CAN 收发器组成,控制器与收发器之间通过 CAN_Tx 及CAN_Rx 信号线相连,收发器与 CAN 总线之间使用 CAN_High 及 CAN_Low 信号线相连。

两种连接方式

1闭环总线网络

CAN 物理层的形式主要有两种,图中的 CAN 通讯网络是一种遵循 ISO11898 标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻。

image.png

2.开环总线网络

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

image.png

CAN 协议中的差分信号

image.png

当 CAN收发器从 CAN_Tx 线接收到来自 CAN 控制器的低电平信号时 (逻辑 0),它会使 CAN_High 输出3.5V,同时 CAN_Low 输出 1.5V,从而输出显性电平表示逻辑 0 。

在 CAN 总线中,必须使它处于隐性电平 (逻辑 1)显性电平 (逻辑 0) 中的其中一个状态。假如有两个 CAN 通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。

半双工

同一时间只能有一个节点发送,其余都只能接收

CAN 协议层

使用位同步来抗干扰和吸收误差

位时序分解

image.png

每一个数据位的长度为 19Tq,其中 SS 段占 1Tq, PTS 段占 6Tq, PBS1段占 5Tq, PBS2 段占 7Tq

SS 段 (SYNC SEG)

SS 译为同步段,若通讯节点检测到总线上信号的跳变沿被包含在 SS 段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平。SS 段的大小固定为 1Tq。

• PTS 段 (PROP SEG)

PTS 译为传播时间段,这个时间段是用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。PTS 段的大小可以为 1~8Tq。

• PBS1 段 (PHASE SEG1),

PBS1 译为相位缓冲段,主要用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。PBS1 段的初始大小可以为 1~8Tq。

• PBS2 段 (PHASE SEG2)

PBS2 这是另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。PBS2 段的初始大小可以为 2~8Tq。

波特率计算

总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个 Tq,就可以确定 CAN 通讯的波特率。

例如,假设上图中的 1Tq=1us,而每个数据位由 19 个 Tq 组成,则传输一位数据需要时间 T1bit=19us,从而每秒可以传输的数据位个数为:1x10次方/19 = 52631.6 (bps)

这个每秒可传输的数据位的个数即为通讯中的波特率。

同步过程

两种同步,硬同步和重新同步

其中硬同步只是当存在“帧起始信号”时起作用,无法确保后续一连串的位时序都是同步的,而重新同步方式可解决该问题

硬同步:将ss段平移至总线出现下降沿的部分,也就是帧起始的位置。

image.png

重新同步,通过PSB1和PSB2的长短,使ss段的位置在正确的位置上。

​ 超前:

image.png

滞后:

image.png

CAN 的报文种类及结构

报文的种类

5种类型的帧

image.png

数据帧的结构

image.png

数据帧以一个显性位 (逻辑 0) 开始,以 7 个连续的隐性位 (逻辑 1) 结束,在它们之间,分别有仲裁段、控制段、数据段、CRC 段和 ACK 段。

  • 帧起始

用于通知总线上的其他设备要开始发送数据了,帧起始信号只有一个数据位,是一个显性电平(逻辑0),其他节点通过这个信号的电平跳变来硬同步。

  • 仲裁段

有着优先级的作用,主要内容为ID,由11位标准格式+29位的拓展格式组成,其中29位不是必须的。

两个节点争夺总线时的情况:它们发送报文时,若首先出现隐性电平(逻辑1),则会失去对总线的占有权

image.png

仲裁段除了报文 ID 外,还有 RTR、IDE 和 SRR 位。

(1) RTR 位 (Remote Transmission Request Bit),译作远程传输请求位,它是用于区分数据帧和遥控帧的,当它为显性电平(逻辑0)时表示数据帧,隐性电平(逻辑1)时表示遥控帧。

(2) IDE 位 (Identifier ExtensionBit),译作标识符扩展位,它是用于区分标准格式与扩展格式,当它为显性电平(逻辑0)时表示标准格式,隐性电平(逻辑1)时表示扩展格式。

(3) SRR 位 (Substitute Remote Request Bit),只存在于扩展格式,它用于替代标准格式中的 RTR位。由于扩展帧中的 SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高

  • 控制段

在控制段中的 r1 和 r0 为保留位,默认设置为显性位。它最主要的是 DLC 段 (Data Length Code),译为数据长度码,它由 4 个数据位组成,用于表示本报文中的数据段含有多少个字节, DLC 段表示的数字为 0~8。

  • 数据段

数据段为数据帧的核心内容,它是节点要发送的原始信息,由 0~8 个字节组成,MSB 先行。

  • CRC段

CAN 的报文包含了一段 15 位的 CRC 校验码,不同时,他会要求节点重新发送,CRC 部分的计算一般由 CAN 控制器硬件完成,出错时的处理则由软件控制最大重发数

有一个 CRC 界定符,它为隐性位,主要作用是把 CRC 校验码与后面的 ACK段间隔起来。

  • ACK段

ACK 段包括一个 ACK 槽位,和 ACK 界定符位。发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。在 ACK 槽和帧结束之间由 ACK 界定符间隔开。

  • 帧结束

EOF 段 (End Of Frame),译为帧结束,帧结束段由发送节点发送的 7 个隐性位表示结束

其他报文结构

img

img

STM32F407 CAN Controller介绍


#CAN