通信总线协议之CAN-FD协议详解

文章目录

  • 通信总线之CAN-FD总线协议详解
    • 1. CAN-FD 简介
      • 1.1 什么是CAN FD
      • 1.2 CAN FD的特点
    • 2. CAN-FD总线协议
      • 2.1 帧起始
      • 2.2 仲裁段
      • 2.3 控制段
      • 2.4 数据段
      • 2.5 CRC段
      • 2.6 ACK段
      • 2.7 帧结束
    • 3. 如何从传统的CAN升级到CAN FD

通信总线之CAN-FD总线协议详解

1. CAN-FD 简介

1.1 什么是CAN FD

  • 在《 通信总线协议之CAN总线协议详解 》中介绍了CAN 2.0 A/B总线协议,但是随着总线技术在汽车电子领域越来越广泛的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度数据传输速率的要求也越来越高,传统CAN(1MBit/s,8Bytes Payload)已难以满足日益增加的需求。
  • 因此,一种能够与CAN 2.0 A/B兼容,但通信速率更高,有效载荷更高的CAN总线 :CAN-FD总线协议应运而生,在2012年,Bosch发布了新的CAN FD标准 (CAN with Flexible Data Rate)
  • CAN FD继承了CAN的绝大多数特性,如同样的物理层,双线串行通信协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制等,同时CAN FD弥补了CAN在总线带宽和数据长度方面的不足。

1.2 CAN FD的特点

  • CAN FD传输速率是可变的:从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,最高速率可达到8Mbps
  • CAN FD数据长度不同:CAN FD每个数据帧最多支持64个数据字节,而传统CAN最多支持8个数据字节,这减少了协议开销,并提高了协议效率。
  • CAN FD帧格式不同:CanFD新增了FDF、BRS、ESI位
    • FDF 位(Flexible Data Rate Format):原 CAN 数据帧中的保留位 r,用来区别是 CAN 报文还是 CAN-FD 报文,FDF 位常为隐性 1,表示 CAN FD 报文;
    • BRS 位( Bit Rate Switch):表示位速率转换,当 BRS 为显性位 0时,数据段的位速率与仲裁段的位速率一致(恒定速率),当 BRS 为隐性位 1时速率可变(即 BSR 到 CRC 使用转换速率传输);
    • ESI 位(Error State Indicator):发送节点错误状态指示,主动错误时发送显性位 0被动错误时发送隐性位 1

2. CAN-FD总线协议

  • CAN FD节点可以正常收、发CAN报文,但CAN节点不能正确收、发CAN FD报文,因为其帧格式不一致。
  • 与CAN一样,CAN FD一共具有:帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束,7部分组成。

CAN 标准帧格式
CAN FD帧格式

2.1 帧起始

  • CAN FD与CAN使用相同的SOF标志位来标志报文的起始
  • 帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步的作用
    在这里插入图片描述

2.2 仲裁段

  • 与传统CAN相比,CAN FD取消了远程帧,用RRS位替换了RTR位,为常显性;
    • RTR(Remote Transmission Request Bit):远程发送请求位,RTR位在数据帧里必须是显性,而在远程帧里为隐性
    • RRS(Remote Request Substitution):远程请求替换位,即传统CAN中的RTR位,CAN FD中为常显性
  • IDE位仍为标准帧和扩展帧标志位,若标准帧与扩展帧具有相同的前 11 位 ID,那么标准帧将会由于 IDE 位为 0,优先获得总线;
    在这里插入图片描述

2.3 控制段

  • 控制段中CANFD与CAN有着相同的IDEresDLC位;同时增加了三个控制bit位,FDF、BRS、ESI
  • FDF(Flexible Data Rate Format):原CAN数据帧中的保留位r,FDF常为隐性,表示CAN FD 报文;
  • BRS(Bit Rate Switch):位速率转换开关,当BRS为显性位时数据段的位速率与仲裁段的位速率一致,当BRS为隐性位时数据段的位速率高于仲裁段的位速率;
  • ESI(Error State Indicator):错误状态指示,主动错误时发送显性位,被动错误时发送隐性位;
    在这里插入图片描述
  • DLC同样是4bit表示数据段的长度,对应的关系如下:
    在这里插入图片描述

2.4 数据段

  • 数据段即为传输的具体数据内容
  • CAN FD不仅能支持传统的0-8字节报文,同时可以支持12, 16, 20, 24, 32, 48, 64字节

在这里插入图片描述

2.5 CRC段

  • 为了避免位填充对CRC的影响,CAN FD在CRC场中增加了stuff count记录填充位的个数对应8的模,并用格雷码表示,还增加了奇偶校验位;且在CRC中加入了填充位FSB(fixed stuff-bit)

  • Stuff Count由以下两个元素组成:

    1. 格雷码计算:CRC区域之前的填充位数除以8,得到的余数(Stuff bit count modulo 8)进行格雷码计算得到的值(Bit 0-2)
    2. 奇偶校验(parity):通过格雷码计算后的值的奇偶校验(偶校验)
  • CAN FD对CRC算法进行了改进,CRC对填充位也加入了计算;在校验部分为避免有连续位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分割,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作出错处理。

  • CAN的CRC的位数是15位,而在CAN FD中,CRC场扩展到了21位,如下:

    • 当传输数据为0~8字节时:CRC 15位
    • 当传输数据为9~16字节时:CRC 17位
    • 当传输数据为17~64个字节时:CRC 21位
      在这里插入图片描述

2.6 ACK段

  • 与CAN相比,在CAN FD中最多可接受2个位时间有效的ACK,允许1个额外的位时间来补偿收发器相移和传播延迟
  • 由从高速的数据场到慢速的仲裁场时,时钟切换会引起收发器相移和总线传播延迟;为了补偿其相移和延迟,相比传统的CAN,在CAN FD中多加了这额外的1位时间
  • 在ACK之后,发送ACK界定符,这是一个表示ACK结束的分隔符,用1位隐性位表示
    在这里插入图片描述

2.7 帧结束

  • 与CAN一样,CAN FD的帧结尾也为连续7位的隐性位

3. 如何从传统的CAN升级到CAN FD

  • 尽管 CANFD 继承了绝大部分传统 CAN 的特性,但是从传统 CAN 到 CANFD 的升级, 仍需要做很多的工作,主要包括:
    1. 硬件和工具方面,要使用 CANFD,首先要选取支持 CANFD 的 CAN 控制器和收发器,还要选取新的网络调试和监测工具;
    2. 网络兼容性方面,对于传统 CAN 网段的部分节点需要升级到 CANFD 的情况要特别注意,由于帧格式不一致的原因,CANFD 节点可以正常收发传统 CAN 节点报文,但是传统 CAN 节点不能正常收发 CANFD 节点的报文;

感谢阅读 若有错误 欢迎指正 !!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/448577.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AJAX学习(三)

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…

SpringBoot 多环境的配置(附带有截图)

文章目录 概要整体配置流程配置详细说明技术细节小结 概要 多环境开发 在实际项目开发中,一般需要针对不同的运行环境,如开发环境、测试环境、生产环境等,每个运行环境的数据库等配置都不相同,每次发布测试、更新生产都需要手动…

精酿啤酒:酿造工艺的与众不同之处与魅力

Fendi Club啤酒的酿造工艺具有与众不同之处和魅力,这些特点使得啤酒口感与众不同、品质卓着。 Fendi Club啤酒采用与众不同的原料配方。他们精选上好麦芽、酵母和啤酒花,并按照与众不同的比例进行搭配。这种与众不同的原料配方为啤酒提供了丰富的口感和…

LLM推理框架Triton Inference Server学习笔记(一): Triton Inference Server整体架构初识

官方文档查阅: TritonInferenceServer文档 1. 写在前面 这篇文章开始进行大语言模型(Large Language Model, LLM)的学习笔记整理,这次想从Triton Inference Server框架开始,因为最近工作上用到了一些大模型部署方面的知识, 所以就快速补充了…

记一次用Arthas排查Redis连接数增加问题(附:redis连接池优化)

手打不易,如果转摘,请注明出处! 注明原文:https://zhangxiaofan.blog.csdn.net/article/details/136493572 前言 有一次生产环境发包后,发现redis连接数变多了,由于改的代码比较多,不确定是哪…

下载、安装并配置 Node.js

文章目录 1. 下载2. 自定义安装3. 添加环境变量4. 验证5. 修改下载位置6. npm 换源7. 测试 ➡️➡️➡️来源:Simplilearn.com Node.js 是一个开源、跨平台的 JavaScript 运行时环境和库,用于在客户端浏览器之外运行 web 应用程序。 Ryan Dahl 在2009年开…

