一天搞懂CANXL--学习笔记(入门看这一篇就够了)

前言:简单介绍CANXL

1、发展历史

CAN XL的提出与标准化(2020年至今)

  • 2020年国际CAN大会(iCC)上,CiA协会首次提出CAN XL作为第三代CAN技术,目标是填补CAN FD与以太网之间的空白。

  • 2021年发布CiA 610-1(协议层)和CiA 610-3(物理层)规范,2024年完成ISO 11898-1/2标准制定

CAN XL第三代CAN技术,目标是填补CAN FD与以太网之间的空白,CAN XL是​​CAN FD的下一代扩展​,是在CAN FD的基础上发展而来的。

2、优势

       和我们生活中移动通信中的2G、3g、4g、5g、升级之路相似,CAN网络从,传统CAN->拓展CAN->CANFD->CANXL。基本概括就是两点。

(1)为了实现更多的功能

(2)实现更快的数据传输效率(提升波特率)

 

CAN XL的技术指标:

CAN XL的核心优势

  1. 高传输速率与大容量

    • 速率提升:数据段速率达20 Mbps(部分测试中甚至30 Mbps),远超CAN FD的8 Mbps156。

    • 数据长度扩展:支持最大2048字节数据段,超过以太网单帧1518字节的限制,可封装完整TCP/IP数据包267。

  2. 兼容性与灵活性

    • 向下兼容:支持与经典CAN、CAN FD在同一网络共存,降低升级成本17。

    • 协议扩展:通过SDT(服务数据类型)和VCID(虚拟网络ID)字段,支持以太网协议(如SOME/IP、TCP/IP)及多逻辑网络并行68。

  3. 成本效益与低功耗

    • 低成本:沿用CAN的硬件架构,收发器成本显著低于以太网PHY芯片78。

    • 休眠唤醒优化:继承CAN的低功耗特性,无需额外控制信号即可实现网络唤醒,优于以太网的复杂休眠机制27。

  4. 物理层技术创新

    • PWM编解码机制:在PCS子层引入PWM编码,实现显性/隐性与Level 0/1两种驱动模式切换,提升信号稳定性与速率16。

    • 双速率模式:仲裁段使用1 Mbps低速率(兼容现有拓扑),数据段切换至20 Mbps高速率,平衡速率与网络长度限制67。

3、适用场景

CAN XL的适用场景

  1. 汽车电子:自动驾驶传感器(激光雷达、摄像头)的高带宽数据传输。

  2. 工业控制:实时传输大规模设备状态数据。

  3. 物联网(IoT):支持边缘计算节点间的低延迟通信。

4、与CAN和CAN FD的区别和联系

4.1、帧报文结构和兼容性

从下图可以看出,最大数据长度是2048字节,甚至比以太网IEE802.3中定义的以太网帧的最大数据段1024还要大。

最大速率20M,按照CANFD_目前实际项目中最常见的2M或5M的数据段,个人推测商用成熟版本在5M-10M之间。

CRC 32bit,共4个字节长度,详细后续再单独介绍。

5、与其构成竞争关系的”通信协议“

和现在内卷的社会相似,与CAN XL占据同一生态位的通讯协议还有很多,如常见的Flexray,MOST(现在已经不太常用了),车载以太网(这里特指100M车载以太网)等都是和CAN构成了竞争关系。

除了MOST(现在基本不再怎么使用了),我从成本,开发难度,应用前景等几个方面,列出了一些表格,多维度比较了CAN XL Flexray 车载以太网(100M)

5.1 成本维度

需要指出的是,再硬件成本方面,因为CAN XL 目前是因为还没有推广开来,个人推测,按照协议通讯的复杂度,未来CAN xl的成本还会降低。

维度CAN XLFlexRay100M 以太网
硬件物料成本较高(需专用芯片、外围电路适配,线束要求提升)高(专用控制器、收发器,冗余设计增加成本)较低(硬件成熟,标准化程度高,成本可控)
开发成本较高(协议复杂,新增功能多,人员需学习新特性,时间成本增加)高(协议复杂,开发难度大,依赖专业人员,周期长)较低(技术成熟,开发人员经验丰富,时间成本低)
工具链成本较高(需专用调试、测试工具,生态尚在完善)高(专用工具少且昂贵,测试验证成本高)低(工具丰富且成熟,开源工具多,成本低)

