原创 笔记十:同步跳转宽度位域与采样位

2009-10-27 14:43 4865 8 11 分类: 汽车电子

笔记同步跳转宽度位域与采样位<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


SJA1000 CAN控制器对时序的设置真的一点也不马虎,到底是怎么样的不马虎法呢?这一篇笔记就让我们听听他的故事。



在总线时序寄存器0和1中,除了对总线的波特率可编程以外,还加了对采样位与同步跳转宽度位域的设置,我们一一的来探索吧:



采样位,也就是对[采样]动作进行设置的标志位,在总线时序寄存器1的最高位,也就是SAM位。


点击看大图




SAM为逻辑1时,采样的次数为3次,反之SAM为逻辑0,采样次数为1次。这里就存在一个问题,那么什么时候才需要将SAM位置一呢?网络中有这样一个定义,当总线的波特率为中,低等级时,建议将SAM位置一,则当总线波特率为高时SAM位置为0,那么说得比较具体一点的,当总线波特率从100k起为高波特率,波特率从10k~99k之间为中波特率,波特率10k以下为低波特率。(以上的波特率区分等级是从网络中得知的,见笑了)



接下来要探索的就是同步跳转宽度位域这个专业词听起来很像很可怖似的,但实际上只要明白后会发现到很容易理解的。在CAN 2.0 协议里,CAN使用了同步跳转宽度位域来兼容不同波特率的总线,视觉化的说法就是说,除了本身设定的波特率以外,该波特率还有上限下界的容差值


 


d795ba0a-dfb3-43cb-b8ee-d6700346ab4d.JPG



 


这些波特率的上限与下界容差换傻瓜的话来说,假设有一个节点将总线时序设置为10kbps,该节点除了支持目前与该它拥有同样总线时序的节点以外,该节点还支持接近总线时序容差值的节点,那么10kbps可以容差值可以假设为10.9kbps,11.2kbps, 9.2kbps , 8.5kbps ...等等,换另一句话来说就是,只要总线时序为


10kbps的节点一设置(启动)同步跳转宽度位域,那么如果其他节点拥有总线时序为9.X kbps的话,都会被节点一相互兼容。



那么控制同步跳转宽度位域的寄存器就是总线时序寄存器0的最高两位 ,SJW.0与SJW.1



点击看大图


同步跳转宽度位域的公式如下:


9a64d9fa-fdda-4845-a5e2-c646d4298e92.JPG



Tsjw的值是系统时钟Tscl乘于SJW.0~1的设置。(至于求出系统时钟Tscl的方法请参考学习笔记1,这里就不重复了,毕竟笔记文章有限。)这样说出来很陌生,那么还是假设一个例题吧......



例题:假设我SJA1000 CAN控制器所拥有的晶体频率为16MHz,系统时钟Tscl6.25微妙,SJW.1SJW.0都被置一,请求出同步跳转宽度位域的时间是?



Tsjw = Tscl * ( 2*SJW.1 + SJW.0 + 1 )


 = 6.25微妙 * (2+1+1)


 = 6.25微妙 * 4


 = 25微妙



问题来了,同步跳转宽度位域的时间又与总线波特率的上限下界的容差值有什么关系呢?它们之间的关系基本是这样的。



  总线下界容差  < 总线波特率 < 总线上限容差 


1/(Tbit + Tsjw) <   1/(Tbit) < 1/(Tbit-Tsjw)



至于如何求出Tbit(CAN控制位时间),自己回顾学习笔记1吧这里就不作出重复了。


在现实里,如果我们一一的计算不同的总线容差值,这样的工作是很猥琐的,所以呢,我稍微整理了更容易计算的方式:



假设我们以BRP0=0x31,BRP1=0x1c,晶振平率为16MHz作为参考值,我们得到的



Tscl=6.25微妙


Tbit=100微妙          



后继续推算;当SJW.0=0,SJW.1=0;



Tsjw = Tscl * ( 2*SJW.1 + SJW.0 + 1 )


 = 6.25微妙 * (1)


 = 6.25微妙




容差下界 = 1/( Tbit + Tsjw )


   = 1/(100微妙 + 6.25微妙)


 = 1/106.25微妙


         = 9.411kbps


容差上限 = 1/( Tbit - Tsjw )


   = 1/(100微妙 - 6.25微妙)


 = 1/93.75微妙


         = 10.666 kbps



    结果: 9.411kbps < 10kbps < 10.666kbps


近似结果: 9.400kbps < 10kbps < 10.600kbps


容差比率: ±6%



后继续推算;当SJW.0=1,SJW.1=0;



Tsjw = Tscl * ( 2*SJW.1 + SJW.0 + 1 )


 = 6.25微妙 * (1+1)


 = 6.25微妙 * 2


 = 12.5微妙






容差下界 = 1/( Tbit + Tsjw )


   = 1/(100微妙 + 12.5微妙)


 = 1/112.5微妙


         = 8.888kbps


容差上限 = 1/( Tbit - Tsjw )


   = 1/(100微妙 - 12.5微妙)


 = 1/87.5微妙


         = 11.428 kbps



    结果: 8.888kbps < 10kbps < 11.428kbps


