通过对CAN位定时寄存器CANBIT以及CAN波特率预分频扩展寄存器CANBRPE的设置可以得到需要的CAN通信波特率。
CAN的位定时配置不当,将使得CAN模块无法按照目标波特率接入CAN网络,将导致CAN节点无法通信正常。
根据CAN规范,位时间被分成4个时间段:同步段(Sync_Seg)、传播时间段(Prop_Seg)、相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2)
每个段由具体、可编程数量的时间份额(time quanta)组成,时间份额是位时间的基本时间单元,它的长度(tq)由CAN控制器的系统时钟(fcan)和波特率预分频器BRP定义:tq=BRP/fcan
CAN模块的系统时钟fcan是其CAN模块时钟(CAN_CLK)输入的频率。
各参数取值范围:
参数 范围 编程值 说明
BRP 1~64 0~63 波特率分频器,定义时间单元tq的时间长度
Sync_Seg 1tq 固定长度,总线输入与系统时钟同步
Prop_Seg 1~8tq 0~7 补偿物理延时时间
Phase_Seg1 1~8tq 0~7 相位缓冲段1,补偿边沿阶段的误差,可通过同步暂时延长
Phase_Seg2 1~8tq 0~7 相位缓冲段2,补偿边沿阶段的误差,可通过同步暂时缩短
SJW 1~4tq 0~3 同步跳转宽度,不能比相位缓冲段长
位时间长度为:[TSEG1+TSEG2+3]tq或[Sync_Seg+Prop_Seg+Phase_Seg1+Phase_Seg2]tq
位定时配置的编程是由两个CANBTR决定的:Prop_Seg与Phase_Seg1 的和(作为TSEG1)与Phase_Seg2(作为TSEG2)组合成一个字节,而SJW与BRP组合成另一个字节。
SAMP TSEG22 TSEG21 TSEG20 TSEG13 TSEG12 TSEG11 TSEG10
SJW1 SJW0 BRP5 BRP4 BRP3 BRP2 BRP1 BRP0
将结果配置写入寄存器:((TSeg2-1)<<12)|((TSeg1-1)<<8)|((SJW-1)<<6)|(BRP-1)
参数的计算步骤
1、首先计算CAN时钟和波特率的比值
2、根据比值确定BRP和时间量子的数目,一个位时间总的时间份额值可以设置在8~25的范围内
3、Sync_Seg的值固定为1tq,量子数目减1后再分配
4、Prop_Seg其长度视系统测量的延迟时间而定,必须为可扩展的CAN总线系统定义最大的总线长度和最大的节点延迟。
5、Prog_Seg<=Phase_Seg1<=Phase_Seg2;Phase_Seg1=Phase_Seg2 或者 Phase_Seg1+1=Phase_Seg2
6、Phase_Seg2不能比CAN控制器的信息处理时间短
7、同步跳转宽度SJW取4和 Phase_Seg1中小的那个
总的来说,波特率BitRate=Fpclk/((BRP+1)*((TSEG1+1)+(TSEG2+1)+1)
举例说明: