前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你还没学会CAN通信波特率的设置?

你还没学会CAN通信波特率的设置?

作者头像
用户1605515
发布2018-07-25 10:03:57
3.2K0
发布2018-07-25 10:03:57
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿

记得最早是在15年就给大家推送过关于CAN通信波特率的设置,当时是以NXP的kinetis系列之KV46为例子来给大家介绍的,最近推送了几篇有关CAN通信的文章,后台又有人问起这个问题,今天我们就来在给大家详细普及下,今天以我最近使用的NXP的汽车级芯片KEAZ64的mscan为例,之前的文章也可供参考。

mscan跟flexcan两者使用不同的芯片IP,所以在寄存器级别上有不小区别,今天我们来一步步看如何在mscan上配置can的比特率,首先要搞明白CAN标准对位时间的定义,CAN通信波特率的计算是一个难点,要正确计算设置CAN波特率。CAN2.0协议中定义标称位速率为一理想的发送器在没有重新同步的情况下,每秒发送的位数量,也就是我们说的波特率。位时间由若干个时间单元(Tq)或者称为时间份额组成。每一位的组成如下图所示:

CAN2.0协议中规定要求每一位可以划分为几个不重叠时间片段,分别是:

同步段(Synchronization segment)

传播段(Propagation segment)

相位缓冲段1(Phase segment 1)

相位缓冲段2(Phase segment 2)

同步段:

位时间的同步段用于同步总线上不同的节点。这一段内要有一个跳变沿。

传播段:

传播段用于补偿网络内的物理延时时间。它是总线上输入比较器延时和输出驱动器延时总和的两倍。

相位缓冲段1、相位缓冲段2(PHASESEG1、PHASE SEG2):

相位缓冲段用于补偿边沿阶段的误差。这两个段可以通过重新同步加长或缩短。

采样点:

采样点是读总线电平并解释各位的值的一个时间点。采样点位于相位缓冲段1(PHASE_SEG1)之后。

除过同步段是一个时间份额外,其他几个域都在寄存器的不同位设置,需要特别注意的一点是在mscan中将传播段和相位缓冲段放在一个寄存器中设置

更波特率配置相关的寄存器,MSCAN总线定时器0和MSCAN总线定时器1,首先来看总线定时器0

其中BRP为就是用来设置波特率预分频器的,也就是设置时间量子的时钟。

总线定时器1主要就是来设置位时间的几个域,TSEG1段用于设置传播段和相位缓冲段1,TSEG2用于设置相位缓冲段2,搞清楚这几个域的配置后,我们就可以来动手配置了,例如要求配置波特率位250k,使用总线时钟24MHz为CAN模块时钟(CAN模块时钟也可以配置为外部晶振,推荐正式项目,配置为外部晶振,当然如果你的板子有晶振的话),则我们可以配置如下:

预分频配置为11,则根据数据手册描述,预分频为12

TSEG1 配置为3,则根据数据手册描述,传输段加相位缓冲段1位4个时间量子 TSEG2配置为 2, 则根据数据手册描述,相位缓冲段2位3个时间量子

根据CAN标准,同步段一般为一个时间量子,

则波特率计算如下

波特率 = 1/(4+ 3 + 1) * 24000000/12 = 250kbps, 同理可配置其他波特率,当然同一种波特率,这几个域可以配为不同的值。也可以参考以下推送,里面有详细的推导过程。

如何计算CAN通信波特率

精彩推荐:

CAN通信调试监测神器之CANCapture

我怼了硬件工程师,让你不按datasheet设计

一起来学习CAN FD(CAN with Flexible Data-Rate)

【CAN公开课】对面的猿猿你看过来

嵌入式程序猿工作室同时承接嵌入式设计,嵌入式开发培训,合作开发,项目外包等服务,欢迎来电详询 18706715925。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档