CAN FD

CAN、CAN FD CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在汽车和工业行业被广泛使用。 阅读详情

1 CAN FD简介

  在汽车领域,随着人们对数据传输带宽要求的增加,传统的CAN总线由于带宽的限制难以满足这种增加的需求。此外为了缩小CAN网络(max. 1MBit/s)与FlexRay(max.10MBit/s)网络的带宽差距,BOSCH公司推出了CAN FD。
CAN FD(CAN with Flexible Data rate)继承了CAN总线的主要特性。CAN总线采用双线串行通讯协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制使CAN总线有很高的安全性,但CAN总线带宽和数据场长度却受到制约。CAN FD总线弥补了CAN总线带宽和数据场长度的制约,CAN FD总线与CAN总线的区别主要在以下两个方面:
  1. 可变速率:CAN FD采用了两种位速率。从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,其余部分为原CAN总线用的速率。两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位TQ外,位时间各段的分配比例也可不同;
  2. 新的数据场长度:CAN FD对数据场的长度作了很大的扩充,DLC最大支持64个字节,在DLC小于等于8时与原CAN总线是一样的,大于8时有一个非线性的增长,所以最大的数据场长度可达64字节。

1.1 CAN FD数据帧帧格式

  CAN FD数据帧在控制场新添加EDL位、BRS位、ESI位,采用了新的DLC编码方式、新的CRC算法(CRC场扩展到21位)。CAN FD数据帧格式如下图所示。
CAN FD数据帧格式

1.2 新添加位介绍

  • EDL位(Extended Data Length):原CAN数据帧中的保留位R。隐性表示CAN FD报文(采用新的DLC编码和CRC算法),显性表示CAN报文;
  • BRS位(Bit Rate Switch):该位隐性表示转换可变速率,显性表示不转换速率;
  • ESI位(Error State Indicator):该位隐性表示发送节点处于被动错误状态(Error Passive),显性表示发送节点处于主动错误状态(Error Active);
      EDL位可以表示CAN报文还是CAN FD报文;BRS表示位速率转换,该位为隐性位时,从BRS位到CRC界定符使用转换速率传输,其他位场使用标准位速率,该位为显性时,以正常的CAN FD总线速率传输;通过添加ESI位,可以很方便的知道当前发送节点所处的状态。

1.3 新的CRC算法

  CAN总线由于位填充规则对CRC的干扰,造成错帧漏检率未达到设计意图。CAN FD对CRC算法做了改变,即CRC以含填充位的位流进行计算。在校验和部分为避免再有连续位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分割,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作出错处理。CAN FD的CRC场扩展到了21位。由于数据场长度有很大变化区间,所以要根据DLC大小应用不同的CRC生成多项式,CRC_17,适合于帧长小于210位的帧,CRC_21,适适合于帧长小于1023位的帧。

1.4 新的DLC编码

  CAN FD数据帧采用了新的新的DLC编码方式,在数据场长度在0-8个字节时,采用线性规则,数据场长度为12-64个字节时,使用非线性编码。如下图所示。
DLC编码

2 SylixOS中CAN FD的实现

2.1 CAN驱动实现

  SylixOS的CAN驱动框架在原有CAN的基础上增加了对CAN FD的支持。对应于新的CAN帧格式,SylixOS增加了新的帧结构定义,如下所示。

typedef struct {
    UINT32              CAN_uiId;                     /*  标识码                      */
    UINT32              CAN_uiChannel;               /*  通道号                      */
    BOOL                CAN_bExtId;                   /*  是否是扩展帧                */
    BOOL                CAN_bRtr;                     /*  是否是远程帧                */
    UINT32              CAN_uiCanFdFlags;            /*  CAN FD 相关设置             */
#define CAN_FD_FLAG_EDL     1
#define CAN_FD_FLAG_BRS     2
#define CAN_FD_FLAG_ESI     4
    UCHAR               CAN_ucLen;                    /*  数据长度                    */
UCHAR               CAN_ucData[CAN_FD_MAX_DATA];
                                                     /*  帧数据                      */
} CAN_FD_FRAME;
typedef CAN_FD_FRAME   *PCAN_FD_FRAME;              /*  CAN FD 帧指针类型           */
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

  为了同时兼容CAN与CAN FD,系统在创建CAN设备申请帧缓冲区时,以帧结构较大的CAN FD帧报文为单位进行申请。同时通过ioctl新增加的CAN_DEV_CAN_FD选项查看CAN设备驱动以及控制器是否支持CAN FD。此次查询决定了后续驱动对帧缓冲区进行读写时的帧报文格式,即标准CAN或CAN FD。因此CAN FD驱动的ioctl接口除了要实现标准CAN驱动的选项外,还要额外实现CAN_DEV_CAN_FD选项,如下所示。

    case CAN_DEV_CAN_FD:
        *(UINT *)lArg = CAN_STD_CAN_FD;
        break;
 
 
  • 1
  • 2
  • 3

