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