本文整理自22. FlexSPI—读写外部SPI NorFlash — [野火]i.MX RT库开发实战指南——基于i.MXRT1052 文档

用作个人学习和分享

指令查找表LUT

访问FLASH存储器通常包含一些读写功能的的控制指令,主控设备可通过这些指令访问FLASH存储器。

为了适应这种需求,FlexSPI外设中包含有一个指令查找表LUT(Look Up Table),即图 22‑5中第②部分SEQ_CTL(序列控制逻辑)的主要内容,它用来预存储访问外部设备时可能使用到的指令,需要对FLASH进行访问时,FlexSPI会从查找表LUT中获取相应的指令然后通过SPI接口对FLASH发起通讯。

该表使用序列的形式缓存指令,最多支持16个指令序列,每个序列最多支持8个指令。例如,在某序列中缓存指令C1、C2、C3…,当控制执行该序列时,指令C1、C2、C3…会被按顺序执行。

查找表LUT的构成

查找表LUT的构成具体见图 

image8

该图中的第①部分是查找表LUT视图,它表示查找表LUT有0~N个序列;第②部分是序列视图,它表示1个序列中包含有8个指令;第③部分是指令视图,表示指令由opcode(指令编码)、num_pads(数据线的数目)、operand(指令参数)三个寄存器域构成。这些指令的存储位置是FlexSPI外设中的寄存器LUT0~LUT63,每个LUT寄存器可以缓存2个指令,即1个指令序列(8个指令)由4个寄存器构成,这些寄存器构成了一个完整的LUT表。

LUT寄存器的构成

LUT寄存器的构成具体

image9

LUT寄存器的各个域说明如下:

  • OPCODE:指令编码,这是由FlexSPI定义的一些基本指令码,如向FLASH发送控制命令的CMD_SDR指令OPCODE为0x01;发送行地址到FLASH的指令OPCODE为0x02,诸如此类。

  • NUM_PADS:进行SPI通讯时使用的数据线的数目,它的可用参数为:

  1. 0x0:Single模式

  2. 0x1:Dual模式

  3. 0x2:Quad模式

  4. 0x3:Octal模式

  • OPERAND:指令参数,部分OPCODE指令包含参数,这些参数就由OPERAND设定,参数的具体作用由相应的OPCODE决定。

常用指令说明

指令名称

OPCODE

NUM_PADS

SPI接口发送的内容

Bits/Bytes/ Cycle的数目

CMD_SDR/

CMD_DDR

0x01/0x21

0:Single模式

1:Dual模式

2:Quad模式

3:Octal模式

发送控制FLASH的命 令代码到FLASH存储 器,即OPERAND

[7:0]的内容

Bits数目:固定为8

RADDR_SDR

/RADDR_DDR

0x02/0x22

发送行地址到FLASH ,

AHB命令模式:

由访问的AHB 地址决定;

IP命令模式:

由IPCR0寄存器决定

Bits数目:OPER AND [7:0],即由它指定 地址的位数

WRITE_SDR/

WRITE_DDR

0x08/0x28

发送要写入的数据到FL ASH,

即AHB_TX_BUF 或IP_TX_FIFO 的数据

Bytes数目,即要传 输的字节数:

AHB命令模式:

由AHB突发大小和突发 类型决定

IP命令模式:

由IPCR1.DATS Z寄存器域决定

READ_SDR/

READ_DDR

0x09/0x29

从FLASH接收数据, 收到的数据会被存储到A HB_RX_BUF或I P_RX_FIFO

DUMMY_SDR/

DUMMY_DDR

0x0C/0x2C

FlexSPI释放对数 据线的控制,时钟信号正 常驱动。这种指令通常是 FLASH设备要求的空 操作等待

Cycle数目,即DU MMY周期的个数(即S CK的周期数):

OPERAND [7:0],由它指定发 送多少个DUMMY周期

STOP

0x00

固定为0,即Singl e模式

停止执行,释放CS片选 信号,不发送内容

SPI接口无数据传输

此处对该表中特别值得注意的内容说明如下:

  • 查找表支持两套有同功能不同模式的指令。例如CMD_SDR和CMD_DDR的OPCODE为0x01和0x21,它们分别表示使用SDR模式和DDR模式的CMD指令,它们的功能一样,都是向FLASH发送命令代码。其它指令类似,大都有SDR和DDR模式。

  • 数据线的数目由NUM_PADS指定。不同的指令可以通过它自身的NUM_PADS域来指定,因此不同指令可以使用不同的数据线数目。在应用中一些FLASH存储器的命令只使用一根数据线(Single模式),而快速读写的命令则可支持Dual、Quad模式,此时针对命令使用不同的NUM_PADS进行定制即可。

  • OPERAND参数在不同指令下作用不同:

  1. 对于CMD_SDR指令,它的功能是向FLASH发送命令代码,此时要发送的FLASH命令代码就是CMD_SDR指令的参数,即由OPERAND域指定(请注意区分FLASH命令和OPCODE)。例如W25Q256型号的FLASH的读取ID命令代码为0xAB,当RT1052要读取FLASH的ID时,利用CMD_SDR指令同时把命令代码0xAB赋予到OPERAND域,这样FlexSPI控制的时候就会通过SPI接口把FLASH命令0xAB发送出去了。

  2. 对于RADDR_SDR指令,它的功能是向FLASH发送要读写的存储单元地址,该地址由IPCR0寄存器指定,同时OPERAND域用于指定地址的长度。例如部分FLASH的空间比较小,只使用16位来表示地址,那么该命令的OPERAND域的值就应为16,对于W25Q256这种地址为24或32位的存储器,OPERAND域的值就应设置为24或32。

  3. 对于DUMMY_SDR指令,它的功能是释放FlexSPI对数据线的控制,而时钟正常运行,该指令是针对FLASH存储器的部分时序要求,这时FLASH存储器会忽略数据线上的内容,实质它是要求主机进行等待,在这种情况下可通过OPERAND指定该过程要占多少个SCK的周期数。

  • 数据传输指令的数据缓冲区位置分两种情况。WRITE_SDR和READ_SDR指令分别用于向FLASH写入和读取数据,这些指令传输的数据缓冲位置如下:

  1. 在AHB命令模式下:数据缓存在AHB_TX_BUF(发送缓冲区)以及AHB_RX_BUF(接收缓冲区)中,此时要传输的字节数由AHB突发传输的大小和类型决定。

  2. 在IP命令模式下:数据缓存在IP_TX_FIFO(发送缓冲区)以及IP_RX_FIFO(接收缓冲区)中,此时要传输的字节数可通过寄存器IPCR1的DATSZ域指定。

  • 操作通常使用序列的形式并配合STOP指令(停止指令)使用:以上说明的各个指令通常不会单独执行,而是组成一个指令序列,对于指令数不满8个的序列,需要使用STOP指令表示结束。例如一个使用IP命令模式的读取操作中,通常会使用以下的指令序列:

  1. 使用CMD_SDR指令向发送FLASH的读取命令,如W25Q256的Quad模式读取命令编码为0x6B,此时CMD_SDR指令的OPERAND域为0x6B;

  2. 使用RADDR_SDR指令发送要读取的FLASH存储单元地址,OPERAND域的值为24表示使用24位的地址,而地址具体的值由寄存器IPCR0设定;

  3. 按照FLASH的Quad模式读取命令的要求发送占8个SCK时钟的DUMMY操作,此时使用DUMMY_SDR指令且OPERAND域的值设置为8;

  4. 使用READ_SDR指令,开始接收FLASH的数据到IP_RX_FIFO中,要读取的字节数由寄存器IPCR1的DATSZ域指定;

  5. 由于使用的指令不足8个字节,在该序列的最后使用STOP指令表示停止,当FlexSPI执行到STOP指令时,会释放SPI的片选信号CS,结束通讯。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uv使用指南

🚀 Python 打包工具 UV 使用指南 UV 是一个用 Rust 编写的极速 Python 包管理器和解析器,旨在成为 pip、pip-tools、virtualenv 等工具的单一替代方案。 📋 目录 核心概念与设计哲学安装与配置基础使用方法项目管理与工作流高级功能与技巧…

安卓学习 之 图片控件和图片按钮

今天学习的是ImageView 和 ImageButton这两个控件还是比较简单的:先来看看最后的样式图片吧:从图片中可以看到ImageView中的图片要大很多,这是因为中的ImageView中的图片跟ImageView控件的大小而自动调整。Imag…

动态规划-学习笔记

这是一份动态规划(Dynamic Programming, DP)完整学习笔记。笔记将从一星难度(入门)到五星难度(进阶),循序渐进,涵盖核心思想、经典模型和解题方法论。 本来打算今天更新背包问题的题…

Linux 可信启动深度解析:从UEFI到操作系统的信任链

文章目录引言一、 可信根基:TPM与核心概念1.1 什么是“度量” (Measurement)?1.2 信任链与TPM PCR二、 阶段一:固件的可信启动 (UEFI)2.1 引导的起点:从SEC到DXE的初始化2.2 引导设备选择 (BDS):UEFI如何找到GRUB2.3 S…

61-python中面向对象三大特性

前言: 面向对象编程,是许多编程语言都支持的一种编程思想。简单理解是:基于模板(类)去创建实体(对象), 使用对象完成功能开发。面向对象包含三大主要特性: 封装 继承 多态…

BP-Adaboost模型

