can总线波特率与晶振频率为啥差两倍

这个是Canoe中Hardware项设置的图。硬件设备连接的是VH6501,它的晶振频率显示为16000kHz。此外其他的配置信息是: 波特率:500k。 BTL Cycles(一位多少个Tq) :16。Prescaler(预分频数):1。
那么问题来了,为什么在计算晶振频率和can波特率关系时,除了预分频数外,还差2陪?
也就是说一开始我核算的波特率如下:波特率 = 晶振频率 / (预分频BTL Cycles) = 16000 / (116) =1000 k。 结果不等于500k,差了2倍。
我找了其他的资料,发现有这样的关系:CAN时钟周期=2×晶振时钟周期×BRP,这里就乘了个2。相当于晶振频率出来先分了个二分频,再分预分频。但是不知道为啥会有个二分频,要乘以2?

img

在CAN总线中,每个数据位传输需要两个时钟周期,即一个位的传输周期为2个时钟周期,其中一个时钟周期为发送者和接收者同步的时间基准,即CAN时钟周期。所以,在计算CAN波特率时,需要将晶振频率乘以2,才能得到正确的计算结果。

对于预分频器(BRP),它的作用是将晶振频率进行预分频,以满足CAN总线波特率的要求。在CAN协议中,BRP的取值范围是1~64,它决定了一个时间单元(Time Quantum,Tq)的长度。因此,波特率可以通过以下公式计算:

波特率 = CAN时钟频率 / (BRP × Tq)

其中,CAN时钟频率 = 2 × 晶振频率。因此,我们可以将上面的公式转化为:

波特率 = (2 × 晶振频率) / (BRP × Tq)

由于一个位的传输周期为2个时钟周期,所以一个时间单元(Tq)等于2个时钟周期。因此,Tq = 2 × CAN时钟周期。将其代入上面的公式,得到:

波特率 = (2 × 晶振频率) / (BRP × 2 × CAN时钟周期) = 晶振频率 / (BRP × CAN时钟周期)

因此,可以发现,计算CAN波特率时,需要将晶振频率乘以2,以满足每个数据位传输需要两个时钟周期的要求。