正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.3,4 SPI驱动实验-I.MX6U SPI 寄存器

news2024/11/19 23:54:12

前言:

本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。

引用:

正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com

《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》

正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档

SPI学习参考资料:

简述SPI通信协议-01_cpha选择为第一个边沿-CSDN博客

SPI中的CPHA,CPOL详解-CSDN博客

一文搞懂SPI通信协议_spi协议-CSDN博客

摩托罗拉 《SPI Block Guide V03.06》 手册

链接:https://pan.baidu.com/s/1_mvR5AD0-OBI2bYyx2i4Sw?pwd=f4bo 
提取码:f4bo

正文:

本文是 “正点原子[第二期]Linux之ARM(MX6U)裸机篇--第24讲 SPI驱动。本节将参考正点原子的视频教程第24讲和配套的正点原子开发指南文档进行学习。

0. 概述

通I2C一样,SPI是很常用的通信接口,也可以通过SPI来连接众多的传感器。相比I2C接口,SPI接口的通信速度很快,I2C最多400KHz,但是SPI可以到达即使MHz。I.MX6U 也有4个SPI接口,可以通过这4个SPI接口来连接一些SPI外设。I.MX6U-ALHPA使用SPI3接口连接了一个6周传感器 ICM-20608,本章我们就来学习如何使用I.MX6U的SPI接口来驱动ICM-20608,读取ICM-20608的六轴数据。

1. I.MX6U 的SPI接口

I.MX6U 处理器的SPI接口在《I.MX6ULL参考手册》的第20章 "Chapter 20Enhanced Configurable SPI (ECSPI)"章节,

I.MX6U ECSPI 接口的硬件框图如下:

  • ECSPI有64个32位的TXFIFO 缓冲区
  • ECSPI有64个32位的RXFIFO 缓冲区
  • 通过ECSPI 硬件接口的 FIFOx 缓冲区可以减少数据传输时的中断数量从而提高传输速率

I.MX6U ECSPI 硬件接口的特向如下:

  • 全双工,同步,串行接口
  • 主机/从机模式
  • 4个CS(Chip Seclect)片选信号线来支持多个外部设备
  • 持续传输模式允许任意长度的数据传输
  • Tx和Rx方向分别有32位的 64 条目的FOFO缓冲器
  • 时钟极性(Polarity),时钟相位(Phase)和时钟频率可以配置
  • DMA支持
  • 最大运行频率可以达到参考时钟频率

2. I.MX6U ECSPI 时钟

从I.MX6U的时钟树(Clock Tree)可以找到 ECSPI 接口的时钟来源于 PLL3_480MHz,并且经过一个固定值为8的分频,所以从时钟树CCM进入到到 ESPAI 接口的时钟频率为

ESAPI = PLL3_480Mhz/8 = 60MHz

在ECSAPI时钟树可以看到,ECSAPI的时钟源选择还需要配置一个多路选择器 CCM_CSCDR2 [ECSPI_CLK_SEL] 和一个分频器 CCM_CSCDR2[ECSPI_CLK_PODF] 

这个CCM_CSCDR2 寄存器的结构如下图所示:

这里配置为1分频,时钟源选择为PLL3_60M

CCM_CSCDR2寄存器的 bit[24:19] 设置为0表示1分频,bit[18]=0 表示时钟源选择 PLL3_60M

3. I.MX6U ECSPI 寄存器

I.MX6U ECSPI 寄存器主要有如下这些寄存器。

本节实验中正点原子的示例教程里不使用SPI的DMA和中断,所以我们需要的寄存器有:

  • ECSPIx_RXDATA:Tx要发送数据
  • ECSPIx_TXDATA:Rx接收到的数据
  • ECSPIx_CONREG:控制寄存器
  • ECSPIx_CONFIGREG:控制寄存器
  • ECSSPIx_STATREG:状态寄存器

3.1 ECSPIx_RXDATA寄存器

ECSPIx_RXDATA 是32位的 Rx 接收数据寄存器,在读取Rx数据之前需要先检查 RR (Read Ready)标志位是否为1.

3.2 ECSPIx_TXDATA寄存器

