下一代CAN通信技术CAN XL简介

众所周知,CAN网络具有易于实现、可扩展、并支持复杂拓扑结构等诸多优点,所以目前在各个行业特别是汽车领域,得到了非常广泛的应用。但是,它也存在着诸多问题,其中最大的一点就是总线带宽和数据场长度太低,导致承载能力非常有限。为此,CiA(CAN-in-Automation,国际用户与制造商联合组织)推出了CAN FD(CAN with Flexible Data rate)。CAN FD继承了CAN总线的主要特性,但是弥补了CAN总线带宽和数据场长度的制约,CAN FD总线与CAN总线的区别主要在以下两个方面:

  • 可变速率:CAN FD采用了两种位速率:从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,其余部分为原CAN总线用的速率。两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位TQ外,位时间各段的分配比例也可不同。

  • 新的数据场长度:CAN FD对数据场的长度作了很大的扩充,DLC最大支持64个字节,在DLC小于等于8时与原CAN总线是一样的,大于8时有一个非线性的增长,所以最大的数据场长度可达64字节。

CAN FD引入了更快的比特率,在数据阶段可设置为高达5 Mbit/s,但其后果是由于信号振铃而受到严格的拓扑结构限制。这就使CAN FD局限于线性网络,限制了设计的自由度,增加了布线和系统成本。所以,在2020年的第17届国际CAN大会(iCC)上,CiA又推出了第三代CAN通信技术CAN XL。

一、什么是CAN XL

CAN XL是一种高度可扩展的通信技术,涉及比特率和数据字段的长度。物理层仍在开发中。目标是实现高达10+ Mbit / s的比特率。 CAN XL针对面向区域的异构网络体系结构进行了优化。该方法以最优的长度满足未来车载网络的要求。汽车工业试图减少布线,以最小化重量,或者换句话说,是限制能耗。它的几个核心期望特性如下:

  • 有效负载长度:与以太网帧长度一样;
  • 可靠性:等于或者优于CAN,CAN FD和10Mbit/s以太网的稳定性;
  • 鲁棒性:与CAN FD一样好,甚至要优于10Mbit/s以太网;
  • 波特率:在数据段的传输速率最大可达10Mbit/s;
  • 兼容性:向后兼容CAN FD。

CAN XL是对CAN和CAN FD的进一步扩展,并且在很大程度上遵循相同的运行原理。CAN报文分为仲裁场和数据场。尽管CAN XL在仲裁场使用500kbit/s至1Mbit/s的低速率,但数据场的传输速率却可提升至2Mbit/s至10Mbit/s。相对于CAN FD的可选速率切换功能,CAN XL强制执行速率切换。

此外,总线访问仍旧采用CSMA/CD(载波侦听多路访问/冲突解决方案),通过位仲裁解决总线访问权限问题。CAN XL遵循严格的优先级概念,允许更重要的消息无延迟地传输。CAN XL仅支持11位标识符ID,不再使用29位标识符ID。CAN XL凭借用于报头和帧以及格式检查的汉明距离6算法,确保数据传输的高可靠性,实际上胜过FlexRay和以太网的CRC功能。

然而,对于未来的应用而言重要的不仅仅是提高数据传输速率。CAN XL主要功能之一是数据场支持1~2048Byte的可变长度。在必要时,可将以太网帧打包为CAN XL消息,直接或间接通过CAN XL使用IP通信技术。

CAN XL传承自经典的CAN和CAN FD,并缩小了CAN/CAN FD与Ethernet之间的传输速度和耦合的差距。在合适的应用领域中,CAN XL可以采用更小巧更便宜的控制器。利用高达2048Byte的有效数据长度,CAN XL为将来传输以太网帧和利用IP通信提供所需的功能。在不久的将来,这意味着CAN XL和10base-T1S可以共同在基于信号的通信和面向服务的通信之间提供连接。通过对协议层进行适当的扩展,将为应用提供更丰富的可能性。

在这里插入图片描述