2.2 应用层实现

  应用层需要收发CAN FD报文时,必须通过ioctl的CAN_FIO_CAN_FD选项对CAN FD进行设置,如下所示。

    CAN_FD_FRAME   canfdframe[10];
    ssize_t        size;
    ssize_t        frame_num;
    long            status;
     ...

    canfile = open("/dev/can0", O_RDWR);

    ioctl(canfile, CAN_DEV_SET_MODE, 1);
    ioctl(canfile, CAN_DEV_SET_BAUD, LW_OSIOD_LARG(*));
    /*
    *  must call this before read() write()
    */
    ioctl(canfile, CAN_FIO_CAN_FD, CAN_STD_CAN_FD);
    ioctl(canfile, CAN_DEV_STARTUP);

    size       = read(canfile, canfdframe, 10 * sizeof(CAN_FD_FRAME));
    frame_num = size / sizeof(CAN_FD_FRAME);

    if (frame_num <= 0) {
        ioctl(canfile, CAN_DEV_GET_BUS_STATE, &status);
        ...
        ioctl(canfile, CAN_DEV_REST_CONTROLLER);
    }

    ...
    size       = write(canfile, canfdframe, 10 * sizeof(CAN_FD_FRAME));
    frame_num = size / sizeof(CAN_FD_FRAME);
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

3 参考资料

  《CAN FD协议介绍》:http://www.cechina.cn/company/50633_156096/messagedetail.aspx

【CANFD详细介绍与CAN区别】 CAN总线采用双线串行通讯协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制使CAN总线有很高的安全性,但CAN总线带宽和数据场长度却受到制约。1. CANFD不存在远程帧,CAN报文中的RTR(用于区别标准帧与远程帧)被替换为RRS(远程请求替代位,默认值为0)RTR与RRS:远程传输请求(RTR)在经典CAN中用于标识数据帧和相应的远程帧。1. 可变速率:CAN FD采用了两种位速率。但是,如果比特率保持不变,这也会阻塞CAN总线更长的时间,从而可能延迟关键任务的更高优先级的数据帧。 阅读详情

相关推荐

CAN 与 CANFD数据报文格式解读

ISO 11898-1:2015 协议详细定义了CAN网络报文的格式,包含了传统CAN与CANFD帧格式。CAN网络的帧类型共有4种,分别为数据帧、远程帧、错误帧、过载帧。本章将主要介绍CAN网络数据帧报文的格式,CAN网络中数据帧报文共有4种类型,分别为传统标准帧、传统扩展帧、CANFD标准帧、CANFD扩展帧,其数据帧报文的格式由如下字段域组成: SOF:为帧的开头,该字段由一个显...

平凡之路的博客 4万+

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

Can FD协议详解

园长QwQ 2万+

CAN FD 与 CAN协议区别--简单易懂协议详解

1 概述 CAN-FD:可以理解成CAN协议的升级版,只升级了协议,物理层未改变。 CAN与CAN-FD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。 2 传输速率不同 CAN:最大传输速率1Mbps。 CAN-FD:速率可变,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps,CAN-FD的传输格式如下图所示。 3 数据长度不同 CAN:一帧数据最长8字节 CAN-FD:一帧数据最长64字节。 4 帧格式不同 CAN-FD新增了FDF、BRS、ESI位。 FDF:表示C

代码打工人的博客 2万+

CANFD和CAN的区别简介

1.概述 CAN-FD:可以理解成CAN协议的升级版,只升级了协议,物理层未改变。 CAN与CAN-FD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。 由传统CAN转移到CANFD比较方便 2. 传输速率不同 CAN:最大传输速率1Mbps。 CAN-FD:速率可变,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps。 3. 数据域长度不同 CAN:一帧数据最长8字节 CAN-FD:一帧数据最长64字节。 4. 协议内容改变—取消远程帧 5. CANFD报文

LiuXF93的博客 9万+

如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信

1、SPI时序MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接。可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上。MCP2518FD支持经典格式 (CAN 2.0B) 和CAN灵活数据速率 (CAN FD) 格式中的CAN帧格式,符合ISO11898-1:2015标准。框图:本文实验板MCU:CAN FD控制器:MCP2518FDCAN FD收发器:ATA6560开发环境:想了解开发板更详细信息,请点击。

qq_57798018的博客 1万+

CAN、CAN FD、CANopen、CANopen FD 核心区别解析

CAN/CAN FD是总线底层协议(物理层+数据链路层),负责数据传输;CANopen/CANopen FD是基于它们的应用层协议,定义数据内容和传输规则。CAN支持8字节数据,最高1Mbps;CAN FD扩展至64字节,支持双速率(最高12Mbps)。CANopen适用于标准化工业小数据场景,CANopen FD则针对高带宽需求。选型需根据数据大小和标准化需求选择底层或应用层协议。二者是“地基”与“上层建筑”的关系。

