STM32 NAND FLASH知识点

news2024/7/3 19:48:18

1.NAND FLASH的简介

NAND FLASH 的概念是由东芝公司在 1989 年率先提出,它内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。 NAND FLASH 存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,在业界得到了广泛应用,如: SD 卡、 TF 卡、 U盘等,一般都是采用 NAND FLASH 作为存储的。 关于 NAND FLASH 的基础知识,请大家自行百度学习。接下来,我们介绍 NAND FLASH 的一些重要知识。

2.NAND FLASH 信号线

在这里插入图片描述因为 NAND FLASH 地址/数据是共用数据线的,所以必须有 CLE/ALE 信号,告诉 NAND
FLASH,发送的数据是命令还是地址。

3.存储单元

NAND FLASH 存储单元介绍,我们以 MT29F4G08( x8,8 位数据)为例进行介绍, MT29F4G08 的存储单元组织结构如图所示
在这里插入图片描述由图可知: MT29F4G08 由 2 个 plane 组成,每个 plane 有 2048 个 block,每个 block 由 64
个 page 组成,每个 page 有 2K+64 字节( 2112 字节)的存储容量。所以, MT29F4G08 的总容
量为: 2204864*( 2K+64) = 553648128 字节( 512MB)。其中, plane、 block、 page 等的个数,根据 NAND FLASH 型号的不同,会有所区别。

4.NAND FLASH 的地址

NAND FLASH 的地址分为三类:块地址( Block Address)、页地址( Page Address)和列地
址( Column Address)。以 MT29F4G08 为例,这三个地址,通过 5 个周期发送,如图所示
在这里插入图片描述
表中, CA0~CA11 为列地址( Column Address),用于在一个 Page 内部寻址, MT29F4G08
的一个 Page 大小为 2112 字节,需要 12 个地址线寻址; PA0~PA5 为页地址( Page Address),用于在一个 Block 内部寻址, MT29F4G08 一个 Block 大小为 64 个 Page,需要 6 个地址线寻址;
BA6~BA17 为块地址( Block Address),用于块寻址, MT29F4G08 总共有 4096 个 Block,需要
12 根地址线寻址。
整个寻址过程,分 5 次发送( 5 个周期),首先发送列地址,在发送页地址和块地址。这里提醒一下:块地址和页地址,其实是可以写在一起的,由一个参数传递即可,所以表中的 BA并不是由 BA0 开始的,大家可以理解为这个地址( PA+BA)为整个 NAND FLASH 的 Page 地址。在完成寻址以后,数据线 I/O0~ I/O7 来传输数据了。

5.NAND FLASH的控制命令

例如:读页命令
在这里插入图片描述
READ PAGE
该指令用于读取 NAND 的一个 Page(包括 spare 区数据,但不能跨页读),该指令时序如图所示:
在这里插入图片描述由图可知, READ PAGE 的命令分两次发送,首先发送 00H 命令,然后发送 5 次地址( Block&Page&Column 地址),指定读取的地址,随后发送 30H 命令,在等待 RDY 后,即可读取 PAGE 里面的数据。注意:不能跨页读,所以最多一次读取一个 PAGE 的数据(包括 spare区)。

6.FMC 接口的 NAND FLASH 控制寄存器

⚫ 独立 NAND FLASH 存储区域,可独立配置
⚫ 支持 8 位和 16 位 NAND FLASH
⚫ 支持硬件 ECC 计算(汉明码)
⚫ 支持 NAND FLASH 预等待功能

NAND FLASH 的控制寄存器: FMC_PCR,该寄存器各位描述如图所示:
在这里插入图片描述
该寄存器只有部分位有效,且都需要进行配置:
PWAITEN:该位用于设置等待特性: 0,禁止; 1,使能。这里我们设置为 0,禁止使用控制器自带的等待特性,因为如果使能的话,将导致 RGB 屏抖动( STM32 硬件 bug)。

PBKEN:该位用于使能存储区域: 0,禁止; 1,使能。我们要正常使用某个存储区域,必须设置该位为 1,所以,这个位要设置为 1。

PWID:这两个位,用于设置数据总线宽度: 00, 8 位宽度; 01, 16 位宽度。我们使用的MT29F4G08 为 8 位宽度,所以这里应该设置为: 00。

