nor flash调试与使用总结

news/2024/10/25 1:28:24/

最近项目中使用到norflash,总结一下学习与使用经验

文章目录

    • 一、Flash基本概念
        • 存储器介绍与Flash在其中定位---非易失存储器类别中嵌入式领域常见设备
        • Flash的典型分类---NorFlash(贵/容量小/读快写慢)与NandFlash(便宜/容量大/读慢写快)
        • Flash的基本 存储和 读 写 擦原理---电荷是否超过特定阈值来表示0(低表示1)
    • 二、nor flash关键特性理解(以 GD25Q128介绍)
        • 基本特性介绍---容量、访问接口、读写速度、擦除性能、写保护
        • 【关注点1】flash的擦除性能远低于读写,相差几个量级
        • 【关注点2】多线SPI访问特性 与 极限读取性能计算(一定要留有余量)
        • 【关注点3】写保护区域设置 与 flash排布设计(只读 和 易变、可变区域 做隔离)
        • 【关注点4】3/4字节地址切换问题,为满足超16M的容量空间。
    • 三、常见问题与调试方法(待补充)
        • 常见开机失败---3/4字节地址切换问题
        • 常见读取性能差---中间缓存/时钟偏低
        • 常见写数据概率失败---硬件链路设计问题信号干扰
        • 常见读取数据概率失败---管脚驱动电流不够
    • 参考资料:

一、Flash基本概念

存储器介绍与Flash在其中定位—非易失存储器类别中嵌入式领域常见设备

存储器常见分类类型:
1、易失性存储器
RAM(Random Access Memory) 随机存取存储器。直接对字节地址进行随机读写,速度快,掉电丢失,用于存储运行数据或代码。包含DRAM(Dynamic Ram需要定时刷新)和SRAM(Static Ram 有电源不需要刷新)两种。
2、非易失存储器
NVM(non-volatile memory) 断电数据不丢失。常见类型:
1)OTP(One Time Programmable)一次性可编程存储,程序烧入后不可再次更改和清除;
2)EPROM(Erasable Programmable ROM) 可擦除可编程只读存储器,利用高电压写入,曝光于紫外线抹除清空。
3)EEPROM(Eraseable programmable read only memory)电可擦编程只读内存,类似EPROM,抹除方式使用高电场。
4)Flash memory快闪存储器,读写速度和容量上要远远高于E2PROM,价格也便宜的多,嵌入式领域常用存储。

Flash的典型分类—NorFlash(贵/容量小/读快写慢)与NandFlash(便宜/容量大/读慢写快)

NOR和NAND是市场上两种主要的非易失闪存技术。NAND一般以存储数据为主,晶片容量大,容量可以达到2Gb甚至更大,读取块形式通常一次512个字节,采用这种技术的Flash比较廉价;NOR一般以存储程序代码为主,又称为Code Flash,采用内存的随机读取技术,可让微处理器直接读取,容量较低。
在这里插入图片描述

Flash的基本 存储和 读 写 擦原理—电荷是否超过特定阈值来表示0(低表示1)

1)存储原理:数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。闪存的存储单元为三端器件,源极、漏极和栅极。栅极与硅衬底之间有二氧化硅绝缘层,用来保护浮置栅极中的电荷不会泄漏,使得存储单元具有了电荷保持能力。
在这里插入图片描述
2)擦写原理:NAND型闪存的擦和写均是基于隧道效应,电流穿过浮置栅极与硅基层之间的绝缘层,对浮置栅极进行充电(写数据-设置0)或放电(擦除数据-设置1)。NOR型闪存擦除数据仍是基于隧道效应(电流从浮置栅极到硅基层),但在写入数据时则是采用热电子注入方式(电流从浮置栅极到源极)。
3)读取原理:依据有无电荷读取存储的数据,当浮置栅极有电荷时,源极和漏极可以导通,读取到的bit是0;擦除后浮置栅极无电荷,源极和漏极不能导通,读取的bit是1;

二、nor flash关键特性理解(以 GD25Q128介绍)

基本特性介绍—容量、访问接口、读写速度、擦除性能、写保护

容量:存储总量128Mbit(16Mbyte);
擦除性能:支持按4KB sector擦除(400ms) 或者 32KB(1S)/ 64KB(1.2S) block擦除,寿命支持10万次擦写,支持3字节4字节地址模式。
读写性能::访问方式SPI,最大支持4线访问80M时钟读写(数据传输320Mbits/S),支持写保护控制;

【关注点1】flash的擦除性能远低于读写,相差几个量级

flash的读写都是通过时钟CLK配置IO完成,可以通过提升时钟大小,构建多线IO来提高访问速度,如GD25Q128最大支持4线访问80M时钟读写(数据传输320Mbits/S)。但是擦除时不取决于时钟大小,也没有多线的概念, 完全由器件本身性能决定,如按4KB擦除要400ms,最快按64KB单元要1.2S(约0.4Mbits/S)和读取理论数据320Mbits/S相差几百倍

【关注点2】多线SPI访问特性 与 极限读取性能计算(一定要留有余量)