5.2 技术维度

维度CAN XLFlexRay100M 以太网
通信速率数据段可加速(如支持较高速率),仲裁段与数据段速率可灵活切换最高可达 10Mbps,时间触发确保确定性100Mbps,高速但实时性依赖协议优化
开发难度较高(新协议特性多,需理解复杂帧结构与机制)高(协议复杂,时间触发机制设计难度大)低(技术成熟,开发框架与文档丰富)
体系成熟化方案较新,处于发展阶段,部分汽车领域开始应用应用有限,成熟度一般,主要用于特定高端场景非常成熟,广泛应用于各行业,生态完善

5.3   不仅仅只有竞争,还有合作共存

CAN XL,FlexRay(未来可能被TSN以太网取代)、100M 以太网(这里的以太网是指基于协议IEEE802.3,而TSN网络则是基于IEEE802.1 两者并不是一回事),因为在实时性,与体系兼容的关系。

未来很大可能性上,CAN XL,FlexRay或TSN以太网,或车载以太网,都会以其一些特性,而共存在一辆车机系统中。

  • 安全关键系统(如刹车)→ ​​FlexRay​​。
  • 传感器大数据传输 → ​​CAN XL​​。
  • 信息娱乐/网关 → ​​100M以太网 + TSN​​。

 6、帧报文结构及其详细的解释

 

先从整体结构上来看,和CAN_FD从大的结构上来看,基本保持了一致。

SOF(帧起始位) + Arbitration Field (仲裁场)+Control Field(控制场)+DataField(数据场)+ACKField(ACK场)+EOF(帧结束)。

但是具体每个场的名称和长度和CANFD还是有不一致的地方,差异点和新增加点,用红色字体标注。

(1) SOF(Start of Frame):帧起始;保持一个bit显性位。没有改变

(2) PID(Priority ldentifier): 优先级ID,指定优先级,将传统CAN ID的仲裁、寻址两功能拆分为CAN XL的PID优先级和下述AF寻址两部分;保持11bit的长度,名称改变

(3) RRS(Remote Request Substitution):远程请求,不支持远程帧;一个bit隐形位,没有改变。

(4) IDE(Identifier Extension):ID拓展标志位,只支持11位ID,固定为显性;没有改变。

(5) FDF :隐性(Recessive,逻辑1)​​:表示该帧为 ​​CAN FD 或 CAN XL​​ 帧;没有改变

(6) XLF(XL Format): XL格式,隐性电平表明为CAN XL帧;CANFD中是叫做RES,固定为显性。这一点需要注意,名称和极性都发生改变

(7) resXL(reserved bit XL format):XL格式预留位,为之后可能的拓展更新预留;完全新增,CANFD没有这1bit。

(8) ADS(Arbitration-to-Dataphase Switch):仲裁段向数据段转换,包括四个固定位(ADH+DH1+DH2+DL),从ADH位之后开始加速,CANXL强制数据段加速;效果可以认为是等同于CANFD中的BRS位。但是作用机制更复杂,后文详细解释。

(9) SDT( Service Data-unit Type ,服务数据单元类型)8bit,:表明 CAN XL 报文携带的高层协议类型(如 01h 表示 CAN/CAN FD、04h 表示以太网等),便于接收节点根据不同协议进行处理,是对接高层协议的关键标识。详细作用后文详解。

(10) SEC(Simple Extened Content 简单扩展内容位)1bit :仅在 CAN XL 数据帧中有效,用于指示是否有附加功能。SEC 为 0 表示无附加功能;SEC 为 1 表示有附加功能(如数据加密),增强数据传输的功能性与安全性。
(11) DLC (Data Length Code)数据长度编码,长度变化为11bit,除了长度变化,其编码方式也存在变化,即:数据段实际Byte数 = ”二进制编码值“+1。于CANFD用4bit表示 12 16 24 等存在不一样的地方。

