CAN总线的CC帧和FD帧之间如何仲裁

server/2025/3/18 14:03:32/

为满足CAN总线日益提高的带宽需求,博世公司于2012年推出CAN FD(具有灵活数据速率的CAN)标准,国际标准化组织(ISO)2015年通过ISO 11898-1:2015标准,正式将CAN FD纳入国际标准,以示区别,之前的CAN 2.0A/B被命名为经典CAN(CAN CC,Classic CAN)。

CAN FD继承了CAN CC的绝大多数特性,如同样的物理层、双线差分串行通信协议、非破坏性的仲裁技术、分布式实时控制、可靠的错误处理和检测机制等。

CAN FD通过提高报文帧的数据字段长度至最大64字节,并允许数据域比特率相对仲裁域比特率动态调整至最高8Mbps,有效弥补了CAN CC在总线带宽和数据长度方面的不足。同时,CAN FD使用改进的循环冗余校验 (CRC) 和“受保护的填充位计数器”,进一步降低了总线传输差错的漏检概率。

为保护对现有设备的投资,一个成熟的规范在升级时,总会尽量优化对现有规范的向下兼容,CAN FD同样如此。关于CAN CC与CAN FD之间的兼容性,比较主流的说法是:

  • CAN FD设备和CAN CC设备在同一个网络时,由于CAN CC设备不能正确识别FD帧格式,处于活动状态的CAN CC设备会以“报错帧”的方式中断网络中FD格式消息的传输。用户在对这样的网络进行管理时,需要禁止CAN FD设备发送FD格式的消息;或选用支持局部网络(Partial Networking)的CAN CC设备,并配置这些设备只在收到特定的CC格式的消息时才被“唤醒”而工作。
  • 网络全部由CAN FD设备构成时CC格式和FD格式的消息可以在网络中混合使用

例如,Vector公司的宣传资料《CAN FD – An Introduction》中这样写到:

既然同为CAN FD设备的网络中,CC格式和FD格式的消息可以混用,那么,当这样的网络中出现ID相同的CC格式消息和FD格式消息时怎么办?

站在用户的角度,我已经全部升级为CAN FD设备了,那我之前CC格式消息已经满足需求的节点,在网络管理上就不用改了吧,CC格式消息和FD格式消息同时发送时,由节点的CAN FD控制器仲裁,你就告诉我哪个的优先级更高吧,最好CC格式的优先级更高。

用户这么一个简单又朴素的要求,我们当然得满足咯,来看看CC格式的消息和FD格式的消息在仲裁场是啥样的(以标准数据帧为例):

按照规范的定义,CAN FD将CAN CC标准帧中的保留位r0(扩展帧中的r1)重定义为FDF(FD Format indicator)位,用于标识FD帧格式。CAN CC格式的消息发送时,r0/r1位要求发送“显性”位,CAN FD格式的消息发送时,FDF位要求发送“隐性”位,当二者ID相同时,“隐性”的FDF位被“显性”的r0/r1覆盖,FD格式竞争失败?看起来好像是这么回事儿,但总觉得哪里不对,再仔细看看,完了,FDF位不在帧的仲裁场而在控制场,不能用来仲裁!别急,看看规范怎么说(ISO 11898-1:2015 Page 31,10.4.2.4):

该来的还是来了,规范说:“FDF位用于区分CC帧格式和FD帧格式。…不能通过FDF位仲裁在一个特定应用中,一个ID要么分配给CC帧,要么分配给FD帧,不能同时分配给CC帧和FD帧。”好嘛,皮球又完美地踢给了用户!

时间来到了2024年,ISO发布了11898-1:2024规范,CAN XL横空出世!它在Page 34,6.6.11.2章节这样说:

ISO 11898-1:2024终于忍不住而打破传统了,节点间仲裁终于突破仲裁场的范围了,从而在规范层面定义了CC帧的优先级高于相同ID的FD帧

