首先,R7的CANFD是兼容CAN通讯的,在R7芯片他们公用相同的寄存器,至于发出来的帧是CANFD还是CAN取决于协议的不同。
CANFD是可变速率数据段为可变长度,扩展到64Byte,仲裁段和数据段的速率不相同。CANFD新增了FDF,BRS,ESI。FDF表示是CAN报文还是CANFD报文,为隐性时速率可变;BRS为位速率转换;ESI表示错误状态,主动错误发送显性位。
在兼容性方面,CANFD兼容CAN。
如上图所示为CAN的电平图一个位是由多个段的多个Tq组成,Tq多少由寄存器决定(8个Tq到25个Tq),CAN 电平为差分信号,绘制后的位为上述图1所述。
关于速率和波特率的关系,现在市场上主流汽车的波特率还是500khz。
正常情况下,大多数的CAN寄存器的波特率和采样点的关系如下
波特率:波特率 = CAN总线时钟频率 / (1 + Time Segment1 + Time Segment2)
采样点:采样点 =( 1 + Time Segment1)/ (1 + Time Segment1 + Time Segment2)
这两个公式同时提到了Time Segment1和Time Segment2,所以说我们同时在寄存器中配置这两个段就可以满足,我们对总线波特率和采样点的要求,同时关于采样点我们一共有,同步段(sync_seg)、传播时间段(prop_seg)、相位缓冲时间段1(Time Segment1)、相位缓冲时间段2(Time Segment2)。同时注意还有一个段SJW(synchronization jump width)同步跳转宽度,是用来限定延长相位缓冲时间段1(Time Segment1),或者缩短相位缓冲时间段2(Time Segment2),所以一般SJW小于相位缓冲时间段2(Time Segment2),同步段(sync_seg)为一个Tq。
在设置R7的CAN模式必须处于全部复位模式(Global reset mode),然后再发送和接收Buffer寄存器中对 FDF,BRRS位做隐性处理,此处设置寄存器的时候关于RCMC的位设置仍为1。
此时,关于数据段和和仲裁段的设置,当CANFD 的FDF,BRRS的设置取消后,关于数据段的波特率将不再使用,比如此时CAN总线时钟为40M,同步段1设置为59,同步段2设置为20,则波特率为500Khz,采样点在80%,设置经验值20个Tq的同步跳转段。