一,写在前面 目前STM32H7系列全部支持CAN_FD,现在互联网上的关于STM32 CAN_FD的内容基本没有,寥寥几篇也都是关于滤波器的,所以就决定来研究一下,这篇博客就抛砖引玉了,希望大家看完批评指正。
二,CAN,FDCAN简介 CAN是(Controller Area Network)的缩写,即控制器局域网络,属于工业现场总线,是ISO国际标准化的串行通信协议。
从OSI(Open System Interconnection开放系统互联)7层网络模型的角度来看,CAN现场总线仅仅定义了。
第 1 层(物理层)和第 2 层(数据链路层)。
FDCAN是(CAN with Flexible Data rate)继承了CAN总线的主要特性。CAN总线采用双线串行通讯协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制使CAN总线有很高的安全性,但CAN总线带宽和数据场长度却受到制约。CAN FD总线弥补了CAN总线带宽和数据场长度的制约。
FDCAN与CAN_FD的关系 FDCAN是ST公司在编写库的时候取的名字。CAN_FD是发明这个总线协议的博世公司取的名字。
三,CAN与FDCAN的区别 要想弄清楚他们自己的区别,就需要了解他们的历史。
CAN:1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议.
CAN_FD:随着人们对数据传输带宽要求的增加,传统的CAN总线由于带宽的限制难以满足这种增加的需求。此外为了缩小CAN网络(max. 1MBit/s)与FlexRay(max.10MBit/s)网络的带宽差距,2011年BOSCH公司推出了CAN FD 。
虽然CAN_FD在2011年就推出了,但是目前使用普及率以及资料寥寥无几。
CAN_FD和CAN对比的优势:
- CAN_FD全称是Flexible Data-Rate,意思就是帧报文中数据段波特率可变的特性,即仲裁段和数据控制段使用标准的通信波特率,而传输数据段时就会切换到更高的通信波特率,数据传输率可大于1Mbit/s,5Mbit/s(STM32H7目前最高支持5Mbit/s)。
文章图片
- 支持的数据长度更长
经典CAN支持的数据长度为8个字节。CAN_FD对数据的最大长度做了扩充,最大支持64个字节。
文章图片
- 优化CRC。
CAN FD为此在CRC算法上进行了优化与修改,将填充位加入到差错校验码中进行计算,也就是CRC以包含了填充位位流进行计算。确定从第一个填充位开始,序列中每4位就插入一个填充位用以分割,且该填充位就是上一位的反码。
文章图片
当进行格式检查时,若填充位不是上一位的反码,就及时报错处理。而针对不同的数据场长度值,CAN FD会选择两种新BCH型CRC多项式。
文章图片
- 控制场增加控制位
文章图片
EDL(Extended Data Length)用于区分是否为CAN-FD帧:
1.隐性: 表示为CAN-FD 报文,并采用新的DLC编码和CRC算法。2.显性: 表示为CAN报文
1.隐性:转换可变速率2.显性:不转换速率
ESI(Error State Indicator)为错误状态指示位:
1.隐性:发送节点处于被动错误状态(Error Passive)2.显性:发送节点处于主动错误状态(Error Active)
四,CAN_FD帧结构分析 为了区分经典CAN数据帧和CAN_FD数据帧,使用先前保留的位之一,该位称之为FD帧位。如果他是隐性值,则下列序列被解释为CAN_FD数据帧。如果他具有显性值,则它是经典数据或远程帧。在新引入的BRS(比特率开关)位中,当它具有阴性(r)值时,应用第二比特。如果它具有显性(d)值,则仲裁阶段比特时间设置也用于数据阶段。
文章图片
SOF =帧起始,CRC =循环冗余校验,ACK =确认,EOF =帧结束,IMF =间歇字段
【原创|浅析STM32H7 FDCAN(一)】CAN_FD协议控制器还必须支持经典CAN帧。两种CAN协议(经典和CAN_FD)在ISO 11898-1:2015中都是国际标准化的。具有11位标识符的CAN FD数据帧使用FBFF(FD基本帧格式),具有29位标识符的CAN FD数据帧使用FEFF(FD扩展帧格式)。CAN FD协议不支持远程请求的数据帧。
文章图片
RRS =远程请求替换,SRR =替代远程请求,IDE =标识符扩展,FDF =灵活数据速率格式,d =显性,r =隐性,r0 =保留
控制字段包括经典CAN数据帧不提供的附加位。FDF(FD格式)位指示FD帧格式的使用。在BRS(比特率开关)位的采样点处,执行比特率切换。这保证了最大的稳健性。以下ESI(错误状态指示符)位提供有关错误状态的信息:显性值表示错误活动状态。
文章图片
IDE(标识符扩展),FDF(灵活数据速率格式),BRS(比特率切换; 隐性,如果是备用比特率),ESI(错误状态指示; 隐性,如果错误被动)
在CAN FD协议的标准化过程中,引入了一些额外的安全防护装置以提高通信可靠性。这就是CRC字段包括17位(对于有效载荷高达16字节的帧)或21位(对于大于16字节的帧)多项式和8位填充位计数器加上奇偶校验位的原因。CRC字段使用具有与前一位相反的值的固定填充位(FSB)。所有这些安全防护装置可确保在所有条件下都能检测到所有单一故障。即使检测到多个故障的可能性也得到了改善。
文章图片
五,最后
- 本文由我个人编辑并整理,难免存在一些错误;
- 这一篇主要对CAN_FD进行了简要的说明;
- 后面逐步STM32H7系列的消息RAM以及滤波进行说明;
- 参考链接:https://www.can-cia.org/can-knowledge/can/can-fd/
http://www.360doc.com/content/16/1212/12/30375878_614027257.shtml - 仅供个人学习使用,禁止商用。
推荐阅读
- 原创|通俗易懂!详解Softmax及求导过程、Python实现、交叉熵
- 原创|使用webmagic模拟post表单提交爬取易查分成绩
- 原创|解决使用echarts做动态数据饼图展示中data如何传值的问题
- 自学|jdk1.8谷歌版本中文文档
- 原创|日期类型转字符串 oracle和java的区别
- 原创|centos7.2 安装和启动docker
- 安卓中Rxjava
- 原创|力扣练手35 搜索插入位置 JAVA版
- minerOS设置哈鱼矿池ETH教程