CAN 协议学习笔记

发布于:2022-11-05 ⋅ 阅读:(381) ⋅ 点赞:(0)

CAN 协议学习笔记

物理层:

  1. can 的物理电路连接 无主机从机之分

  1. 表达信号需要差分信号(2条线表示差分)
  2. 半双工 一个时间表示一个信号  ,抗干扰能力强。CanHigh CanLow同时变化,对差分信号无影响。
  3. 以Can高速为例:逻辑 1 CanHigh – CanLow = 0  逻辑0 CanHigh – CanLow > 1.5V 表示逻辑0

 

 协议层:

Can通信协议层

总线上各个节点协调好波特率。

硬件同步和再同步 确保数据传输。

位时序分解

一个电平期间由几段组成(SS段1Tq + PTS段6Tq + PBS1段5Tq + PBS2段 7Tq)

在PBS1 与 PBS2 段之间进行采样(采样点可以动态变化)。

 

  • SS段(SYNC SEG)

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

Tq 是一个时间单位

  • PTS段(Port Seg)

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

  • PBS1段

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

  • PBS2段

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

PBS1 和PBS2 时间可以通过插入SJW 来设置同步时间段

  • 再同步

      SJW重新同步跳跃宽度, 在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。每当检测出边沿时,根据 SJW值通过加长 PBS1段,或缩短 PBS2段,以调整同步。但如果发生了超出 SJW值的误差时,最大调整量不能超过 SJW值。

一个通信差距比较小,但是时间久了之后会有表较大的误差,所以要进行位时序同步。

  • 波特率:

       总线上的各个通讯节点只要约定好1个Tq的时间长度以及每一个数据位占据多少个Tq,就可以确定CAN通讯的波特率。
      例如,假设上图中的1Tq=1us,而每个数据位由19个Tq组成,则传输一位数据需要时间T1bit =19us,从而每秒可以传输的数据位个数为:
1x106/19 = 52631.6 (bps)    这个每秒可传输的数据位的个数即为通讯中的波特率。

报文种类

帧用途

数据帧

用于节点向外传送数据

遥控帧

用于向远端节点请求数据。

错误帧

用于向远端节点通知校验错误,请求重新发送上一个数

过载帧

用于接收单元通知其尚未做好接收准备的帧。

帧间隔

用于将数据帧及遥控帧与前面的帧分离开来的帧。

Can的报文结构

数据帧的组成由 起始端 + 仲裁段 + 控制段 + 数据段 + CRC段 + ACK段 + 帧结束段

1、起始段

      帧起始信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其它节点通过帧起始信号的电平跳变沿来进行硬同步准备接受。

2、仲裁段

仲裁功能:

仲裁段的功能是通过仲裁段的11位ID来进行优先级的比较。根据线与特性,低电平优先级高,所以ID越小,优先级越低。如图:

     若两个节点同时竞争CAN总线的占有权,当它们发送报文时,若首先出现隐性电平,则会失去对总线的占有权,进入接收状态。

  •    仲裁段区分标准帧和扩展帧

       

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

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

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

3、 控制段

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

4、数据段

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

5、CRC段

为了保证报文的正确传输, CAN的报文包含了一段15位的CRC校验码,一旦接收节点算出的CRC码跟接收到的CRC码不同,则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。 CRC部分的计算一般由CAN控制器硬件完成,出错时的处理则由软件控制最大重发数。

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

6、ACK段

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

7、结束帧

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

本文含有隐藏内容,请 开通VIP 后查看