一文详解CAN总线

前面已经介绍了几种总线协议,那现在如果在汽车上实际应用一种总线协议来通讯的话,你会选择哪一种呢?
答案是 都不行
因为在汽车中许多系统都需要实时控制,而且数据必须可靠,即使面对面对恶劣环境也要正常运行
如何解决这个问题呢?就要看can总线了
ecu
如何传输数据?
现在将车上的每个设备用一条总线连接起来
要想can通讯,就必须要专门的can收发器,经过can收发器,普通信号就会转化成差分信号(差分信号由两根线表示)
如果输入0,can收发器的两根线分别输出3.5v和1.5v(压差为2v)
如果输入1,can收发器的两根线都输出2.5v(压差为0v)
为什么要这样表示数据?
想象一下,如果这条线是0v,受到了干扰,电压就会波动
如果是两条线缠绕在一起,用差分信号来表示数据的话,即使受到了干扰,也是两条线一起受到干扰,依旧存在压差
can数据格式
这是一帧完整的数据
最开始是起始位(始终为0)
然后是11位的识别码
每一个设备都有唯一的11位识别码
紧接着是rtr位用来区分数据帧(0)或远程请求帧(1)
接下来是6位控制码
其中第一位的ide位是用来区分是标准帧还是拓展帧(标准帧有11位的识别码,ide位为0;而拓展码有29位的识别码,ide位为1)
下面是预留位,它是逻辑0
剩下的4位为dlc位,表示数据长度
每一个数值对应每一个字节(比如如图数值为8,对应数据长度为8个字节)
接下来是16位的crc循环冗余校验位,它是为了确保收到的数据的准确性
首先是15位crc校验位,如果和接收到的crc校验位不一致,就会重新再重发一次
最后是crc界定位,目的是为了与后面的数据区分开来
然后是2位ack码
第一位是ack确认槽(发送端是1,接收端就是0)用来表示应答
第2位是ack界定位(始终为1),目的也是为了和后面的数据区分开来,
最后是7位结束位(时钟为1)
如果用用差分信号表示,电平是这样的,如图所示
如果此时总线上同时有2个设备发出控制信号,究竟优先执行哪一个设备的信号呢?
这就得看11位的识别码了,它不仅指定了哪个设备,还表示了优先级
当总线同时为1或0,总线会被置为0(即优先执行电平0)
总结
了解完了can总线,或许会有一个疑惑点?
can总线和rs485是不是有点相似,对吧?
虽然的确有些相似之处,但can总线是专门用于汽车领域的,就比如数据可靠性,can总线检测到数据不一致,就会重新发送,而485就发一次,不管是不是正确的数据


OPPOR11最新消息:OPPOR11为何能够抢占销量高地?有理有据这5大理由告诉你
2023年全球车规级MCU市场规模将有望增长至88亿美元
梅赛德斯-奔驰率先在加州获得自动驾驶技术批准
光纤跳线产品应用场景
人工智能的发展现状及重大事件
一文详解CAN总线
常用HV=HB=HRC硬度对照表
高频平板变压器的原理与设计
如何现场对硬件进行编程呢
三星S10+采用了4100mAh大电池超长续航能力据手机界第一
基于ESD保护器件的便携设备应用
STM32固件库详解 (转载)
领克ZERO Conceptt量产车风洞实测:风阻系数达到了0.23Cd 国产车最低
外观区别不明显的千元机和旗舰机的区别到底在哪里?
兆驰节能新增投资1500条
寄存器门电路原理分析
华为获得全球首张5G手机CE证书 出门问问亮相AWE 2019
红米note5最新消息:性价比之王!红米Note5:双摄+全面屏,你觉得这样的红米Note5会卖多少钱呢?
5G+MEC协同发展将加速行业应用落地
AMD将发布RX5600XT显卡,其性能有明显提升