请教LM3S9B92 CAN模块 通讯波特率设置方面的问题~



项目中需要用CAN总线进行通讯,看了LM3S9B92 Datasheet中相关内容,对于can的位速率设置不是太明白:

在Datasheet的Bit Time and Bit Rate一节这么写着:The length of the time quantum (tq), which is

the basic time unit of the bit time, is defined by the CAN controller's input clock (fsys) and the Baud

Rate Prescaler (BRP)

tq是位定时的基本单位。它由CAN控制器的输入时钟和波特率预分频所决定

tq = BRP / fsys

The fsys input clock is the system clock frequency as configured by the RCC or RCC2 registers

fsys也就是配置的系统时钟频率。

问题是此处没有对Baud Rate Prescaler做更多的解释。

假如我的系统时钟是50MHz,CAN波特率为1MHz,那么预分频应该是多少呢?是怎么算出来的呢?

我看了Driverlib中CANBitRateSet(unsigned long ulBase, unsigned long ulSourceClock,

              unsigned long ulBitRate)这个函数,它里边的算法是:

系统时钟/位速率/ulCanBits,如果能够整除,算出的数字就是预分频,ulCanBits是4~19范围中的一个数字

我还是不太明白为什么这么算。

拿了几个不同的频率尝试算了一下,结果还确实和别人已经算出的TSEG2,TSEG1,SWJ和BRP一致。

 

  • 很久以前研究过,有点记不清了。

    BRP就是说你想用几个系统时钟去构成一个CAN 的位,即一个CAN的位包括几个tq.

    CANBitRateSet就是一个搜索过程,在一个表中查找一套合适的参数,使得系统时钟/tq,TSEG等能够是整数且满足一定的条件。

  • Stephen 说:

    很久以前研究过,有点记不清了。

    BRP就是说你想用几个系统时钟去构成一个CAN 的位,即一个CAN的位包括几个tq.

    CANBitRateSet就是一个搜索过程,在一个表中查找一套合适的参数,使得系统时钟/tq,TSEG等能够是整数且满足一定的条件。

    谢谢你的回答,我觉得

    BRP应该是用几个系统时钟构成一个tq. tq = BRP * (1/fsys)。

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

    一个CAN的位时间是由4~25个tq所构成(datasheet)。

    假如控制器的时钟频率为50MHz,CAN bit Rate为1MHz,那么时钟周期为20ns,位时间为1us

    那么位时间 1us = (4~25)* BRP * 20ns

    可以推出: 50 = (4~25)* BRP

    则BPR的范围为 2~ 13

    但是到目前为止还是无法得出BRP的值到底是什么~

    另外还有一个问题就是datasheet中说一个CAN的位时间由4~25个tq所构成。4比较好理解,一个sync,一个prop,一个phase1和一个phase2,那最大值为25又是怎么得出的呢?

  • 对于CAN的一个位的宽度,可以参考数据手册上面有一个表格,由于每个部分可以由不同的tq个单位组成,最大值是MAX(SYNC+PROP+PHASE1+PHASE2)=1+8+8+8。

    BRP就是要根据你选择的位的宽度,和系统时钟,找一个刚好匹配的值,让这些值都是整数能够被放入寄存器。

  • 我在找些资料学习一下。

    今天跑通了第一个CAN程序,回头整理一下和大家分享~