ECCEN:该位用于使能 STM32 的硬件 ECC 计算逻辑: 0,禁止/复位 ECC; 1,使能 ECC计算;每次读写数据前, 应该设置该位为 1,在数据读写完毕,读取完 ECC 值之后,设置该位为 0,复位 ECC,以便下一次 ECC 计算。

TCLR:这四个位用于设置 CLE 到 RE 的延迟: 0000~1111,表示 1~16 个 fmc_ker_ck 周期。对应 NAND FLASH 数据手册的 tCLR 时间参数: t_clr=(TCLR+SET+2)*Tfmc_ker_ck。 TCLR 就是本寄存器的设置值, SET 对应 MEMSET 的值(我只用到 MEMSET), Tfmc_ker_ck 对应fmc_ker_ck 的周期。 MT29F4G08 的 tCLR 时间最少为 10ns,以 220M 的 fmc_ker_ck 频率计算,一个 fmc_ker_ck=4.5ns(下同),我们设置 TCLR=5,则 t_clr 至少为 7 个 fmc_ker_ck 即 31.5ns。

TAR:这四个位用于设置 ALE 到 RE 的延迟: 0000~1111,表示 1~16 个 HCLK 周期。对应NAND FLASH 数据手册的 tAR 时间参数,这里设置的 t_ar=(TAR+SET+2)* Tfmc_ker_ck。 TAR就是本寄存器的设置值, SET 对应 MEMSET 的值(我只用到 MEMSET), Tfmc_ker_ck 对应fmc_ker_ck 的周期。 MT29F4G08 的 tAR 时间最少为 10ns,我们设置 TAR=5,则 t_ar 至少为 7个 fmc_ker_ck 即 31.5ns。

ECCCPS:这三个位用于设置 ECC 的页大小: 000, 256 字节; 001, 512 字节; 010, 1024字节; 011, 2048 字节;100, 4096 字节; 101, 8192 字节。我们需要以 512 字节为单位进行ECC 计算,所以 ECCCPS 设置为: 001 即可。

NAND FLASH 的空间时序寄存器: FMC_PMEM,该寄存器各位描述如图所示:
在这里插入图片描述
该寄存器用于控制 NAND FLASH 的访问时序,非常重要。我们先来了解下 NAND FLASH控制器的通用存储器访问波形,如图所示:
在这里插入图片描述
由图可知, MEMxSET+MEMxHOLD 控制 NWE/NOE 的高电平时间, MEMxWAIT 控制NWE/NOE 的低电平时间, MEMxHIZ 控制写入时数据线高阻态时间。接下来我们分别介绍这几个参数:

MEMSET: 这八个位定义使能命令( NWE/NOE)前,地址建立所需要的 fmc_ker_ck 时钟周期数,表示 NWE/NOE 的高电平时间, 0000 0000~1111 1110 表示 1~255 个 fmc_ker_ck 周期。MT29F4G08 的 tREH/tWH 最少为 10ns,设置 MEMSET=3,即 4 个 fmc_ker_ck 周期,约 18ns。另外, MEMHOLD,也可以用于控制 NWE/NOE 的高电平时间,在连续访问的时候, MEMHOLD
和 MEMSET 共同构成 NWE/NOE 的高电平脉宽时间。

MEMWAIT:这八个位用于设置使能命令( NWE/NOE)所需的最小 fmc_ker_ck 时钟周期数(使能 NWAIT 将使这个时间延长),实际上就是 NWE/NOE 的低电平时间, 0000 0000~1111,1110 表示 1~255 个 HCLK 周期。 MT29F4G08 的 tRP/tWP 最少为 10ns,我们设置 MEMWAIT =5,即 6 个 fmc_ker_ck 周期,约 27ns。这里需要设置时间比较长一点,否则可能访问不正常。

MEMHOLD:这八个位用于设置禁止使能命令( NWE/NOE)后,保持地址(和写访问数据)的 fmc_ker_ck 时钟周期数,也可以用于设置一个读写周期内的 NWE/NOE 高电平时间, 00000000~1111 1110 表示 0~254 个 HCLK 周期。我们设置MEMHOLD=2,表示 2 个 fmc_ker_ck 周期,加上前面的 MEMSET,所以 NEW/NOE 高电平时间为 6 个 HCLK,即 27ns 左右。