二、CAN XL Vs CAN FD

不少同学会问,那么CAN XL与CAN FD究竟差在什么地方呢?下面就进行详细的对比。

在这里插入图片描述

与CAN FD相比,CAN XL增加了位的数量;
这些附加位位于报文头与报文末尾处;
大多数的所需位是CRC,必须增加它才能保护超出的更多的字节。

1、报头部分

在这里插入图片描述

上图中顶部的黑线表示隐性,底部的黑线表示显性。那么我们分析上图可得出以下结论:

  • SOF和11位的CAN ID场在CAN、CAN FD、CAN XL中是通用的; CAN FD和CAN XL始终不支持RTR远程请求;
  • CAN XL不支持IDE标识符扩展(29位CAN ID),该位始终处于显性;
  • 隐性FDF位指示CAN FD,隐性FDF、XLF位指示CAN XL;
  • CAN FD中res位始终处于显性,隐性BRS位(波特率切换)会提升传输速率;
  • CAN FD中ESI位通常处于显性,但处于被动错误时会变为隐性;
  • CAN XL中resXL位是隐性的,可用于将来的扩展;
  • CAN XL中AL1、DH1和DL1作为新的波特率切换序列; CAN XL中Payload 8-bit用于不同数据包的预定义多路复用位;
  • CAN XL中DLC是一个11位整数,其中数据字节数是该整数加1;
  • CAN XL中Header-CRC用于保证DLC正确,DLC定义数据CRC从何处开始。

2、报尾部分

在这里插入图片描述

  • 对于相同的数据长度,CAN XL中较长的报头可能需要较长的CRC;
  • CAN XL包含用于波特率切换位,确保向前的兼容性;
  • CAN XL CRC之后是波特率的切换模式,而不是CRC定界符;
  • 为了确保重新同步到未来格式的帧末尾,集成格式:将CAN XL中放置NACK添加到旧ACK中。

CAN XL每个CAN帧中有更多的数据:1-2048字节,并且在数据部分增加了波特率,具有更好的故障保护措施,可为下一代CAN做更好的准备。

三、Q&A时间

1、CAN XL现在有对应的收发器和控制器么?

答:目前因为CAN XL的标准还没有正式出来,CAN XL的收发器和控制器估计会在2到3年内推出

2、CAN XL传输还是用普通的双绞线么?一条总线上可以和CAN,CANFd节点共存么?

答:关于传输的线缆,目前CiA还在进一步确认中,因为线缆其实也是非常重要的一环,会采取更谨慎和有保证的方案。

关于CAN 和CAN FD与CAN XL的节点共存问题,其实三者理论上都可以在同一个网络中,不过前提是都要支持新的MICI接口规定,即medium-independent CAN interface,介质无关CAN接口。


