飞思卡尔s12系列CAN波特率计算

发布者:古通闲人最新更新时间:2021-08-10 来源: eefocus关键字:飞思卡尔  CAN  波特率计算 手机看文章 扫描二维码
随时随地手机看文章

最近在看飞思卡尔s12系列CAN部分,发现波特率计算这块没有一个讲的详细的,在数据手册里也没有详细说明。


经过仔细研究,特将CAN部分波特率计算总结出来。


引用部分CAN波特率计算资料如下:


简单介绍一个波特率的计算,在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:

A. 位同步时间(Tsync)

B. 时间段1(Tseg1)

C. 时间段2(Tseg2)


其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个Tscl,所以CAN控制器的位时间(TBit)就是:TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,那么CAN的波特率 (CANbps)就是1/TBit。


但是这样计算出的值是一个理论值。在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。CAN在技术上便引入了重同步的概念,以更好的解决这些问题。这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围:1/(Tbit+Tsjw) ≤CANbps≤1/(Tbit-Tsjw)


CAN有波特率的值四以下几个元素决定:

A. 最小时间段Tscl;

B. 时间段1 TSEG1;

C. 时间段2 TSEG2;

D. 同步跳转宽度 SJW


那么Tscl又是怎么计算的呢?这是总总线时序寄存器中的预分频寄存器BRP派上了用场,Tscl=(BRP+1)/FVBP。FVBP为微处理器的外设时钟。


下面用一个例子来举例说明。


注:本例中时钟使用总线时钟,若选择外设时钟,则外设时钟=晶振频率/2


比如,总线时钟fbus=16M,准备设定的波特率 CANbps=250K,则


(1)位时间TBit=1/250k=4us.


同时,


(2)TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl,


一般 (TSEG1+TSEG2+3)的值取16(8~25之间),则


Tscl=4us/16=250ns


而同时(3)Tscl=(BRP+1)/fbus


fbus为微处理器的总线时钟。则


250ns=(BRP+1)/16M,


计算之后BRP=3;


假设我们先不考虑BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1就是2个分频系数寄存器;它们的乘积是一个扩展的分频系数。即:


BTR0×BTR1=fbus/CANbps   (4)


此例中,BTR0*BTR1=16M/250K=64. 


此例中,BRP=3,其作为BTR0的组成部分,表示预分频值为4,则BTR1的预分频值为


(5)64/4=16;


(CAN规范中规定其取值在8~25之间)

 

TSEG1和TESG2的值(TSEG1+TSEG2+3)=16,而根据CIA推荐:


75%     when 波特率 > 800K

80%     when 波特率 > 500K

87.5%   when 波特率 <= 500K


CiA计算方式:


sample =(1+(TSEG1+1))/(1+(TSEG1+1)+(TSEG2+1))               (6)


sample = ( 1 +  CAN_BS1) /  (1 +  CAN_BS1 +  CAN_BS2)        (6)


在这里,CAN_BS1=TSEG1+1,CAN_BS2=TSEG2+1;


则CAN_BS1和CAN_BS2的取值要符合要求。


此处令CAN_BS1取13,CAN_BS2取2, 采样率=(1+13)/(1+13+2)=87.5%    BTR1=0001 1100B


则CANBTR1的值为0x1c;


其实,用一个公式总结则为


CANbps = fbus/( (BRP+1) * (CAN_BS1+CAN_BS2+1))


本例中 250K=16M/(3+1)*(13+2+1)=16M/64;


总之,BRP(BTR0的值)和CAN_BS1,CAN_BS2的值可以自定,但是要符合(CAN_BS1+CAN_BS2)=15,且符合CIA推荐的标准。


总体配置保持CAN_BS1>=CAN_BS2 , CAN_BS1>=1个CAN时钟周期 ,CAN_BS2>=2SJW ,


本例中,CAN_BS2=2,则SJW=1;即BRT0的bit7和bit6均为0


SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。


总结:


BTR0:  SJW和CAN_BS2有关,CAN_BS2>=2SJW 


BTR1:  SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。


CANbps = fbus/( (BRP+1) * (CAN_BS1+CAN_BS2+1))    最重要的公式


CANbps为要设定的CAN波特率;


fbus为总线时钟频率,若采用外部时钟时,则外部时钟=晶振时钟/2;


BRP为BTR0的低6位值;


CAN_BS1为BTR1的bit0~bit3的值-1;


CAN_BS2为BTR1的bit4~bit6的值-1;

关键字:飞思卡尔  CAN  波特率计算 引用地址:飞思卡尔s12系列CAN波特率计算

上一篇:MC9S12G128模块化分层化软件架构之二——IO驱动
下一篇:MC9S12XET256之ECT模块(5)

推荐阅读最新更新时间:2024-11-13 13:00

