一、控制器局域网总线(CAN,Controller Area Network);
二、CAN FD 是CAN with Flexible Data rate的缩写,翻译为【可变速率的 CAN】
CAN-FD 采用了两种位速率:从控制场中的 BRS 位到 ACK 场之前(含 CRC 分界符)为可变速率,其余部分为原 CAN 总线用的速率。 两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位 TQ 外,位时间各段的分配比例也可不同。因此,对于 CAN FD而言,是在 CAN 的基础上增加了一个数据域的传输速率,数据传输速率要大于等于原 CAN 总线用的速率。 也就是说 CAN FD 支持两种传输速率,两种速率可以保持一致,也可以不保持一致。 速率可变,仲裁比特率最高1Mbps,数据比特率最高8Mbps。
传统CAN报文与CANFD报文的最大区别有2点,1、CANFD可以传输更多的数据,2、CANFD报文在传输中由2种传输速率完成传输,一种是标称的CAN总线速率(用于传输非数据域的字段),另一种是数据域传输速度(用于传输数据域的字段)。
三、CAN 2.0 发送 RTR 位以精确确定帧类型:数据帧(RTR 为主要)或远程帧(RTR)是隐性的)。
四、由于 CAN-FD 仅支持数据帧,因此始终发送占优势的 RRS(保留)。
五、单片机上的CANFD1 和 CANFD2 共用一个 RAM 空间,所以初始化CAN的时候要指定现在实用哪一个FIFO。
六、多线程下的volatile:有些变量是用 volatile 关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用 volatile 声明,该关键字的作用是防止优化编译器把变量从内存装入 CPU 寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。volatile 的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值
七、CAN FD 中的 FD 含义就是 flexible data,灵活数据通信,且波特率可以和仲裁阶段波特率不同。看下面的图,意思就是红色部分可以是一个波特率,蓝色部分也可以是一个波特率。
八、关于 FDCAN 的 2560 字 RAM 空间在本教程第 90 章的第 5 小节有详细说明。本章配套程序将前 1280字分配给 FDCAN1,后 1280 字分配给 FDCAN2。