(12)  SBC(Stuff Bit Count,填充位计数)3bit :记录 SOF(帧起始)和仲裁场的位填充数量,辅助接收节点正确处理位填充,确保数据传输的正确性和规范性。

(13) PCRC(Preamble CRC,前导循环冗余校验)13bit:对仲裁场、reXEL、ADS、SDT、SEC、DLC 和 SBC 进行 CRC 校验,通过循环冗余校验算法检测这些头部字段在传输过程中是否出现错误,保障关键信息的完整性。对于详细采取哪种校验算法,后文详细介绍。

(10)  VCID(Virtual CAN network ID,虚拟 CAN 网络 ID)8bit:类似于以太网中的 VLAN ID,用于在单个 CAN XL 网段中划分虚拟逻辑网络,支持多达 256 个虚拟网络,增强网络的隔离性与灵活性,便于不同应用场景的网络管理。详细在6.5章节中详细解读。

(11) AF(Acceptance Field(接受字段)32bit) ,AF字段负责​​寻址与内容过滤​​,其具体含义由SDT字段决定,支持多种协议适配,是CAN XL实现灵活网络架构的关键设计,详细请见6.6章节。

(12)接下来就是数据段,没啥好说的,就是注意其长度,一个字节固定为8bit

(13) CRC Field CRC场,分为两个小部分,第一部分是FCRC(Frame CRC段)也就是帧CRC(同样也是对此字段之前的所有字段进行校验),固定为32bit。

​核心作用​​:FCP(Format Check Pattern)是位于CAN XL帧末尾的​​固定位模式​​(固定为4bit),用于接收端验证数据段的结构正确性,确保与发送端的比特流对齐。

详细解释见6.7章节

(14) ACK Field  ACK场。和CRC Field相似。可以划分为两个小场:

DAS :(Dataphase-to-Arbitration Switch )数据段速率切换到仲裁段速率开关。

固定为4bit,分别为 DAH、AH1、AL1、AH2

ACK : 没有什么特别的地方,与CANFD保持一致,ACK Slot 和 ACK delimiter (ACK界定符)

具体详见6.8章节,

另外对于速率切换,我有一点感悟,我们知道CANFD中速率的切换,是在两个具体的bit(BRS和CRC界定符的采样点后),完成切换的。而CANXL数据段因为具有更高的速率,因此速率切换其实是更加复杂的。故协议安排了多个bit进行。

SDT(Service Data Unit Type):服务数据单元类型,表示数据field使用的OSI协议。类似以太网帧中的EtherType。CiA 611-1的第一个版本指定了以下的SDT值:

6.1 补充说明PWM编码

6.1.1 基本定义

PWM我们都知道,叫做Pulse Width Modulation(脉冲宽度调制),PWM信号具有固定周期,接收端通过检测脉冲宽度(检测占空比而非电压高低)解码数据,需依赖时钟同步或自同步机制(如前导码校准)。

6.1.2 在CANXL上的应用

CAN XL在物理层子层(PCS)引入PWM编码,通过脉冲宽度变化降低对电压跳变的依赖,减少振铃干扰

  • 显性电平(Level 0):短脉冲(逻辑0),(有资料说占空比<50%,是显性电平)

  • 隐性电平(Level 1):长脉冲(逻辑1)。(有资料说占空比>50%,是隐性电平)

但是具体数值,我没有查找到相关数据。不能确定上文说的占空比是否正确。

6.1.3 在CANXL数据段采取PWM编码的优势

低摆幅信号​​:减少EMI,适配高密度电子环境。

6.2 CANXL的两种技术方案

CAN XL 支持的两种总线驱动方式 SIC mode(显性 / 隐性) 和 FAST mode(level_0 / level_1)

