转:SJA1000 中CAN 总线同步跳转宽度+波特率控制寄存器的设置 SJA1000 CAN 控制器对时序的设置真的一点也不马虎,到底是怎么样的不马虎法呢
这一篇笔记就让我们听听他的故事
在总线时序寄存器0 和 1 中,除了对总线的波特率可编程以外,还加了对采样位与同步跳转宽度位域的设置,我们一一的来探索吧: 采样位,也就是对[采样]动作进行设置的标志位,在总线时序寄存器1 的最高位,也就是SAM 位
当 SAM 为逻辑 1 时,采样的次数为 3 次,反之 SAM 为逻辑 0,采样次数为 1 次
这里就存在一个问题,那么什么时候才需要将 SAM 位置1 呢
网络中有这样一个定义,当总线的波特率为中,低等级时,建议将 SAM 位置1,则当总线波特率为高时SAM 位置为 0,那么说得比较具体一点的,当总线波特率从 100k 起为高波特率,波特率从 10k~ 99k 之间为中波特率,波特率10k 以下为低波特率
(以上的波特率区分等级是从网络中得知的,见笑了) 接下来要探索的就是同步跳转宽度位域,这个专业词听起来很像很可怖似的,但实际上只要明白后会发现到很容易理解的
在 CAN 2
0 协议里,CAN 使用了同步跳转宽度位域来兼容不同波特率的总线,视觉化的说法就是说,除了本身设定的波特率以外,该波特率还有上限下界的容差值 这些波特率的上限与下界容差换傻瓜的话来说,假设有一个节点将总线时序设置为 10kbps,该节点除了支持目前与该它拥有同样总线时序的节点以外,该节点还支持接近总线时序容差值的节点,那么10kbps 可以容差值可以假设为 10
9kbps,11
2kbps, 9
2kbps , 8
等等,换另一句话来说就是,只要总线时序为 10kbps 的节点一设置(启动)同步跳转宽度位域,那么如果其他节点拥有总线时序为 9
X kbps 的话,都会被节点一