当前位置:   article > 正文

CAN总线第2讲__数据链路层讲解_can数据链路层测量启动时间

can数据链路层测量启动时间

1. can总线标准和帧格式

2. can通信机制和数据帧

3. can错误检测和错误帧

4.位定时和同步

5. 总结

1. can总线标准和帧格式

最新的CAN总线数据链路层协议为CAN2.0B Active,支持标准帧和扩展帧。

底层协议和ISO标准以及对应硬件的关系如图:

CAN总线收发器属于CAN的物理层,主要实现的就是CAN总线上面标准的电平信号。CAN控制器属于CAN的物理链路层,则实现了对CAN电平信号转成CAN报文的解析。

CAN总线有以下几种帧格式:

  • 数据帧:携带从发送节点到接收节点的数据(注:下图以CAN_L电平高低示意)

  • 远程帧:向其他节点请求发送具有同一标识符的数据帧(注:下图以CAN_L电平高低示意)

  • 错误帧:节点检测到错误后发送错误帧

  • 超载帧:在先行的和后续的数据帧(或者远程帧)之前附加一段延时,用于接收单元通知其未做好接收准备的帧

  • 帧间隙:用于将数据帧或者远程帧与前面的帧分开

2. CAN通信机制和数据帧

CAN总线数据链路层实现了如下的CAN通信机制:

  • 多主的基于优先级的总线访问
  • 非破坏性的基于竞争的仲裁
  • 远程数据请求
  • 配置灵活性
  • 错误检测
  • 报文自动重发
  • 临时与永久错误界定

仲裁机制:

  • 退出仲裁后进入“只听”状态
  • 在总线空闲时进行报文重发

可以通过CAN ID号进行报文仲裁,CAN ID号越小,报文优先级越高。实现该机制是由于总线支持“线与”机制,也就是显性位可以覆盖隐形位(0覆盖1)。

A节点ID为75 = 000 0100 1011bB节点ID为250 = 000 1111 1010b

C节点ID为1000 = 011 1110 1000b

在ABC三个节点ID仲裁阶段,C节点先退出仲裁,进入只听模式。然后B节点退出仲裁进入只听模式。所以A节点会先发报文,发完报文总线空闲的时候,B节点和C节点进行仲裁,B节点报文ID小于C节点报文ID,B会先发,C节点会最后发。注:标准帧优先级比扩展帧高

报文过滤机制:通过过滤器对接收的报文进行过滤

如果相关->接收;如果不相关->过滤

数据帧:

(注:下图以CAN_L电平高低示意)

SOF:帧起始

  • 标识一个数据帧的开始,用于同步
  • 一个显性
  • 只有在总线空闲期间节点才能够发送SOF

ID:唯一确定一条报文

  • 表明报文的含义,可以包含报文的源地址和目标地址
  • 确定报文的仲裁优先级,ID数值越小,优先级越高
  • 标准帧11位,扩展帧29位

RTR:用于区别数据帧和远程帧

  • 数据帧,RTR = 0
  • 远程帧,RTR = 1
  • 当RTR = 1为远程帧的时候,是不需要数据场的,远程帧的作用就是请求其他模块发包。
     

IDE位:用于区别标准帧和扩展帧

  • 标准帧,IDE = 0 (11位ID)
  • 扩展帧,IDE = 1(29位ID)

SRR位:只有扩展帧有SRR,表明在该位替代了标准帧中的RTR位

  • 该位无实际意义
  • SRR永远置1

r0、r1位:

  • 两个保留位
  • 当前置0

DLC位:

  • 包含4位,表示数据场包含数据的字节数, CAN报文数据场最长为8字节
  • DLC = 0-8
  • DLC = 9 -15->DLC = 8

Data Field数据场:

  • 具有0-8个字节长度,由DLC确定长度
  • 包含CAN数据帧发送的内容

CRC:

用于进行CRC校验

DEL:CRC界定符

  • 界定CRC序列
  • 固定格式,1个隐形位
  • CRC界定符之前进行位填充

ACK:

用来确定报文被至少一个节点正确接收

EOF:

  • 表示数据帧接收
  • 固定格式,7个连续的隐形位

ITM:

  • 固定格式,3个连续的隐形位
  • ITM之后进入总线空闲状态,此时节点可以发送报文

3. CAN错误检测

节点发送报文时要检测总线状态

  • 只有总线空闲,节点才能发送报文。
  • 在发送报文过程中进行“回读”,判断送出的位与回读的位是否一致。

错误检测类型:

1、位检测->位错误

  • 检测到总线位状态与自身送出的位不同
  • 仲裁或者ACK位期间送出“隐性”位除外
  • 位检测范围一直到EOF结束