极地星辰 1250

CAN FD总线详细介绍

前面的文章介绍了CAN协议、本文介绍一下CAN FD,对比一下这两者的区别。希望看完后,能对你有所帮助。

Richard_Brown的博客 1万+

CAN FD Bit Timing

CAN FD Bit Timing Can FD 协议定义了两个bit率,第一个为Arbitration Phase有较长的Bit时间,第二个 Data Phase 有较短的比特时间。Arbitration Bit 率与Can 协议规范里的 Nominal bit rate 类似。 Data phase 对应 Data bit time 需要多个寄存器进行配置,两个位时间都由独立的非重叠时间段组成,这些段构成位时间,如图所示: Synchronization Segment (SYNC_SEG) 此段

weixin_40374201的博客 6062

CAN-FD

CAN-FD和CAN主要的区别有两点 1、可变速率 CAN-FD采用了两种位速率:从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,其余部分为原CAN总线用的速率。两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位TQ外,位时间各段的分配比例也可不同。 2、新的数据场长度 CAN-FD对数据场的长度作了很大的扩充,DLC最大支持64个字节,在DLC小于等于8时与原CAN总线是一样的,大于8时有一个非线性的增长,所以最大的数据场长度可达64字节。 CAN-FD 数.

$好记性还是要多记录$ 9620

CAN和CANFD的区别总结

CANFD:可以理解成CAN协议的升级版,只升级了协议,物理层未改变。 Can与CanFD主要区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同。

LETFLY'S LAB 9139

【实战学习(五)】开源项目学习之uWSGI的部署以及配合nginx

文章目录1)uWSGI是什么?1.1 WSGI1.1.1 Application端1.1.2 Server端1.1.3 WSGI中间件1.2 uwgi1.3 uWSGI、WSGI、uwsgi之间的关系*为什么有了uWSGI为什么还需要nginx?2)连接uwsgi和Django*避坑之Windows10安装uWSGI非常极其艰难,最好勿浪费时间,直接转战Linux吧:2.1 uWGI部署2.1.1 在虚拟环境下安装uwsgi:2.1.2 测试uWSGI的运行2.1.3 使用uWSGI运行Django项目2.

黑黑白白君的博客 1506

CAN总线(三)——CAN FD协议及其与CAN2.0的异同

目录 1. CANFD的来历 2. CANFD与CAN的协议异同 3. CANFD帧结构解析 3.1 帧起始 3.2.仲裁域 3.3 控制域 3.4 数据域 3.5 CRC 3.6 ACK 3.7 帧结尾 1. CANFD的来历 我们知道了, CAN2.0数据段只有8byte,最高速率为 1Mbit/s,通常使用的是 500k,随着功能的逐渐增多,各 ECU 之间的信息交互也越多,导致总线负载持续走高;CAN 报文中只有约 40~50%的带宽用于实际数据传输;响应机制..

口袋里的跳跳糖 2万+

【AUTOSAR-COM】Transmission Mode 和 Transfer Property

1.COM模块的基本概念 首先在描述Transmission Mode 和 Transfer Property之前,有必要对COM模块的基本处理有一个直观的理解,我所描述的和对概念理解的也不一定完全正确。 Signal:指的是通信协议中的,一条报文中所保存的若干信号。 I-PDU:至少在COM模块中,可以理解为一条报文。 上图是在CANdb软件中编辑一个报文的Layout的界面,可以很形象的将I-PDU对等为这里的一条Message,而Signal就是需要在Message中需要摆放的Signal

tim_hoven的博客 4633

CAN/CAN FD总线

CAN/CANFD总线在机器人控制中具有显著优势:其微秒级延迟满足实时控制需求;差分信号和错误检测机制确保高可靠性;多节点连接能力简化布线;广播功能避免数据重复传输。物理层采用双绞线差分传输,通过独特的显性/隐性位仲裁机制实现多主竞争。相比经典CAN,CANFD的64字节帧长和5Mbps高速率能更好支持现代机器人控制算法,如全身协同控制和实时诊断,将多电机系统中的数据传输时间从毫秒级压缩到微秒级,大幅提升系统响应速度。典型应用包括电机指令广播和状态反馈汇总,显著优化了控制周期内的数据传输效率。

2302_79069463的博客 1128

【正点原子STM32连载】第六十章 串口IAP实战:从Bootloader到APP的无缝升级

本文以正点原子STM32F103开发板为例,详细讲解了串口IAP(在应用编程)技术的实现原理与实战步骤。内容涵盖Bootloader与APP的分工、FLASH空间规划、核心代码解析以及Ymodem协议的应用,旨在帮助开发者掌握通过串口为嵌入式设备实现远程固件升级的关键技术,提升产品维护与迭代效率。

