这段时间调试公司处理器can总线,实现最基本的对发实验,can控制器是sja1000,起初因为是对发实验,同样2块开发板,同样内核配置相同,因此时钟以及波特率肯定一样,也没有仔细研究can的时钟以及波特率,今天有客户问can控制器的时钟以及波特率,下午仔细看了一下sja1000手册,并且写了一个由波特率和时钟来计算分频值的小程序,这里总结一下。

sja1000 can工作频率和波特率之间分频值寄存器是6号和7号寄存器  ,datasheet上对这2个寄存器说明如下

6.5 Common registers

6.5.1

BUS TIMING REGISTER 0 (BTR0)
The contents of the bus timing register 0 defines the values of the Baud Rate Prescaler (BRP) and the Synchronization
Jump Width (SJW). This register can be accessed (read/write) if the reset mode is active.
In operating mode this register is read only, if the PeliCAN mode is selected. In BasicCAN mode a ‘FFH’ is reflected.

Table 44 Bit interpretation of bus timing register 0 (BTR0); CAN address 6
BIT 7   BIT 6   BIT 5   BIT 4  BIT 3   BIT 2   BIT 1  BIT 0
SJW.1 SJW.0 BRP.5 BRP.4 BRP.3 BRP.2 BRP.1 BRP.0

6.5.1.1
Baud Rate Prescaler (BRP)
The period of the CAN system clock tscl is programmable and determines the individual bit timing. The CAN system clock
is calculated using the following equation:
tscl = 2 × tCLK × (32 × BRP.5 + 16 × BRP.4 + 8 × BRP.3 + 4 × BRP.2 + 2 × BRP.1 + BRP.0 + 1)

where tCLK = time period of the XTAL frequency = 1/ f XTAL

6.5.1.2
Synchronization Jump Width (SJW)
To compensate for phase shifts between clock oscillators of different bus controllers, any bus controller must
re-synchronize on any relevant signal edge of the current transmission. The synchronization jump width defines the
maximum number of clock cycles a bit period may be shortened or lengthened by one re-synchronization:
tSJW = tscl × (2 × SJW.1 + SJW.0 + 1)

6.5.2

BUS TIMING REGISTER 1 (BTR1)
The contents of bus timing register 1 defines the length of the bit period, the location of the sample point and the number
of samples to be taken at each sample point. This register can be accessed (read/write) if the reset mode is active.
In operating mode, this register is read only, if the PeliCAN mode is selected. In BasicCAN mode a ‘FFH’ is reflected.

Table 45 Bit interpretation of bus timing register 1 (BTR1); CAN address 7
BIT 7 BIT 6       BIT 5         BIT 4        BIT 3        BIT 2        BIT 1        BIT 0
SAM TSEG2.2 TSEG2.1 TSEG2.0 TSEG1.3 TSEG1.2 TSEG1.1 TSEG1.0

首先看寄存器6BTR0

datasheet说明BTR0决定了BRP和SJW,复位模式下可读可写,对于BRP其中给出了关键的计算公式

tscl = 2 × tCLK × (32 × BRP.5 + 16 × BRP.4 + 8 × BRP.3 + 4 × BRP.2 + 2 × BRP.1 + BRP.0 + 1)

tscl代表的是can控制器系统时钟的一个周期长度,tCLK是外部所供时钟周期,

32 × BRP.5 + 16 × BRP.4 + 8 × BRP.3 + 4 × BRP.2 + 2 × BRP.1 + BRP.0是不关心SJW2位的BTR0寄存器的值,只不过是把二进制做了十进制转换而已。

说明一点,can控制器将外部时钟做如上运算出的系统时钟是can控制器的采样时钟,can内部必须要工作在一个远高于波特率的采样时钟下,这样对传送进来的每位数据才能进行多次采样确定数据的高低。这里的tscl就是can控制器内部的采样时钟。

Synchronization Jump Width是同步跳转宽度。同步跳转宽度定义了一个位周期可以被一次重新同步缩短或延长的时间份额Tq(见下面对BPR5-BPR0的说明)的最大数目,以便在数据发送时与总线同步。SWJ1、SWJ0决定同步跳转宽度。从给出的公式看出同步跳转宽度是tscl的BTR0高2位+1倍。

再来看BTR1寄存器

BTR1定义了数据位宽度以及采样点,对于BTR1各位和数据位宽度的关系需要看datasheet给出的General structure of a bit period图。如下:

有图可以看出外部时钟XTAL 内部采样时钟FSCL 波特率之间的关系。外部时钟和内部采样时钟的计算公式前面已经说明了,从图中可以看到

一个normal bit time是SYNCSEG + TSEG1 + TSEG2,而datasheet上也给出了这几个值的计算公式如下:

tSYNCSEG = 1 × tscl
tTSEG1 = tscl × (8 × TSEG1.3 + 4 × TSEG1.2 + 2 × TSEG1.1 + TSEG1.0 + 1)
tTSEG2 = tscl × (4 × TSEG2.2 + 2 × TSEG2.1 + TSEG2.0 + 1)

a normal bit time代表了一个数据位的时间宽度,设波特率为baud,这个时间宽度就是1/baud。

所以 1/baud = (3 + TSEG1 + TSEG2)x tscl

TSEG1代表是BTR1寄存器的低4位,TSEG2是BTR1寄存器的4,5位二进制数的值

BTR1最高位代表了每次抽样的抽样点数,计算波特率我们先不关心。