近似结果: 8.900kbps < 10kbps < 11.4kbps


容差比率: 下界 -11% ,上限 +14%



后继续推算;当SJW.0=1,SJW.1=0;



Tsjw = Tscl * ( 2*SJW.1 + SJW.0 + 1 )


 = 6.25微妙 * (2+1)


   = 6.25微妙 * 3


 = 18.75微妙




容差下界 = 1/( Tbit + Tsjw )


   = 1/(100微妙 + 18.75微妙)


 = 1/118.75微妙


         = 8.421kbps


容差上限 = 1/( Tbit - Tsjw )


   = 1/(100微妙 - 18.75微妙)


 = 1/81.25微妙


         = 12.307 kbps



    结果: 8.421kbps < 10kbps < 12.307kbps


近似结果: 8.400kbps < 10kbps < 12.300kbps


容差比率: 下界 -16% ,上限 +23%



后继续推算;当SJW.0=1,SJW.1=1;



Tsjw = Tscl * ( 2*SJW.1 + SJW.0 + 1 )


 = 6.25微妙 * (3+1)


   = 6.25微妙 * 4


 = 25微妙




容差下界 = 1/( Tbit + Tsjw )


   = 1/(100微妙 + 25微妙)


 = 1/125微妙


         = 8.000kbps


容差上限 = 1/( Tbit - Tsjw )


   = 1/(100微妙 - 25微妙)


 = 1/75微妙


         = 13.333 kbps



    结果: 8.000kbps < 10kbps < 13.333kbps


近似结果: 8.000kbps < 10kbps < 13.300kbps


容差比率: 下界 -20% ,上限 +33%





经过上面的计算后,我们得知以下的列表:




SJW位


下界容差比率


下界容差波特率公式


上限容差比率


上限容差波特率公式


SJW.0=0,SJW.1=0


-6%


总线波特率*0.94


+6%


总线波特率*1.06


SJW.0=1,SJW.1=0


-11%


总线波特率*0.89


+14%


总线波特率*1.14


SJW.0=0,SJW.1=1


-16%


总线波特率*0.84


+23


总线波特率*1.23


SJW.0=1,SJW.1=1


-20%


总线波特率*0.80


+33%


总线波特率*1.33



从上面的计算中,我得出一个结论,即使不设置SJW位也有默认的±6%同步跳转宽度位域。同步跳转宽度位域的存在本身就是为了兼容不同总线时序的通讯。



好了,今天的笔记就写到这里为止吧,目前我们已经对总线时序寄存器进行了比较全的探索了,估计大家对CAN的可怖又消除了一点了吧,我也是时候小歇一会儿了。

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1156182 2009-10-27 16:52

还有别的笔记看不到滴呢,呵呵,博主辛苦了~~~~

用户1609127 2009-10-27 14:44

额呵呵,恢复了~

用户1584993 2009-10-26 17:03

akuei2小弟图片看不到
相关推荐阅读
用户1609127 2011-10-22 18:26
Verilog的私私细语 - 时钟化和信号的长度
目录 第2章 时钟化和信号的长度 2.01 一个时钟一块数据的概念 2.02 信号时钟化 2.03 深入了解模块的沟通 2.04 电平检测模块的整合(即时事件在时序上的不和谐)      实验八:电...
用户1609127 2011-09-08 12:47
瞎搞Time Quest 和无责任的笔记 第二章
最近整合篇的第二章的构思和灵感都累积不少了,应该是时候开工了。恰好手头上还有一本笔记还没有写完,就是这本瞎搞TimeQuest的第二章。目录笔者也懒得贴了,看过第一章的同学多少也会猜到第二章的内容是什...
用户1609127 2011-08-29 18:21
瞎搞Time Quest 和无责任的笔记 第一章
哎呀 ... 潜水了都有一段时间了,这是最近研究的成果和目标。 话说TimeQuest这个东西真的很搞怪呀,做得笔者不得不从其他的方向去研究它。 好了还是切入正题,TimeQuest用作静态时序的工具...
用户1609127 2011-07-06 17:43
Verilog的私私细语 - 整合的概念
目录         02  第1章  整合的概念          1.01  源码上的整合                   实验一:字面上的整合          1.02  时钟和步骤的定...
用户1609127 2011-06-22 10:18
VerilogHDL那些事儿 - 建模篇v4 + 时序篇v1
VerilogHDL那些事儿 - 建模篇v4 ====== v4 ====== 主要是修改了大量用法上的BUG和极限的精简内容 https://docs.google.com/leaf?id=0B...
用户1609127 2011-06-10 13:19
Verilog HDL的礼物 - Verilog HDL扫盲文
目录 02第0章 Verilog HDL语言扫盲文 030.01 各种的HDL语言 030.02 HDL语言的层次 03 0.03 RTL级和组合逻辑级 040.04 Verilog HDL语言真的那...
EE直播间
更多
我要评论
3
8
关闭 站长推荐上一条 /3 下一条