整车CAN通讯之canfd协议研究

      最后更新:2022-03-07 20:59

      目录

      CAN FD是什么

      CANFD诞生原因

      CAN FD对比FlexRay的优势

      CAN FD对比以太网的优势

      低成本解决方案:

      CAN FD与传统CAN比较

      CAN FD报文结构

      起始位SOF(start of frame)

      仲裁场(Arbitration Field)

      DLC控制域(control Field)

      CRC

      ACK

      CAN FD 是什么

      CANFD :可以理解成CAN协议的升级版,只升级了协议,物理层未改变。

      CANFD 诞生原因

      1. 原因主要是因为汽车功能越来越多,越来越复杂,传统的 CAN 总线( CAN2.0 )的负载率越来越高,甚至负载率高达 95% 。

      2. 因为传统 CAN 总线的局限性:

      · 传输率最大为 1Mbiy/s (典型的 <= 500kbit/s );

      · 传统 CAN 数据帧超过 50% 的额外开销( overhead > 50% )。

      3. 对比其他协议,额外开销比例要小得多,如 UDP ( 1500 bytes/datagram, 64 bytes overhead ), FlexRay ( 254 bytes/frame, 8 bytes overhead )。

      4. 因为历史原因,汽车不可能直接放弃目前的传统 CAN 总线技术,一切推到重来。那么为了解决 CAN 总线负载率问题,而又能兼容 CAN 总线,并且研发成本不能太高的问题。

      CAN FD 对比 FlexRay 的优势

      1. CAN FD 的开发成本远低于 FlexRay ;

      2. FlexRay 对 ECU 升级刷写不友好。

      CAN FD 对比以太网的优势

      1. CAN FD 的开发成本远低于以太网;

      2. 以太网优势在于大数据的传输但不能完全适用于当前汽车架构。

      低成本解决方案:

      根据节点优先级动态更改波特率。例如,当节点 A , B 想用高波特率通信时,按流程:

      Step1 : A 按照默认波特率通知其他节点停止接收,通知 B 节点提高波特率。

      Step 2 : A 提高波特率: 2~10HMz 等

      Step 3 : A , B 互相通信

      Step 4 : A , B 通信完释放总线。

      Step5 :其它节点按照默认波特率通信。

      CAN-FD 在仲裁场增加BRS位,只要一个Bit的时间1-2us,就可以无缝切换波特率。仅仅更换传统控制器CAN节点的收发器,使收到BRS位有效时立即关闭接收,避免波特率不一致使低速节点发出错误帧。使用最低的成本就是可以实现一个CAN网络中个别节点的速率提升。

      CAN FD 与传统CAN比较

      Can 与 CanFD 主要区别:传输速率不同、数据长度不同、帧格式不同、 ID 长度不同。

      对比传统 CAN 的数据帧, CAN FD 在控制场新添加 EDL 位、 BRS 位、 ESI 位,采用了新的 DLC 编码方式、新的 CRC 算法( CRC 场扩展到 21 位)

      1. 一条报文中含有两种速率,仲裁段和传统CAN有着相同的速率,而数据段最高可以达到5Mbps
      2. 拥有更大的数据载荷,一条报文最大可以传输64字节的数据。

      成本上CAN FD和传统CAN几乎一样,硬件构造除了CAN Controller需要更换外其他完全一样,软件只需要一些小变更即可,其他触发管理机制也和原来的传统CAN一样,CAN FD兼容传统CAN。

      通过CAN FD,可以使汽车上的软件拥有更快的下载速度、避免数据分割成数条报文、降低现有总线的负载、增加总线上的节点、避免网络的分割,以及加速长总线(卡车、公交车)上的通信等优势。

      CAN FD 报文结构

      CAN的报文详解见另外一篇文章: 一文掌握汽车总线CAN帧报文_ IT技术猿猴的博客-CSDN博客

      从上图可以看出,CAN FD报文在数据段之前基本和传统CAN类似, EDL 位、 BRS 位、 ESI 位 。

      起始位 SOF ( start of frame )

      传统 CAN 的数据帧起始位 SOF 和 CAN FD 的数据帧起始位 SOF 是一样的,一个 bit 的显性位 ‘0’

      仲裁场( Arbitration Field )

      对比传统 CAN 数据帧, CAN FD 共享相同的 CAN ID ,包括扩展数据帧的 ID 。

      CAN FD 用 RRS bit (始终为显性位 ‘0’ )代替 RTR

      FDF ( FD format )表示 CAN FD 还是传统 CAN 数据帧:

      ·FDF = ‘0’ --> 传统 CAN 数据帧

      FDF = ‘1’--> CAN FD 数据帧

      增加了BRS位(Bit Rate Switch速率不切换/速率切换)来 表示时钟频率的切换,BRS = ‘1’ 表明时钟频率切换 。

      增加了ESI位(Error State Indicator error passive/ active)来表明错误状态。

      DLC 控制域( control Field )

      CAN FD 因为最大可以传输64字节的数据,所以DLC和传统报文的有些区别。

      数据段的变化就是由最大8字节变成了如图中DLC所描述的那样,最大可容纳64字节数据。

      CRC

      数据段后面的CRC和ACK,因为CAN FD的CRC对bit stuff也进行计算,所以在报文帧中增加了Stuff Count。

      Stuff Count 可以分为两部分,即代表bit stuff个数余8的数据位,以及最后的奇偶校验位。

      CAN 总线由于位填充规则对 CRC 的干扰,造成错帧漏检率未达到设计意图。 CAN FD 对 CRC 算法做了改变,即 CRC 以含填充位的位流进行计算。在校验和部分为避免再有连续位超过 6 个,就确定在第一位以及以后每 4 位添加一个填充位加以分割,这个填充位的值是上一位的反码。作为格式检查,如果填充位不是上一位的反码,就作出错处理。 CAN FD 的 CRC 场扩展到了 21 位。

      CRC 的位长则根据数据长度不同而不同:

      • 传统CAN的CRC位长15bit
      • 数据长度为16字节和16字节以下的CAN FD报文的CRC位长17bit
      • 数据长度为16字节以上的CAN FD报文的CRC位长21bit

      ACK

      CAN FD的CRC分隔和ACK与传统CAN一样,但是因为考虑到收发器速率切换的问题,总线分别可以容忍数据的1位延长,即CRC Delimiter从原来的1位【1】变为了CAN FD的最大2位【1】,ACK从原来的1位【0】变为了CAN FD的最大2位【0】。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类