但是,它又加了一句,让我对下一版的ISO 11898-1:20XX规范充满了期待,加了句啥呢:不支持XL帧格式的节点发送FD帧,当发送的“隐性”FDF位回读为“显性”位时,可(may)处理为“位错误”而不是仲裁失败
 

这有什么问题?如果一个设计者(或团队)遵照ISO 11898-1:2024设计CAN控制器,限于当前(2025年)还没有成熟的CAN XL收发器芯片(所以实现不了高达20Mbps的CAN XL产品),打算先设计为不支持XL帧,然后呢,他规范还读得贼仔细,看到了这一句,好巧不巧,他的想法是,既然你说可以,那我就这么干吧。
当他的产品投入使用后,一个场景出现了,这个遵照ISO 11898-1:2024规范设计的CAN FD设备,其发送的FD帧在与其它设备发送的同ID的CC帧竞争中,走到FDF这一位时, CC帧发的是“显性”位,FD帧发的是“隐性”位,但这个遵照ISO 11898-1:2024规范设计CAN FD设备是会报错的,在它转入Error-Passive状态前,会发Active Error Frame,打断CC帧的发送。

所以,ISO 11898-1:2024为什么要加这么一句呢?!


http://www.ppmy.cn/server/175977.html

相关文章

Linux第六讲----git与gdb

1.创建仓库并上传代码 打开gitee,新建仓库 按下图操作:之后点创建 在点击橙色的克隆下载:并复制 之后登录xshell并进入家目录 输入git clone 右键粘贴 如下图所示 之后我们进入for_delete cd for_delete/ 创建一个文件,code.c,输入如下内…

2024年第十五届蓝桥杯软件C/C++大学A组——五子棋对弈

蓝桥杯原题: 题目描述: “在五子棋的对弈中,友谊的小船说翻就翻? ” 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着 “ 友谊第一,比赛第二…

WebSocket和长轮询

WebSocket 原理与实现 原理 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。它允许服务器主动向客户端推送数据,而不需要客户端发起请求。一旦连接建立,客户端和服务器可以随时互相发送消息。 握手阶段:客户端通过HTTP请求升级到W…

告别数据库束缚!用esProc在 csv 文件上执行 SQL

esProc SPL 支持简单 SQL,可以直接在 csv 等结构化文本文件上执行 SQL 语句,这样,不用数据库也可以用 SQL 计算了。 先下载 esProc SPL:免费下载 不想折腾源代码的话,可以用标准版,找到相应版本下载后安装…

用 Vue 3.5 TypeScript 重新开发3年前甘特图的核心组件

回顾 3年前曾经用 Vue 2.0 开发了一个甘特图组件,如今3年过去了,计划使用Vue 3.5 TypeScript 把组件重新开发,有机会的话再开发一个React版本。 关于之前的组件以前文章 Vue 2.0 甘特图组件 下面录屏是是 用 Vue 3.5 TypeScript 开发的目前…

AGI大模型(8):提示词的安全与防护

1 前言 著名的「奶奶漏洞」,⽤套路把 AI 绕懵。 2 常⻅的提示词攻击技术 2.1 同类型⽬标劫持 同类⽬标劫持攻击,特别是在同类型任务的背景下,涉及到攻击者通过⾮法⼿段控制模型,并迫使其执行与原始任务性质相同但⽬标不同的操作…

Linux《进度条》

在之前的Linux基础开发工具当中我们已经了解了vim、gcc、makefile等基本的开发工具,那么有了这些开发工具我们就可以来实现我们Linux旅程当中的第一个程序——进度条。相信通过该项目的实现能让你对vim等开发工具更加的熟悉。一起加油吧!!&am…

时区转换工具

开发一个Python程序,将用户输入的北京日期时间转换为全球多个目标地区的对应时间,支持手动选择地区,并显示开始和结束两个时间段的转换结果 import pytz from datetime import datetime import pandas as pd from tabulate import tabulate …