MEMHIZ:这八个位定义通用存储空间开始执行写访问之后,数据总线保持高阻态所持续的 fmc_ker_ck 时钟周期数。该参数仅对写入事务有效, 0000~1111 1110 表示 0~254 个 fmc_ker_ck周期。我们设置 MEMHIZ=3,表示 3 个 fmc_ker_ck 周期, 即 13.5ns 左右。

7.NAND FLASH和STM32芯片的连接图
在这里插入图片描述
8.STM32CubeMx配置Nand Flash

(1).选择FMC项
Data/Address:由于Nand Flash是地址和数据共线,由于MT29F4G08芯片是8根数据线,所以这里设置为8bits。

Ready or busy:等待特性使能/失能,对应FMC_PCR寄存器中的PWAITEN位,用于设置等待特性: 0,禁止; 1,使能。这里我们设置为 0,禁止使用控制器自带的等待特性,因为如果使能的话,将导致 RGB 屏抖动( STM32 硬件 bug)。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

ECC computation:ECC计算逻辑使能/失能,对应FMC_PCR寄存器中的ECCEN位,0:禁止/复位ECC,1:使能ECC计算

ECC page size:ECC页大小,对应FMC_PCR寄存器中的ECCCPS,这三个位用于设置ECC的页大小,256字节,512字节,1024字节,2048字节,4096字节,8192字节。

CLE low to RE low delay in HCLK cycles:CLE到RE的延迟,对应FMC_PCR寄存器中的TCLR,这四个位用于设置 CLE 到 RE 的延迟: 0000~1111,表示 1~16 个 fmc_ker_ck 周期。对应 NAND FLASH 数据手册的 tCLR 时间参数: t_clr=(TCLR+SET+2)*Tfmc_ker_ck。 TCLR 就是本寄存器的设置值, SET 对应 MEMSET 的值(我只用到 MEMSET), Tfmc_ker_ck 对应fmc_ker_ck 的周期。 MT29F4G08 的 tCLR 时间最少为 10ns,以 220M 的 fmc_ker_ck 频率计算,
一个 fmc_ker_ck=4.5ns(下同),我们设置 TCLR=5,则 t_clr 至少为 7 个 fmc_ker_ck 即 31.5ns。

ALE low to RE low delay in HCLK cycles:ALE到RE的延时,对应FMC_PCR寄存器中的TAR位,这四个位用于设置 ALE 到 RE 的延迟: 0000~1111,表示 1~16 个 HCLK 周期。对应NAND FLASH 数据手册的 tAR 时间参数,这里设置的 t_ar=(TAR+SET+2)* Tfmc_ker_ck。 TAR就是本寄存器的设置值, SET 对应 MEMSET 的值(我只用到 MEMSET), Tfmc_ker_ck 对应fmc_ker_ck 的周期。 MT29F4G08 的 tAR 时间最少为 10ns,我们设置 TAR=5,则 t_ar 至少为 7个 fmc_ker_ck 即 31.5ns。

NAND common space timing in HCLK cycles为NAND 通用存储器空间时序,NAND attribute space timing in HCLK cycles为NAND 特性存储器空间时序,这两个参数信息设置一致即可。

Common space setup time:地址建立的时间,对应空间时序寄存器,FMC_PMEM中的MEMSET,这八个位定义使能命令( NWE/NOE)前,地址建立所需要的 fmc_ker_ck 时钟周期数,表示 NWE/NOE 的高电平时间, 0000 0000~1111 1110 表示 1~255 个 fmc_ker_ck 周期。MT29F4G08 的 tREH/tWH 最少为 10ns,设置 MEMSET=3,即 4 个 fmc_ker_ck 周期,约 18ns。另外, MEMHOLD,也可以用于控制 NWE/NOE 的高电平时间,在连续访问的时候, MEMHOLD
和 MEMSET 共同构成 NWE/NOE 的高电平脉宽时间。

Common space wait time:对应空间时序寄存器,FMC_PMEM中的MEMWAIT,这八个位用于设置使能命令( NWE/NOE)所需的最小 fmc_ker_ck 时钟周期数(使能 NWAIT 将使这个时间延长),实际上就是 NWE/NOE 的低电平时间, 0000 0000~11111110 表示 1~255 个 HCLK 周期。 MT29F4G08 的 tRP/tWP 最少为 10ns,我们设置 MEMWAIT =5,即 6 个 fmc_ker_ck 周期,约 27ns。这里需要设置时间比较长一点,否则可能访问不正常。

Common space hold time:对应空间时序寄存器,FMC_PMEM中的MEMHOLD,这八个位用于设置禁止使能命令( NWE/NOE)后,保持地址(和写访问数据)的 fmc_ker_ck 时钟周期数,也可以用于设置一个读写周期内的 NWE/NOE 高电平时间, 00000000~1111 1110 表示 0~254 个 HCLK 周期。我们设置 MEMHOLD=2,表示 2 个 fmc_ker_ck 周
期,加上前面的 MEMSET,所以 NEW/NOE 高电平时间为 6 个 HCLK,即 27ns 左右。

Common space Hi-Z time:对应空间时序寄存器,FMC_PMEM中的MEMHIZ,这八个位定义通用存储空间开始执行写访问之后,数据总线保持高阻态所持续的 fmc_ker_ck 时钟周期数。该参数仅对写入事务有效, 0000~1111 1110 表示 0~254 个 fmc_ker_ck周期。我们设置 MEMHIZ=3,表示 3 个 fmc_ker_ck 周期, 即 13.5ns 左右。

Page size:Nand Flash芯片每页的字节数。
Spare area size:Nand Flash芯片每页中备份区域的字节数。
Block size:Nand Flash芯片中每块的字节数大小,字节限制为0-4294967295,因为最高支持的容量为4GB。128K+4K=135168。
Block number:Nand Flash芯片中块的数目。
Phane number:Nand Flash芯片中平面的数目。
Phane size:Nand Flash芯片中每个平面的字节数,128K+4K=135168,135168*1024=138412032。

(2).配置GPIO Settings
根据电路原理图,配置相应的管脚

9.MT29F4G08芯片时序时间表

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【MySQL】事务、锁

目录 事务案例场景模拟实现转账:从张三的账户转账500元到李四的账户SQL示例异常 什么是事务事务的特性,简称ACID 属性实现原理redo logundo log MySQL 中一条 SQL 更新语句的执行过程( InnoDB 存储引擎)事务的提交流程隔离性并发事务产生的问题事务隔离级…

434G数据失窃!亚信安全发布《勒索家族和勒索事件监控报告》

最新态势快速感知 最新一周全球共监测到勒索事件90起,与上周相比数量有所增加。 lockbit3.0仍然是影响最严重的勒索家族;alphv和cactus恶意家族也是两个活动频繁的恶意家族,需要注意防范。 Change Healthcare - Optum - UnitedHealth遭受了…

【Python】外网远程登录访问jupyter notebook+pycharm使用ipython

第一步:创建python虚拟环境 conda create -n py3610 python3.6.10第二步:安装ipython pip install ipython pip install ipython notebook第三步:创建 IPython Notebook 服务器配置文件 # 进入python交互shell,设置密码 >&…

SpringCloud(19)之Skywalking应用上篇

一、Skywalking概述 随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。 思考以下…

Leaflet 加载高德地图

前言 在前面的文章中,我们学习了如何使用 Leaflet 创建一个基本的地图。在本文中,我们将学习如何在 Leaflet 中加载高德地图,并结合实际应用构建地图点击事件。 一、介绍 高德地图是一款由高德软件提供的数字地图服务,在国内使用…

在国内如何申请US,visa卡?

随着跨境与AI的发展大家对美国虚拟卡的需求也越来越多,比如说亚马逊、ebay、Etsy、ChatGPTPLUS、midjourney、POE等等软件以及海淘的需要,所以我们需要用到美国虚拟卡的场景就越来越多 如何获得一张US 虚拟信用卡? 方法很简单,点…

React-子传父

1.概念 说明&#xff1a;React中子组件向父组件传递数据通常涉及回调函数和状态提升等方法。 2.代码实现 2.1绑定事件 说明&#xff1a;父组件绑定自定义事件 <Son onGetSonMsg{getMsg}></Son> 2.2接受事件 说明&#xff1a;子组件接受父组件的自定义事件名称…

【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &#x1f680; 本…

【Pytorch入门】常见Transforms/ __call__方法

在Python中&#xff0c;__call__方法是一个特殊方法&#xff0c;用于使对象可以像函数一样被调用。当一个对象实现了__call__方法时&#xff0c;可以直接使用括号运算符将对象作为函数调用。 通过实现__call__方法&#xff0c;可以为对象提供函数式的行为&#xff0c;使其更加…

