1. 概述

本文将会详细讲解如何设置NXP MCU的CAN波特率、位时间、采样点等属性。

波特率即CAN总线传输频率,位时间是波特率的倒数,例如波特率是500K,那么位时间 = 1 / 500000 = 0.000002s = 2000ns。

我们先来看一下S32K144单片机的EB中与CAN总线波特率相关的可配置参数有哪些:

下文会介绍每个参数的作用和如何进行配置。

本文的大多数内容都来自NXP官方应用手册《CAN Bit Timing Requirements》,下载链接

https://www.nxp.com/docs/en/application-note/AN1798.pdf

2. 一个位时间的构成

一个CAN数据位有以下四个段,采样点位于 PHASE_SEG1和 PHASE_SEG2的交界处。一个位时间(Tnbt)就等于四个段之和


每个段又包含若干个Tq(Time Quantum),Tq就是一个CAN外设时钟周期。如下图所示,系统时钟经过分频输入给CAN外设,分频系数可配置,每个段包含的Tq数量也可配置(同步段SYNC_SEG除外,固定为1个Tq)。

各个段包含的Tq数量要求如下表所示:

其中PHASE_SEG2段中引用了一个时间参数IPT(Information Processing Time ),通常情况下,IPT为2个Tq,但有两个特殊情况:

  • TOUCAN模块:当CAN外设始终频率等于系统时钟频率时(分频系数为1),IPT=3Tq。
  • MCAN模块:当采用3个采样点的时候,IPT=3Tq。

所以,PHASE_SEG2的Tq数量最小为2,如果PHASE_SEG1或IPT大于2,那么取二者之间的较大值。

3. 同步机制

总线上的每个节点在开始接收信号的时候都需要进行时间同步,因为不同节点间的时钟可能有少许差别。
同步方式有以下两种:

  • 硬件同步:仅发生在帧起始阶段的总线电平从隐性位向显性位转变的时刻。
  • 重同步:发生在CAN帧的后续传输过程中,如果在一个位时间段内的除了同步段的其它段上发生了隐性位到显性位的转变,节点就需要进行重同步。

硬件同步不需要过多解释,我们主要来说一下重同步的机制和作用。

理想状态下,两个节点的时钟完全同步,每个位信号应该像下图一样是对齐的:

但通常情况下两个节点的时钟可能出现偏差,可能出现如下图所示的状况:

节点B比节点A晚了4个Tq,B发送的信号位的同步段在A信号的同步段之后、采样点之前,这种情况下就可能会导致两个节点采样值不准,所以A要采取重同步来避免采样偏差,方法是增加 PHASE_SEG1 的长度,B晚了几个Tq,A的PHASE_SEG1 就增加几个Tq(在重同步限制范围内),结果如下:

这样就可以使得两个节点的采样点处于同一位置。

上面说的是B发的晚了的情况,还有下面这种B发的早了的情况:


当A的上一个位信号还没有发完的时候(采样点之后),就接到了B发送的新的位信号,这时A要进行重同步,是得两个节点的采样点尽可能接近。方法是缩短上一个位信号的PHASE_SEG2阶段,其实就是立即开始下一个位信号:

需要注意几点:

  • 重同步的Tq数量是有限制的,称为重同步跳变宽度(re-synchronisation jump width),记为RJWSJW。重同步跳变宽度最大不超过4,同时不能超过PHASE_SEG1的Tq数量,最小为1,在此范围内尽可能的选比较大的值。所以通常选择为4和PHASE_SEG1的Tq数量中的较小值。
  • 重同步只发生在隐性位向显性位的跳变沿。
  • CAN自带位填充策略,每出现5个连续的极性相同的位,就会填充一个极性相反的位。所以最恶劣情况下每10位会发生一次重同步(5个显性位+5个隐性位)。

4. 传播延迟

位时间中一个PROP_SEG - 传播延迟段(Propagation Delay Segment)

由于网络上的延迟(CAN收发器延迟和总线电平传输延迟),节点A发出的位信号需要经过一段时间之后才能到达节点B,反之亦然。总线上的两个节点有可能同时开始发送一帧报文,利用总线仲裁机制决定谁获取总线控制权,如下图所示:

T1时刻A开始发送一个位信号,经过总线延迟,在T6时刻到达B,延迟时间为Tprop(A,B);B在T2时刻开始发送一个位信号,此时因为A发送的信号还没有到达B,对于B来说总线仍处于空闲状态,所以可以发送报文。B发送的信号在T3时刻开始到达A,延迟时间为Tprop(B,A),因为节点需要在发送信号的同时回读总线电平,来判断自己是否获取总线控制权,所以要确保A回读总线信号(即采样点)时,B的信号已到达A。所以在传播延迟段不允许进行采样,这就是传播延迟段的作用。如果是单采样点,那么采样点应位于PHASE_SEG1和 PHASE_SEG2之间,如果是3个采样点,那么其余两个采样点应位于PHASE_SEG1的其它时刻。

