学STM32硬件-Flash
---
6/24/2017 AM
# 一、内容概要
1. 对于Flash的介绍
2. 对于所用芯片的介绍
# 二、内容详述
因为最近,买些手机这类东西的时候,实在是太容易把ROM和RAM,以及手机中一些混乱的内存这些的关系给搞乱掉了,于是刚开始写这些内容,就先捋一捋这些内容吧。
## 1、内存与外存
在计算机原理里面,将计算机的硬件分为CPU、、主存储器(内存)、辅存储器(外存)、输入/输出设备与总线五类主要部件组成。那么主存储器就的别名应该就是内存。辅存储器呢,就是软盘(虽然现在不大用了)硬盘,光盘,还有现在各种各样的优盘,MP3,Memorystick,SD卡,eMMC卡……从中可以看到这个划分的方式是:
---内存(DDR3、DDR4、LPDDR4X...)
存储 --|--外存(闪存、硬盘、SD卡...)
内存是直接与CPU交换数据进行运算的高速存储器,一般具有易失性(断电后不能保存数据)。闪存可以算是外存的一种。这样对于Flash的进行了一下说明,从而将其定位为闪存,属于外存中的一种。
当然参考华为在P10手机中对其进行的定义,可能还是更加的精确点。把直接跟CPU交换数据的,最好还是叫做运行内存。而另一种主要用于储存数据用的,则是称为储存容量或储存空间。
## 2、内存规格
这一张图,主要是根据储存物质的功能进行划分,主要是针对于运行内存进行。

[图 内存]
内存类型分为:
RAM(Random Access Memory):随机读写储存器
ROM(Read Only Memory):只读存储器
SRAM(Static Random Access Memory):静态随机读写储存器
DRAM(Dynamic Random Access Memory):动态随机读写储存器
其中的DRAM这一块,是目前发展最为快速的一个领域,对其中的内存芯片进行分类的话:
FPM(Fast-Page Mode) DRAM:快速页面模式的DRAM
EDO(Extened Data Out) DRAM:扩展数据输出DRAM,速度比FPM DRAM快15%~30%
BEDO(Burst EDO) DRAM:突发式EDO DRAM,性能提高40%左右。
SDRAM(Synchronous DRAM):同步DRAM,与CPU的外部工作时钟同步。
RDAM(Rambus DRAM)
DDR(Double Data Rate) DRAM,这一个目前发展最为迅速的DRAM类型。
在DDR-DRAM中,在低功耗的领域,比如说手机行业,已经LPDDR3,到了LPDDR4,以及LPDDR4X了。其中的运行速度也开始不断的加快。电脑领域,也已经进入到了DDR4。不过这个电脑内存的工作频率,不如手机领域的频率要高。典型的厂家,主要有海力士,三星这类厂家了。这些厂家在现代的最新的Flash领域也是引领行业的企业。
好了,扯了关于Flash相关的领域后,现在对FLASH的定位有了一些的了解、然后下面就开始,看看,开发板中的所用芯片处于整个Flash领域,是个啥水平。
## 1、Flash的介绍
### 1.1 Flash定义
Flash的技术,发展的比较繁多的。记得以前学单片机的时候,常用的存储是采用了IIC的,现在这个是SPI的,于是想一想,还是把整个Flash的发展给整体捋一下吧。当然,幸亏网上有人做了这个方面的绝大部分的工作,于是也便copy过来,当做我自己整理自己想法的主要架构。
### 1.2 Flash分类
一、IIC EEPROM
IICEEPROM,采用的是IIC通信协议。
IIC通信协议具有的特点:简单的两条总线线路,一条串行数据线(SDA),一条串行时钟线(SCL);串行半双工通信模式的8位双向数据传输,位速率标准模式下可达100Kbit/s;一种电可擦除可编程只读存储器,掉电后数据不丢失,由于芯片能够支持单字节擦写,且支持擦除的次数非常之多,一个地址位可重复擦写的理论值为100万次,常用芯片型号有 AT24C02、FM24C02、CAT24C02等,其常见的封装多为DIP8,SOP8,TSSOP8等;
为了增加下直观,下面就简单的附一个以截图于Atmel公司生产的基于I2C的EEPROM-AT24C02的规格书。不再详细地展开说自己的认识了。

[图 I2C]

