SJA1000 内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频。留意任何运用中,当运用外部晶振作为基准源的时分,都是先经过2分频整形的。
1.1 位周期的组成
波特率(fbit)是指单位时刻内所传输的数据位的数量,一般取单位时刻为1s。波特率由通讯线上传输的一个数据位周期的长度(Tbit)决议,如下式所示。
Fbit=1/Tbit (1)
依据Philips公司的独立通讯控制器,一个位周期由3个部分组成:同步段(tSYNC_SEG)、相位缓冲段1(tTSEG1)和相位缓冲段2(tTSEG2)。
Tbit=tSYNC_SEG+tTSEG1+tTSEG2 (2)
所有这些时刻段,都有一个一起的时刻单元——体系时钟周期(TSCL)。详细到SJA1000,TSCL由总线时序寄存器的值来确认。 SJA1000有2个总线时序寄存器,即总线时序寄存器0(BTR0)和总线时序寄存器1(BTR1)。这2个寄存器有自己不同的功用界说,一起效果决议总线的通讯波特率。
总线时序寄存器0 界说波特率预设值BRP(共6位,取值区间[1,64]和同步跳转宽度SJW(共2位,取值区间[1,4])的值。位功用阐明如表1所列。
表1
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
SJW.1 | SJW.0 | BRP.5 | BRP.4 | BRP.3 | BRP.2 | BRP.1 | BRP.0 |
CAN的体系时钟周期TSCL,能够由BRP的数值为决议,核算公式如下:
TSCL=2TCLK×BRP=2TCLK×(32BRP.5+16BRP.4+
8BRP.3+4BRP.2+2BRP.1+1BRP.0+1) (3)
其间TCLK为参阅时刻的周期。
TCLK=1/fCLK (4)
为了补偿不同总线控制器的时钟振荡器之间的相位偏移,任何总线控制器有必要在当前传送的相关信号边缘从头同步。同步跳转宽度界说了每一位周期能够被从头同步缩短或延伸的时钟周期的最大数目。
tSJW=TSCL×(2×SJW.1+1×SJW.0+1) (5)
总线时序寄存器1 界说每个位周期长度采样点的方位和在每个采样点的采样数目。位功用阐明如表2所列,其间SAM含义见表3。
表2
bit | bit | bit | bit | bit | bit | bit | bit |
SAM | TSEG2.2 | TSEG2.1 | TSEG2.0 | TSEG1.3 | TSEG1.2 | TSEG1.1 | TSEG1.0 |
表3
SAM | 三倍:总线采样三次:主张在中/低速总线(A和B级)运用,有处于过滤总线上毛刺 | |
单倍:总线采样一次;主张运用在高速总线上(SAEC级) |
TSEG1(共4位,取值区间[1,16])和TSEG2(共3位,取值区间[1,8])决议了每一位时钟数目和采样点的方位。这儿
tSYNC_SEG=1×TSCL(此时刻段固定) (6)
tTSEG1=TSCL×(8×TSEG1.3+4×TSEG1.2+2×TSEG1.1+1×TESG1.0+1) (7)
tTSEG2=TSCL×(4×TSEG2.2+2×TSEG2.1+1×TESG2.0+1) (8)
位周期的标量值(NBT)界说为,SYNC_SEG(同步段体系时钟周期数)、TSEG1(相位缓冲段1体系时钟周期数)、TSEG2(相位缓冲段2体系时钟周期数)之和。这决议了它的取值区间为[3,25],在1个取样点时,最小值一般取4;在3个取样点时,最小值一般取5。
NBT=Tbit/TSCL=SYNC_SEG+TSEG1+TSEG2 (9)
位周期的一般结构如图1所示。
其实CAN的波特率核算特简略,仅仅咱们无意识地把简略的问题复杂化了。
假定咱们先不考虑BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1便是2个分频系数寄存器;它们的乘积是一个扩展的分频系数。即:
BTR0×BTR1=F_BASE/Fbps (1)
其间:
内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频。留意任何运用中,当运用外部晶振作为基准源的时分,都是先经过2分频整形的。
(1)式中,当晶振为16M时,F_BASE=8000K
当晶振为12M时,F_BASE=6000K
Fbps便是咱们所期望得到的CAN总线频率。单位为K。
设(1)式中BTR0=m,BTR1=n,外部晶振16M,则有:
m • n =8000/ Fbps (2)
这样,当Fbps取咱们期望的值时,就会得到一个m * n的组合值。当n选定,m值也仅有。
n值CAN规范中规则8~25。(也便是BTR1的值)基本原则为:Fbps值越高时,选取n(经过设置BTR1)值越大。其原因不难理解。
我假定一般运用中选取n=10,也便是:
同步段+相位缓冲段1+相位缓冲段2 =1+5+4
则(2)式简化为
m=800/Fbps
m的最大设置值为64,SJA1000最大分频系数m*n=64×25=1600。因而规范算法中通常以16M晶振为例。其实有了公式(1),任何晶振值(6M~24M)都很简单核算。
SAM的确认:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。
SJA重同步跳宽选取: 与数字锁相环技能有关。n值选得大时,SJA能够选得大,即一次能够批改多个脉冲比例Tscl。n值小或频率低时,选SJA=1。即BTR0.7和BTR0.6都设为0。
问题: 1、SJA1000中,BTR1中相位缓冲段1为什么规划的比相位缓冲段2大8个Tscl ?按道理应该相同才对。
2、下例BTR0和BTR1的设置有什么问题?
BTR0=0x40, BTR1=0x1C。
参数阐明: CAN_ByteRate 波特率(Kbit/s) BTR0
:*
;*
;*
;*
;*
;*
;*
;*
;*
;*
;*
;*
;*
;*
;*