超全Chat GPT论文修改指令

文献综述指令润色修改指令论文选题指令论文大指令研究理论指令论文致谢指令参考文献指令论文润色整体逻辑论文整体优化提问指令 1&#xff0e;文献综述指令 请你帮我写一份关于&#xff08;研究主题&#xff09;的文献综述。我的论文选题方向是 XXXX &#xff0c;我已经找到了…

Vue.js 修饰符:精准控制组件行为

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

IDEA中Maven无法下载jar包问题解决

在项目中经常会遇到jar包无法下载的问题&#xff0c;可以根据以下几种方法进行排查。 1. 排查网络连接 网络连接失败&#xff0c;会导致远程访问Maven仓库失败&#xff0c;所以应确保网络连接正常。 2. 排查Maven的配置 Maven配置文件&#xff08;settings.xml&#xff09;…

《数字图像处理(MATLAB版)》相关算法代码及其分析(3)

目录 1 对边界进行子采样 1.1 输入参数检查 1.2 处理重复坐标 1.3 计算边界最大范围 1.4 确定网格线数量 1.5 构建网格位置向量 1.6 计算曼哈顿距离 1.7 整理输出结果 1.8 返回结果 2 改变图像的存储类别 2.1 函数输入 2.2 数据类型转换 2.3 错误处理 2.4 返回结…

LabVIEW高温摩擦磨损测试系统

LabVIEW高温摩擦磨损测试系统 介绍了一个基于LabVIEW的高温摩擦磨损测试系统的软件开发项目。该系统实现高温条件下材料摩擦磨损特性的自动化测试&#xff0c;通过精确控制和数据采集&#xff0c;为材料性能研究提供重要数据支持。 项目背景 随着材料科学的发展&#xff0c;…

视觉Transformers中的位置嵌入 - 研究与应用指南

视觉 Transformer 中位置嵌入背后的数学和代码简介。 自从 2017 年推出《Attention is All You Need》以来&#xff0c;Transformer 已成为自然语言处理 (NLP) 领域最先进的技术。 2021 年&#xff0c;An Image is Worth 16x16 Words 成功地将 Transformer 应用于计算机视觉任务…

小迪安全31WEB 攻防-通用漏洞文件上传js 验证mimeuser.ini语言特性

#知识点&#xff1a; 1、文件上传-前端验证 2、文件上传-黑白名单 3、文件上传-user.ini 妙用 4、文件上传-PHP 语言特性 #详细点&#xff1a; 检测层面&#xff1a;前端&#xff0c;后端等 2、检测内容&#xff1a;文件头&#xff0c;完整性&#xff0c;二次渲染…

docker快照备份回滚

1. 安装系统 1.1 vm安装Ubuntu 参考:https://blog.csdn.net/u010308917/article/details/125157774 1.2 其他操作 添加自定义物理卷 –待补充– 1.2.1 查询可用物理卷 fdisk -l 输出如下 Disk /dev/loop0: 73.9 MiB, 77492224 bytes, 151352 sectors Units: sectors of …

Vue 项目重复点击菜单刷新当前页面

需求&#xff1a;“在当前页面点击当前页面对应的菜单时&#xff0c;也能刷新页面。” 由于 Vue 项目的路由机制是路由不变的情况下&#xff0c;对应的组件是不重新渲染的。所以重复点击菜单不会改变路由&#xff0c;然后页面就无法刷新了。 方案一 在vue项目中&#xff0c;…

英特尔/ARM/国产化EMS储能控制器解决方案

新型储能是建设新型电⼒系统、推动能源绿⾊低碳转型的重要装备基础和关键⽀撑技术&#xff0c;是实现碳达峰、碳中和⽬标的重要⽀撑。说到储能&#xff0c;大众首先想到的就是电池&#xff0c;其好坏关系到能量转换效率、系统寿命和安全等重要方面&#xff0c;但储能要想作为一…

[LeetBook]【学习日记】数组内乘积

题目 按规则计算统计结果 为了深入了解这些生物群体的生态特征&#xff0c;你们进行了大量的实地观察和数据采集。数组 arrayA 记录了各个生物群体数量数据&#xff0c;其中 arrayA[i] 表示第 i 个生物群体的数量。请返回一个数组 arrayB&#xff0c;该数组为基于数组 arrayA …