[图 I2C Flash]
二、SPI NorFlash
SPINorFlash,采用的是SPI 通信协议。有4线(时钟,两个数据线,片选线)或者3线(时钟,两个数据线)通信接口,由于它有两个数据线能实现全双工通信,因此比IIC通信协议的 IIC EEPROM的读写速度上要快很多。SPI NorFlash具有NOR技术Flash Memory的特点,即程序和数据可存放在同一芯片上,拥有独立的数据总线和地址总线,能快速随机读取,允许系统直接从Flash中读取代码执行;可以单字节或单字编程,但不能单字节擦除,必须以Sector为单位或对整片执行擦除操作,在对存储器进行重新编程之前需要对Sector或整片进行预编程和擦除操作。
NorFlash在擦写次数上远远达不到IIC EEPROM,并且由于NOR技术Flash Memory的擦除和编程速度较慢,块尺寸又较大,因此擦除和编程操作所花费的时间会很长;但SPI NorFlash接口简单,使用的引脚少,易于连接,操作方便,并且可以在芯片上直接运行代码,其稳定性出色,传输速率高,在小容量时具有很高的性价比,这使其很适合应于嵌入式系统中作为 FLASH ROM,所以在市场的占用率非常高。
常见到的S25FL128、MX25L1605、W25Q64等型号都是SPI NorFlash,其常见的封装多为SOP8,SOP16,WSON8,US0N8,QFN8、BGA24等。
这次自己要学习的开发板中所用的W25Q16也是SPI类型的Flash。这个类型的具体说明,就在下面描述W25Q16中进行吧。

[图 SPI NorFlash]
三、Parallel NorFalsh (CFI Flash)
ParallelNorFalsh,也叫做并行NorFlash,采用的Parallel接口通信协议。拥有独立的数据线和地址总线,它同样继承了NOR技术Flash Memory的所有特点;由于采用了Parallel接口,Parallel NorFalsh相对于SPI NorFlash,支持的容量更大,读写的速度更快,但是由于占用的地址线和数据线太多,在电路电子设计上会占用很多资源。Parallel NorFalsh读写时序类似于SRAM,只是写的次数较少,速度也慢,由于其读时序类似于SRAM,读地址也是线性结构,所以多用于不需要经常更改程序代码的数据存储。
常见到的S29GL128、MX29GL512、SST39VF020等型号都是Parallel NorFlash,其常见的封装多为TSSOP32、TSOP48、BGA64,PLCC32等。
这次就以旺宏电子的MX29GL512的规格书中的,例子为例,简约的看下引脚分布。

[图 MX29GL512-引脚图]
从引脚图中,可以看到此时的芯片中的各个引脚之间所使用的连线已经是非常的多了。毕竟是并行的,果然是连线多。

[图 MX29GL512-1]
这个引脚描述图和引脚结构图能让数据更加的清晰一点。

[图 Parallel NorFalsh]
四、Parallel NandFlash
ParallelNandFlash同样采用了Parallel接口通信协议,NandFlash在工艺制程方面分有三种类型:SLC、MLC、TLC。
NandFlash技术Flash Memory具有以下特点:以页为单位进行读和编程操作,以块为单位进行擦除操作;具有快编程和快擦除的功能,其块擦除时间是2ms,而NOR技术的块擦除时间达到几百ms;芯片尺寸小,引脚少,是位成本(bit cost)最低的固态存储器;芯片包含有坏块,其数目取决于存储器密度。坏块不会影响有效块的性能,但设计者需要有一套的坏块管理策略!
对比Parallel NorFalsh,NandFlash在擦除、读写方面,速度快,使用擦写次数更多,并且它强调更高的性能,更低的成本,更小的体积,更大的容量,更长的使用寿命。这使NandFlash很擅于存储纯资料或数据等,在嵌入式系统中用来支持文件系统。
其主要用来数据存储,大部分的U盘都是使用 NandFlash,当前NandFlash在嵌入式产品中应用仍然极为广泛,因此坏块管理、掉电保护等措施就需要依赖NandFlash使用厂家通过软件进行完善。
常见到的S34ML01G100、MX30LF2G18AC、MT29F4G08ABADA等型号都是Parallel NandFlash,其常见的封装多为TSOP48、BGA63、BGA107,BGA137等。
这次就以旺宏电子的MX30LF2G18AC为例吧。
这个引脚的封装有两种,第一种是48-TSOP,第二种是63-ball 9mmx11mm VFBGA。为了简介起见,就以第一种封装为例。

[图 MX30LF2G18AC-PIN]

[图 MX30LF2G18AC-Descriptions]

