在配置CAN transceiver的时候,有几个参数量要设置,这些量合在一起称为bit timing。由于CAN是异步且为多主结构,每个结点的transceiver在接收数据的时候,需要有一个参照标准,同时起到增强容错能力和减少传送的时间。

CAN传送数据是以Frame为单位,一个Frame里有多个bit组成。传送一个bit时需要一些周期,这段时间就称为bit timing。而bit timing又由多个TQ(Time Quantum,时间份额/量子)组成。

一个bit timing分为四个段,同步段(Sync_seg)、传播段(Prog_seg)、相位缓冲段1(Phase_seg1)、相位缓冲段2(Phase_seg2),单位为TQ,有8~25TQ。有些CAN把传播段和相位缓冲1合为一个段。
Sync_seg :用于同步总线上不同的节点,跳变沿在此段内产生
Prog_set :用于补偿网络内的物理延时时间,它是信号在总线传播的时间,输入比较器延时和输出驱动器延时总和的2倍
Phase_seg1 :用于补偿边沿阶段的误差,可通过重同步来加长或缩短
Phase_seg2 :补偿节点间晶振的误差

Sync_seg : 1TQ
Prog_seg : 1~8TQ
Phase_seg1 : 1~8TQ
Phase_seg2 : 2~8TQ

通过同步机制,可以消除相位误差带来的影响,保证信息正确解码。同步方式有硬同步和重同步。
硬同步:发生在报文开始时。在一个空亲期间,总线上的所有控制器在一个Sync_seg段从隐性位到显性位的跳变沿上,初始化自己的位周期定时,执行一次硬同步。
重同步:发生在报文位流发送期间,每一个隐性位到显性位跳变沿后。重同步根据引起同步边沿的相位误差,要么增加Tphase_seg1,或者减少Tphase_seg2,使采样点位于恰当的位置

了解了这些,最重要的问题是如何来配置这些参数,使CAN transceiver更好的工作。
1.计算CAN transceiver的工作周期及频率
物理器件的工作频率,要看芯片手册中时钟的相关内容,这样可以求出周期,单位是ns
Tsys = 1/fsys

2.计算BRP(Bit Rate Prescaler)
fsys/NBR = BRP
if BRP in (8, 25)
prescaler = BRP -1
else
BRP/prescaler in (8,25)

3.计算NBT(Nominal Bit Timing,位时间),单位ns
NBT = 1/NBR (NBR,Nominal Bit Rate,位速率)

4.计算TQ
TQ = Tsys*BRP (BRP,Bit Rate Prescaler,预分频因子)

5.计算同步段,单位TQ
同步段默认是1TQ,所以不需要计算了

6.计算传播段,单位TQ
TProg_seg = 2*(Delay_tranceiver + Delay_bus)
Prog_seg = Tprog_seg / TQ

7.计算Phase_seg1和Phase_seg2,单位TQ
if (NBT - Sync_seg - Prog_seg - 1)%2 == 0
Phase_seg1 = Phase_seg2 = (NBT - Sync_seg - Prog_seg -1)/2
then
Phase_seg1 = (NBT - Sync_seg - Prog_seg -1)/2
Phase_seg2 = Phase_seg1 + 1

8.计算RJW,单位TQ
RJW = min(4, Phase_seg1)

经过这七步,CAN收发器就可以工作了,但要有更稳定的工作状态,还要不断的调试,以确定最佳的参数。


CAN的bit rate可以理解为绝对值:不论can控制器的时钟频率为多少,1Mbps的bit rate的位时间就是1us,100Kbps的位时间就是10us。

两个CAN进行测试时,可以先通过固定bitrate和TQ个数来找到合适的参数,之后再适当调整优化。

参考文献
http://www.avrw.com/article/art_100_1903.htm
http://www.amobbs.com/thread-3937717-1-1.html
http://blog.21ic.com/user1/6291/archives/2010/67540.html
http://blog.163.com/dsp_lnint/blog/static/103167434200991210373137/
http://wenku.baidu.com/view/55d5deba960590c69ec376fa.html
http://longer.spaces.eepw.com.cn/articles/article/item/43570
http://blog.csdn.net/iamlaosong/article/details/6267076
SJA1000波特率计算器
CAN位定时和同步机制的分析
C8051F040单片机CAN控制器的波特率设置研究
CAN总线位定时控制的研究
CAN总线通迅速率设定
http://www.docin.com/p-145092724.html

http://wenku.baidu.com/view/55d5deba960590c69ec376fa.html