确定SJA1000 CAN控制器的位定时参数
CAN总线系统位定时参数的选择
青 岛科技大学学报 Journal of Qingdao University of Science and Technology
文章编号:1672—6987(2006)01—0058—04
V01.27 No.1 Feb.2006
CAN总线系统位定时参数的选择
张彦军,刘靖字
决定。其他设备包括通信控制器、隔离光藕等。
传输延迟的标量值(PRoP)可以由公式(7)
得到[2]。
PROP—TPRoP/TscL
(7)
3同 步
其中SJW(重同步跳转宽度)决定了一次重 同步期问一个位时间被延长或缩短的时间量子 L最大数值,增大sJW会提高位传送的可靠性, 但同时将降低位传送速率。SAM为采样模式位, 当其为1时,CAN将对每个有效位采样3次,这 能大大滤除外部多为毛刺状的干扰对通信可靠性 的影响,而为0时只对每个有效位采样1次。
同步跳转宽度SJw。位定时寄存器1定义每个
位周期长度采样点的位置和在每个采样点的采样
数目。位功能说明见表1和表2。
瓤乳 ∞ 问w
o=苦 眦
一一 一
一
黧≮一 一一=二一一
:一,一 一
靴乳 ∞ 问w
。眦 m
黧兰 等。] 一 一
18一一 一
。一 一 五一
E1,641,计算公式如下:
TscL一2X TcLK(32BRP.5+16BRP.4+ 8BRP.3+4BRP.2+2BRP.1+BRP.0+1)(2)
中图分类号:TP 802
文献标识码:A
The Choice of Bit Time Parameters in CAN Bus System
ZHANG Yan-Jun,LIU Jingoyu
sja1000_can控制器basiccan模块概要
AT
中止发送
无动作
1当前信息被发送
CMR.0 TR
发送请求
--
注并要求SJA1000向CAN总线发送该
帧时
将产生一个发送中断
中止传送位是在CPU要求当前传送暂停时使用的
传送一条紧急信息
要查看原始信息是否被成功发送不过
释放
可以通过设置释放接收缓冲器位为1来释放RXFIFO中当前信息的内存空间
BTR0.4 BRP.4波特率预设值4 × ×
总线定时0
BTR0.3 BRP.3波特率预设值3 × ×
BTR0.2 BRP.2波特率预设值2 × ×
BTR0.1 BRP.1波特率预设值1 × ×
BTR0.0 BRP.0波特率预设值0 × ×
BTR1.7 SAM采样× ×
BTR1.6 TSEG2.2时间段2.2 × ×
将清除状态寄存器中的接收缓冲器状态位
如果数据溢出位被置位
在释放接收缓冲器命令的
同时是可以发出清除数据溢出命令的
SJA1000进入睡眠模式
只要破坏这三种条件的其中一种
在复位模式中
2.3.3.3状态寄存器
状态寄存器对微控制器来说是只读存储器
CAN地址2
位
符号
名称
值功能
1
总线关闭
SJA1000加入总线活动
至少出现一个错误计数器满或超过
CPU报警限制
两个错误计数器都在报警限制以下SJA1000在传送信息
SJA1000正在接收信息
最近一次发送请求被成功处理
文档编号
CPU可以向发送缓冲器写信息
CPU不能访问发送缓冲器
1
溢出
SR.1
DOS
SJA1000 独立的CAN控制器应用指南-外文资料翻译
外文资料翻译译文SJA1000 独立的CAN控制器应用指南1 介绍SJA1000是一个独立的CAN控制器,它在汽车和普通的工业应用上有先进的特征。
由于它和PCA82C200 在硬件和软件都兼容,因此它将会替代PCA82C200。
SJA1000有一系列先进的功能适合于多种应用,特别在系统优化、诊断和维护方面非常重要。
本文是要指导用户设计基于SJA1000 的完整的CAN节点。
同时本文还提供典型的应用电路图和编程的流程图。
2 概述SJA1000 独立的CAN控制器有2个不同的操作模式:BasicCAN模式(和PCA82C200)兼容PeliCAN模式BasicCAN模式是上电后默认的操作模式。
因此,用PCA82C200开发的已有硬件和软件可以直接在SJA1000上使用,而不用作任何修改。
PeliCAN模式是新的操作模式,它能够处理所有CAN2.0B 规范的帧类型。
而且它还提供一些增强功能使SJA1000能应用于更宽的领域。
2.1 CAN 节点结构通常,每个CAN 模块能够被分成不同的功能块。
SJA1000使用[3] [4] [5]最优化的CAN收发器连接到CAN 。
收发器控制从CAN控制器到总线物理层或相反的逻辑电平信号。
上面一层是一个CAN 控制器,它执行在CAN规范[8]里规定的完整的CAN协议。
它通常用于报文缓冲和验收滤波,而所有这些CAN功能,都由一个模块控制器控制它负责执行应用的功能。
例如,控制执行器、读传感器和处理人机接口(MMI)。
如图1所示,SJA1000独立的CAN控制器通常位于微型控制器和收发器之间,大多数情况下这个控制器是一个集成电路。
图1 CAN模块装置2.2 结构图下图是SJA1000 的结构图图2 SJA1000的结构图根据CAN规范,CAN核心模块控制CAN帧的发送和接收。
接口管理逻辑负责连接外部主控制器,该控制器可以是微型控制器或任何其他器件。
经过SJA1000复用的地址/数据总线访问寄存器和控制读/写选通信号都在这里处理。
CAN总线中位定时的设定方法.
CAN总线中位定时的设定方法CAN总线中位定时的设定方法张健摘要:在CAN总线中,位定时有一点小错误就会导致总线性能严重下降。
虽然在许多情况下,位同步会修补由于位定时设置不当而产生的错误,但不能完全避免出错情况,并且在遇到两个或多个CAN节点同时发送的情况时,错误的采样点会使节点启动错误认可标志,使节点不能赢得总线上的任何活动。
因此要分析、解决这样的错误就需要对CAN总线位定时中的位同步和CAN节点的工作过程有一个深入的了解。
本文描述了CAN总线位同步的运行规则以及如何对位定时的参数进行设置。
关键词:总线位定时同步延迟1.前言CAN总线的数据传输速率最高可达1Mbit/s,通常用石英晶振作为时钟发生器,可以独立进行位定时的参数设置,这样即使网络中节点之间的时钟周期不一样仍可获得相同的位速率。
但网络中晶振的频率不是绝对稳定的,温度、电压以及器件的异常都会导致微小的差别,但只要将其稳定在振荡器容差范围之内,总线上的节点会通过重同步进行弥补。
CAN总线的一个位时间可以分成四个部分:同步段,传播段,相位段1和相位段2,每段的时间份额的数目都是可以编程控制的,而时间份额的大小tq由系统时钟tsys和波特率预分频值BRP决定:tq=BRP/tsys。
如图1:图1参数范围说明分频值[1…….32]规定时间份额的长度同步段1tq固定长度,同步总线节点传播时间段[1…….8]tq补偿总线物理延迟时间相位缓冲段1[1…….8]tq重同步时可以暂时延长相位缓冲段2[1…….8]tq重同步时可以暂时缩短同步跳转宽度[1…….4]tq长度小于相位缓冲段表1:位时间的参数2.同步段(1)同步段用于同步总线上的各个节点,在此段内期望有一个跳变沿出现。
如果跳变沿出现在同步段之外,那么沿与同步段之间的长度叫做沿相位误差。
采样点位于相位缓冲段1的末尾和相位缓冲段2开始处。
(2)传播时间段用于补偿总线上信号传播时间和电子控制设备内部的延迟时间。
SJA1000说明
SJA1000--独立CAN控制器
概述
SJA1000是一款独立的控制器,用于汽车和一般工业环境中的控制器局域网络(CAN)。
它是PHILIPS半导体PCA82C200 CAN控制器(BasicCAN)的替代产品。
而且,它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN 2.0B协议。
特性
和PCA82C200独立CAN控制器引脚兼容;
和PCA82C200独立CAN控制器电气兼容;
PCA82C200模式(即默认的BasicCAN模式);
扩展的接收缓冲器(64字节、先进先出FIFO);
和CAN2.0B协议兼容(PCA82C200兼容模式中的
无源扩展帧);
同时支持11位和29位识别码;
位速率可达1Mbits/s;
PeliCAN模式扩展功能:
--可读/写访问的错误计数器
--可编程的错误报警限制
--最近一次错误代码寄存器
--对每一个CAN总线错误的中断
--具体控制位控制的仲裁丢失中断
--单次发送(无重发)
--只听模式(无应答、无主动的出错标志)
--支持热插拔(软件实现的位速率检测)
--验收滤波器扩展(4字节代码,4字节屏蔽)
--自身信息接收(自接收请求)
24MHz时钟频率;
对不同微处理器的接口;
可编程的CAN输出驱动器配置;
增强的环境温度范围(-40-+125℃)。
浅谈CAN总线的位定时参数
浅谈CAN总线的位定时参数
1.概述
CAN 总线通信中,波特率、位周期内采样次数和采样位置都可以通过编程设置,这些设置为用户根据其应用优化网络通信性能提供了方便。
优化位定时参数,能够保证信息同步、通信性能、传输延迟和晶振误差在极端条件下进行恰当的错误检测。
然而系统的有些性能是相互冲突的,例如,在位周期末端部分选择采样点可以使传播延迟有更大的容差,这时总线长度可以更长;如果在位周期的中点附近选择采样点,则系统的每个节点可以有更大的振荡器容差。
可以明显地看出振荡器容差和总线长度是互相冲突的,它们只有通过优化位定时参数才能兼备。
本文将通过一个CAN 总线控制网络介绍CAN 总线位定时参数的基本概念和计算设置方法。
该网络采用AT89S52 单片机、SJA1000 CAN 控制器和PCA82C250 总线收发器设计,并应用于楼宇自动化控制系统中,获得了良好的应用效果。
2.CAN 总线的位定时关系及相关概念
下面介绍的几个概念中有些与具体的器件有关,本网络中使用的CAN 总线
控制器件是SJA1000,因此,有关概念也都是针对SJA1000 而言的。
振荡器时钟周期tclk tclk 是CAN 总线控制器外挂晶振频率的倒数,它是CAN 总线系统中的最小时间单位。
系统时钟周期tSCL tSCL 是系统将tSCL 分频后得到的一个时间值,它在时间上就是一个时间份额TQ,分频数由SJA1000 的波特率预设值(BRP)决定。
tSCL 可由下式来计算:tSCL=2 乘以tclk 乘以BRP (1)
位周期tBit 位周期是一位数据在总线上的持续时间。
使用Philips 公司的独立。
CAN控制器SJA1000中文资料
广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax:38730925
器 RXB 13 个字节 作为接收 FIFO RXFIFO 长 64 字节 的一个窗口 可被 CPU 访问 CPU 在此 FIFO 的支持下 可以在处理信息的时候接收其它信息 6.1.4 验收滤波器 ACF 验收滤波器把它其中的数据和接收的识别码的内容相比较 以决定是否接收信息 在纯粹的接收测试中
6.2 CAN 控制器的详细说明 SJA1000 在软件和引脚上都是与它的前一款 PCA82C200 独立控制器兼容的 在此基础上它增加了很 多新的功能 为了实现软件兼容 SJA1000 增加修改了两种模式 y BasicCAN 模式 与 PCA82C200 兼容 y PeliCAN 模式 扩展特性 工作模式通过时钟分频寄存器中的 CAN 模式位来选择 复位默认模式是 Basic CAN 模式 6.2.1 与 PCA82C200 兼容性 在 Basic CAN 模式中 SJA1000 模仿 PCA82C200 独立控制器所有已知的寄存器 在 6.2.1.1 到 6.2.1.4 节中所描述的特性不同于 PCA82C200 这主要是为了软件上的兼容性 6.2.1.1 同步模式 在 SJA1000 的控制寄存器中没有 SYNC 位 在 PCA82C200 中是 CR.6 位 同步只有在 CAN 总线上 弱势-支配 控制 的转换时才有可能发生 写这一位是没有任何影响的 为了与现有软件兼容 读取 这一位时是可以把以前写入的值读出的 对触发电路无影响 6.2.1.2 时钟分频寄存器 时钟分频寄存器用来选择 CAN 工作模式 Basic CAN /Peli CAN 它使用从 PCA82C200 保留下来的 一位 象在 PCA82C200 中一样 写一个 0-7 之间的值 就将进入 Basic CAN 模式 默认状态是 12 分频 的 Motorola 模式和 2 分频的 Intel 模式 保留的另一位补充了一些附加的功能 CBP 位 见表 49 的置位 使内部 RX 输入比较器旁路 这样在使用外部传送电路时可以减少内部延时 6.2.1.3 接收缓冲器 PCA82C200 中双接收缓冲器的概念被 Peli CAN 中的接收 FIFO 所代替 这对软件除了会增加数据溢出 的可能性之外 不会产生应用上的影响 在数据溢出之前 缓冲器可以接收两条以上信息 最多 64 字节 6.2.1.4 CAN 2.0B SJA1000 被设计为全面支持 CAN 2.0B 协议 这就意味着在处理扩展帧信息的同时 扩展振荡器的误 差被修正了 在 Basic CAN 模式下只可以发送和接收标准帧信息 11 字节长的识别码 如果此时检测到 CAN 总线上有扩展帧的信息 如果信息正确 也会被允许且给出一个确认信号 但没有接收中断产生 6.2.2 Basic CAN 和 Peli CAN 模式的区别 在 Peli CAN 模式下 SJA1000 有一个含很多新功能的重组寄存器 SJA1000 包含了设计在 PCA82C200 中的所有位及一些新功能位 Peli CAN 模式支持 CAN 2.0B 协议规定的所有功能 29 字节的识别码 SJA1000 的主要新功能
SJA1000独立的CAN控制器应用指南(中文)
2.1 SJA1000 特征 SJA1000 的特征能分成 3 组
1 已建立好的 PCA82C200 功能 这组的特征在 PCA82C200 里已经生效
-6-
广州周立功单片机发展有限公司
比较器旁路 = 不激活 (CBP = 0)
t
比较器旁路 = 激活 (CBP = 1)
t
图 6 SJA1000 接收输入比较器
如果外部集成收发器电路有效 而比较器旁路功能在时钟分频寄存器里无效 RX1 必须被连接到 2.5V 的参考电压上 现存的收发器参考电压输出 图 6 显示了两种设置的相应电路
传感器 变送器
MMI
传感器 变送器
MMI
总线
图 1 CAN 模块装置
-2-
广州周立功单片机发展有限公司
2.3 方块图 下图是 SJA1000 的方块图
SJA1000
发送 缓冲器
收发器
图 2 SJA1000 的方块图
根据 CAN 规约 CAN 核心模块控制 CAN 帧的发送和接收 接口管理逻辑完成对外部主控制器的连接 该控制器能可以是微型控制器或其他器件 经过 SJA1000 复用的地址/数据总线访问寄存器和控制读/写选通信号都在这里处理 另外除了 PCA82C200 已有的 BasicCAN 功能 还加入了一个新的 PeliCAN 功能 因此 附加的寄存器和逻辑电路主要在这块里生效 SJA1000 的发送缓冲器能够存储一个完整的信息 扩展的或标准的 无论什么时候主控制器初始化 发送 接口管理逻辑会迫使 CAN 核心块从发送缓冲器读 CAN 信息 当收到一个信息时 CAN 核心块将串行位流转换成用于验收滤波器的并行数据 通过这个可编程的 滤波器 SJA1000 能确定哪些信息实际上被主控制器收到 所有收到的信息由验收滤波器接收并存储在接收 FIFO 储存信息的多少由工作模式决定 而最多能 存储 32 个信息 因为数据溢出的可能性被大大降低 这使用户能更灵活地指定中断服务和中断优先级
CAN 控制器的位定时参数
3 位定时要求的规定 .................................................................................................. 6
3.1 计算规则 ............................................................................................................................ 7 3.2 用图表显示计算规则 .......................................................................................................... 8
3.2.1 规定和限制 .............................................................................................................. 8 3.2.2 确定最大的位速率.................................................................................................... 8 3.2.3 确定适当的采样点.................................................................................................... 9
CAN总线位定时参数的确定
CAN 总线位定时参数的确定CAN 通信中,波特率、位周期内取样点数和位置可以编程设置,这些设置为用户根据其应用优化网络通信性能提供了方便。
优化位定时参数,能够保证信息同步,保证传输延迟和时钟误差在极端条件下进行恰当的错误检测。
本文说明位定时参数的确定方法。
CAN 总线是一种有效支持分布式控制和实时控制的、多主的异步串行通信网络。
由于CAN 总线具有较强的纠错能力,支持差分收发,适合高噪声环境,具有较远的传输距离,并且Philips 和Intel 等半导体公司都有支持CAN 通信协议的集成器件。
CAN 总线已经在各个领域中得到了广泛应用。
在CAN 通信协议中规定,通信波特率、每个位周期的取样位置和个数,都可以自行设定。
这样的设计理念,为用户在自己的应用中,优化网络通信性能提供了空间。
为了通过设定位定时参数来优化网络通信性能,必须清楚位定时参数与参考时钟误差和系统内信号延迟的关系。
如果位周期内的取样位置偏后,将能够容忍较大的信号传输延迟,相应的,总线传输距离可以延长;而如果周期内的取样位置接近中间,则可以容忍系统内节点间的参考时钟误差。
但这显然是矛盾的,为了协调这种矛盾,必须对位定时参数进行优化设置。
通过对CAN 总线位定时参数进行研究,找到矛盾的关键所在,就能够对其进行优化,从而提高通信系统的整体性能。
下面以Philips 公司的独立通信控制器SJA1000为例,进行讨论。
1相关定义1.1位周期的组成波特率(f bit )是指单位时间内所传输的数据位的数量,一般取单位时间为1s 。
波特率由通信线上传输的一个数据位周期的长度(T bit )决定,如下式所示。
bitbit T f 1= (1) 根据Philips 公司的独立通信控制器,一个位周期由3个部分组成:同步段(t SYNC_SEG )、相位缓冲段1(t TSEG1)和相位缓冲段2(t TSEG2)。
T bit =t SYNC_SEG +t TSEG1+t TSEG2 (2)所有这些时间段,都有一个共同的时间单元——系统时钟周期(T SCL )。
CAN通信控制器SJA1000
地址过滤方法:
接收码位(AC.7—AC.0)(本地节点地址,需预 先设定)和报文标识符的高8位(ID.10—ID.3)必须在 被接收屏蔽位(AM.7—AM.0)标定为相关的那些位的 位置上相等,报文才被接收。
思考题:CAN总线的发送器和接收器均使 用SJA1000,采用CAN2.0A规范,发送器 发送的4个报文的ID分别为:
接收过滤器
利用接收过滤器,CAN控制器只允许接收标识符 位(ID10—ID3)与接收过滤寄存器中预设值相一致的 报文进入RXFIFO中。
接收过滤器通过接收码寄存器和接收屏蔽寄存器来定义。
(1)接收码寄存器(ACR) (预设本地节点地址)
BIT 7 AC.7
BIT 6 AC.6
BIT 5 AC.5
BIT 4 AC.4
BasicCAN模式——与PCA82C200兼容的模式 PeliCAN模式 ——扩展功能模式
工作模式通过时钟分频寄存器中的CAN模式位来选择, 复位默认模式是BasicCAN模式。
2 一般说明
两种封装形式: 一种为28引脚的塑质双列式封装(DIP28) 一种为28引脚的塑质小型线外封装(SO28)
(1)11001100001;
(2)11001101001;
(3)11001000001;
(4)11001001001。
欲使接收器只接收报文(1)、(3),应 如何设置接收器SJA1000的ACR和AMR?
总线定时寄存器0(BTR0)
总线定时寄存器0的内容确定波特率预置器 (BRP)和同步跳转宽度(SJW)的值。
定义接收码寄存器与接收滤波的对
BIT 3应位的B哪IT些2位是“B相IT关1 BIT 0 AC.3的(”AM(AA.XMC=.1X.2)=0)或“A不C.予1 关心的AC.0
sja1000 CAN波特率的计算
我假定一般应用中选取n=10,也就是:
同步段+相位缓冲段1+相位缓冲段2 =1+5+4
则(2)式简化为
m=800/Fbps
Fbps就是我们所希望得到的CAN总线频率。单位为K。
设(1)式中BTR0=m,BTR1=n,外部晶振16M,则有:
n =8000/ Fbps (2)
这样,当Fbps取我们希望的值时,就会得到一个m * n的组合值。当n选定,m值也唯一。
Tseg2≥Tscl2,Tseg2≥2TSJW,Tseg1≥Tseg2
总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为:
BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1)
关于CAN的波特率的计算,在数据手册上已经有很详细的说明。在此,简要的把计算方法给出来:
m的最大设置值为64,SJA1000最大分频系数m*n=64x25=1600。因此标准算法中通常以16M晶振为例。其实有了公式(1),任何晶振值(6M~24M)都很容易计算。
SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。
SJA重同步跳宽选取: 与数字锁相环技术有关。n值选得大时,SJA可以选得大,即一次可以修正多个脉冲份额Tscl。n值小或频率低时,选SJA=1。即BTR0.7和BTR0.6都设为0。
Tphs1 + Tphs2 = bit time - Tcsc - Tprs = (16 - 1 - 7)Tcsc= 8
SJA1000滤波器配置(精辟)
CAN总线的滤波器设置就像给总线上的节点设置了一层过滤网,只有符合要求的CAN信息帧才可以通过,其余的一概滤除。
在验收滤波器的帮助下,只有当接收信息中的识别位和验收滤波器预定义的值相等时,CAN 控制器才允许将已接收信息存入RXFIFO。
验收滤波器由验收代码寄存器(ACRn)和验收屏蔽寄存器AMRn 定义,要接收的信息的位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位为“不影响”,即可为任意值。
一、BasicCAN模式下SJA1000滤波器在验收滤波器的帮助下CAN 控制器能够允许RXFIFO 只接收同识别码和验收滤波器中预设值相一致的信息,验收滤波器通过验收代码寄存器ACR和验收屏蔽寄存器AMR来定义。
复位请求位被置高,验收代码寄存器ACR可以访问(读/写)。
复位请求位被置高,验收屏蔽寄存器AMR可以访问(读/写)。
验收屏蔽寄存器定义验收代码寄存器的相应位对验收滤波器是“相关的”或“无影响的”。
滤波的规则是:每一位验收屏蔽分别对应每一位验收代码,当该位验收屏蔽位为“1”的时候(即设为无关),接收的相应帧ID位无论是否和相应的验收代码位相同均会表示为接收;当验收屏蔽位为“0”的时候(即设为相关),只有相应的帧ID位和相应的验收代码位值相同的情况才会表示为接收。
只有在所有的位都表示为接收的时候,CAN控制器才会接收该报文。
举例:如何设置滤波器,接收标识符为0000 1010的CAN帧?在SJA1000复位模式下,设置寄存器CDR.7为“0”,即设置CAN控制器SJA1000工作于BasicCAN 模式。
设置验收代码寄存器ACR0=0x0A;根据滤波器信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为0,设置AMR=0x00;如此设置,SJA1000接收标识符ID.10~ID.3为0000 1010的CAN帧。
二、PeliCAN模式下SJA1000滤波器有两种不同的过滤模式可在模式寄存器中选择MOD.3,AFM。
SJA1000中CAN总线同步跳转宽度+波特率控制寄存器的设置
转: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.5kbps ...等等,换另一句话来说就是,只要总线时序为10kbps的节点一设置(启动)同步跳转宽度位域,那么如果其他节点拥有总线时序为9.X kbps的话,都会被节点一相互兼容。
那么控制同步跳转宽度位域的寄存器就是总线时序寄存器0的最高两位,SJW.0与SJW.1同步跳转宽度位域的公式如下:Tsjw的值是系统时钟Tscl乘于SJW.0~1的设置。
第七章 CAN总线控制器SJA1000
CAN总线收发接口电路82C250
• 82C250是CAN控制器与物理总线之间的 接口,它最初是为汽车高速通信(最高达 1Mbps)的应用而设计的。 • 器件可以提供对总线的差动发送和接收 功能。
CAN 总线的应用 CAN控制器SJA1000在系统中的位置
分布模块1
传感器 执行元件 MMI 模块控制器
新增功能:
– 标准结构和扩展结构报文的接收和发送; – 64字节的接收FIF0: – 标准和扩展帧格式都具有单/双接收滤波器(含接收 屏蔽和接收码寄存器); – 可进行读/写访问的错误计数器; – 可编程的错误报警限制; – 最近一次的错误代码寄存器; – 每一个CAN总线错误都可以产生错误中断; – 具有丢失仲裁定位功能的丢失仲裁中断; – 单发方式(当发生错误或丢失仲裁时不重发); – 只听模式(监听CAN总线,无应答,无错误标志; – 支持热插拔(无干扰软件驱动位速率检测); – 硬件禁止CSI参考模型中的两层:物理层 接受滤波、超载 和数据连路层
逻辑链路控制(LLC) 媒体访问控制(MAC) 物理信令(Physical Sisnal Lins, PSL) 物理媒体附件( Physical Attachment, PMA) 媒体接口(Medium Dependent Interface, MDI) 数据 链路 层
SJAl000在软件和引脚上都是与它的前—款 PCA82C200独立CAN控制器兼容的,在此基础上 增加了很多新的功能。为了实现软件兼容, SJAl000采用了两种工作方式: Basic CAN方式(PCA82C200兼容方式)和PeliCAN方 式(扩展特性方式)。工作方式通过时钟分频寄存 器中的CAN方式位来选择。 上电复位默认工作方式是Basic CAN方式,Basic CAN和PeliCAN方式的区别如下:在PeliCAN方式 下,SJAl000有一个重新设计的含很多新功能的 寄存器组。SJAl000包含PCA82C200中的所有位, 同时增加了一些新的功能位。PeliCAN方式支持 CAN2.0B协议规定的所有功能(29位的标识符)。
CAN Bit timing
CAN总线位定时参数的确定[日期:2004-12-7] 来源:单片机及嵌入式系统应用作者:北京全路通信信号研究设计院吴永[字体:大中小]摘要:CAN通信中,波特率、位周期内取样点数和位置可以编程设置,这些设置为用户根据其应用优化网络通信性能提供了方便。
优化位定时参数,能够保证信息同步,保证传输延迟和时钟误差在极端条件下进行恰当的错误检测。
本文说明位定时参数的确定方法。
关键词:CAN总线位定时同步延迟引言CAN总线是一种有效支持分布式控制和实时控制的、多主的异步串行通信网络。
由于CAN总线具有较强的纠错能力,支持差分收发,适合高噪声环境,具有较远的传输距离,并且Philips和Intel等半导体公司都有支持CAN通信协议的集成器件。
CAN总线已经在各个领域中得到了广泛应用。
在CAN通信协议中规定,通信波特率、每个位周期的取样位置和个数,都可以自行设定。
这样的设计理念,为用户在自己的应用中,优化网络通讯性能提供了空间。
为了通过设定位定时参数来优化网络通信性能,必须清楚位定时参数与参考时钟误差和系统内信号延迟的关系。
如果位周期内的取样位置偏后,将能够容忍较大的信号传输延迟,相应的,总线传输距离可以延长;而如果周期内的取样位置接近中间,则可以容忍系统的节点间的参考时钟误差。
但这显然是矛盾的,为了协调这种矛盾,必须对位定时参数进行优化位置。
图1 位周期结构图通过对CAN总线位定时参数进行研究,找到矛盾的关键所在,就能够对其进行优化,从而提高通信系统的整体性能。
下面以Phi lips公司的独立通信控制器SJA1000为例,进行研究。
1 相关定义1.1 位周期的组成波特率(fbit)是指单位时间内所传输的数据位的数量,一般取单位时间为1s。
波特率由通信线上传输的一个数据位周期的长度(Tbit)决定,如下式所示。
Fbit=1/Tbit (1)根据Philips公司的独立通信控制器,一个位周期由3个部分组成:同步段(tSYNC_SEG)、相位缓冲段1(tTSEG1)和相位缓冲段2(tTSEG2)。
项目二 汽车CAN总线技术基本原理(任务四SJA1000CAN控制器及其应用)
0
接收中断使能 1
0
功能
使能 禁止 使能 禁止 使能 禁止 使能 禁止 使能 禁止 使能 禁止 使能 使能 使能 禁止
Peli_RXD: PUSH ACC PUSH PSW CLR EA ;//关CPU中断
RE6: MOV DPTR,#SJA_IR MOVX A,@DPTR ANL A,#01H CJNE A,#00H,RE7;接收中断 SJMP RE8
IR.3 DOS 溢出中 1 置位
断
复位
IR.2 EI 错误报 1 置位
警中断 0 复位
IR.1 TI 发送中 1 置位
断
0 复位
IR.0 RI 接收中 1 置位
断
0 复位
Peli_RXD: PUSH ACC PUSH PSW CLR EA ;//关CPU中断
RE6: MOV DPTR,#SJA_IR MOVX A,@DPTR ANL A,#01H CJNE A,#00H,RE7;接收中断 SJMP RE8
----
状态
----
3(IR) 中断
---
中断
---
4(IER) 中断使能
中断使能 中断使能 中断使能
5
保留(00H) ---
保留(00H) ---
6(BTR0) 总线定时0
---
总线定时0 总线定时0
7(BTR0) 总线定时1
---
总线定时1 总线定时1
8(OCR) 输出控制
---
输出控制 输出控制
接收缓存器 标识符RTR,DLC 字节1-8 时钟驱动器
10 11 12-19
20 21 22-29 31
7
6
测试方 同步 式
我的CAN总线SJA1000调试经历
我的CAN总线SJA1000调试经历展开全文我的 CAN总线 SJA1000调试经历前几天学校实验室赶活,调试了SJA1000的CAN总线驱动,我所做的平台是在Intel PXA270的ARM处理器上面进行控制的,通过读写总线的方式进行控制的,期间对着SJA1000的databook查找了很多,期间调试时也走了不少的弯路,现在把调试心得一些经验在这里讲讲。
由于以前对CAN的驱动接触比较少,只是了解过它的物理特性和用途,所以下手点就是从databook这块着手的,于是先调试CAN的初始化配置,首先是通过CPU能够读写SJA1000的寄存器了,然后我从网上下了一个基于Linux内核的CAN驱动代码,往里一直添加,但最后发现这套代码写得太复杂了,可能本身自己对SJA1000的寄存器设置也不是很了解,没办法,看了大半天的databook,终于有些头绪想清楚该是怎样去控制了,从ZLG网站中下了一个BASIC模式下的参考例程,我看了一下,然后SJA的寄存器详细看了看(由于开始的时候比较忙,所以直到这个时候才算是仔细看了看SJA的内部,至于CAN 的基础协议我是根本没有看,这给我后面带来了极大的麻烦)。
然后就参考ZLG的程序开始写SJA的测试程序,那个程序写的很大,也比较完整,因为我想快点把CAN打通,于是弄了一个一千多行的程序,以前我的调试程序一般都很小的。
写好程序之后就开始测试,首先测试的是测试寄存器,然后一步步测试下去,在BASIC模式下所有的寄存器都正常,但是在发送的时候是总是不正常,启动发送之后就一直在发送,状态寄存器的标志位一直处在发送的状态下,然后就是报总线错误,不知道是怎么会事情,很郁闷,上网上的BBS看了一下。
其他人告诉我单个CAN节点发送是成功不了的,如果没有收到接受CAN 节点的应答,发送节点就会一直发送,直到超出错误计数器的允许值使得总线关闭。
这下我终于明白是怎么回事了,同时在精华区发现在peli模式下有ECC(错误寄存器),可以跟踪错误,于是开始改成用PeliCAN模式操作过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
确定SJA1000 CAN控制器的位定时参数目录1介绍 (2)2CAN位定时关系概述 (2)2.1 定义 (2)2.1.1 位周期的结构 (2)2.1.2 CAN位定时控制寄存器 (3)2.2 振荡器容差 (4)2.3 传播延迟 (5)2.4 同步 (6)3位定时要求的规定 (6)3.1 计算规则 (7)3.2 用图表显示计算规则 (8)3.2.1 规定和限制 (8)3.2.2 确定最大的位速率 (8)3.2.3 确定适当的采样点 (9)4计算位定时参数 (10)4.1 例子的规定 (10)4.2 用图表选择位定时参数 (11)4.2.1 例1 (11)4.3 计算位定时参数的步骤 (13)4.3.1 例2 (14)4.3.2 例3 (15)5参考文献 (16)附录 (17)1介绍控制器局域网CAN [1]是一个串行异步多主机的通讯协议它可以连接汽车或工业应用中的电子控制模块传感器和执行机构CAN 协议的其中一个要素是位速率用户可以设计位周期中的位采样点位置和采样次数这样用户就可以自由地优化应用网络的性能在优化的过程中用户要注意位定时参数基准参考振荡器容差和系统中不同的信号传播延迟之间的关系例如在位周期末端部分选择采样点可以使传播延迟有更大的容差而且总线长度可以更长如果在位周期的中点附近选择采样点则系统的每个节点可以有更大的振荡器容差这里可以明显地看出振荡器容差和总线长度是互相冲突的它们只有通过优化位定时参数才能兼备本文档的目的是支持使用Philips CAN 控制器SJA1000和PCx82C200的用户进行系统优化文档中的讨论方法可以让CAN 用户确定y 系统是否适合CAN 的位定时要求y 优化位定时参数以符合给定的系统要求2CAN 位定时关系概述2.1 定义2.1.1 位周期的结构本文档使用的CAN 位定时参数定义和用于Philips CAN 控制器更多信息见[2][3]和[4]编程的参数定义有紧密的关系这些关系都在图1中表示系统的位速率f Bit 表示每单位时间传输数据位的量它由下面的方程1定义BitBit t f 1=(1)图1 CAN 位定时段额定标称的位定时由3个互不重叠的段SYNC_SEG TSEG1和TSEG2组成这3个时间段分别是t SYNC_SEGt TSEG1和t TSEG2所以算术上额定位周期t Bit 是3个时间段的和21TSEG TSEG SEG _SYNC Bit t t t t ++= (2)位周期中这些段都用整数个基本时间单位来表示这个时间单位就叫时间份额TQ时间份额的持续时间是CAN 系统时钟的一个周期tSCL 是从振荡器时钟周期t CLK 取得见图2用户通过编程预分频因数波特率预设值BRP 可以调整CAN 系统时钟见方程3CLKCLK SCL f BRPt BRP t 22=⋅= (3)C ANbit periodsample point(s)(fixed)system clockC AN注t SCL 是一个时间份额TQ 的持续时间图2 取得Philips CAN 控制器使用的位周期的原理对CAN 位定时计算另一个很重要的时间段是同步跳转宽度SJW 持续时间是t SJW SJW 段并不是位周期的一段只是定义了在重同步事件中被增长或缩短的位周期的最大TQ 数量此外CAN 协议还允许用户指定位采样模式SAM分别是单次采样和三次采样模式在3个采样结果中选出1个在单次采样模式中采样点是在TESG1段的末端而三次采样模式比单次采样多取两个采样点它们在TSEG1段的末端的前面之间相差一个TQ 见图1和图2本文档中的位定时计算用位定时段的术语表示规格化CAN 系统时钟的周期(SYNC_SEG TSEG1TSEG2SJW 和NBT)使位定时的计算和指定的位速率之间互相独立详细信息请看下一节的方程7112.1.2 CAN 位定时控制寄存器 在前面已经提到位定时的很多元素是用户可定义的下面的图3就显示了所有Philips CAN 控制器使用的设置位定时参数的控制寄存器很显然这些参数只能使用整数值MS BLS BBTR 0:MS B LS BBTR 1:图3 位定时控制寄存器的结构控制寄存器不同位的含义如下见[2][3][4][5]BRP 波特率预设值 寄存器BTR0 范围164BRP=32 BRP.5+16 BRP.4+8 BRP.3+4 BRP.2+2 BRP+1 BRP.0+1(4)SAM采样模式寄存器BTR1SAM =0: 单次采样模式 (5)SAM =1: 3次采样模式 (6)SJW同步跳转宽度 寄存器BTR0范围141012++==.SJW .SJW t t SJW SCLSJW(7)SYNC_SEG 同步段固定 值11==SCLSEG_SYNC t t SEG _SYNC(8)TSEG1位定时段1 寄存器BTR1范围116==SCLTSEG t t TSEG 118 TSEG1.3 + 4 TSEG1.2 + 2TSEG1.1 + TSEG1.0+1 (9) TSEG2位定时段2 寄存器BTR1范围18==SCLTSEG t t TSEG 22 4 TSEG2.2 + 2TSEG2.1 + TSEG2.0+1 (10) 注意TSEG2必须选择 2单次采样模式和33次采样模式规定的段值和额定位定时NBT 之间的关系如下 NBT额定位定时范围325==SCLBit t t NBT SYNC_SEG + TSEG1 + TSEG2 (11)尽管NBT 的可变范围在325个TQ 之间但在单次采样模式中可以使用的最小值是4TQ 在3次采样模式中最小值是5TQ2.2 振荡器容差上面已经解释过CAN 网络中的每个节点都从振荡器基准取得位定时在实际系统中振荡器基准频率f CLK 会由于初始的容差偏移老化和环境温度的变化而偏离了它的额定值最后这些偏离量之和就形成了振荡器容差f 振荡器容差是一个相对的容差表示和振荡器基准频率的偏离标准化成额定的频率是nom.CLK nom.CLK min max/.CLK f f f f −=∆(12)由于CAN 系统时钟直接从振荡器基准频率取得f 也表示系统时钟的相对容差因此系统时钟的最小值和最大值大约如下)f (t ft t nom .SCL nom.SCL min .SCL ∆−⋅≈∆+=11(13) )f (t ft t nom .SCL nom.SCL max .SCL ∆+⋅≈∆−=11(14)只有假设f<<1时方程13和14的近似算法才成立在实际系统中使用的时钟基准像石英振荡器f<0.1%锁相环取得的频率f<0.5%和陶瓷谐振器f<1.2%都能满足这个假设的要求2.3 传播延迟CAN 系统中传播延迟是来源于节点之间竞争访问网络时的非破坏性仲裁以及帧内应答仲裁在标识符场产生表示有多个节点同时将自己的标识符位发送到总线上由于节点在位的边沿同步如果系统的传播延迟时间太长就会导致仲裁无效最终CAN 系统的各种延迟在给定的位速率下限制了最大的网络总线长度两个节点A 和B 之间的单方向传播延迟定义为t propA,B见图4这个延迟是在信号通道上所有器件延迟的和包括收发器CAN 控制器和总线介质[8]图4 节点之间的传播延迟图5 CAN 总线系统往返Round-Trip延迟的测定通常有效的最大循环延迟t loop.eff 是在控制器和收发器的数据表中规定例如图5的收发器有效循环延迟的计算如下RX TX trc .eff .loop t t t += (15)由于节点必须接收彼此的波形同步信号然后在仲裁的时候发送回去所以系统的整个传播延迟是两个节点延迟的和假设在给定网络的每个节点有可比较的延迟则总的往返Round-Trip延迟t prop 可以用下面的方程表示)t t t (t t t oth .eff .loop trc .eff .loop Bus )A ,B (prop )B ,A (prop prop ++=+=2 (16)其中t loop.eff.oth 是信号通道上除了收发器外所有器件的有效循环延迟总的往返Round-Trip延迟是计算位定时参数的一个重要因子由于它是应用指定的所以必须根据特定系统的约束独立地确定对于在本文档的位定时计算标准的传播延迟可以用下面的方程17定义SCLprop t t PROP =(17)由于这个标准化的传播延迟不是一个可编程的控制器间隔所以它不一定是一个整数的值2.4 同步CAN 总线规范中定义的同步保证了报文可以不管节点间积累的相位误差正确地译码振荡器漂移空间地分布在网络的节点间的传播延迟或者噪声干扰都会产生相位误差CAN 规范定义了两种类型的同步硬同步和重同步硬同步只在报文帧的开始执行在空闲周期后网络中每个CAN 控制器会用接收到的SYNC_SEG 第一个隐性到显性跳变沿初始化它当前的位周期定时重同步是在随后的报文剩余部分每接收到一个隐性到显性的跳变沿就执行一次如果这个边沿在TSEG1中接收到即在SYNC_SEG 后但在接收器的采样点前接收器会把它解释成是一个慢速的发送器发送的滞后边沿因此接收器会将TSEG1段延长到最匹配发送器的时间相反如果边沿在采样点之后接收器的SYNC_SEG 前收到即在TSEG2中接收器会将它解释成是一个快速的发送器发送的下一个位周期的提前边沿这种情况下接收器会将TSEG2段缩短到最匹配发送器的时间重同步的位间隔可被增长或缩短的最大TQ 数量由SJW 的值指定由于CAN 位周期的所有段都被量化即由整数个TQ 组成重同步只在绝对的相位误差大于1个TQ时产生因此甚至在有相同振荡器基准频率的两个网络节点间也不能确定有1个TQ 同步见图6R eceiver within thes e twopos itions R eceiver B is s ynchronized to Trans mitter A图6 异步节点间的时钟脉冲相位差3位定时要求的规定CAN 系统的最小要求是有两个节点每个节点的振荡器容差都取指定的频率容差的两个极限值它们位于网络的各一端有最大的传播延迟这两个节点此时必须能够正确接收和译码每个在网络上传输的报文在没有噪声干扰下位填充的原则保证了在重同步边沿间不会多于10个位周期即5个隐性位5个显性位它代表在正常通讯中计算相位误差的最差情况这个相位误差要通过可编程的同步跳转宽度SJW 补偿而且定义了SJW 使用最小值的情况实际的系统是有噪声存在的噪声的扰动会引起CAN出错使重同步边沿之间有10个以上位周期此时由于同步边沿之间的时间更长所有位被正确采样的要求会更严格如果在这些情况下不能正确采样会引起不正确的错误检测和错误定界这些都会限制时间段TSEG2值的选择3.1 计算规则位定时参数的计算已经在前面讨论过例如[6][7]结果就不在这里深入讨论了这些公式在表1单次采样模式和表23次采样模式总结通过这些公式位定时参数SJW 和TSEG2用已知的系统的额定位定时和传播延迟计算之后TSEG1可以用方程11计算参数的编程限制在CAN 位定时控制寄存器一节已经详细说明当根据表1和表2计算SJW 的最小值时通常会得到两个结果两个值中大的一个用于保证满足这些方程它要向上进位成一个整数相反当计算TSEG2允许的最大值时两个值中小的一个要保证满足这些方程这个小一点的值要向下进位成整数表1 SJW 和TSEG2在单次采样模式中的最小和最大值 MAX { 2SJW } MIN 8(NBT −251 21PROP MIN221要向上进位成整数 2要向下进位成整数表2 SJW 和TSEG2在3次采样模式中的最小和最大值 MAX { 3SJW } MIN 8(NBT 251 26MIN271要向上进位成整数 2要向下进位成整数3.2 用图表显示计算规则 在开始开发CAN 系统前要指明y 位速率它决定了在一段时间内传输的数据的量以及y 传播延迟它决定了系统中两个节点间的最大总线长度另一个重要的问题是决定采样点位于位周期的何处采样点越后传播延迟会有更大的容差因此总线长度可以更长相反采样点越靠前振荡器容差可以更大图7和图8给出了有关系统参数是否满足正确的CAN 总线操作要求的提示这些图表还可以用于确定正确的位定时参数3.2.1 规定和限制本章的图表在满足下面的限制时有效 1 使用单次采样模式 2 PROP MIN 23 TSEG2MIN = SJW MIN 只是图8如果不使用上面的这些假设值表1和表2的公式可以如4.3节描述的一样直接使用3.2.2 确定最大的位速率很显然高的位速率只有在系统的传播延迟很小的时候才能实现本节将讲述位速率和传播延迟之间的关系以及如何在要求的位速率下取得最大的传播延迟系统最大的位速率是由额定位定时NBT 的最小持续时间决定用方程13和11计算的最大位速率如下minmin max .CLK min min .SCL max NBT BRP f NBT t BitRate ⋅⋅=⋅=21(28)因此要获得最大的位速率则要求波特率预比例因子BRP 要取可能的最小值CAN 控制器的振荡器频率f CLK.max 要取可能的最大值位定时段NBT 要选择最小的值最小的额定位定时NBT 可以用方程21计算出来f)f (TSEG PROP NBT MAX ∆⋅−∆−⋅+≥25112(29)它在PROPMIN 2时有效最大的传播延迟和最小的额定位定时NBT 之间的关系请看图7振荡器容差是图中的重要参数但由于使用特定的限制每个额定位定时Bit time 段的时间份额数量被限制为某个整数值这些在建立图7的时候要考虑进去和方程789和10比较此外这个图表还列出了NBT 在不同的振荡器容差下获得的最大值这些值用方程18和限制条件SJW4计算而且考虑到NBT 的最大可编程值注意NBT 是一个整数值但没有限制PROP MAX 是整数值图7 确定最小的额定位定时最大的位速率单次采样模式因此图7可以用于确定系统的最大位速率和传播延迟是否匹配即这样的系统配置是否可以使用这个过程将在第4章讨论例子的时候详细解释总体过程如下首先要求的BRP 和NBT 要根据位速率和振荡器容差用方程28计算出来计算的结果应该是一个整数值通常不同的BRP 和NBT 结合可能会使一个时间份额有不同的持续时间一个时间份额的持续时间可以用方程3计算然后用可能的NBT 值从图7确定PROP MAX 接着方程17给出系统容许的最大传播延迟这个值要高于系统的实际传播延迟3.2.3 确定适当的采样点采样点在位定时中的位置完全由TSEG2决定比较图2表1和表2的计算规则定义了TSEG2的最小和最大值它们都和系统的NBT 以及传播延迟有关因此如果用位定时的百分数来表示采样点的位置可以得到一个图表其中采样点仅和最大的传播延迟和振荡器容差有关这个图表见图8构造图表的关系用下面的方程定义%NBTTSEG NBT T int po _sample 1002⋅−=(30)图8的阴影部分表示在给定传播延迟和振荡器容差的情况下允许的采样点位置前面已经提到这个图表只有满足3.2.1节的条件才有效图8 取得一个合适的采样点位置的图表单次采样模式在某个要求的最大传播延迟和用百分数表示的位定时周期下用图8可以取得正确的采样点位置范围例如假设振荡器容差是0.5%最大的传播延迟是62.5%位周期如case b则采样点位置在75%~90%位定时中用方程30可以计算出相应的TSEG2范围观察图8在振荡器容差是0.5%位定时77%见case a和采样点在90%位定时周期时可以获得最大的传播延迟为了要得到精确的采样点位置我们不希望TSEG2是一个整数值结果一般不使用这些极限值因此它们只是理论值4计算位定时参数在实际系统中通常需要符合相冲突的要求才能取得必要的系统性能这些要求是y 高数据吞吐量即由位速率影响y 总线长度要长即由传播延迟影响y 系统价格低由振荡器容差影响例如选择陶瓷谐振器代替石英振荡器本章显示了如何从给定的系统要求用图7和图8或表1和表2的计算规则取得最优的位定时参数4.1 例子的规定本章使用的所有例子都用表3给出的系统参数建立表3 CAN总线系统的要求参数解释最小值1额定值最大值f Bit位速率250kBit/st Bit NBT的持续时间4µsf CLK CAN控制器例如SJA100的振荡器频率 24MHzf 振荡器容差 1.0%t loop.eff.trc收发器例如PCA82C251的有效延迟30ns 75ns 157nst loop.eff.oth逻辑例如控制器SJA1000的循环延迟 15ns 40ns6.5ns/m总线介质延迟 5ns/m95mL 节点间的总线长度 3mt Bus计算总线线延迟t Bus =δ⋅L 15ns618ns t prop计算传播延迟)t t t (t Busoth .eff .looptrc .eff .looop prop ++⋅=2120ns1630ns (41%t Bit )1 控制器和收发器的最小值都只是假设值4.2 用图表选择位定时参数本节用循序渐进的方法介绍用图7和图8取得最优的位定时参数假设已知振荡器频率要求的位速率最差情况下的振荡器容差以及系统中两个节点之间最小和最大的往返传播延迟由于图表显示最小的传播延迟限制为2个TQ 因此要在任何情况下检查实际的最小系统传播延迟是否不低于这个限制确定正确的位定时参数的过程如下第一步确定BRP NBT 一个时间份额的持续时间t SCL 和PROP用方程28和要求的位速率和振荡器频率可以计算BRP 和NBT 计算的结果应该是一个整数值通常可能会出现BRP 和NBT 有几个不同的组合所有的组合都要写在一个列表中接着用方程3计算相应的时间份额持续时间并添加到列表中此外最大和最小的往返延迟可以用方程16确定传播延迟由所有部件的有效循环延迟和系统中总线线路最远端之间的线路延迟组成见图5用已知的持续时间和方程17可以算出PROP 的额定值要对每个t SCL执行这个计算第二步选择适当的NBT PROP 和BRP 组合NBT 和PROP 的组合要和图7给出的NBT 最小和最大值进行比较所有的组合都要标记有效或无效第三步确定位速率和传播延迟之间的折衷方案 在进行下一步之前要选择BRP NBT PROP 和振荡器容差的一个组合如果选择的NBT或PROP 为系统以后的增强留下了一些空间例如更高的位速率或更大的传播延迟此时就要决定优化哪个参数第四步选择合适的采样点位置并计算位定时参数 在确定一个合适的BRP和NBT 后可以用图8确定位定时参数用最大的传播延迟和位定时周期的值可以从这个图表中获得正确的采样点位置范围一旦确定了这个范围后就可以用方程30计算位定时段TSEG2的最小值和最大值计算结果要向上向下进位成一个整数注意由于设备限制TSEG2至少要有2TQ SJW 等于TSEG2的最小值但不一定被限定为至少是2TQ 因此算出的TSEG2最小值决定了SJW 在任何情况下要求的最小值已知TSEG2和NBT后TSEG1就可以用方程11计算得出的值可以用于CAN 控制器中位定时控制寄存器的编程第五步检查PROP MIN 的限制在获得整组的位定时参数后要检查系统的最小传播延迟是否像假设的一样大于2TQ 如果不满足这个限制位定时参数就要用表1的公式重新计算以确定位定时的选择见4.3节4.2.1 例1这个例子使用表3定义的假定系统它是要说明如何使用图表显示的计算规则确定位定时参数在这种方法中假设最小的传播延迟大于2TQ 传播延迟的最小值在表3给出但它不需要在计算的头几步使用第一步确定BRP NBT 一个时间份额的持续时间t SCL 和PROP给出的振荡器频率是24MHz 结果BRP 和NBT 是48BRP 和NBT 所有可能的组合都在表4列出一起列出的还有一个时间份额的持续时间和传播延迟的额定值PROP第二步选择适当的NBT PROP 和BRP 组合结果在表4中两个极限值的组合均无效第三步确定位速率和传播延迟之间的折衷方案选择NBT=16的参数由于它可以得到时间份额的最小值因此可以在下一步有更大的自由选择正确的采样点第四步选择合适的采样点位置并计算位定时参数根据图8可以在NBT 的65%和85%之间选择一个合适的采样点f=1.0%PROP=41%位定时周期这就给TSEG2和SJW带来了以下的限制TSEG220%的t Bit=800ns< t TSEG2 <35%的t Bit=1400nsSJW t SJW > 20%的t Bit =800ns 由于t TSEG2的值越大在噪声存在的情况下正确采样的容限越大采样点应选择接近65%NBT 的值而t SJW 的值则要选择得尽量小以限制由毛刺产生的错误重同步使用NBT=16第四步那么就要选择SJW=4TSEG2要在4TQ 和5TQ 之间这个结果在表5表6和表7总结这相应于采样点在位定时周期的69%处根据图8这就容许有大约42%的传播延迟另一方面如果TSEG2设成4TQ 而相应的采样点在位定时的75%此时容许的传播延迟有大约50%表4 例1确定的BRP NBT 和PROP用方程28和3计算f=1% BRP 注释2 24NBT 超过了最大值24MHzPROP<2表5 例1的结果用于编程的额定值f CLK BRP NBT PROP MIN PROP SJW TSEG2 TSEG1 24MHz 3 1626.52 43.253.25.610表6 SJA1000PCx82C200的控制寄存器编程例1BTR0 [HEX]SJW BRP BTR1 [HEX] SAM TSEG2TSEG1C2 1 1 0 0 0 0 1 0 490 1 0 0 1 0 0 1第五步检查PROP MIN 的限制表7 不同系统变量的持续时间例1时间份额t SCLt prop.mint propt SJWt TSEG2 t TSEG1250ns 500ns 1.63µs 1.0µs 1.25µs 2.5µs由于用图表决定位定时参数相应于系统任何两个距离最小的节点之间的最小传播延迟必须至少是t prop.min =500ns要检查系统的实际最小传播延迟符合这个限制假设最小的总体循环延迟在表3给出则两个节点之间最小距离如下m t t t t L min .oth .eff .loop min .trc .eff .loop min .prop min.Busmin 412=δ+−δ=δ= 31如果实际系统中两个节点的最短距离小于这个值则位定时参数要用下一节给出的方法重新计算在这个例子中微控制器使用的最大振荡器频率是24MHz 如果控制器可以在其他频率下运行合适的位定时参数可以用相同的方法取得上面的讨论显示了设计者确实有选择不同参数组合的自由因此可以将系统优化成有更高的传播延迟或更大的振荡器容差4.3 计算位定时参数的步骤下面的步骤提供了在任何情况下满足正确的同步错误检测和错误计数器的最优位定时参数的确定方法此时不需要考虑限制假设已知系统有最差的振荡器容差以及节点间最小和最大的往返传播延迟见2.3节如果不知道往返延迟的最小值PROP MIN 可被设成0此时得出的结果总是安全的第一步确定TQ 和NBT为了要取得期望的位速率NBT 选择的时间份额TQ 的量一定是一个整数范围在 2.1.2 CAN 位定时控制寄存器中给出这当然也确定了一个时间份额的持续时间t SCL 如果时间份额的持续时间越小t SCL 即NBT 越大选择采样点在位周期中的位置以及SJW的大小都有更好的解决方法但由于CAN 协议的最大SJW 时间间隔是4TQ 选择过小的TQ 时间间隔不能提供足够大的同步跳转宽度SJW单凭经验如果系统要优化成有大的振荡器容差NBT 要选择816之间的值而NBT 更大允许的传播延迟和总线长度也更大图7的图表可以帮助您进行决定第二步确定要求的最小SJW见表1或表2下一步是计算要求的SJW 最小值给出的方程定义了最小的SJW 时间间隔是振荡器容差NBT 和最小传播延迟的函数如果系统中两个节点间的最小传播延迟难以测定可以用值0它可以给出保守的第一次评估从方程计算出的两个值大的一个要保证满足这些方程SJW 时间间隔是整数个TQ 所以选择的值要向上进位成一个整数如果算出的SJW 大于4则最初固定的TQ 时间间隔要加大NBT 减少或使用更精确的振荡器类型第三步确定TSEG2的最小值见表1或表2TSEG2允许的最小时间间隔是由CAN 控制器要正确重同步的要求以及SJW 时间间隔的最小要求决定要正确地重同步TSEG2间隔必须至少是2TQ 允许在接收到一个提早的边沿并确保有最小信息处理时间的情况下可以缩短TSEG2而且TSEG2段必须和在上面第二步确定的SJW 时间间隔一样大因此最小的TSEG2时间间隔必须至少和这两个限制条件里大的值一样大第四步确定TSEG2的最大值见表1或表2由于CAN 网络更能容忍系统的传播延迟因此采样点可以位于位周期的后面最大的系统传播延迟限制了允许的最大TSEG2时间间隔假设已知最大的系统传播延迟TSEG2的上限可以用给出的方程计算至于最小的系统传播延迟如果系统两个节点间的实际最小传播延迟未知最保守的估计是把它假设为0方程算出的较小值要保证满足这些方程由于TSEG2时间间隔必须是整数个TQ 因此这个值要向下进位成一个整数第五步选择正确的位定时参数基于第三和第四步的结果要求的最小和最大TSEG2时间间隔大小被转换成整数个TQ 此时就得出了可能的TSEG2值的范围选择满足所有要求的最大值可以使在有噪声的环境下采样点的选取有更大的容限相反SJW 选择一个尽量小的值可以限制由毛刺引起的错误重同步对系统的影响当选择固定了TSEG2的值后TSEG1就可以用方程11计算出来之后所有的结果要根据 2.1.2 CAN 微控制寄存器中允许的可编程范围检查如果最大的传播延迟很大以至于TSEG2的最小和最大值矛盾则整个系统不能符合指定的要求一个可能的解决方法是使用一种更精确的振荡器第二个可能的解决方法是通过使用其他器件或重新配置使用的器件以减少最大的传播延迟例如Philips PCA82C250和PCA82C251收发器提供的斜率控制功能可以明显地影响它们的延迟[8]假设发出的辐射要求和快速的边沿切换有关斜率控制越少越可以减少系统的传播延迟并使能一个满足所有位定时要求的解决方案4.3.1 例2假设例1的结果不能满足用最小的传播延迟算出的两个节点间的最小距离那么要用表3给出的整组系统参数重新计算位定时过程如下第一步可能的NBT 值已经在例1中讨论过了一般使用NBT=16的部分即表示在要求的NBT 持续时间t BIT =4µs 下一个时间份额的持续时间是t SCL=250ns例如在预比例因子BRP=3振荡器频率是24MHz 或BRP=2振荡器频率是16MHz 时都可以达到也可以选择其他的值第二步在单次采样模式中SJW 的最小值可以用方程18和19计算在这个例子中最小的传播延迟是120ns 相应标准化的值PROP MIN =0.48这两个方程得出的结果都大于33.23和3.67因此选择SJW=4第三步根据方程20TSEG2min=4第四步最大的TSEG2时间间隔用方程21和22计算最大的传播延迟是1.63µs 相应标准化的值PROP MAX =6.52上面的PROP MIN =0.48两个方程的结果5.54和 4.78向下进位成整数值分别变成5和4因此TSEG2的最大值要设置成4TQ第五步用方程11计算TSEG1由于算出TSEG2要求的最小和最大值没有冲突那么位定时参数NBT=16SJW=4TSEG2=4和TSEG1=11满足系统的要求可以用于编程这个例子说明如果要考虑实际的最小传播延迟小于2TQTSEG2就只能选择一个值它是在例1计算出的两个可能的值中较小的一个表8 单次采样模式的SJW TSEG2和TSEG1值的列表例2计算的值NBT=16PROP MAX =6.52PROP MIN =0.48最小值最大值选择的值SJW 3.23 3.67的最大值 44TSEG22SJW 的最大值 85.544.78的最小值 4TSEG1 TSEG1=NBT-TSEG2-SYNC_SEG 11表9 SJA1000PCx82C200的控制寄存器编程例2BTR0 [HEX]SJW BRP=3f CLK =24MHzBTR1 [HEX] SAM TSEG2TSEG1C2 1 1 0 0 0 0 1 0 3A0 0 1 1 1 0 1 0。