[图 Parallel NandFlash]
五、SPI NandFlash
SPINandFlash,采用了SPI NorFlash一样的SPI的通信协议,在读写的速度上没什么区别,但在存储结构上却采用了与Parallel NandFlash相同的结构,所以SPI nand相对于SPI norFlash具有擦写的次数多,擦写速度快的优势,但是在使用以及使用过程中会同样跟Parallel NandFlash一样会出现坏块,因此,也需要做特殊坏块处理才能使用;
SPINandFlash相对比Parallel NandFlash还有一个重要的特点,那就是芯片自己有内部ECC纠错模块,用户无需再使用ECC算法计算纠错,用户可以在系统应用当中可以简化代码,简单操作;
常见到的W25N01GVZEIG、GD5F4GQ4UBYIG、F50L1G41A等型号都是SPI NandFlash,其常见的封装多为QFN8、BGA24等。
文中就以华邦电子的W25N01GV为例吧。
这个引脚的封装有两种,第一种是WSON 8x6-mm;还有SOIC 300-mil,TFBGA 8x6-mm(5x5 or 6x4 Ball Array)。因为第一种封装最为简洁,就以第一种为示例吧。

[图 W25N01GV-PIN]

[图 W25N01GV-Descriptions]

[图 SPI NandFlash]
六、eMMC Flash
eMMC采用统一的MMC标准接口,自身集成MMC Controller,存储单元与NandFlash相同。针对Flash的特性,eMMC产品内部已经包含了Flash管理技术,包括错误探测和纠正,Flash平均擦写,坏块管理,掉电保护等技术。MMC接口速度高达每秒52MBytes,eMMC具有快速、可升级的性能,同时其接口电压可以是 1.8v 或者是 3.3v。
eMMC相当于NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND 供应商来说,同样的重要。
eMMC由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备(Nand Flash)及主控制器,所有都在一个小型的BGA 封装,最常见的有BGA153封装;我们通常见到的KLMAG8DEDD、THGBMAG8B4JBAIM、EMMC04G-S100等型号都是eMMC Flash。eMMCFlash存储容量大,市场上32GByte容量都常见了,其常见的封装多为BGA153、BGA169、BGA100等。
主要供应厂商有:三星半导体,东芝电子、海力士电子
好吧,我本来想去寻找这个第一款信号为KLMAG8DEDD这款芯片的资料的,不过好像这个找不到的,为了便于说明,于是也便直接去了三星半导体的官方网站进行查询。以这款KLMxGxGEAC-B001为例吧。

[图 eMMC-PIN]
因为这个引脚实在是太多了,也就先弄打出来吧。进行描述。
Pin NO | Name
A3 | DAT0
A4 | DAT1
A5 | DAT2
B2 | DAT3
B3 | DAT4
B4 | DAT5
B5 | DAT6
B6 | DAT7
K5 | RSTN
C6 | VDD
M4 | VDD
N4 | VDD
P3 | VDD
P5 | VDD
E6 | VDDF
F5 | VDDF
J10 | VDDF
K9 | VDDF
C2 | VDDI
M5 | CMD
M6 | CLK
C4 | VSS
E7 | VSS
G5 | VSS
H10 | VSS
K8 | VSS
N2 | VSS
N5 | VSS
P4 | VSS
P6 | VSS
下面直接用英文标注好了。
CLK: Clock input。时钟输入
CMD: A bidirectional signal used for device initialization and command transfers.
Command operates in two modes, open-drain for initialization and push-pull for fast command transfer.
DAT0-7: Bidirectional data channels. It operates in push-pull mode.
RST_n: H/W reset signal pin
VDDF(VCC): Supply voltage for flash memory
VDD(VCCQ): Supply voltage for memory controller
VDDi: Internal power node to stabilize regulator output to controller core logics
VSS: Ground connections