2024.3.11 C++作业

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {char str[20];cout << "please enter the str:";gets(str);in…

YoloV7改进策略:Block改进|自研Block,涨点超猛|代码详解|附结构图

涨点效果 参考模型 参考的Block,如下图: 我对Block做了修改,修改后的结构图如下: 代码详解 from timm.models.layers import DropPathfrom torch import Tensor def channel_shuffle(x: Tensor, groups:

5G CA频段组合与带宽的射频标准

先来复习一下我们前面学习过的章节后缀所代表的含义&#xff1a; None Single CarrierA Carrier Aggregation (CA)B Dual-Connectivity (DC)C Supplement Uplink (SUL)D UL MIMOE V2XF Shared spectrum channel accessG Tx Diversity (TxD)I …

docker容器启动rabbitmq

docker容器启动rabbitmq 一、RabbitMQ部署1.1.在线拉取mq镜像1.2.运行mq容器1.3.访问mq 二、RabbitMQ的集群2.1.集群分类2.1.设置 /etc/hosts文件 endl 一、RabbitMQ部署 1.1.在线拉取mq镜像 # 在线拉取 docker pull rabbitmq:3-management1.2.运行mq容器 docker run \ -e R…

【Python】Python中的正则表达式

Python中的正则表达式 1.re模块使用入门 1.1 re.match 函数 函数定义&#xff1a; re.match 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match() 就返回 none。 函数语法&#xff1a; re.match(pattern, string, flags0) …

全网最最最详细DataEase-V1部署前后端分离教程

前端代码准备 按照前端官方的介绍&#xff0c;推荐使用node.js 16版本左右的&#xff0c;由于V1的DataEase是使用的Vue2的项目工程&#xff0c;DataEase部署&#xff0c;前端node相关不应该太新。要是不知道如何去做的小伙伴可以看我的其中一篇博客文章&#xff0c; 如何使用…

Java源码项目基于springboot的江理工文档管理系统的设计与实现

大家好我是程序员阿存&#xff0c;在java圈的辛苦码农。辛辛苦苦板砖&#xff0c;今天要和大家聊的是一款Java源码项目基于springboot的江理工文档管理系统的设计与实现&#xff0c;项目源码以及部署相关请联系存哥&#xff0c;文末附上联系信息 。 项目源码&#xff1a;Java基…

103. Go单测系列3---mockey与convey综合实战

文章目录 前言断言mock整体使用方式&#xff1a;具体示例mock结构体方法mock普通函数序列化mock MySQL和Redis单测go-sqlmockminiredis F&Q1. 如何禁用内联和编译优化 前言 工作中&#xff0c;随着业务的快速发展&#xff0c;代码量级和复杂度也会随之快速增长&#xff0c…

GeoPy1.1 地理数据处理入门

原作者&#xff1a;Damon 高校教师&#xff0c;中科院 GIS 博士 本文为原文章基础上&#xff0c;加上自己以及GPT4.0的总结整理而来 原活动链接 目录 前言小练习&#xff1a;求一周的平均温度小练习&#xff1a;将文件夹下的文件路径都打印出来&#xff1a;小练习&#xff1a…

【微信小程序页面出现onReachBottom不触发的情况】

微信小程序页面出现onReachBottom不触发的情况 源代码的情况是 /** * 页面上拉触底事件的处理函数 */ onReachBottom() {console.log("-------"); },.page {height: 100vh;width: 100vw;overflow-x: hidden; }无法触发的原因是&#xff1a;height设置为100vh,会导…

轻松掌握锁冲突问题的排查方法——《OceanBase诊断系列》之八

1. 前言 OceanBase数据库通过两阶段封锁机制确保读写事务并发控制的正确性。在高冲突场景下&#xff0c;事务处理中经常会遇到行锁冲突的问题。然而&#xff0c;许多OceanBase用户对于何时发生锁冲突&#xff0c;锁冲突的表现如何&#xff0c;以及如何排查锁冲突的原因&#x…

Anaconda 的一些配置

Anaconda 安装及修改环境默认位置 https://blog.csdn.net/qq_54562136/article/details/128932352 最重要的一步&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;改文件夹权限 Anaconda创建、激活、退出、删除虚拟环境 修改pip install 默认安装路径

【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)

文章目录 题目思路解法 题目 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间…

数学与简单dp

1205. 买不到的数目 - AcWing题库 import java.util.*;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();System.out.print((n - 1) * (m - 1) - 1);} } 1211. 蚂蚁感冒 - AcWing题库…