weixin_29161719的博客 445

Blazor Session设置

微软官方封装了一些浏览器的操作,其中就有Session的操作的封装ProtectedSessionStorage 微软文档因为我们知道,依赖注入的生命周期是Singleton程序Scoped网页:刷新,url直接跳转都会重置。Transient路由C# Blazor 学习笔记(10):依赖注入但是没有一个和浏览器绑定的生命周期。即浏览器关闭才会退出。这个是后端无法获取的,因为后端根本不知道浏览器何时关闭。这个只能用浏览器自带的缓存。

qq_44695769的博客 1786

CAN FD实战之CAN FD应用领域及CAN迁移至CAN FD的策略

CAN FD实战之CAN FD应用领域及CAN迁移至CAN FD的策略

weixin_66730120的博客 739

群晖Git Server权限配置全攻略:如何让普通用户(非admin)也能安全提交代码?

本文详细解析了群晖Git Server权限配置方案,特别针对普通用户(非admin)安全提交代码的需求。通过SSH服务配置、精细化用户权限管理及仓库创建自动化脚本,实现在DS218+等群晖NAS设备上的高效代码协作,同时确保系统安全。

weixin_42528780的博客 463

一文搞懂CAN FD总线

关注、星标公众号,直达精彩内容来源:汽车ECU开发、汽车电子与软件有了CAN,为什么还要CAN FD呢?随着汽车功能越来越多,CAN总线的局限性也逐渐暴露:1、CAN总线最高速率为...

李肖遥的专栏 4050

【C++ 使用libxlsxwriter库向excel表格中插入图片 CMake + VS2019】

使用libxlsxwriter向excel表格插入图片

恒星游历者的博客 753

RICHARDSON-LUCY 去卷积简介

Lucy去卷积1.泊松过程及联合概率分布2.极大似然估计参考文献 1.泊松过程及联合概率分布 首先假设相机接收光子生成图像的过程符合泊松分布。 因此,一次曝光过程中,某像素位置接收到iii个光子的概率p(i)p(i)p(i)为: p(i)=exp⁡(−λ)⋅λii!\qquad\qquad p(i)=\exp(-\lambda)\cdot\cfrac{\lambda^{i}}{i!}p(i)=exp(−λ)⋅i!λi​ 那么针对一张M∗NM*NM∗N的图像,所有像素的联合概率分布可以描述为: P(I)=∏e

驽马十驾,功在不舍;锲而不舍,金石可镂。 8694

CAN 与 CAN FD

CANFD是传统CAN的升级版本,主要解决现代汽车对高数据传输的需求。核心区别在于:CANFD采用可变速率(仲裁段1Mbps,数据段最高8Mbps)和更大数据容量(最大64字节),相比传统CAN(固定1Mbps和8字节)显著提升效率。同时,CANFD增强了安全性,采用更长的CRC校验(17/21位)并保持向后兼容。这种改进使CANFD更适合自动驾驶、高精度传感器等大数据场景,在保持可靠性的同时大幅提升传输性能,是支撑汽车智能化发展的关键技术。

TyearLin的专栏 1100

第3.1.3章 机器人第三方库实战总结:ROS 2 入门实战及和ROS1的对比,打通机器人开发的任督二脉

本文针对机器人SLAM开发中第三方库的学习痛点,重点介绍ROS 2在SLAM中的应用。文章首先对比ROS 1与ROS 2的核心差异,梳理ROS 2知识图谱,包括节点、话题、服务等核心概念。通过实战项目演示如何构建激光SLAM节点,结合代码详解运行流程。最后给出学习建议,强调动手实践的重要性,帮助开发者快速掌握ROS 2在SLAM开发中的关键应用。

行知SLAM 179

CAN-FD核心技术简介

升级CAN的几条理由: 1. The original requirement of the automotive industry was to accelerate the software download at end-of-line and in the garages for software updates. 2. Additionally, the carmakers dema...

Lincanman的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

CAN 和 CAN FD 的异同点

名称英文全称标准制定者首次发布时间CAN1993(规范版本)CAN FD2012(Bosch提出)、2015(ISO标准)特性CANCAN FD最大数据长度8 字节64 字节波特率仲裁段=数据段仲裁段固定,数据段可更高CRCCRC-15新增字段无兼容性全网络必须支持仲裁段兼容旧CAN,数据段只有FD节点能解析效率适合低速控制适合大数据量传输CAN FD 是经典 CAN 的超集,在保持仲裁机制不变的前提下,支持更大的数据载荷和更高的数据段速度,从而显著提高带宽。但它的兼容性是单向的。

小灰灰的博客 1404

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: OSEK OS标准简介(转)
下一篇: PID控制原理
cppstdy
博客等级 码龄15年 89粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值