[图 eMMC-PIC]
七、UFS2.0
JEDEC在2013年9月发布了新一代的通用闪存存储器标准USF2.0,该标准下得闪存读写速度可以高达每秒1400MB,这相当于在两秒钟内读写两个CD光盘的数据,不仅比eMMC有更巨大的优势,而且它甚至能够让电脑上使用的闪存存储介质固态硬盘也相形见绌。UFS闪存规格采用了新的标准2.0接口,它使用的是串行界面,很像PATA、SATA的转换,并且它支持全双工运行,可同时读写操作,还支持指令队列。相对之下,eMMC是半双工,读写必须分开执行,指令也是打包,在速度上就已经是略逊一筹了,而且UFS芯片不仅传输速度快,功耗也要比eMMC5.0低一半,可以说是日后旗舰手机闪存的理想搭配。目前仅有少数的半导体厂商有提供封装成品,如三星、东芝电子等。
2013年9月,JEDEC发布了UFS 2.0的闪存存储标准,其最大的特点是采用串行数据传输,全双工模式,支持指令队列。相比EMMC读取写入分开进行的半双工模式,UFS的全双工模式意味着读取和写入可以同时进行。指令队列的加入意味着无需再向EMMC5.1之前的版本一样,每一条指令的提交必须等待前一条指令的完成。
UFS 2.0闪存读写速度强制标准为HS-G2(High speed GEAR2),可选标准为HS-G3。HS-G2 1Lane最高读写速度为2.9Gbps(约为360MB/s),2Lane最高读写速度为5.8Gbps(约为725MB/s)。可选标准HS-G3 1Lane最高读写速度为5.8Gbps(约为725MB/s),2Lane最高读写速度为11.6Gbps(约为1.45GB/s)。HS-G2 1Lane由于读写速度与EMMC5.1相比没有明显的优势,相应的商业产品较为罕见。
代表的芯片有:海力士的H28U64222MMR,东芝电子的THGBF7G9L4LBATR
典型厂家:三星半导体,东芝电子、海力士电子
八、UFS2.1
2016年3月,JEDEC发布了UFS 2.1的闪存存储标准。相比UFS2.0,速度标准没有任何变化,仍然为强制标准HS-G2,可选标准HS-G3。改进主要分为三部分:设备健康(包括预防性维护)、性能优化(包括指令优先和固件升级)和安全保护。设备健康信息包括剩余预留块和设备使用寿命信息,指令优先允许向紧急的任务分配更高的优先级,安全保护则支持操作系统和应用级别细粒度的写入保护(包括UFS控制器硬件级别加密)。
UFS2.1/UFS2.0采用相同的速率标准。
典型厂家:三星半导体、海力士电子
典型的芯片,比如说海力士的H28U62301AMR,三星的KLUDG8V1EE-B0C1,
这个越是到后面真心是发现资料的查找好难。很难找到规格书。这边就先不写了。
## 2、开发板中芯片
板子所用的芯片为华邦电子所生产的存储芯片,型号名为W25Q16。这个芯片在开发板当中,这个线路的连接方式可以参见下图。

[图 1 ]
从图中,是可以看到对于这类串行的Flash芯片的设计,添加的外围元件时比较少的,也就是添加了一个R25提供了上拉。
对于这个芯片的各个引脚,和功能的大致说明,于是也便直接以winbond的官方数据手册来进行阐述。只是在实际的芯片中,这个型号的芯片种类是比较多的,那就挑个W25Q16DV这个型号为例吧。
W25Q16DV的封装有以下几种,SOIC 150/208-mil;WSON 6x5-mm/USON 4X3-mm/USON 4X4-mm,还有PDIP 300-mil,WLCSP,SOIC 300-mil,SOIC 300-mil,TFBGA 8x6-mm,TFBGA 8x6-mm。为了方便起见,就以比较常见的PDIP封装为例展开好了。

[图 W25Q16DV-PIN]

[图 W25Q16DC-DES]
## 3、参考
[1] winbond.W25Q16DV的数据手册(3V 16M-BIT,SERIAL FLASH MEMORY WITH DUAL AND QUAD SPI)[EB/OL].[2016-05-23].
http://www.winbond.com.tw/resource-files/w25q16dv%20revk%2005232016%20doc.pdf
[2] lz_kwok.Flash芯片的种类与区别[EB/OL].[2016-07-26].
http://blog.csdn.net/lz_kwok/article/details/52032130
[3] IT之家.UFS 2.0 /UFS 2.1究竟有何区别?[EB/PL].[2017-5-8].
https://www.ithome.com/html/digi/307923.htm
[4] Saber__777.闪存和内存有什么区别?[EB/PL]
https://zhidao.baidu.com/question/1430154902012180899.html
[5] hubaba.Flash芯片你都认识吗?[EB/PL]
http://www.51hei.com/bbs/dpj-47203-1.html
# 三、总结
花了一大段的时间在整理这个内容,一方面是感觉到了原来内存的东西真多。另一方面也感觉到了内存技术是越来越强大了。集成的东西变多了。