相关概念
位速率(也叫做比特率)
表示的是单位时间内,总线上传输的信息量,即每秒能够传输的二进制位的数量,R=1/T ,单位是bit per second,bps。比如,比特率为8bit/s,意思为一秒传输了8bit,包含了8个二进制事件的信息量。
波特率(码元传输速率)
表示单位时间(1s)内传输的码元个数(脉冲个数或者信息变化次数),码元可以是多进制的;kBaud(1baud=1bit/second, 1KBaud=1KB=1000bits/second)(码元:就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2、4bit)
Time Quantum 时间份额Tq
CAN控制器工作的最小时间单位,通常对系统时钟分频得到。
位时间Tbit
CAN上传输一个数据位的时间周期Tbit=1/Baudrate. 如下图中的帧起始位。
位时序
根据CAN规范,每个位的时间内又可细分成4段:
同步段(SS,Synchronization Segment,SYSNC_SEG)一个位的输出从同步段开始。若总线的跳变沿被包含在SS段的范围之内,则表示节点与总线的时序同步。节点与总线同步时,采样点采集到的总线电平即可被确定为该电平的电位。SS段的大小为1Tq.
传播段(PTS,Propagation Time Segment, PROP_SEG)用于补偿信号在网络和节点传播的物理延时时间,是总线上输入比较器延时和输出驱动器延时总和的两倍。通常1-8Tq
相位缓冲段1(PBS1,Phase Buffer Segment 1, PHASE_SEG1)主要用于补偿边沿阶段的误差,其时间长度在重新同步时可以加长或缩短。初始大小1-8Tq.
相位缓冲段2(PBS2,Phase Buffer Segment 2,PHASE_SEG2)也是用于补偿边沿阶段的误差,其时间长度在重新同步时可以缩短。初始大小2-8Tq.
采样点:是读取总线电平,并将它解析为数值的时间点。位于相位缓冲段1(PHASE_SEG1)的终点。
tsp =(SYNC_SEG + PROP_SEG + PHASE_SEG1) / (SYNC_SEG + PROP_SEG + PHASE_SEG1 + PHASE_SEG2)
如果位定时设置将采样点设置在位时间的末端,则传播段就会越长,能实现更远的网络。反之,则可提高重同步能力,对时钟误差的容忍能力越大。采样点的设置应使所有节点能够达到传播延迟和时钟误差的最佳折衷点。建议采样点设置应当靠近但是不超过0.875,这使传播延迟和时钟误差容忍达到最优
在CAN实现中,传播段(PROP_SEG)和相位缓冲段1(PHASE_SEG1)被统称为Time segment 1, 相位缓冲段2(PHASE_SEG2)被统称为Time segment 2.
重同步调整宽度(SJW, Resynchronization jump width)由于重同步的结果,相位缓冲段1(PHASE_SEG1)可被延长或者相位缓冲段2(PHASE_SEG2)可被缩短。这两个相位缓冲段的延长和缩短的总和上限由重同步跳转宽度给定.
一个位时间内包含多少个时间份额Tq,称为BTL Cycles。
CAN 总线定时寄存器
如果直接设置STM32的寄存器, 上面BRP、TS1、TS2和SJW的数值,全都需要减1后写入寄存器.
SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次.
SJA1000 内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频。注意任何应用中,当利用外部晶振作为基准源的时候,都是先经过2分频整形的.
如下图,通过BTR0, BTR1两个寄存器的值,就确定了同步段、传播段,相位缓冲段1/2的大小,同时也定义出了Sampling Point.