STM32 的CAN的关键点
1、关于屏蔽寄存器的初始化的处理 //ext_id CAN_FilterInitStructure.CAN_FilterIdHigh=((ext_id CAN_FilterInitStructure.CAN_FilterIdLow=(U16)(ext_id 3) | CAN_ID_EXT; //设置标识符寄存器低字节 为什么要左移3位,这和扩展格式和寄存器的分配有关, 主要是 以及 参考的是:https://blog.csdn.net/android_lover2014/article/details/64127110 2、关于CAN中断的函数名以及过滤组的使用 参考:https:
[单片机]
STM32 的<font color='red'>CAN</font>的关键点
汽车网线与CAN总线的标准
汽车作为一种交通工具,目前承担起了越来越多的功能。现代科技已经将网际网络、无线连接、个人通讯电子装置、娱乐设备等整合到汽车内部,与动力系统相结合,为乘客提供了前所未有的便利。而这一切都有赖于汽车网络技术,它是汽车电子发展的重要方向之一。 过去,汽车通常采用点对点的通信方式,将电子控制单元及负载设备连接起来。随着电子设备的不断增加,势必造成导线数量的不断增多,从而使得在有限的汽车空间内布线越来越困难,限制了功能的扩展。同时导线质量每增加50 kg,油耗会增加0.2 L/100 km。此外,电控单元并不是仅仅与负载设备简单地连接,更多的是与外围设备及其他电控单元进行信息交流,并经过复杂的控制运算,发出控制指令,这些是不能通过简单地连接所
[嵌入式]
PIC C18编译器 错误can not fit the section. 解决方法
Error - section '.udata_main.o' can not fit the section. Section '.udata_main.o' length=0x00000606 Errors : 1 询问高人得知该错误为RAM分配超过256B 解决方法一为: 1、打开18f452.lkr 其关于RAM分配的为 ACCESSBANK NAME=accessram START=0x0 END=0x7F DATABANK NAME=gpr0 START=0x80 END=0xFF DATABANK NAME=gpr1 START=0x100
[单片机]
飞思卡尔16位单片机(三)——GPIO输出功能测试
一、GPIO介绍 GPIO是单片机最常用的功能,XEP100单片机的并行I/O的资源很丰富,XEP100的IO有PORTA、PORTB、PORTH、PORTJ、PORTM、PORTP、PORTS、PORTT、PORTK和PORTE共10组IO。这些I/O口除了具有通用I/O功能外,还分别具有专用I/O的功能。可以根据需要进行设置,专用I/O功能启用后,通用I/O功能自动关闭。 在使用单片机的并行I/O时要进行一些设置,主要的设置如下所示: 1功能设置 每个I/O子系统都有一个功能设置寄存器,其中的几个位用于部分或者全部引脚的功能设定,设定为专用功能后,方向设置功能可能自然禁止,但上拉、下拉及降功率驱动功能一般仍然有效,具体
[单片机]
<font color='red'>飞思卡尔</font>16位单片机(三)——GPIO输出功能测试
HMI_Board_LVGL基于开发板自带CAN显示车速和发动机转速
1.应用背景 汽车仪表是汽车上显示行车信息必不可少的电子设备,用于显示汽车行驶过程中的一些实时信息,比如车速,发动机转速,转向灯等等,这些信息通常都是通过车身CAN总线进行传输的,而HMI Board开发板又正好具备CAN收发的能力,可通过此开发板接收车身的CAN信息解析后通过LVGL显示相关的信息。 2.实现功能 本设备实现了CAN的接收,解析出信息后通过LVGL显示在自带的屏幕上。 3.RT-Thread使用情况 本方案使用了RT-Thread操作系统,LVGL功能组件,CAN外设功能。 4.硬件架构 使用HMI Board自带的CAN功能接收车身CAN信息,以USB转CAN工具模拟发送CAN数据进行软件调试 5.软件设计 使
[嵌入式]
HMI_Board_LVGL基于开发板自带<font color='red'>CAN</font>显示车速和发动机转速
怎样理解CAN总线的非破坏性总线仲裁技术
当一个节点要发送数据时,首先监听信道;如果信道空闲就发送数据,并继续监听;如果在数据发送过程中监听到了冲突,则立刻停止数据发送,等待一段随机的时间后,重新开始尝试发送数据。 而CAN总线是使用的无损仲裁方式(即你所指的非破坏性仲裁):就是当两个或者以上的不同ID节点“同时”向总线发送数据时候,优先级最高的就能直接发送,优先级低的就自动退回,等待空闲时候再向总线发送数据,所以对于优先级最高的节点来说“发送时间”就是无损的。(相对来说以太网就不是这种模式,是每一个节点都要退回来,随机一个时间再发送出去,没有优先级的意思,所以从理论概念上说实时性差一些)。 而CAN总线节点的优先级主要由ID值决定的,值越小优先级越高。  
[嵌入式]
CAN总线波形中为什么ACK电平偏高?
CAN总线 一直以实时性强、传输距离远、 抗干扰 能力强、数据保证到达等特点而广泛应用于高可靠性的场合。但常常在观察CAN通信波形时,我们会发现差分电平在 ACK 段突然增高,这是什么原因导致的呢?这里结合测试实例对ACK电平偏高的原因做简单分析。 一、ACK简介 ACK的作用:确认一帧报文是否正常接收。 以标准数椐帧为例,从结构上看分成7段,分别为起始段、仲裁段、控制段、数椐段、CRC校验段、ACK应答段、帧结束段,如图1所示: 图1 标准数椐帧结构 ACK段长度为2个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。在应答场里,发送站发送两个“隐性”
[嵌入式]
<font color='red'>CAN</font>总线波形中为什么ACK电平偏高?
借助飞思卡尔MCU和i.MX处理器畅享智能新生活
生活在多媒体时代 曾几何时,我们印象中的嵌入式系统就是一种专用的计算机系统,作为装置或设备的一部分。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都在使用嵌入式系统。只是彼时,嵌入式系统似乎和多媒体应用以及多媒体人机交互还很远。 技术的脚步总是让我们看到以前无法想象的应用出现,如今,我们已经生活在多媒体时代。嵌入式产品的多媒体应用让人们尽情享受科技之美,智能多媒体已处处可见。在智能交通中,道路上的网络摄像以便车辆导航、流量控制、信息监测;汽车服务方面,GPS让你及时调整行车路线,享受畅爽出行;在智能家居中,冰箱、空调等的网络化和智能化将引领人们的生活步入一个崭新的空间,即使你不在家里,也可以通过手机、平
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved