IMX6ULL中CAN总线的传输速率设置计算

2024-03-24 00:36

本文主要是介绍IMX6ULL中CAN总线的传输速率设置计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.  简介

前面文章学习了 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) ”章节。

这篇关于IMX6ULL中CAN总线的传输速率设置计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/840011

相关文章

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作