对比维度SIC modeFAST mode
编码方式采用 NRZ(不归零)编码,逻辑 “0” 用 “显性” 状态表示,逻辑 “1” 用 “隐性” 状态表示,与 CAN FD 电气属性一致。采用 PWM(脉冲宽度调制)编码,通过不同的脉冲宽度表示 level_0 和 level_1,以实现高速数据传输。
应用场景主要用于 仲裁段。在多节点竞争总线时,通过显性 / 隐性的电平竞争确定优先级,保证仲裁过程的可靠性和稳定性。主要用于 数据段。在确定总线使用权后,利用 PWM 编码的高速特性,实现数据的快速传输(最高可达 20Mbit/s)。
传输速率仲裁段速率通常为 500kbps - 1Mbps,速率相对较低但保证了仲裁的可靠性。数据段速率最高可达 20Mbit/s,满足大量数据高速传输的需求(如智能驾驶中的传感器数据)。
信号特性信号状态为明确的 “显性” 或 “隐性”,类似于传统 CAN 的电平逻辑,抗干扰能力较强,适合仲裁段的竞争环境。信号通过 PWM 编码的 level_0 /level_1 表示,更侧重于高速传输效率,通过调制脉冲宽度来传递信息。
设计目标确保仲裁段多节点竞争总线时的公平性和可靠性,避免总线冲突导致通信失败。追求数据段的高速传输,提升整体通信效率,满足现代汽车对高带宽数据(如高清视频、大量传感器数据)的传输需求。

  • SIC mode(显性/隐性)

11898-2:2024中声明,SIC mode下总线Biasing active状态下隐性信号的电平识别区间为-3V到+0.5V之间。显性信号的电平识别区间为+0.9V到+8V之间。

SIC mode下总线Biasing inactive状态下隐性信号的电平识别区间为-3V到+0.4V之间。显性信号的电平识别区间为+1.15V到+8V之间。

  • FAST mode(level_0/level_1)

11898-2:2024中声明,FAST mode下level_0信号的电平识别区间为+0.1V到8V之间。level_1信号的电平识别区间为-8V到-0.1V之间。

6.3 SBC字段详解

在CAN XL的仲裁段(暂时就可以理解为SOF-resXL内)传输中,若出现​​连续5个相同逻辑电平(显性或隐性)​​,系统会自动插入一个填充位(相反电平)以维持信号同步。

记录仲裁段中此类填充位的总数(范围0~3),通过3位格雷编码表示,理论上来说,大家可以算一下,除了11bit的ID,其他位都是相对固定。极端情况下,11bit的ID是全部为显性或全部为隐形都只会触发两次填充。

6.4 PCRC字段详解

PCRC覆盖以下关键字段,确保帧头关键信息(如优先级、协议类型)的可靠性:

​字段​​作用​​校验内容示例​
​仲裁段​节点寻址与优先级仲裁11位优先级ID、XLF格式标识位
​控制段头部​数据链路层配置ADS模式切换位、SDT协议类型标识、SEC安全指示
​SBC(填充位计数)​动态位填充校验记录仲裁段填充位数,防止填充错误

即:是可以从SOF到PCRC之前的字段都包含在内。 

算法设计与实现​
​(1) 生成多项式​
  • ​标准定义​​:
    CAN XL规范(CiA 610-1)规定PCRC采用​​13位CRC多项式​​,具体形式为:g(x)=x13+x12+x10+x7+x6+x5+x4+x2+1该多项式优化了对头部短数据的检错能力,误码率低于10−6。
​(2) 计算流程​
  1. ​初始化​​:
    CRC寄存器置为全1(13位)。
  2. ​逐位异或​​:
    将待校验数据(仲裁段、控制段头部)按位输入,与寄存器内容进行模2加法(异或)。
  3. ​移位反馈​​:
    每次输入1位后,若寄存器最高位为1,则右移1位并与生成多项式g(x)异或;否则仅右移1位。
  4. ​结果输出​​:
    最终寄存器值取反后作为PCRC校验码,附加到帧头末尾。

另外CANXL格式中还存在一个FCRC,是针对帧报文的CRC校验,注意PCRC和其不是一回事。

6.5 VCID 字段详解 

