一. 简介
前面文章学习了 CAN总线的协议,位时序。
本文来学习 IMX6ULL中CAN总线的传输速率设置计算。是通过设置寄存器设置值,通过计算分频公式来计算分频值,通过速率计算公式来计算传输速率。
二. IMX6ULL中CAN总线的传输速率设置计算
1. I.MX6ULL的 CAN
I.MX6ULL
带有
CAN
控制器外设,叫做
FlexCAN
,
FlexCAN
符合
CAN2.0B
协议。
FlexCAN 完全符合
CAN
协议,支持标准格式和扩展格式,支持
64
个消息缓冲。
I.MX6ULL
自带的
FlexCAN
模块特性如下:
① 支持
CAN2.0B
协议,数据帧和遥控帧支持标准和扩展两种格式,数据长度支持
0~8
字
节,可编程速度,最高
1Mbit/S
。
② 灵活的消息邮箱,最高支持
8
个字节。
③ 每个消息邮箱可以配置为接收或发送,都支持标准和扩展这两种格式的消息。
④ 每个消息邮箱都有独立的接收掩码寄存器。
⑤ 强大的接收
FIFO ID
过滤。
⑥ 未使用的空间可以用作通用
RAM
。
⑦ 可编程的回测模式,用于进行自测。
⑧ 可编程的优先级组合。
……
FlexCAN
支持四种模式:正常模式
(Normal)
、冻结模式
(Freeze)
、仅监听模式
(Listen-Only)
和
回环模式
(Loop-Back)
,另外还有两种低功耗模式:禁止模式
(Disable)
和停止模式
(Stop)
。
① 正常模式
(Normal)
在正常模式下,
FlexCAN
正常接收或发送消息帧,所有的
CAN
协议功能都使能。
② 冻结模式
(Freeze)
当
MCR
寄存器的
FRZ
位置
1
的时候使能此模式,在此模式下无法进行帧的发送或接收,
CAN
总线同步丢失。
③ 仅监听模式
(Listen-Onley)
当
CTRL
寄存器的
LOM
位置
1
的时候使能此模式,在此模式下帧发送被禁止,所有错误
计数器被冻结,
CAN
控制器工作在被动错误模式,此时只会接收其他
CAN
单元发出的
ACK
消
息。
④ 回环模式
(Loop-Back)
当
CTRL
寄存器的
LPB
位置
1
的时候进入此模式,此模式下
FlexCAN
工作在内部回环模式,一般用来进行自测。从模式下发送出来的数据流直接反馈给内部接收单元。
2. IMX6ULL中CAN总线的传输速率设置计算
前面在讲解
CAN
协议的时候说过
CAN
位时序,
FlexCAN
支持
CAN
协议的这些位时序,
控制寄存器
CTRL
用于设置这些位时序。
CTRL
寄存器中的
PRESDIV
、
PROPSEG
、
PSEG1
、
PSEG2
和
RJW
这
5
个位域用于设置
CAN
位时序。
分频值计算公式
PRESDIV 为 CAN 分频值,也即是设置 CAN 协议中的 Tq 值,公式如下:
fCANCLK 为 FlexCAN 模块时钟,这个根据时钟章节设置即可,设置好以后就是一个定值,因此,只需要修改 PRESDIV 即可修改 FlexCAN 的 Tq 频率值。
Tq
定了以后,我们结合时序图
中的 几个段来看一下如何设置
FlexCAN
的速率:
SS
:
同步段
(Synchronization Segment)
,在
I.MX6ULL
参考手册中叫做
SYNC_SEG
,此段固
定为
1
个
Tq
长度,因此不需要我们去设置。
PTS
:
传播时间段
(Propagatin Segment)
,
FlexCAN
的
CTRL
寄存器中的
PROPSEG
位域设
置此段,可以设置为
0~7
,对应
1~8
个
Tq
。
PBS1
:
相位缓冲段
1(Phase Buffer Segment 1)
,
FlexCAN
的
CRTL
寄存器中的
PSEG1
位域
设置此段,可以设置为
0~7
,对应
1~8
个
Tq
。
PBS2
:相位缓冲段
2(Phase Buffer Segment 2)
,
FlexCAN
的
CRTL
寄存器中的
PSEG2
位域设置此段,可以设置为
1~7
,对应
2~8
个
Tq
。
SJW
:
再同步补偿宽度
(reSynchronization Jump Width)
,
FlexCAN
的
CRTL
寄存器中的
RJW位域设置此段,可以设置
0~3
,对应
1~4
个
Tq
。
FlexCAN
的
CAN
位时序如下图
所示:
根据上图
所示,
SYNC+SEG+(PROP_SEG+PSEG1+2)+(PSEG2+1)
就是总的
Tq
,因此,FlexCAN
的波特率就是:
关于
I.MX6ULL
的
FlexCAN
控制器就讲解到这里,如果想更加详细的了解
FlexCAN
,请
参考《
I.MX6ULL
参考手册》的“
Chapter 26 Flexible Controller Area Network(FLEXCAN)
”章节。