ECSPIx_TXDATA 是32位的 Tx 发送数据寄存器,写到TxDATA寄存器的数据被存放到ECSPI的TX FIFO中,如果TXFIFO不满软件就可以向这个寄存器写值。

3.3 ECSPIx_CONREG 寄存器

ECSPI_CONREG 寄存器允许软件来使能/复位 ECSPI接口,设置时钟分频值,设置传输长度(Bust-Length)。我们需要使用的位如下:

  • EN bit[0]:为1使能ECSPI接口,为0去使能接口并对ECSPI进行复位。
  • HT bit[1]: 硬件翻转,手册说I.MX6ULL不支持该功能
  • XCH bit[2]:指示空闲或者Busy,本实验设置该位值为0。
  • SMC bit[3]:传输开始模式,值为1的时候需要SPI_RDY信号来控制传输开始,值为0时TXFIFO中写数据立即传输开始,本实验设置该位为0。
  • CHANNEL_MODE bit[7:4]:一个ECSPI接口支持4个通道(Channel),这里是选择4个通道的工作模式为主机模式(Master)还是从机模式(Slave),本实验使用 Channel 0,所以该位设置为0x1.
  • POST_DIVDER bit[11:8]:后级分频,值范围为0~15对应2的(0~15)次方分频。
  • PRE_DIVIDER bit[15:12]:前级分频,值范围为0~15对应1~16分频。
  • DRCTL bit[17:16]:本实验不使用
  • BUSRT_LENGTH bit[31:20]:每次突发传输长度,值范围为0~0XFFF,对应1到0x1000 bit 位,本实验设置每次突发传输长度为8位,所以设置值为7。

3.4 ECSPI_CONFIGREG寄存器

ECSPIx_CONFIGREG 寄存器允许软件来配置SPI通道的运行模式,串行时钟的极性(CPOL: Clock Polarity),串行时钟的相位(Clock Phase),数据发送波形模式(SPI Wave From)。本实验中用到的寄存器如下:

  • SCLK_PHA bit[3:0]:ECSPI接口支持4个通道(channel) ,通道0~3,配置通道0~3的 CPHA 时钟相位。
  • SCLK_POL bit[3:0]:ECSPI接口支持4个通道(channel) ,通道0~3,配置通道0~3的 CPOL时钟极性。
  • SS_CTL bit[11:8]:SPI Wave From 波形模式,配置SPI发送数据时 single bust 单突发模式,还是Multi bust 多突发模式,单突发模式每次发送数据之后等待用户再次写入数据,多突发模式会发送一个burst之后自动拉高拉低SS线并再次发送TXFIFO中的下一个数据知道TXFIFO为空。本实验选择多突发模式。
  • DATA_CTL(bit19:16):设置 DATA 信号线空闲状态电平, DATA_CTL[3:0]分别对应通道3~0,为 0 的话 DATA 空闲状态为高电平,为 1 的话 DATA 空闲状态为低电平。
  • SCLK_CTL bit[23:20]:设置 SCLK 信号线空闲状态电平, SCLK_CTL[3:0]分别对应通道3~0,为 0 的话 SCLK 空闲状态为低电平,为 1 的话 SCLK 空闲状态为高电平

3.5 ECSPIx_STATREG

ECSPIx_STATREG 状态寄存器指示ECSPI接口的 TxFIFO和 RXFIFO的状态,本实验我们需要使用的是:

  • TC(bit7):传输完成标志位,为 0 表示正在传输,为 1 表示传输完成。
  • RO(bit6): RXFIFO 溢出标志位,为 0 表示 RXFIFO 无溢出,为 1 表示 RXFIFO 溢出。
  • RF(bit5): RXFIFO 空标志位,为 0 表示 RXFIFO 不为空,为 1 表示 RXFIFO 为空。
  • RDR(bit4): RXFIFO 数据请求标志位,此位为 0 表示 RXFIFO 里面的数据不大于
  • RX_THRESHOLD,此位为 1 的话表示 RXFIFO 里面的数据大于 RX_THRESHOLD。
  • RR(bit3): RXFIFO 就绪标志位,为 0 的话 RXFIFO 没有数据,为 1 的话表示 RXFIFO 中至少有一个字的数据。
  • TF(bit2): TXFIFO 满标志位,为 0 的话表示 TXFIFO 不为满,为 1 的话表示 TXFIFO 为满。
  • TDR(bit1): TXFIFO 数据请求标志位,为 0 表示 TXFIFO 中的数据大于 TX_THRESHOLD,为 1 表示 TXFIFO 中的数据不大于 TX_THRESHOLD
  • TE(bit0): TXFIFO 空标志位,为 0 表示 TXFIFO 中至少有一个字的数据,为 1 表示 TXFIFO为空。

