做汽车电子这么多年,CAN一直给人的感觉就是两个字稳定。1Mbps的经典CAN已经用了很多年,后来CAN FD把数据段速率提高到几Mbps,数据长度也从8字节扩展到了64字节。
但到了今天,汽车里的数据量已经不是当年的水平了。域控制器、区域控制器、智能传感器、摄像头、雷达,以及越来越多的软件服务,都在往车载网络里面塞数据,这个时候,CAN开始遇到一个很现实的问题不是CAN不可靠,而是它有点“传不动”了。于是CAN XL来了!
而且这个“XL”确实不是简单把CAN FD再提一点速。CAN XL的目标,是在保留CAN核心通信机制和可靠性的基础上,把CAN的应用范围继续往上推。目前CAN XL数据阶段最高可达到20 Mbit/s,单帧数据字段最大达到2048字节。ISO 11898-1:2024已经正式纳入CAN XL相关规范。先看看CAN到底走到了哪一步把三代CAN放在一起看,变化其实非常直观。
这里有个特别容易被误解的地方,CAN XL的20Mbps不是说整条CAN总线从头到尾都以20Mbps跑,它和CAN FD一样,本质上还是仲裁阶段慢、数据阶段快。仲裁阶段仍然要依靠CAN经典的非破坏性仲裁机制决定谁先说话。
真正进入数据传输以后,才切换到更高的数据速率,这其实是CAN XL非常聪明的一点,因为汽车网络最宝贵的东西并不只是速度,还有确定性和优先级机制,如果为了追求20Mbps,把CAN最核心的仲裁机制也丢掉,那它就已经不是我们熟悉的CAN了。
真正让我觉得CAN XL有意思的,是2048字节20Mbps很吸引眼球,但如果让我选一个CAN XL最重要的变化,我反而会选2048 Byte数据字段,为什么?
因为64字节的CAN FD,在很多场景下还是显得有点小,举个很简单的例子,假设现在有一块控制器,需要发送1024字节数据,如果使用CAN FD,按照64字节一个数据帧计算:1024/64=16
也就是说,至少需要拆成16个CAN FD帧,每一个帧都有自己的帧头、CRC、ACK等协议开销,CAN XL直接把最大数据字段提升到了2048字节,意味着大量数据可以放进一个长帧里。
这也是为什么CAN XL会特别强调与Ethernet/IP通信进行整合。CiA明确提到,CAN XL的数据字段可以达到2048字节,适合将以太网帧等数据通过CAN XL网络进行传输。
所以我觉得CAN XL不是在和传统CAN FD抢几个字节的数据,它真正想解决的是CAN和车载以太网之间那道越来越明显的鸿沟,确实呀,现在以太网主要还是价格没打下来,一旦价格打下来,CAN再不努力,就彻底废了,这算是自救吧!CAN XL为什么还要保留CAN的仲裁?这是CAN XL非常值得研究的地方,以太网擅长高速、大数据量传输,CAN擅长什么?优先级仲裁。
假设总线上同时来了几个消息:普通状态信息,诊断数据,电机控制指令,紧急故障信息,CAN并不是简单地谁先到谁先发,它有一套非常成熟的优先级仲裁机制。优先级高的报文可以获得总线访问权,而且不会因为碰撞而把两个报文全部破坏掉。
CAN XL保留了这种核心机制,而且它进一步把优先级和寻址功能拆开了。
CAN XL使用11-bit Priority ID进行总线访问优先级判断,同时增加32-bit Acceptance Field,用于地址或内容相关的信息,这个变化其实非常重要。以前CAN ID身上承担了很多事情,现在CAN XL开始把谁优先发送和这是什么数据、发给谁分开处理,从系统架构角度看,这明显更灵活。
20Mbps背后,真正难的是硬件看到20Mbps,很多硬件工程师第一反应可能是那我把CAN收发器换成高速版本不就行了?
真不是这么简单。CAN跑到20Mbps以后,PCB和线束已经不能再把自己当成理想导线了,这时候寄生参数会越来越明显。比如PCB走线寄生电感,连接器寄生参数,TVS寄生电容,共模电感参数,收发器输出边沿,终端匹配,Stub长度,线束阻抗,反射和振铃,这些东西在500kbps、1Mbps的时候可能还能凑合,到了20Mbps,就开始变成真正的问题。因此CAN XL需要专门的CAN SIC XL收发器来支持更高的数据速率。
所以千万不要理解成CAN XL = CAN FD + 一个20MHz的时钟。真正发生变化的是控制器、协议、收发器、PCB、连接器和线束整个系统,这里再深入一点,SIC,也就是Signal Improvement Capability,它解决的核心问题,其实就是高速通信下,信号边沿和反射已经不能随便处理了,CAN网络本身是一个多节点总线,节点越多、Stub越长、线束越复杂,信号完整性越难保证。到了高速数据阶段,如果每个节点都把信号边沿做得特别暴躁,很容易出现过冲 → 振铃 → 多次反射 → 采样错误。
而CAN XL的物理层设计开始针对这些问题进行优化,所以做CAN XL硬件,不能再只看收发器支持20Mbps,还应该继续往下问,我的总线拓扑支持吗?Stub多长?节点数量多少?终端怎么放?TVS选多大电容?共模电感会不会把信号边沿吃掉?这才是咱们硬件兄弟们要考虑的问题。
CANXL还有一个变化,我认为非常关键:CRC增强CAN为什么让汽车工程师这么信任?很大程度上就是因为它的错误检测和故障处理机制,CAN XL没有因为追求速度就把可靠性放掉,相反它增加了CRC保护机制。
CAN XL帧采用两个CRC字段,用于进一步提高错误检测能力。双CRC机制可以降低未检测错误的概率,这点对于汽车电子尤其重要,因为高速并不意味着可以接受更高的误码率。数据越快,对错误检测的要求往往越高。2048字节还有一个隐藏问题:长帧会不会堵死总线?这个问题非常有意思,假设CAN XL一次发了一个2048字节的大数据帧。
如果这个帧发送时间比较长,期间突然来了一个高优先级控制报文怎么办?这就是CAN XL长帧带来的新问题。CiA正在推进的Frame Fragmentation机制,就是针对这种场景设计的。简单理解一个很长的CAN XL帧,可以被拆成多个片段。
当更高优先级的信息需要进入总线时,可以打断长帧传输,之后再继续传剩余的数据。这样就不会为了传一个大数据包,把实时控制消息一直堵在后面。我觉得这个设计非常符合汽车电子的实际需求,大数据需要吞吐量,小数据需要实时性,CAN XL试图把这两个需求放到同一个网络里解决。
我个人认为,CAN XL最有价值的地方,并不是把现在所有CAN FD全部替换掉,没这个必要。
CAN XL更适合的是那些CAN FD有点慢,以太网又有点重。比如区域控制器,车身域网络这些需要兼顾实时控制和较大数据量的场景。Classic CAN解决的是让ECU可靠地说话,CAN FD解决的是让ECU一次多说一点、说快一点。而CAN XL解决的问题是既要说得快,又要一次说得多,还不能把CAN原来的实时性和可靠性丢掉。
236