Flash存储基础知识
NOR Flash名称中的NOR意思是或非门,如下图,现在要想让位线为高电平,由于下面的Word line0至Word line5是并联关系,只需要有一个打开就可以让位线与地线(专业术语应该叫源线)接通称为低电平,然后取非运算之后就得到了1,这就是NOR Flash名称中NOR的来源。
1. flash存储介绍
Flash是一种常见的用于存储数据的存储器,它具有容量大、可重复擦写、掉电后数据可继续保存的特性。根据组成架构的不同可以将flash分为NOR Flash和NAND Flash,flash在写入数据前需要先擦除再写入,需要按存储结构扇区或块进行擦除,flash擦除以后的初始存储数据全为1,并且写入数据的时候只能由1到0,不能从0到1,从0到1只能靠擦除。flash的存储结构都分为页(page),扇区(sector),块(block)等,如下图是NM25Q128EVB的内存组织,可以看出在这个芯片中一个Block可以分为16个Sector。
这里的页是Flash存储器的数据写入基本单位,和操作系统虚拟内存的页不是一回事,也就是说即使要改写1位的数据也必须对整个页进行操作,需要先将整个页数据读出来,然后修改好数据以后再擦除扇相应的最小擦除单元(可以是页,扇区或块,写入的最小单位是页,擦出的最小单位不一定是页,取决于具体芯片手册),最后重新写入新页;扇区和块是擦除的单位,NOR Flash擦除的最小单位是扇区或块,(实际使用需要看数据手册),NAND Flash擦除的最小单位是块(由NAND Flash的物理特性决定,最小擦除单位一定是块)。
Flash的部分缺点:
- 所有Flash器件的写入操作必须在已擦除的单元进行,导致写入流程复杂化,擦除操作也会显著增加处理器的操作时间;
- 擦除次数有限制,实际上也就导致了写入次数的限制,NOR Flash的典型擦写寿命约10万次,远低于NAND Flash的百万次;
- 位翻转问题,所有Flash均存在位反转现象,NAND Flash因存储密度高更易发生,需依赖纠错码(ECC)修复;
- 坏块管理,由于半导体制造工艺的固有缺陷,所有Flash出厂时即存在随机分布的坏块,NAND Flash的坏块需通过冗余算法标记并替换,增加系统复杂性,NOR Flash的坏块用户不可见,芯片硬件电路会自动用冗余单元替换;
2. NOR flash和NAND Flash
2.1 硬件电路介绍
Flash存储单元本质上是一个特殊的MOS管,它在标准的控制栅极和沟道之间增加了一个浮栅。通过操作这个浮栅来控制这个数据存储单元里面存储的是0还是1。
2.1.1 NOR Flash的硬件电路
NOR Flash名称中的NOR意思是或非门,如下图,现在要想让位线为高电平,由于下面的Word line0至Word line5是并联关系,只需要有一个打开就可以让位线与地线(专业术语应该叫源线)接通称为低电平,然后取非运算之后就得到了1,这就是NOR Flash名称中NOR的来源。
在继续之前先来学习一下位线和字线,flash的字线和位线组成N行M列的矩阵,N行由N条字线组成,M列由M条位线组成,每一行的所有存储单元之间是并联连接,实际上字线连接的这一行就是flash存储的一页,每一条字线和位线的交叉处都是一个存储单元,字线可以粗略的理解为地址线,位线可以理解为是数据线,如下图所示,当想要读取第二行的数据的时候就将第二行字线的电平拉高,其他的字线保持低电平,这时候就可以通过位线去读取第二行所有存储单元所存储的比特位是0还是1了,可以看出来NOR Flash的这种设计使得每个存储单元可通过唯一的地址直接访问,支持随机存取,读取速度接近RAM。在写入或擦除的时候字线和位线共同施加特定电压(如编程时位线接地,字线加高压),通过FN隧穿或热电子注入机制改变浮栅电荷,实现数据写入或擦除,不过这个不是这里的重点,知道就行了。
2.1.2 NAND Flash的硬件电路
NAND Flash名称中的NOR意思是或非门,如下图,现在要想让位线为高电平,由于下面的两个选择晶体管(一个靠近地一个靠近位线,靠近地的叫源极选择晶体管,靠近位线的叫漏极选择晶体管)以及Word line0至Word line7是串联关系,需要所有的都打开才可以让位线与地线接通成为低电平,然后取非运算之后可以得到1,这就是NAND Flash名称中NAND的来源。
再看NAND Flash的位线和字线,NAND Flash的字线和位线组成N+2行M列的矩阵,N+2行由N条字线,一条源极选择二极管和一个漏极选择二极管组成,M列由M条位线组成,每一行字线的存储单元之间是串联连接,字线连接的这一行就是flash存储的一页在NAND Flash这种结构中更明显,因为存储单元串联,所以每次必须选择一整行字线的存储单元,也就对应NAND Flash最小的编程单位–页,NAND Flash的数据读取和NOR Flash不同,NAND Flash数据读取的时候先通过字线来选择要操作的对应页,对目标存储单元所在字线施加低电压,其他未选字线施加高电压确保其导通,从而形成电流通路。在读取前,位线会被预充电至特定电压(如1V),这时候和NOR Flash一样,根据存储的数据的不同位线会检测到不同的电压,然后转换后的数据被并行存入页缓存器,形成完整的页数据被读取。
2.2 NOR flash和NAND Flash对比
实际上知道了2.1的内容以后这两种Flash的很多性质都可以猜出来。看下面这个表,网上找到的这两种Flash的对比:
| 特性 | NOR Flash | NAND Flash |
|---|---|---|
| 非易失性 | 是,断电不丢失 | 是,断电不丢失 |
| 单元尺寸 | 较大 | 较小 |
| 每Bit成本 | 较高 | 较低 |
| 单颗IC容量 | 8MB-256MB | 256MB-2GB |
| 随机读取速度 | 快 | 慢 |
| 写入速度 | 慢 | 快 |
| 擦除速度 | 慢 | 快 |
| 待机电流 | 低 | 高 |
| 工作电流 | 高 | 低 |
| 坏块处理 | 非必要 | 必要 |
| 擦除次数 | 10 4 10^4 104- 10 5 10^5 105 | 10 5 10^5 105- 10 6 10^6 106 |
| 成本/价格 | 高 | 低 |
| 更适用的领域 | 代码存储 | 数据存储 |
比如第一行的非易失性,因为最小存储单元是一样的,所以都是掉电不丢失的非易失性存储,第二行的单元尺寸,NOR Flash是并联电路同等条件下占的空间肯定会更大一些,每Bit的成本肯定也是NOR Flash更高,内部导线更复杂,其他的也差不多,看一看了解一下就行了。再看一下最后一个,更适用的领域,NOR Flash支持随机存取,所以更适合代码,大多数时候嵌入式设备都可以选择直接从Flash启动,而NAND Flash成本低,存储量大,所以适合存储数据,优盘,移动硬盘一类的就都是NAND Flash,在汽车电子领域,DFlash和PFlash一般都是NOR Flash。
3. Flash模拟EEPROM
MCU运行的时候有时候需要存储一些下电不丢失的数据,在嵌入式领域常见的就是EEPROM和Flash了,但是由于很多原因有时候无法使用或者不想使用EEPROM,比如EEPROM价格太贵,再比如大多数芯片内部集成有Flash,而没有集成EEPROM,使用起来不方便等,还有很多其他的原因就不列举了。
前面说了,汽车电子领域的Flash一般都是NOR Flash,主要判断标准就是Flash的物理地址连续且独立映射,比如下图是YTM32B1ME0x的系统内存映射。
云途的这款芯片有1MB的PFlash和512KB的DFlash,都是独立编址的,说明都是NOR Flash,在手册里没有特殊情况的说明下使用Flash模拟EEPROM的时候就是使用的这256KB的DFlash空间,这个意思不是说模拟出来的EEPROM就有256KB,还需要扣除模拟EEPROM的管理开销和一些硬件保留区,在云途的这款芯片里没有硬件保留区,因为在内存映射图中已经扣掉这部分了。
下面这幅图是英飞凌TLE9868的内存映射(取自Infineon-TLE986x_UM-UserManual-v01_91-EN_2.pdf),和YTM32B1ME0x有一些区别。
这个芯片的Flash空间是11000000H-1103FFFFH,没有区分DFlash和PFlash,统称为Flash,手册里明确说明有最多256KB(实际上有多少跟具体的芯片有关)的Flash空间可以用来存代码,并且这些flash中有4KB可以用来模拟eeprom,但是并没有说实际的地址是哪部分,这时候需要看另外一个文件:Infineon-TLE986x_TLE987x_BootROM_UM-UserManual-v01_09-EN.pdf
从上图的Table 5-2的第一列就可以看到根据具体的Flash大小去查找可以模拟EEPROM的内存地址是哪部分,因为最多有256KB的Flash空间,如果当前的芯片实际就是有256KB的Flash空间,那么就对应Table 5-2的最后一行,具体就是1103F000H-1103FFFFH的地址空间可以用作模拟EEPROM。
具体怎么用Flash模拟EEPROM就不在这里说了,等学到STM32中的Flash模拟EEPROM的时候再说。
4. YTM32B1ME05的Fee模块
最后简单介绍一下使用YTM32B1ME05进行Flash模拟EEPROM时候的Fee模块。
4.1 Fee相关概念
Sector是Flash擦除操作基本单位,为Flash固有特性,YTM32B1MEx系列DFlash sector长度为1kByte;Cluster为Fee中使用的虚拟存储器段,Cluster建立Fee与物理存储间的虚拟连接。它与DFlash物理Sector对应,一个Cluster对应一个Sector,一个Sector可以对应一个或多个Cluster ,所以Fee中设置的Cluster长度应小于或等于物理DFlash Sector;Block为Fee基本存储单元(这里的Block和之前说的Flash的擦除单位块:Block是不同的概念,只是名字相同,这里是一个逻辑概念),是Fee数据写入的最小结构,Block长度可根据应用需求自行定义,可以看出来Block是逻辑层面的写入单位(实际Flash底层的最小写入单位是页/Page),目前SDK允许的最大Block大小为96Byte,一个Sector等于多个Block;Cluster Group为Fee中虚拟概念,用于关联Block及Cluster。Cluster Group为Block的容器,一个或多个Block组成一个Cluster Group。Fee代码以Cluster Group为单位分配存储空间,同属一个Cluster Group的所有Block共享一片存储空间。Cluster Group中包含的Block数量需根据实际情况确定,但是一个Cluster Group需分配至少两个Cluster。
一个Cluster Group包含两个或两个以上的Cluster,每个Cluster又对应一个Sector(为了好操作就配置Cluster和Sector一一对应),Cluster是逻辑概念,Sector是物理概念,每个Cluster又可以分为多个Block。如下图所示:
4.2 Fee记录数据组成
根据4.1节可知,Fee模块记录的数据主要是两部分,分别为:
Cluster信息:该信息描述在当前Cluster Group中当前所在Cluster(Sector)的信息,共计32Byte,固定写⼊在每个Cluster的前32Byte,Cluster擦除后第⼀次使⽤该Cluster时被写⼊。Cluster信息包括Fee Cluster写⼊ID(4Byte)、Cluster起始地址(相对地址、4Byte)、Cluster⻓度(4Byte)、Group Hdr校验和(4Byte)以及Cluster有效标志(16Byte)。其中Cluster写⼊ID每次写⼊前递增1,因此当前Cluster Group中,ID最⼤且标志有效的Cluster为当前活跃的Cluster(可执⾏Fee读、写等操作)。Block信息及数据:该部分数据为⽤⼾定义的Block数据及相关信息,Block数据及信息由3部分组成,包括:①⽤⼾EEP Block数据信息(Block Hdr),共计32Byte,其中Block编号(2Byte)、Block数据⻓度(2Byte)、Block Data(4Byte)存储地址、Hdr校验和(4Byte)、Block数据Valid Flag(16Byte)以及预留4byte。②⽤⼾Fee Block数据。
Fee数据分布如下图所⽰。
Fee⽤⼾Block写⼊过程如下,Block数据在Cluster(Flash Sector)中的分布如刚才的图所⽰,Cluster信息被写⼊在Cluster开始的32Byte中,Block信息与数据分别写⼊到不同地址中,其中Block信息从低地址端开始写⼊,写⼊后Fee空闲Block信息地址递增;Block数据从⾼地址端开始写⼊,写⼊后Fee空闲Data地址递减。
更深的内容就是AUTOSAR的Fee模块了,等以后学到了再说。
5. 参考资料
http://www.yingtexin.net/flash-and-ddr/54718.shtml
https://www.elecfans.com/consume/1948575.html
https://blog.csdn.net/qq_45683435/article/details/103146659
更多推荐



所有评论(0)