3.6 ECSPI_PERIODREG

寄存器 ECSPIx_PERIODREG,这个是 ECSPI 的采样周期寄存器。寄存器 ECSPIx_PERIODREG 用到的重要位如下:

  • CSD_CTL(bit21:16): 片选信号延时控制位,用于设置片选信号和第一个 SPI 时钟信号之间的时间间隔,范围为 0~63。
  • CSRC(bit15): SPI 时钟源选择,为 0 的话选择 SPI CLK 为 SPI 的时钟源,为 1 的话选择32.768KHz 的晶振为 SPI 时钟源

关于 ECSPI 的寄存器就介绍到这里,关于这些寄存器详细的描述,请参考《I.MX6ULL 参
考手册》第 805 页的 20.7 小节。

4. 6轴传感器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1709719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宠物空气净化器推荐:性价比首选,希喂、小米、352真实PK

宠物浮毛和异味常常困扰着宠物家庭,不仅会在家中四处散布,还可能成为过敏原,引发如打喷嚏和皮肤痒等不适症状。宠物的尿液、粪便气味以及它们自身散发的体味,同样会降低室内空气质量,影响居住的舒适度。为了解决这些问…

linux系统常用压缩和解压命令

文章目录 Ubuntu 系统中的文件压缩与解压指南一、常用的压缩和解压工具二、tar 工具三、gzip 工具四、bzip2 工具五、zip 和 unzip 工具六、7z 工具乱码批量解压脚本七、总结 Ubuntu 系统中的文件压缩与解压指南 在 Ubuntu 系统中,文件压缩与解压是日常操作中非常常…

Varjo XR-4功能详解:由凝视驱动的XR自动对焦相机系统

Varjo是XR市场中拥有领先技术的虚拟现实设备供应商,其将可变焦距摄像机直通系统带入到虚拟和混合现实场景中。在本篇文章中,Varjo的技术工程师维尔蒂莫宁详细介绍了这项在Varjo XR-4焦点版中投入应用的技术。 对可变焦距光学系统的需求 目前所有其他XR头…

国内信创web中间件生态

国内信创web中间件生态 东方通 官网https://www.tongtech.com/pctype/25.html 宝蓝德 官网https://www.bessystem.com/product/0ad9b8c4d6af462b8d15723a5f25a87d/info?p101 金蝶天燕 官网 https://www.apusic.com/list-117.html 中创 官网http://www.inforbus.com…

【C++】<知识点> 标准模板库STL(下)