很多flash SPI器件都支持多线访问,即把部分IO作为数据SO或SI来支持多线并行读取。如GD25Q128用4线读取的时候,把SI、SO、WP写保护、HOLD都作为读取IO,可以一次CLK读取4个bit数据。
在这里插入图片描述
多线读取和理论值往往有一个损失率,0.5% 甚至可以到 15%(有非常多因素)。我们先算一下理论极限速度。
1)假如SPI时钟为100M = 100x10 ^ 6x4线传输 = 400 * 10 ^ 6 bit / S= 47.68MB / S。
2)再进一步,每次发送一次命令需要先发cmd+addr+Dummy(共20个CLK周期)然后读取,因此一次连续读取nByte(2n个时钟周期)确定了利用率,假如1次读取64个= 47.68MB/S * (2x64 / (2x64+20)) = 41.23MB/S;假如一次读取1M数据就还是47.68MB/S;
3)再进一步,实际测量波形发现大量数据读取过程CLK还是间歇性的,并不是完整连续的。这里引入因素也很多,SPI控制器从flash读取数据fifo是有深度的,当读取后 需要CPU或者DMA搬移走。特别是用CPU搬移的时候,很可能还涉及一些中间缓存buffer上下文,到目标sram可能会再搬移一次导致时间更长。
在计算耗时的时候,一定要根据系统进行排除并留有余量,不要简单按理论值计算。

【关注点3】写保护区域设置 与 flash排布设计(只读 和 易变、可变区域 做隔离)

flash提供写保护区域设置,通过状态寄存器进行设置。如下类似,可以按 保护 首部或者尾部1/x、或首部 或者 尾部 固定大小block。也引导我们方案设计的时候 把只读区域 和 易变、可变区域 做隔离。
在这里插入图片描述

【关注点4】3/4字节地址切换问题,为满足超16M的容量空间。

容量低于16MByte的nor flash,一般是3字节模式:cmd+addr0+addr1+addr2,因为3个字节地址表示范围:0xffffff为16M内容。超过16M的时候,就需要用到4字节地址cmd+addr0+addr1+addr2+addr3。
注意点是:部分芯片bootrom不支持4字节地址模式,默认按3字节和nor flash通信,如果切换到4字节后重启就会导致bootrom启动失败。这里的解决方案是 软件在reboot前主动切换到3字节,但是不能解决主芯片硬重启的情况,因此更好的方法是硬件上调整供电控制 让 主芯片和norflash同步reset。一旦主芯片被复位下电norflash也下电,让二者都回到3字节模式,就可以正常启动了。

三、常见问题与调试方法(待补充)

常见开机失败—3/4字节地址切换问题

常见读取性能差—中间缓存/时钟偏低

常见写数据概率失败—硬件链路设计问题信号干扰

常见读取数据概率失败—管脚驱动电流不够

参考资料:

GD25Q128datasheet:https://www.gigadevice.com/zh-hans/flash-memory/gd25q128e/


http://www.ppmy.cn/news/5826.html

相关文章

postgres 源码解析46 可见性映射表VM

简介 Postgres 为实现多版本并发控制技术,当事务删除或者更新元组时,并非从物理上进行删除,而是将其进行逻辑删除[具体实现通过设置元组头信息xmax/infomask等标志位信息],随着业务的累增,表会越来越膨胀,对于执行计划…

15、Mysql高级之并发参数调整

15、Mysql高级之并发参数调整 文章目录15、Mysql高级之并发参数调整1、max_connections2、back_log3、table_open_cache4、thread_cache_size5、innodb_lock_wait_timeout从实现上来说,MySQL Server 是多线程结构,包括后台线程和客户服务线程。多线程可以…

自重启伪遗传改良算法解决TSP问题(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

redis安装 3台机器 6节点

一: redis官网地址: 6.2.6版本 1 | Index of /releases/http://download.redis.io/releases/ 二: 编辑配置文件 1: 注释本地IP地址: 1: bind: 本地IP 2: protected-mode no: #关闭保护模式 3&#xff1…

函数(6)

目录 1、函数是什么? 2、C语言中函数的分类: 1、库函数 2、自定义函数 3、函数的参数 4、函数的调用 5、练习 1、打印100~200之间的素数 2、打印100~200之间的闰年 3、写一个函数,实现一个整形有序数组的二分查找 6、函数的嵌套调…

网络ping不通,试试这8招

摘要:网络ping不通,该怎么办?本文教你8个大招,轻松找到问题根源。本文分享自华为云社区《网络ping不通,该怎么办?》,作者:wljslmz。 如下图,PC(192.168.10.1…

mybatis 中@SelectProvider注解的使用

我看了下与Select有啥区别,这个SelectProvider是能够加多条件判断的,看下面的代码示例: SelectProvider:用于构建动态查询SQL。 InsertProvider:用于构建动态新增SQL。 UpdateProvider:用于构建动态更新SQ…

Qt——基本介绍、详解对象树

目录 一.基本介绍 二.对象树 一.基本介绍 创建qt项目是&#xff0c;如果选择空窗口QWidget&#xff0c;那么mian函数中会有如下代码&#xff1a; #include "myWindow.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, ar…