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

相关文章

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本