文章目录 六、set与multiset 1. 常用成员函数 2. pair模板 3. set 4. multiset 七、map与multimap 1. map 2. multimap 3. 应用实例 八、容器适配器 1. stack 2. queue 3. priority_queue 九、算法 六、set与multiset 1. 常用成员函数 iterator find(const T&am…

(C11) 泛型表达式

文章目录 ⭐语法⭐举例🚩判断对象类型🚩判断指针🚩函数重载🚩嵌套使用 END ⭐语法 Ref: 泛型选择 (C11 起) - cppreference.com 关键词: Genericdefault _Generic(控制表达式 , 关联列表) (C11 起) 关联列表 类型名:…

SQLI-labs-第二十三关

第二十三关 目录 第二十三关 1、判断注入点 2、判断数据库 3、判断表名 4、判断字段名 5、获取数据库的信息 6、使用group_concat() 和concat_ws() 知识点:注释符过滤绕过 思路: 分析源码可知,使用了preg_replace()函数过滤了注释符…

计算机图形学入门01:概述

1.什么是图形学? The use of computers to synthesize and manipulate visual information. 图形学是合成和操纵视觉信息的计算机应用。 百度百科:计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格…

2024年统计、数据分析与大数据技术国际会议(SDBT 2024)

2024年统计、数据分析与大数据技术国际会议(SDBT 2024) 2024 International Conference on Statistics, Data Analysis, and Big Data Technology 【重要信息】 大会地点:广州 大会时间:2024年7月22日 大会官网:http…

鸿蒙开发接口UI界面:【@ohos.router (页面路由)】

页面路由 说明开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。页面路由需要在页面渲染完…

VUE3+TS+elementplus+Django+MySQL实现从数据库读取数据,显示在前端界面上

一、前言 前面通过VUE3和elementplus创建了一个table,VUE3TSelementplus创建table,纯前端的table,以及使用VUE3TSelementplus创建一个增加按钮,使用前端的静态数据,显示在表格中。今天通过从后端获取数据来显示在表格…

Keras深度学习框架第二十四讲:KerasNLP概述

1、KerasNLP简介 KerasNLP是一个与TensorFlow深度集成的库,旨在简化NLP(自然语言处理)任务的建模过程。它提供了一系列高级API,用于预处理文本数据、构建序列模型和执行常见的NLP任务,如情感分析、命名实体识别和机器…

PgMP:项目集管理,哪些人适合学习?

美国项目管理协会(PMI)对项目集经理(Program Manager)的角色做出如下的定义: 在最少的领导/监督下,项目集经理PgMP负责在商业和组织目的下协调管理多个相关项目。这些项目含有跨部门、组织、地理区域…

C 基础环境配置(vscode || vs)

目录 一.发展 二. 环境设置 1.vs2022 2.vscode (1.)首先下载VsCode (2)安装vsCode插件 (3)下载MinGW-W64 (4)配置文件 (5)注意把里面配置的:mingw64路径改为自己的路径 (6)示例代码 三.总结 一.发展 编程语言的发展 机器语言(打孔纸带编程),汇编语言,高级语言,一步步…

猫耳 WebSocket 跨端优化实践

前言 在现代的移动应用程序中,长连接是一种不可或缺的能力,包括但不限于推送、实时通信、信令控制等常见场景。在猫耳FM的直播业务中,我们同样使用了 WebSocket 长连接作为我们实时通信的基础。 在我们推进用户体验优化的工作中,…

利用AI办公工具类API,大幅提高办公效率

AI办公工具类API是一项革命性的技术,利用人工智能的力量为办公场景提供了许多创新的解决方案。借助AI办公工具类API,用户可以实现自动化的文档处理、语音转文字、图像识别、数据分析等多种功能,大大提高了办公效率和工作质量。此外&#xff0…

LiveGBS流媒体平台GB/T28181用户手册-国标级联:添加上级平台、选择通道、推送通道级联会话、搜索、删除

LiveGBS流媒体平台GB/T28181用户手册-国标级联:添加上级平台、选择通道、推送通道级联会话、搜索、删除 1、国标级联1.1、添加上级平台1.2、注册状态1.3、选择通道1.4、推送通道1.5、级联会话1.6、搜索1.7、删除 2、搭建GB28181视频直播平台 1、国标级联 1.1、添加上级平台 点…

【golang学习之旅】go mod tidy

系列文章 【golang学习之旅】报错:a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 目录 系列文章go mod tidy的作用 go mod tidy的作用 把项目所依赖的包添加到go.mod文件中去掉go.mod文件中项目不…

使用 RT 矩阵进行 3D 点云变换详解(基于 PCL 和 Eigen 库)

在 3D 点云处理中,RT 矩阵是一个常用的工具,用于对点云进行旋转和平移操作。本文将详细介绍 RT 矩阵的概念,并通过一个示例程序演示如何基于 PCL 和 Eigen 库将一帧点云进行矩阵变换再输出。 本教程的示例代码和点云数据可在 GitHub 下载。 什…

告别裸奔,聊聊主流消息队列的认证和鉴权!

大家好,我是君哥。 我们在使用消息队列时,经常关注的是消息队列收发消息的功能。但好多时候需要对客户端有一定的限制,比如只有持有令牌的客户端才能访问集权,不允许 Producer 发送消息到某一个 Topic,或者某一个 Top…