上文讲到通过VCID 划分虚拟网络,这样做的好处就是,可以在数据链路层实现不同网络的划分,举一个实例就能说明白,如:车辆一般将电器架构,划分为:车身域,动力域,底盘域。

可以在VCID阶段做出如下划分:

VCID=01,车身域

VCID=02,动力域

VCID=03,底盘域

我们现在有一个地盘域ECU(如ABS控制器),它只接收VCID=03的帧报文,其他类型报文则一概不管。

虚拟网络定义​划分的依据

每个VCID对应一个逻辑网络,其划分依据包括:

  • ​功能域隔离​​(如自动驾驶、车身控制、信息娱乐);
  • ​协议类型​​(如CANopen、SOME/IP、TCP/IP);
  • ​安全等级​​(如加密通信与非加密通信)

    以上只是举例,协议并没有强制要求,按哪一种方式划分虚拟网络。

6.6 AF(Acceptance Field)可接收字段

AF字段的核心功能​
​(1) 动态寻址机制​
  • ​协议相关寻址​​:
    根据SDT值,AF可映射不同协议的寻址方式:
​(2) 混合网络兼容性​
​(3) 灵活性与可扩展性​

​3. AF字段的技术特性​
​特性​​描述​​示例场景​
​位宽​32位固定长度支持以太网MAC地址截断或扩展CAN ID
​编码方式​二进制直接映射,无填充或加密(需结合SEC字段实现安全)

3

6

安全通信中AF可包含加密的节点地址
​硬件依赖​需支持64位验收过滤器的控制器(如NXP S32Z2、英飞凌TC4系列)

5

7

车载网关实现多协议混合过滤
​与SDT协同​通过SDT定义AF字段的语义(如0x05=以太网,0x03=CAN FD)

1

6

隧道化传输J1939报文时,AF存储源EC

6.7 FCRC和FCP的详细解释

FCRC:

校验范围​​:从帧起始(SOF)到FCRC字段前的所有数据,包括动态填充位固定填充位(这一点和CANFD的CRC包含固定填充位是一致的)

  • ​混合网络兼容性​​:在CAN XL与以太网混合架构中,FCRC可直接映射为以太网帧的CRC字段,简化协议转换流程(这一点上,CRC算法和长度上是和以太网帧的CRC保持了一致,故直接映射即可,不需要做出转变).
  • 安全关键通信​​:结合SEC(安全指示)字段,FCRC对加密后的数据段进行二次校验,防止篡改攻击。例如,当SEC=1时,FCRC不仅校验数据完整性,还需验证加密报文的完整性校验值(ICV)

FCP: 固定为4bit

Format Checked Pattter  格式检查模式

  • 填充规则验证​​:FCP检查数据段中固定间隔填充位每10位插入1位填充位,不需要10bit相同极性,只要满足10bit就填充,计数不重复包含填充位)是否符合协议规则,防止因填充错误导致的解析失败。(仲裁段和控制段还是采取的是逢5插1)。
  • ​同步机制​​:在高速数据段(如20 Mbps)传输时,FCP帮助接收端确认收发器模式切换(如从SIC模式切换到FAST模式)后的信号同步状态。

  • ​容错设计​​:若FCP校验失败,接收端立即丢弃帧并触发错误处理机制,避免错误数据进入上层协议栈

关于FCP的4个bit,网络上很多资料讲的比较复杂,实际上,目前(截至25年)只有FCP1是指示数据段填充是否正确。FCP1=1表示数据填充位错误,这里和传统CAN和CANFD还不一样,传统CAN和CANFD中是,发送端和接收端是自行判断填充是否正确。当发生不正确时,会自行发出

6.8 ACK Field详解

  1. DAH(Data - to - Arbitration High):作为 XL 数据阶段结束的标识,以 XL 数据比特率传输。在 FCP(0)位和 DAH 位之间的边界,触发比特率从 XL 数据比特率切换回标称比特率,同时向收发器发出信号,开始模式转换准备。

  2. AH1(Arbitration High 1)参与模式切换过程中的时序控制,与其他位配合,确保从数据模式到仲裁模式转换的时序正确性,保证信号同步。

  3. AL1(Arbitration Low 1):在模式切换中,帮助定义特定的电平状态序列,确保收发器正确识别切换后的仲裁模式信号特性,如 NRZ 编码的显性 / 隐性电平。

  4. AH2(Arbitration High 2):与 AH1 等配合,完成模式切换后的仲裁模式初始化,确保后续仲裁段通信的正常进行,比如在仲裁段使用标称比特率和 SIC 模式的编码方式。

4个bit相互配合

7、CANXL收发器实现方案

但是目前来说,受制于成本的影响,一般CAN收发器厂家选择了分步走的策略,即

1、先实现编码方式的实现,实现略微大于现有CAN FD(5M)达到8M的通信速率。

2、等技术方案通过验证,及充足的市场检验(技术稳定性+价格合理)后,再实现20M速率芯片。甚至有可能推出最大50M的通信速率。

CAN SIC为目前市面已量产的CAN收发器,行业内认可在多节点的总线通信中,最高可支持8Mbit/s。其仅支持显性/隐性的驱动方式,即不进行FAST mode的模式转换。(可以理解为对CANXL的帧报文格式进行了兼容)

  • CAN XL Controller + CAN SIC

作为CAN SIC XL的过度方案,CAN XL Controller + CAN SIC方案无需在目前的硬件进行更新,即可延用目前CAN FD的SIC收发器进行CAN XL数据的传输。在应用场景上,智驾域数据(比如毫米波雷达多个点位数据)可通过CAN XL 2048Byte的数据场整帧传输,有效弥补CAN FD 64Byte的限制,减少中央处理器的处理压力。支持了PWM的编码方式,但是速率依然没有实质性的提升。(注:此方案需要对CAN SIC驱动进行适应性处理)。

CAN SIC XL目前仍处于“样片“阶段,最高速率为20Mbit/s

### 关于 `CANXL_setPhysAddr` 函数的用法和实现细节 在 CAN XL 编程中,`CANXL_setPhysAddr` 是用于设置物理地址的一个重要功能函数。此函数通常被用来配置节点的物理层参数以便与其他设备通信。以下是关于该函数的一些关键点: #### 1. **函数签名** 假设这是一个标准库中的 API 接口,则其可能的形式如下所示[^1]: ```c int CANXL_setPhysAddr(CANXL_handle_t handle, uint8_t phys_addr); ``` - 参数说明: - `handle`: 表示 CAN XL 控制器实例的句柄。 - `phys_addr`: 节点所需的物理地址。 返回值为整数类型,表示操作成功与否的状态码。 #### 2. **主要用途** 通过调用这个方法可以指定当前控制器在网络上的唯一物理标识符。这一步骤对于初始化阶段至关重要,因为只有当两个或者多个设备拥有不同的物理地址时才能正常交换数据包而不会发生冲突[^2]。 #### 3. **典型应用场景** 下面展示了一个简单的例子来演示如何利用它完成基本设定过程[^3]: ```c #include "canxl_driver.h" void configure_canxl_node() { CANXL_handle_t myHandle; // 初始化硬件资源并获取句柄... myHandle = CANXL_init(); if (myHandle != NULL) { const uint8_t NODE_PHYSICAL_ADDRESS = 0x1A; // 假设我们分配给本机的是十六进制数值 '26' int result = CANXL_setPhysAddr(myHandle, NODE_PHYSICAL_ADDRESS); if(result == SUCCESS){ printf("Physical address set successfully.\n"); }else{ fprintf(stderr,"Failed to set physical address!\n"); } } } ``` 在此片段里可以看到先创建了指向特定 CAN XL 设备对象的指针变量 (`myHandle`) ,接着定义好打算使用的具体编号作为目标位置传入实际执行命令之中去验证结果状态是否符合预期要求。 #### 4. **注意事项** 需要注意的一点是,在某些情况下可能会存在额外约束条件比如有效范围限制等需要开发者自行查阅官方文档确认适用情况下的边界值以及错误处理机制等方面的信息[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值