2、填充检测->填充错误

  • 发送节点进行位填充,位填充编码是发送5个连续相同的极性位后,自动插入一个极性相反的的位。
  • 接收节点清除位填充。
  • 检测到违背位填充规则,也就是接收到6个连续相同极性位。
  • 填充检测范围是在CRC鉴定符DEL之前

3、CRC检测->CRC错误

  • 节点计算的CRC序列与接收到的CRC序列不同

4、格式检测->格式错误

  • 固定格式位场(如CRC界定符、ACK界定符、帧结束等)含有一个或者更多非法位。

5、ACK检测->ACK错误

  • 发送节点在ACK位期间未检测到“显性”位

发送节点会检测到:位错误、格式错误、ACK错误

接收节点会检测到:填充错误、格式错误、CRC错误

错误界定:

节点通过REC(接收错误计数器)和TEC(发送错误计数器)值,来实现节点错误状态的转换。

  • 当接收错误产生时REC增加,正确接收到数据帧时,REC减少
  • 在发送错误产生时TEC增加,正确发送数据帧,TEC减少

根据REC和TEC的值,主要有三种状态:主动错误、被动错误、Bus Off。

主动错误和被动错误的区别在于:

  • 主动错误:检测到错误,立即主动发送错误标志,6个连续的显性位
  • 被动错误:检测到错误,只能“被动地”等其他的节点报错,发送6个连续隐性位,(隐形位可能被其他节点的显性位覆盖),诱发接收节点发送错误标志,直到识别出其他节点主动报错。

错误帧格式:

  1. 包括错误标志和错误界定符
  2. 错误标志:主动错误6个显性位 被动错误6个隐性位

主动错误帧发送:

  • 位错误、填充错误、格式错误或者ACK错误产生后->错误标志在下一位发送
  • CRC错误->错误标志在ACK界定符后发送
  • 错误帧发送后:总线空闲时重发出错的数据帧

4. 位定时和同步

一、位时间

由于CAN属于异步通讯,没有时钟信号线,同一网络中的所有节点像串口异步通讯一样,节点间会使用约定好的波特率进行通讯。CAN还会使用“位同步”来对抗干扰、吸收误差。

位时间指的是CAN总线上1bit数据的时间,一个位时间包括:

一个位时间包含4个时间段,8-25个时间份额Time Quantum

同步段SS(SYNC SEG):用于同步网络中各个节点,跳变沿如果发生在同步段,说明节点和通讯时序是同步的,固定1个Time quantum。

传播段PTS(PROP SEG):用于补偿网络的物理延时时间,1-8个Time quantum

相位缓冲段1PES1(PHASE SEG1):用于补偿节点间的晶振误差,允许通过重同步对该段加长,在这个时间段末端进行总线状态的采样(1 - 8tq)

相位缓冲段2PES2(PHASE SEG2):用于补偿节点间的晶振误差,允许通过重同步对该段缩短(1 - 8tq)

二、同步

can的同步包括硬同步重同步两种方式

同步规则:

  • 一个位时间内只允许一种同步方式
  • 任何一个“隐性”到“显性”的跳变都可用于同步
  • 硬同步”发生在SOF,所有接收节点调整各自当前位的同步段,使其位于发送的SOF位内。只有在帧起始信号SOF时有用,无法确保后续位时序是否同步。
  • 重同步”发生在一个帧的其他位场内,当跳变沿落在同步段之外。
  • 在SOF到仲裁场有多个节点同时发送的情况下,发送节点对跳变沿不进行重同步。

硬同步

也就是一帧CAN报文开始的SOF位的时候,总线上接收节点会进行一次硬同步,让所有接收节点调整各自当前位的同步段,调整的宽度有限。一帧数据后面位置产生相位偏移的时候,就需要使用重同步来重新同步。

某节点检测到总线的帧起始信号不在节点内部时序的SS段范围,会判断自己内部时序和总线不同步,该节点通过硬同步方式重新调整,把自己的SS段移到总线下降沿的部分,从而获得同步。

重同步

当跳变沿和同步段误差小于SJW(reSynchronization Jump Width;重新同步补偿宽度),重新同步会通过延长PTS1段或者缩短PTS2段,来保证采样点位置的正确;如限定SJW=5 Tq时,单词同步调整的时候不能增加或者减少超过5Tq的时间长度,若有需要,控制器会通过多次小幅度调整来实现同步)

位定时:

传播段延时时间确定

位定时参数确定:

5. 总结

CAN总线作为车载通信最重要的总线,与其很好抗干扰性、错误检测机制、不需要时钟线等机制都密切相关。学好CAN总线不仅仅要学好CAN的网络协议栈,对其底层通讯技术最好也要有所理解,这样才能明白CAN总线的本质。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/83673
推荐阅读
相关标签
  

闽ICP备14008679号