BP-Adaboost模型是一种将BP神经网络作为弱分类器的集成学习框架,通过AdaBoost算法动态调整样本权重和模型权重,显著提升预测精度和泛化能力。一、模型架构与工作原理 1. 基础框架 弱分类器单元:采用单隐藏层BP神经网络(结构示例&a…

k230 +canMV+ LVGL控件 仿手表表盘触摸屏滚动、选中后弹窗效果完整示例程序

现在智能手表用的越来越多,其交互方式比较有特点,现在k230开发板上,基于LVGL(Light and Versatile Graphics Library)编写一个嵌入式GUI应用程序,使用LVGL配合触摸屏实现模仿智能手表的表盘滚动效果,实际效果如下: 程序使用LVGL图形库和MediaManager程序,创建带有触摸…

使用Vue.js和WebSocket打造实时库存仪表盘

大家好!今天我将分享一个简单却强大的实时库存仪表盘项目,基于Vue.js和WebSocket技术。这个项目适合初学者学习前端实时数据处理,也能为你的技术博客或作品集增添亮点!通过这个教程,你将学会如何使用WebSocket实现实时…

leecode100——接雨水

题目 双指针 思路1 使用参数存储从左往右(从右往左同理)遍历时的最高的柱子, 然后移动左右的指针,每次移动左右指针中偏向小的, 如果当前指针指的柱子小于最高的柱子,就会存在接到水。 思路2 把水看作柱子&…

复古胶片风格街拍人像Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程复古胶片风格街拍人像 Lightroom 调色,通过模拟经典胶片相机的色彩科学,为现代数码照片注入怀旧韵味。这种调色手法注重低饱和度色彩、柔和的高光过渡和丰富的暗部细节,配合适度的颗粒感,营造出时光沉淀的质感。特别适合街…

Linux的gpio子系统

GPIO其实也是某个pin的功能之一。上一小节讲解了 pinctrl 子系统,pinctrl 子系统重点是设置 PIN(有的 SOC 叫做 PAD)的复用和电气属性,如果 pinctrl 子系统将一个 PIN 复用为 GPIO 的话,那么接下来就要用到 gpio 子系统了。gpio 子系统顾名思…

VC++ CPU指令集检测工具实现原理

📈 VC CPU指令集检测工具实现原理 例图:🧠 1. 核心原理:CPUID指令 // 使用CPUID指令获取CPU信息 int cpuInfo[4] { -1 }; __cpuid(cpuInfo, 0); // 调用CPUID指令 int nIds cpuInfo[0]; // 获取最大标准功能号CPUID指令工作流程…

大模型微调理论、实战:LLaMA-Factory、Unsloth

概述 微调,Fine-Tuning,简称FT,可理解为对LLM的定制,目的是增强专业领域知识,并优化特定任务的性能。通过在特定数据集上微调一个预训练模型,可实现: 更新知识:引入新的领域专属信…

【LCA 树上倍增】P9245 [蓝桥杯 2023 省 B] 景区导游|普及+

本文涉及知识点 树上倍增 P9245 [蓝桥杯 2023 省 B] 景区导游 题目描述 某景区一共有 NNN 个景点,编号 111 到 NNN。景点之间共有 N−1N-1N−1 条双向的摆渡车线路相连,形成一棵树状结构。在景点之间往返只能通过这些摆渡车进行,需要花费…

基于Python+Streamlit的旅游数据分析与预测系统:从数据可视化到机器学习预测的完整实现

🏞️ 基于PythonStreamlit的旅游数据分析与预测系统:从数据可视化到机器学习预测的完整实现 📝 前言 在大数据时代,旅游行业的数据分析变得越来越重要。如何从海量的旅游数据中挖掘有价值的信息,并进行准确的销量预测&…

飞算JavaAI全链路实战:智能构建高可用电商系统核心架构

飞算JavaAI全链路实战:智能构建高可用电商系统核心架构 前言:AI编程新时代的电商系统开发范式变革 在当今数字经济时代,电商系统作为企业数字化转型的核心载体,其复杂度和技术要求与日俱增。一个完整的电商系统不仅需要处理商品、…

论文精读(五):面向链接预测的知识图谱表示学习方法综述

笔者链接:扑克中的黑桃A 专栏链接:论文精读 本文关键词:知识图谱; 表示学习; 链接预测; 多元关系; 超关系 引 诸位技术同仁: 本系列将系统精读的方式,深入剖析计算机科学顶级期刊/会议论文,聚焦前沿突破…

Roo Code之自定义指令(Custom Instructions),规则(Rules)

在Roo Code 中,Custom Instructions 可以通过Instructions 设定和Rules 规则文件实现。什么是Custom Instructions? 自定义指令(Custom Instructions)定义了超出Roo基本角色定义范围的具体行为、偏好和约束。示例包括编码风格、文档标准、测试要求和工作…

9/8我是ai大师

一、变量定义部分(理解程序的 "记忆")c运行/* USER CODE BEGIN PV */ static uint8_t last_button_state 1; // 初始为高电平(未按下) static uint8_t device_mode 0; // 设备模式:0LD1, 1LD3, 2蜂鸣器, 3…

前沿重器[74] | 淘宝RecGPT:大模型推荐框架,打破信息茧房

前沿重器栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…