未完待续,敬请关注!

  • 14
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要在 PyTorch 中使用 Transformer-XL,你可以使用 PyTorch 的 `nn.Transformer` 类。 首先,你需要安装 PyTorch 和 torchtext。然后,你可以在你的代码中导入这些模块: ``` import torch import torchtext from torchtext.datasets import TranslationDataset, Multi30k from torchtext.data import Field, BucketIterator import spacy import random import math import time ``` 接下来,你可以定义源语言和目标语言的 `Field` 对象: ``` SEED = 1234 random.seed(SEED) torch.manual_seed(SEED) torch.backends.cudnn.deterministic = True spacy_de = spacy.load('de') spacy_en = spacy.load('en') def tokenize_de(text): """ Tokenizes German text from a string into a list of strings """ return [tok.text for tok in spacy_de.tokenizer(text)] def tokenize_en(text): """ Tokenizes English text from a string into a list of strings """ return [tok.text for tok in spacy_en.tokenizer(text)] SRC = Field(tokenize = tokenize_de, init_token = '<sos>', eos_token = '<eos>', lower = True) TRG = Field(tokenize = tokenize_en, init_token = '<sos>', eos_token = '<eos>', lower = True) ``` 然后,你可以使用 `torchtext.datasets.TranslationDataset` 类加载数据集: ``` train_data, valid_data, test_data = TranslationDataset.splits( exts=('.de', '.en'), fields=(SRC, TRG), path='path/to/data', train='train', validation='val', test='test') ``` 接着,你可以建立词汇表,并将词汇表映射到数据中: ``` SRC.build_vocab(train_data, min_freq = 2) TRG.build_vocab(train_data, min_freq = 2) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') BATCH_SIZE = 128 train_iterator, ### 回答2: 使用Transformer-XL在PyTorch中的步骤如下: 1. 首先,你需要安装PyTorch库。在PyTorch官方网站上可以找到相应的安装指南和命令。 2. 在安装完PyTorch之后,你需要确保你拥有Transformer-XL的代码和预训练模型。你可以从Hugging Face Transformers库中获取已经实现好的Transformer-XL模型,也可以从官方源码库中获取。 3. 一旦你有了Transformer-XL的代码和预训练模型,你需要导入它们并初始化一个模型实例。你可以使用PyTorch的`torch.load()`函数来加载预训练模型的参数。例如: ```python model_state_dict = torch.load("path/to/transformer-xl-model.pth") model = TransformerXLModel() model.load_state_dict(model_state_dict) ``` 4. 接下来,你需要将输入数据转换成模型可以接受的格式。Transformer-XL接受的输入是一个序列,可以是单词、字符或其他语言单元的序列。你需要将输入数据转换为对应的编码数组或矩阵。你可以使用库函数或自己编写代码来完成这个转换。 5. 当输入数据准备好后,你可以使用模型的前向传播函数来进行预测。你可以调用模型的`forward()`函数,将输入数据传给它,并得到模型的输出。例如: ```python input_data = torch.tensor([1, 2, 3, 4, 5]) # 用你的输入替换这个例子 output = model.forward(input_data) ``` 6. 最后,你可以根据模型的输出做进一步的处理,比如计算损失、分类、生成文本等。根据具体的任务和需求,你需要编写相应的代码来完成这些操作。 希望这些步骤能帮到你开始在PyTorch中使用Transformer-XL!事实上,使用Transformer-XL的具体实现可能还有其他的细节,你可以查阅官方文档、论文或参考其他资源来深入了解和应用。 ### 回答3: 使用Transformer-XL在PyTorch中的步骤如下: 1. 安装PyTorch:在使用Transformer-XL之前,需要先安装PyTorch。可以根据操作系统和需求选择合适的版本进行安装。 2. 下载Transformer-XL代码库:可以从GitHub上下载Transformer-XL的代码库。找到合适的存储库并将其克隆到本地: ``` $ git clone https://github.com/kimiyoung/transformer-xl.git ``` 3. 安装依赖项:在安装完PyTorch和下载Transformer-XL代码库后,需要安装代码库的相关依赖项。可以使用以下命令安装依赖项: ``` $ cd transformer-xl $ pip install -r requirements.txt ``` 4. 数据预处理:对于Transformer-XL模型,首先需要对数据进行预处理。根据您的数据集和任务,需要编写适当的数据预处理代码。这些代码将读取数据集并将其转换为模型所需的输入。 5. 配置模型:在使用Transformer-XL之前,需要配置模型。可以使用代码库中提供的样例配置文件,在其中指定模型的参数和超参数。根据需要修改配置文件。 6. 训练模型:使用预处理好的数据和配置文件,可以开始训练Transformer-XL模型。运行以下命令启动训练过程: ``` $ python train.py --config path_to_config_file ``` 其中,`path_to_config_file`应替换为您的配置文件路径。 7. 模型推断:训练完成后,您可以使用训练得到的模型进行推断。编写适当的推断代码,加载模型并使用输入数据进行预测。 请注意,以上步骤仅提供了基本的使用Transformer-XL的指导。根据具体需求和任务,您可能需要进一步修改代码和进行调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值