点击上方蓝字谈思实验室
获取更多汽车网络安全资讯
01
概述
CAN总线是一种广播类型的总线。这意味着在总线上的所有节点都可以“收到”所有消息。CAN从设计上是无法将消息发送给特定节点的;但是,CAN硬件(CAN控制器)提供了本地过滤机制,可以只对感兴趣的消息进行接收。
02
CAN消息帧结构(协议层)
CAN总线使用短消息,最大消息位数为96个比特位,在消息中是没有明确的地址信息;相对的,在数据中可以隐含地址信息。
消息帧类型
CAN总线上有四种不同的消息类型(或“帧”):
-
数据帧
-
远程帧
-
错误帧
-
过载帧
数据帧
数据帧是最常见的消息类型,它包括以下主要部分(以标准CAN为例,省略了一些细节):
1、当两个或多个节点争夺总线时,确定消息的优先级的仲裁字段。仲裁领域包含:
-
对于CAN 2.0A,一个11位标识符和一个位,RTR位,这对于数据帧而言是显性的。
-
对于CAN 2.0B,一个29位标识符(还包含两个隐性位:SRR和IDE)和RTR位。
2、数据字段包含0-8个字节的数据字段。
3、CRC字段为15位校验和。此校验和用于错误检测。
4、应答位,能够正确接收该消息的任何CAN控制器都会在每个消息的末尾发送应答位。发送端会检查是否存在应答位,并在未检测到消息的情况下重新发送该消息。
注1:值得注意的是,在总线上存在应答位并不意味着任何预期的接收方都收到了该消息。我们唯一知道的是,在总线上的至少一个或多个节点正确地收到了它。
注2:尽管存在ID字段与仲裁标识符,并不一定要求ID与消息的内容绑定并识别。这取决于上层应用协议。
这是CAN 2.0A 标准CAN的数据帧格式
这是CAN 2.0B 拓展CAN的数据帧格式
远程帧
远程帧类似于数据帧,但是有两个重要的区别:
1、 它有明确的标记表示远程帧(仲裁字段中的RTR位是隐性的)
2、 没有数据字段
远程帧的预期目的是征求相应数据帧的传输。例如,如果节点A发送将仲裁字段设置为0x234的远程帧,则节点B可能会用带有仲裁字段0x234的数据帧响应。
远程帧可用于实施总线流量管理的请求响应类型(请求->响应机制有利于控制总线流量与负载率)。但是,实际上,远程帧在汽车行业很少使用。还值得注意的是,CAN标准没有规定此处行为,对大多数CAN控制器来说,可以进行编程以自动响应远程帧,或者将其通知本地处理器。
除此之外,远程帧有一个捕获判断,数据长度代码必须设置为预期响应消息的长度。否则仲裁将不起作用。
远程帧(2.0a类型)
错误帧
简而言之,错误帧是一条特殊的消息,表征消息违反了CAN消息结构与规则。当节点检测到故障并导致所有其他节点检测到故障时,它会发送。然后,发送端将自动尝试重新发送消息。当然,这会有一个错误计数器方案,可确保节点无法通过反复传输错误帧来破坏总线流量。
错误帧由一个错误标志组成,该标志是相同值的6位(违反了位的规则)和一个错误定界符,即8个隐性位。错误定界符提供了一些时间,其中总线上的其他节点在检测第一个错误标志时可以发送错误标志。
过载帧
在这里提到过载帧,只是为了完整。它的格式与错误帧非常相似,并且它是由一个繁忙节点传输的。过载帧在汽车行业很少使用,并且现在的CAN控制器已做过优化,舍弃了过载帧的识别与发送,可以说过载帧是过时的,这里我只是顺便提一下。
标准CAN vs 拓展CAN
最初,CAN标准将仲裁字段中标识符的长度定义为11位。后来,客户需求迫使标准扩展。新格式通常称为扩展CAN,并且允许标识符中的不少于29位。为了区分两种帧类型,使用了控制字段中的保留位。
标准被正式称为
2.0A,仅具有11位标识符,
2.0B,扩展版本,具有完整的29位标识符(或11位,可以混合使用)2.0B节点可以是
-
2.0B完整,可以接收或者传输拓展帧。
-
2.0B兼容,兼容的意思是可以接收拓展帧,但是会被丢弃,不影响总线状态。
1.x指的是原始规范版本。
我们现在使用的CAN控制器通常是2.0B类型的。1.x或2.0A类型控制器无法接收拓展帧。很多情况下,有的人会觉得标准CAN比扩展CAN更好,因为扩展的CAN消息会增加开销。这种理念不一定是正确的。如果使用仲裁字段来传输数据,则扩展可能实际上可能具有比标准CAN更低的开销;不过大部分情况,我们使用CAN还不会到纠结是否使用仲裁字段传输数据的地步,毕竟都会做设计冗余。
总线仲裁与消息优先级
消息仲裁(多个CAN控制器同时使用总线),决定哪个控制器优先使用CAN总线是很重要的。 任何CAN控制器都可以在检测到空闲总线时启动消息发送。这可能会导致两个或多个控制器同时启动消息。冲突通过以下方式解决。传输节点在发送时监视公共总线。如果一个节点在发送隐性电平,它将立即退出仲裁过程并成为接收者。仲裁是在整个仲裁领域进行的,当该字段发送时,正好将一个控制器留在总线上。该节点继续传输,好像什么都没发生。其他潜在的控制器将尝试在下次可用时重新传输其消息。在仲裁过程中,不会浪费时间。
由于总线是有线电缆,并且显性位在逻辑上是0,因此得出的是,具有数值最低仲裁字段的消息将赢得仲裁。ID越小,优先级越高。
问:如果一个节点独自在CAN总线上并试图传输会发生什么?
答:节点当然会赢得仲裁,并随着消息传输而愉快地进行。但是,当确认的时间到来了……在ACK期间没有任何节点会发送应答,因此控制器会感觉到ACK错误,发送错误标志,将其发送误差计数器增加8并开始重新发送。这将发生16次;然后,发射器将出现被动错误。如果节点为被动错误,并且错误为ACK应答错误,则发送错误计数器不会进一步增加。因此,节点将继续永远传输,直到有节点应答该信息为止。
消息地址与标识
值得再次注意的是,CAN消息中没有明确的地址。每个CAN Controller将在总线上接收所有消息,并结合硬件过滤器和软件过滤器,确定该消息是否是自己感兴趣的消息。
实际上,CAN中没有消息地址的概念。相反,消息的内容由消息中存在的标识符标识。传统的消息地址将使用“节点ID”加入消息,变成“包含节点ID的数据的消息”。这两个概念之间的区别很小,但很重要。
根据标准,仲裁字段的内容用于确定总线上消息的优先级。所有CAN控制器将使用仲裁字段作为硬件过滤的值。该标准并不表示必须将仲裁字段用作消息标识符。但是,这是一种非常普遍的用法。汽车行业中,仲裁字段的标识符就是CAN报文ID的实际特征。
03
CAN总线的物理特征(物理层)
CAN总线使用非归零码(NRZ),有两个不同的信号状态:显性(逻辑上0)和隐性(逻辑上1)。总线电平按照线与机制对总线潜在的冲突进行仲裁,显性电平覆盖隐性电平,即只有总线上所有单元都输出隐性电平时,总线上才为隐性电平。
典型的:
-
CAN总线为“隐性”(逻辑1)时,CAN_H和CAN_L的电平为2.5V(电位差为0V)
-
CAN总线为“显性”(逻辑0)时,CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差为2.0V左右) 当然,2.5V,3.5V和1.5V并不绝对,重点是电位差。一般认为电位差<0.5V是隐形电平,电位差>0.9V为显性
下面几张图分别为示波器抓取的CAN-H与CAN-L的信号波形,红色为CAN-H,蓝色为CAN-L
几种不同的物理层
有几种不同的物理层:
-
最常见的类型是由CAN标准ISO 11898-2定义的类型。有时也被称为“高速CAN”。
-
ISO标准的另一部分ISO 11898-3定义了另一个两线电平方案,用于较低的总线速度。它的容错率更高,即使将一条总线线切割或短路至地面或VBAT,信号传导也可以继续。有时被称为“低速CAN”。
-
SAE J2411定义了单线(对低0电平)物理层,它主要用于汽车 。
最大总线速率
根据标准,CAN总线的最大速度为1Mbit/秒。但是,某些CAN控制器将处理比1Mbit/s更高的速度,并且可以考虑用于特殊应用。
低速CAN(ISO 11898-3,见上文)可以达到125 kbit/s;单线可以在其标准模式下达到约50 kbit/s,并且使用特殊的高速模式用于ECU编程,大约100 kbit/s。
最低总线速率
请注意,某些CAN收发器将不允许您低于一定比特率。如果您使用TJA1050,则不能低于50 kbit/s。在应用时请检查数据手册。就笔者遇到的情况,在汽车行业CAN总线的常见速率为:
-
250kbps,常见于商用车,公交、卡车之类。
-
500kbps和1Mbps,多见于乘用车,也就是普通人出行开的车 注:超过1M,都会使用CAN-FD协议,CAN-FD是CAN的再次拓展
最大线缆的长度(通信距离)
以1Mbit/s的速度,最大电缆长度约为40米。这取决于仲裁字段,他的机制需要采样,决定了要求信号能够传播到最遥远的节点,然后再返回,然后才能采样,而电子的传播速度等于光速。 其他最大电缆长度是(这些值近似):
-
500 kbit/s的100米
-
250 kbit/s的200米
-
125 kbit/s的500米
-
10 kbit/s的6公里
注意:如果在应用中使用了光耦或者其他隔离措施进行电流隔离,则最大总线长度会相应降低。因为光耦的引入会进一步带来延时。
终端和终端电阻
按照ISO-11898的CAN标准,CAN总线的两端使用120欧姆的电阻器完成匹配,这其实有两个作用:
1、消除总线末端的信号反射。
2、CAN总线的直流电平在两端得以维持一致。
当然,也可以始终不使用终端电阻,无论其速度如何。但是如果是按照ISO-11898标准,是必须使用终端电阻的。也许你在实验或者测试时,只使用了一个终端电阻就足够了,或者没有使用任何终端电阻,CAN总线依然正常工作,我只能说你很幸运了。
来源:聪拌面搞嵌入式
end
精品活动推荐
AutoSec中国行系列沙龙
专业社群
部分入群专家来自:
新势力车企:
特斯拉、合众新能源-哪吒、理想、极氪、小米、宾理汽车、极越、零跑汽车、阿维塔汽车、智己汽车、小鹏、岚图汽车、蔚来汽车、吉祥汽车、赛力斯......
外资传统主流车企代表:
大众中国、大众酷翼、奥迪汽车、宝马、福特、戴姆勒-奔驰、通用、保时捷、沃尔沃、现代汽车、日产汽车、捷豹路虎、斯堪尼亚......
内资传统主流车企:
吉利汽车、上汽乘用车、长城汽车、上汽大众、长安汽车、北京汽车、东风汽车、广汽、比亚迪、一汽集团、一汽解放、东风商用、上汽商用......
全球领先一级供应商:
博世、大陆集团、联合汽车电子、安波福、采埃孚、科世达、舍弗勒、霍尼韦尔、大疆、日立、哈曼、华为、百度、联想、联发科、普瑞均胜、德赛西威、蜂巢转向、均联智行、武汉光庭、星纪魅族、中车集团、赢彻科技、潍柴集团、地平线、紫光同芯、字节跳动、......
二级供应商(500+以上):
Upstream、ETAS、Synopsys、NXP、TUV、上海软件中心、Deloitte、中科数测固源科技、奇安信、为辰信安、云驰未来、信大捷安、信长城、泽鹿安全、纽创信安、复旦微电子、天融信、奇虎360、中汽中心、中国汽研、上海汽检、软安科技、浙江大学......
人员占比
公司类型占比
原文始发于微信公众号(谈思实验室):快速扫盲CAN总线基础知识
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论