在上图中,尽管B的采样点位于A发送的位信号的结束时间之后,但由于传播延迟,B依然可以正确回读到A发送的位信号。

传播延迟时间取决于两个节点CAN收发器的延迟和总线长度,即:


为了确保两个节点间通信采样正确,传播延迟段的时间应为:

当两个节点物理收发器电气特性相似时即为:

传播延迟段所包含的Tq数量PROP_SEG最小为:

其中 ROUND_UP()是向上取整。

5. 晶振容差(Oscillator Tolerance)


上面的公式中,Fn是标准频率,F是实际频率,δF是晶振容差。

在一个合格的CAN网络中,必须保证处于总线两端(距离最远)的两个节点在拥有最恶劣晶振容差的情况下能够正常通信,即每次采样都可以采到正确值。

在上述两个节点的正常通信过程中,晶振容差的需求如下列公式所示:


2*δF代表两个节点的晶振差别分别处于两个极端,乘10是因为最恶劣情况下是10个位信号会进行一次重同步,再乘以一个位时间(Tnbt),就可以的带最恶劣情况下两个节点位信号的时间偏差,这个偏差要小于重同步最大允许时间Trjw。

除了上面正常通信的情况,还需要考虑总线出现error时候的状况。

在CAN总线中,如果一个节点A检测到一个内部错误(以填充错误为例,即连续检测到6个相同极性位),就会向总线发送一个Error Flag,Error Flag是6个显性位,总线上其它节点如果之前也检测到了总线填充错误,则会同时向总线发送Error Flag,这种情况称为全局错误;如果其它节点之前没有检测到填充错误,那么当节点A发送了Error Flag后,其它节点会检测到这个Error Flag,并紧跟着发送一个Error Flag作为回应,这种情况称为节点A本地错误

节点A可以通过自己发送完Error Flag后,总线上是否有其它节点发送Error Flag来判断是发生了全局错误还是本地错误。因此就要求节点A在连续6个显性位(Error Flag)后依然能够正确采样接下来的至少一个位信号。而出发Error Flag的错误情况可能是之前检测到了连续6个显性位,出现填充错误,这时节点A就会有6+6个位时间不能进行重同步,而下一个位信号的采样点位于PHASE_SEG1和PHASE_SEG2之间,因此可以得到下面的公式:

红框中的含义是12个位时间+下一个位时间的前3个段,即13个位时间减去最后一个段PHASE_SEG2。
左侧计算得到的是第13个位信号的采样点偏差时间,该时间要小于PHASE_SEG1和PHASE_SEG2中的较小值,才能保证采样点落在其它节点发送的第13个位信号的PHASE_SEG1和PHASE_SEG2上。

6. 位时间相关参数的计算步骤

(1)计算PROP_SEG段的最小时间

依据上文传播延迟段计算公式(8),先算出传播延迟段的最小允许时间。

(2)选择CAN外设频率

根据输入给CAN外设的系统始终频率,确定分频系数,使得CAN外设始终频率满足:每个位时间包含8~25个Tq。常用的两个值是8和16.

(3)计算PROP_SEG段包含的Tq数量

根据公式(9)计算出PROP_SEG段包含的Tq数量,如果数量超过8,那么返回步骤(2),选择更大的分频系数,使得CAN外设频率降低,Tq时间增长,以降低PROP_SEG段的Tq数量。

(4)确定PHASE_SEG1和PHASE_SEG2的Tq数量

根据上面的计算,我们可以得到每个位时间包含的Tq总数量,以及PROP_SEG段的Tq数量,我们还知道同步段SYNC_SEG固定为1个Tq,所以我们可以得到剩下了多少个Tq,留给PHASE_SEG1和PHASE_SEG2两个段,据此确定两段的Tq数量就可以了。

分为以下几种情况:

  • 如果剩余Tq数量小于3,由上文(第2节)我们可以知道PHASE_SEG1最小为1,PHASE_SEG2最小为2,因此该情况下不能满足要求,需要返回步骤(2)选择更大的CAN外设频率,增加总Tq数量。
  • 如果剩余Tq数量等于3,那么PHASE_SEG1为1,PHASE_SEG2为2,此时只能采用单个采样点。
  • 如果剩余Tq数量大于3且为奇数,那么给PROP_SEG段加一,剩余的均分给PHASE_SEG1和PHASE_SEG2。
  • 如果剩余数量大于3且为偶数,直接均分给PHASE_SEG1和PHASE_SEG2.

