赞
踩
最新的CAN总线数据链路层协议为CAN2.0B Active,支持标准帧和扩展帧。
底层协议和ISO标准以及对应硬件的关系如图:
CAN总线收发器属于CAN的物理层,主要实现的就是CAN总线上面标准的电平信号。CAN控制器属于CAN的物理链路层,则实现了对CAN电平信号转成CAN报文的解析。
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:帧起始
ID:唯一确定一条报文
RTR:用于区别数据帧和远程帧
IDE位:用于区别标准帧和扩展帧
SRR位:只有扩展帧有SRR,表明在该位替代了标准帧中的RTR位
r0、r1位:
DLC位:
Data Field数据场:
CRC:
用于进行CRC校验
DEL:CRC界定符
ACK:
用来确定报文被至少一个节点正确接收
EOF:
ITM:
节点发送报文时要检测总线状态
错误检测类型:
1、位检测->位错误
2、填充检测->填充错误
3、CRC检测->CRC错误
4、格式检测->格式错误
5、ACK检测->ACK错误
发送节点会检测到:位错误、格式错误、ACK错误
接收节点会检测到:填充错误、格式错误、CRC错误
错误界定:
节点通过REC(接收错误计数器)和TEC(发送错误计数器)值,来实现节点错误状态的转换。
根据REC和TEC的值,主要有三种状态:主动错误、被动错误、Bus Off。
主动错误和被动错误的区别在于:
错误帧格式:
主动错误帧发送:
一、位时间
由于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的同步包括硬同步和重同步两种方式
同步规则:
硬同步:
也就是一帧CAN报文开始的SOF位的时候,总线上接收节点会进行一次硬同步,让所有接收节点调整各自当前位的同步段,调整的宽度有限。一帧数据后面位置产生相位偏移的时候,就需要使用重同步来重新同步。
某节点检测到总线的帧起始信号不在节点内部时序的SS段范围,会判断自己内部时序和总线不同步,该节点通过硬同步方式重新调整,把自己的SS段移到总线下降沿的部分,从而获得同步。
重同步
当跳变沿和同步段误差小于SJW(reSynchronization Jump Width;重新同步补偿宽度),重新同步会通过延长PTS1段或者缩短PTS2段,来保证采样点位置的正确;如限定SJW=5 Tq时,单词同步调整的时候不能增加或者减少超过5Tq的时间长度,若有需要,控制器会通过多次小幅度调整来实现同步)
位定时:
传播段延时时间确定
位定时参数确定:
CAN总线作为车载通信最重要的总线,与其很好抗干扰性、错误检测机制、不需要时钟线等机制都密切相关。学好CAN总线不仅仅要学好CAN的网络协议栈,对其底层通讯技术最好也要有所理解,这样才能明白CAN总线的本质。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。