这样结合前面BTR0寄存器计算公式说明我们就可以得出外部时钟和波特率之间的关系公式,这前后其实就是通过tscl内部采样时钟来连接起来的 如下:

1/baud = (3 + TSEG1 + TSEG2)x 2 x(1/fxtal)x(BTR0 + 1)

====》

baud = FXTAL  / ( 2 x (BTR0 + 1)x (TSEG1 + TESG2 + 3))

说明:BTR0代表BTR0寄存器低6位的值,TSEG1代表BTR1寄存器低4位的值,TSEG2代表BTR1寄存器中4 5位二进制数的值

sja1000 CAN控制器波特率计算方法详解相关推荐

  1. R语言中如何计算C-Statistics?几种计算方法详解

    R语言中如何计算C-Statistics?几种计算方法详解 目录 R语言中如何计算C-Statistics? #包导入 #数据加载编码

  2. python读取遥感 dat_基于python批量处理dat文件及科学计算方法详解

    摘要:主要介绍一些python的文件读取功能,文件内容修改,文件名后缀更改等操作. 批处理文件功能 import os path1 = 'C:\\Users\\awake_ljw\\Documents ...

  3. php计算股票均线,均线怎么算?均线的计算方法详解

    均线怎么算?均线的计算方法详解 学习股票知识首先需要了解各大技术指标,股票均线是最常用的技术指标,新股民学习股票均线肯定有很多不了解的地方,今天股票知识就给大家讲解一下股票均线是怎么来的? 日均线的计 ...

  4. Python计算向量夹角:向量夹角计算方法详解

    Python计算向量夹角:向量夹角计算方法详解 在数值分析和几何学中,我们经常需要计算两个向量之间的夹角.在Python中,我们可以使用numpy库中的函数来计算向量之间的夹角. 首先,我们需要将向量 ...

  5. 域控制器的深度详解!

    域控制器的深度详解! 参考链接:https://www.youcheyihou.com/news/595827 汽车智能网联化带来信息流大量增加,汽车电子电气(EE)架构将迎来升级,如同中国古代历史社 ...

  6. 51单片机中串口波特率的计算方法详解

    首先,波特率并不是指每秒传送多少个字节,而是指每秒能够传送多少个二进制.举例:波特率为9600代表每秒能够传送9600个二进制,而一个字节=8个二进制. 那么,串口是按照什么时间标准来发送数据的? 其 ...

  7. 求频率的公式是什么计算机,cpu时钟频率计算公式_CPU频率计算方法详解

    CPU频率,就是CPU的时钟频率,简单说是CPU运算时的工作的频率(1秒内发生的同步脉冲数)的简称.单位是Hz,它决定计算机的运行速度.本文主要介绍cpu时钟频率计算公式及方法,具体的跟随小编一起来了 ...

  8. NAND FLASH读写速度计算方法详解

    Nand Flash读写速度的计算方法 在下面的部分,我们以Micron的Nand Flash芯片为例,看一下Nand Flash的访问速度(Write / Read)是如何计算的?我们可以利用Dat ...

  9. OSPF——路由聚合【(汇总)含配置命令】||地址汇总计算方法——详解

    目录 一.路由聚合图解: 二.做路由聚合的优势: 三.OSPF里面对路由汇聚,只能在两个地方做 (1)ABR:仅针对本区域域内路由(以O开头的路由)做汇总,本区域的OIA的域间路由没有办法汇总 --配 ...

  10. iOS导航控制器——UINavigationController使用详解

    一.概述 UINavigationController用来管理视图控制器,在多视图控制器中常用.它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制(实际受内存限制),push和pop方法来弹 ...

最新文章

  1. Java8 stream操作
  2. 记一下常用shell,防止自己忘了。。。记性不好
  3. Python学习之路—2018/6/20
  4. IO-6(PrintStream/PrintWriter)
  5. app pay开发遇到的坑
  6. HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP错误解决方法
  7. StarkWare推出ZK Rollup扩容解决方案StarkNet
  8. 【动态规划】状压dp:蓝桥2020补给(旅行商问题)
  9. M1芯片的Mac电脑如何进入到恢复模式?
  10. ssm企业人事管理系统
  11. python主函数的作用_Python中的main函数解析
  12. 浏览器主页被篡改解决方法
  13. 教学小结:我这样帮助学生提出疑问
  14. win10桌面图标变成白色文件
  15. TP3.2中filed和find()使用
  16. [图像特征匹配]SIFT、SURF、ORB算法笔记以及代码实现
  17. 2018百度云ABC智能物联大会发布世界顶级智能边缘产品BIE
  18. 常用通信协议——IIC协议编程实现
  19. windows病毒和威胁防护出现提示 Trojan:Win32/Fuerboos.D!cl 是什么原因
  20. 液晶弹性自由能计算_加州理工学院白若冰博士、Bhattacharya教授:光敏液晶弹性体中的光-力耦合...

热门文章

  1. 数字信号的增益matlab,如何控制多频带滤波器通带增益?
  2. 遗传算法原理及代码讲解
  3. VHDL实现交通灯程序
  4. java基础教程第3版_java基础教程第3版习题解答
  5. 局域网IP扫描工具-OpUtils
  6. java JDK 8 官网下载网址/清华镜像/华为镜像
  7. 微型计算机系统中传感器的作用,一文读懂传感器原理、作用及技术特点
  8. 计算机放样在钢结构应用,钢结构放样是什么,怎么操作?
  9. win7开机动画自定义
  10. oracle数据库安装——最详细全步骤详解