(5)确定RJW(SJW)的Tq数量

RJW取4和PHASE_SEG1中的较小值。

(6)计算晶振容差

依据公式(10)和(11)来计算晶振容差是否满足要求。

如果PHASE_SEG1 > 4,建议重新选择一个更大的CAN时钟分频系数,缩短Tq,否则会影响晶振容差。反之亦然:如果PHASE_SEG1 < 4,建议重新选择一个更小的CAN时钟分频系数,只要确保PROP_SEG ≤ 8即可。

NXP MCU CAN波特率(位时间)配置详解相关推荐

  1. Quartz 时间配置详解

    下面有一些关于 Quartz 时间配置的说明: 字段顺序   允许值   允许的特殊字符 秒   0-59   , - * / 分   0-59   , - * / 小时   0-23   , - * ...

  2. LSQL Developer连接Oracle11g 64位数据库配置详解

    最近换了台64bit的电脑,所以oracle数据库也跟着换成了64bit的,不过问题也随之产生,由于plsql developer暂时没有64bit版本的,所以无法连接到64bit的oracle上,经 ...

  3. Iptables防火墙配置详解

    iptables防火墙配置详解 iptables简介 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表. (1)filter表负责过滤数 ...

  4. SpringBoot的配置详解application

    SpringBoot的配置文件application有两种文件格式,两种配置的内容是一致的,只是格式不一致. 1.application.properties 2.application.yml或者a ...

  5. 【Hibernate】hibernate主键生成策略与配置详解

    //####################################################### **Hibernate各种主键生成策略与配置详解** //############# ...

  6. sshd_config配置详解

    sshd_config配置详解 名称sshd_config - OpenSSH SSH 服务器守护进程配置文件大纲/etc/ssh/sshd_config描述sshd(8) 默认从 /etc/ssh/ ...

  7. java log4j基本配置及日志级别配置详解,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  8. ntp 配置详解(转载后整理汇总)

    ntp 配置详解 一.时间和时区 在LINUX系统中,有许多场合都使用时间戳的方式表示时间,即从1970年1月1日起至当前的天数或秒数. 世界遵循一个标准UTC,中国的标准是CST(北京时间)中国处于 ...

  9. oracle通过dblink连接mysql配置详解(全Windows下)

    oracle通过dblink连接mysql配置详解(全Windows下) 关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也 ...

  10. HAproxy负载均衡动静分离实现及配置详解

     HAproxy负载均衡动静分离实现及配置详解 HAproxy的介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAP ...

最新文章

  1. python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能
  2. Javascript 对 CSS3 animation 动画的流程的简单控制
  3. 样机模型尺寸怎么改_土耳其五代机全尺寸样机模型首次亮相巴黎航展,这不是玩票,是一架认真设计的五代机!...
  4. Hibernate如何一个类映射两个表
  5. 第5月第8天 jsonmodel
  6. php layui 框架,Thinkphp5+Layui高颜值内容管理框架
  7. redis一般缓存什么样数据_SpringBoot+Redis轻松实现数据缓存
  8. 斥候密报_斥候密报《最强王者》三国幕后巾帼之黄月英_吉吉建站手游网
  9. 综合布线系统入门及应用(一)
  10. Excel的DATEDIF函数及其用法实例——求日期之间的间隔
  11. QGraphicsView使用详解
  12. Human Pose Estimation浅述
  13. 使用列表推导式生成一个[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50]的列表
  14. 率土之滨服务器进备战区维护多久,备战区完全解读
  15. 刷脸支付广泛应用于无人领域
  16. 关于SNR和EbN0转换关系
  17. “火灾不分昼夜,安全在我心中”——五一前厂房消防检查纪实
  18. 牛客IOI周赛22-提高组 华丽转身 C++
  19. 【SA8295P 源码分析】19 - QNX Host NFS 文件系统配置
  20. 对比Ubuntu与Win10的资源占用

热门文章

  1. 3D打印机的故障检测及排除
  2. Welcome Here
  3. 【密码学基础】03 传统加密技术
  4. ROS智能车实现darknet_ros检测物体
  5. 一分钟读懂互联网广告竞价策略
  6. MySQL添加索引及添加字段并建立索引
  7. ORACLE利用序列实现ID自增
  8. 开源风控系统radar部署
  9. 教会你如何编写makefile文件
  10. hdu 5148 City (树形dp)