CAN XL :CAN协议家族新成员

年之前,你不认识我,我也不认识CAN FD。如今,CAN FD已经陆续进入乘用车领域,几乎所有汽车制造商都将在未来几年内逐步推出搭载CAN FD的乘用车。那十年之后,车载网络又会向什么方向发展呢?

根据现在的形势来看,车载架构将从历史悠久的平面网络方案迁移到与域相关的方案。而域相关的车载网络体系结构,就需要通用的标准化高层协议。对于高层协议来说,它们应尽可能独立于下层协议,这样不同通信技术的专用技术和商业功能就能够被使用。当然,要支持TCP / IP,经典的CAN和CAN FD并不是最好的下层方法。因此,CiA(CAN in Automation,以下简称CiA)及其成员已经开始开发具有支持10 Mbit / s甚至更多的物理层的CAN XL。虽然TCP / IP不一定是最佳的传输/网络层的解决方案,但是DoIP已经在ISO中标准化并且广泛应用了,所以能够支持TCP/IP对于CAN XL来说还是非常重要的。

CAN XL规范尚未最终确定,仍然存在一些未解决的问题。已经决定的是数据字段长度最大为2048字节和11位优先级字段。此外,该协议为使用的下一个更高协议提供8位指示符。可以说这是不适合经典OSI参考模型的嵌入式层设置参数。这样的嵌入式层设置参数对于其他高层协议也将很有帮助,以简化多协议堆栈。如今,标准化了太多不同的高层协议,它们并不完全独立于所使用的较低层协议。一些ISO专家希望克服这一点。

CAN XL原计划于3月中旬在德国-巴登举行的国际CAN大会(iCC)上正式推出。今年晚些时候,当CAN XL规范发布并且相关的互操作性测试证明了第一个实现的互操作性时,CiA会将它们提交给ISO进行国际标准化。

下面就一起来看一下CAN XL与CAN FD的异同。

▲ 图 1:CAN FD, CAN XL帧格式

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

CAN FD& CAN XL报头比较

▲ 图 2:CAN FD, CAN XL帧头部

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

  • 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从何处开始。

▲ 表 1:DLC编码表

CAN FD& CAN XL报尾比较

▲ 图 3:CAN FD, CAN XL帧尾

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

CAN XL的波特率转换

▲ 图 4:CAN XL帧格式

  • DH1和DL1之间边缘的波特率增加;
  • DH2和DL2之间边缘的波特率降低;
  • AL1位包含一个特殊模式,它可以切换CAN驱动器进入高波特率模式;
  • AH1位包含一个特殊模式,它将使CAN驱动器脱离高波特率模式。

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

上文曾说到,CAN XL是CiA为了填补CAN FD与100Base-T1之间的空白而提出的解决方案。相应的,IEEE已经于2019年标准化了一个适用于汽车的10Mbps以太网版本(10BASE-T1S)。那么,这两种方案之间的对比是自然少不了的,本人才疏学浅,只能就个人对10Base-T1S和CAN XL这两种技术的理解来进行比较,主要是从发布的标准进行定性的一些比较。

首先从规范成熟度来看,10Base-T1S已经发布了标准文档。CAN XL规范还没有最终确定,仍有一些悬而未决的问题待决定。

接下来对比两者的具体性能。从数据净载荷来看,两种技术都可以达到10Mbps。但是为了兼容老的CAN规范,CAN XL帧的头部和尾部速率较低,这其实降低了整个的传输速率。在兼容性方面,CAN XL可以实现对大多数CAN/CAN FD应用的兼容,但是不支持远程帧和29bit的ID场,这就导致在商用车领域的应用受到了限制。10BASE-T1S继承以太网的良好特性,很多成熟的基于TCP/IP的工业界软件都容易移植到新的车载以太网协议上去。而且在以交换机为核心的车载网络中是如鱼得水的。

CAN XL继承了CAN的良好特性,可以保证收发数据无丢失,这个特性都是固化在CAN控制器中的。10Base-T1S跟其他以太网协议一样,需要通过较高层的协议(如TCP)才能检测出数据丢失,而且依赖于软件实现。CAN XL跟CAN一样,可以检测故障并从故障中恢复出来,当帧头部速率1Mbps时可以在23us内恢复,但TCP/IP却要花几十ms才能从故障中恢复过来。所以,可以说在数据安全性上CAN XL略胜一筹。

最后分析一下很多OEM厂家最关心的话题——成本。CAN控制器目前是集成到处理器芯片中的,这减少了一部分软件成本也保证了一致性。除去交换机的成本因素不谈,就单个处理器芯片来说,可能会有一些处理器集成10Base-T1S控制器,但由于以太网软件协议栈的缘故可能会增加一些软件成本,而且还会带来协议一致性的问题。同时,受限于25m的最长通信线路和最大8个节点,会导致在一些特殊域使用起来要分多个网段,增加成本。

▲ 表2:CAN XL与10Base-T1S对比

当然,CAN XL还是需要等ISO进行国际标准化之后才能够真正的登上历史舞台,但是,现在已经给人们提供了一个新的高速稳定的传输方案。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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的指导。根据具体需求和任务,您可能需要进一步修改代码和进行调优。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值