CAN总线相关
-
汽车网络协议OSI模型划分
-
CAN网络硬件连接
灰色框中结构为一个Node(节点)//节点一般与ECU等同
节点一般包括:
1.微控制器(提供需要发送的数据,读取接收到的经过CAN控制器转换后的二进制数据(来自CAN总线上的位数据))<微控制器外接传感器、执行器>
2.CAN控制器(完成二进制数据与位电流之间的转换)(将传输的数据转化为报文帧,再将报文帧转化为位电平的形式)
3.CAN收发器
-
CAN报文在数据链路层传输的数据帧结构
SOF位置:显性,代表帧起始,总线空闲时发送
RTR位:显性——数据帧;隐性——远程帧(数据帧与对应远程帧ID一致,总线通过RTR位来仲裁数据帧优先级高于远程帧)
IDE位:显性——标准帧;隐性——扩展帧
ACK位:显性——应答; 隐性——无应答
CRC段用于存放CRC校验码
CRC分隔符位给ECU提供时间和空间来计算CRC
ACK应答需要时间,由ACK分隔符提供
只有数据帧和远程帧之间有帧间空间(3个连续隐性位),CAN总线允许新的报文发送,如果没有报文发送则总线进入空闲状态
报文接收节点发送远程帧请求,然后报文发送节点发送数据帧
位填充存在于数据帧和远程帧的帧起始与CRC域之间(包括帧起始和CRC域、不包括CRC界定符)
-
终端电阻
终端电阻的目的:CAN总线在显性状态时为寄生电容充电,进入隐性状态时寄生电容需要放电,加终端电阻加速寄生电容放电,使波形更接近方波; 吸收传输线反射能量,避免多次反射产生振铃现象。
终端电阻为何选取两个120Ω左右电阻并联:经实验测量CAN使用的传输线(双绞线)阻抗约为120Ω,根据传输线理论知识,可知终端电阻等于线缆阻抗时可消除终端产生的反射能量。
-
CAN-H和CAN-L是3.5V与1.5V的原因
-
Intel字节组织顺序(流格式)
表27表示,Intel方式的比特流排序示意;图7表示CAN FD线上实际顺序。
-
SecOC(Secure Onboard Communication//车载通信安全)流程
其中MAC代表Message Authentication Code,即消息认证码
-
CRC循环冗余校验
发送方处理发送报文方式以及CRC校验码的计算过程
接收方判断是否误码
-
位填充
位填充为了防止突发错误而设定;
发送方:当同样的电平持续 5 位时,则添加一个位的反型数据
接收方:当同样的电平持续 5 位时,删除后一位还原 原数据
为什么可以防止突发错误?
因为CAN总线是NRZ编码的。位填充可以确保至少每6个位时间就会产生跳变沿,这样的话才能让接收端的锁相环保持与发送端同步。
//锁相环实现同步方法原理(未学习)
-
位时间、同步、位定时参考
参考https://blog.csdn.net/laifengyuan1/article/details/123428766
-
CAN总线仲裁
当ECU检测到总线上连续11个及以上隐性位(指逻辑值为1,CAN-H与CAN-L电压差在0.5V以内)时,判定为总线处于空闲状态
引用https://zhuanlan.zhihu.com/p/549534554
总结:各ECU连接总线,采用线与方式实施仲裁,各ECU同时发送报文,显性码元(0码)优先仲裁(CAN收发器中有回采机制,采集总线数据并与发数据对比,如果不同则从仲裁机制中退出),通过这种方式各ECU发送的报文中只有较小的报文得以成功发送,由于上述特性使得报文标识符(报文ID)较小的报文先发(即优先级更高)
-
总线负载率控制
总线负载过高,那么一个优先级相对低的节点需要发送报文时,会出现频繁的仲裁失败而导致发送延迟过大,ECU长时间没有接收到该有的报文会认为发生错误。因此,为了保证低优先级报文传输延迟在可接受的范围内,总线负载率不应超过30%。当负载率大于40%时,CAN通讯稳定性开始衰减,大于65%时,稳定性衰减加剧,超过98%时网络瘫痪。
-
can总线错误类型
1.主动错误 //ECU收到错误的报文,非自身错误,该ECU仍可以正常通信 2.被动错误 //ECU自身故障,该ECU可以通信,只发送被动错误标志 3.busoff(脱离总线) //ECU脱离总线,ECU可能仍在工作但该节点Controller关闭 不收发报文,进行快/慢恢复尝试恢复正常状态
busoff参考自https://zhuanlan.zhihu.com/p/499270596
-
错误帧
主动错误标志位的由来:所有节点同时报主动错误,就是6个显性叠加,还是6个显性位;一个节点发6个显性,其他所有正常节点判定为填充错误开始发送主动错误标志位,发送6个显性位,6+6=12