前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CAN通信波特率计算

CAN通信波特率计算

作者头像
用户1605515
发布2022-11-24 17:47:50
1.4K0
发布2022-11-24 17:47:50
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿

摘要

本篇笔记主要记录MPC5744p的CAN通信波特率计算,以及需要注意的问题

CAN 位时间

记得最早是在2015年就给大家推送过关于CAN通信波特率的设置,当时是以NXP的kinetis系列之KV46为例子来给大家介绍的,最近推送了几篇有关CAN通信的文章,后台又有人问起这个问题,今天我们就来在给大家详细普及下,今天以NXP的汽车级芯片MPC5744p的flexCAN为例,MPC系列是基于PowerPC架构的,和ARM架构的芯片时由区别的,但NXP家的PPC架构和ARM架构如果都是flexCAN的IP,那么驱动基本上可以通用,之前的文章也可供参考。

今天我们来一步步看如何在flexcan上配置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

CAN波特率

对于MPC57xx系列,主要时配置寄存器CAN_CTRL1

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

首先CAN控制器的时钟由两个入口

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

预分频配置为4,

传输段配置为7,则为8个时间量子

PSEG1 配置为7,则根据数据手册描述,相位缓冲段1为8个时间量子 PSEG2配置为 2, 则根据数据手册描述,相位缓冲段2为3个时间量子

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

则波特率计算如下

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

如果时采用SDK 配置, 那么SDK只需要填入波特率,便会主动分配每个段的值,但是我们还是要知道和搞清楚会自己配置。

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

如何计算CAN通信波特率

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

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

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

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

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