嵌入式存储设备学习笔记

时间:2021-11-25 21:07:06

各种非易失性存储设备

ROM/PROM/EPROM/EEPROM

在NOR/NAND flash出现之前,主要的非易失性存储设备是EPROM和EEPROM。

  1. ROM(Read-Onl,y Memory):只读存储器,其特点是在制造过程中将资料以一特定光罩(mask)烧录于线路中,即存储器中的内容出厂即写好了。

  2. PROM(Programmable Read-Only Memory):一次性可编程只读存储器,数据写入永久保存,特点是可以让用户写一次,也只允许写一次,无法重新写入,如果数据写入错误,只能更换存储器了。

  3. EPROM(ErasableProgrammable Read-Only Memory): 可擦写可编程只读存储器,编程完成后,可以用强紫外线照射来擦除。 EPROM一般都有个硅胶片封装的透明窗口,用来进行紫外线擦除的,一般对准太阳光直射一段时间就可以擦除数据了,如图:嵌入式存储设备学习笔记

  4. EEPROM(Electrically Erasable Programmable Read-Only Memory):电可擦可编程只读存储器,信息可以通过高于普通电压的电压来擦除,可重新编程,故其使用寿命是一个很重要的设计参数。

在计算机发展初期,BIOS都是存放在ROM中的,其内部资料是在ROM的制造工序中烧录进去的,一旦烧录完成,用户只能验证资料是否正确,不能做任何修改。如果发现资料有错误,只能重新做一个,由于成本高,一般只用在大批量生产的场合。
后来人们发明了PROM,就是说从工厂中完成的PROM没有内部资料,用户可以编程一次(那会有的类似熔断的方式,物理性破坏了),其成本比ROM高,而且写入速度比ROM要慢,一般用于少量需求,或ROM量产前的验证。
EPROM的出现解决了PROM只能写一次的弊端,但是这货需要光擦,且写入资料后需要贴住窗口,防止紫外线照射。
由于EPROM操作不便,再后来主板上BIOS ROM芯片大部分都采用EEPROM,EEPROM不需要借助其他设备,以电信号来修改其内容。EEPROM属于双电压芯片,在跳线到on的位置可写,off的位置不可写。可以防止类似CIH这样的对BIOS进行修改的病毒,至今仍有不少主板采用EEPROM为BIOS芯片的程序存储芯片。
从奔腾时代开始,现代的电脑主板都是用NORFlash来作为BIOS的存储芯片,对比EEPROM,NORFlash的优势在于,容量大,速度快,且无需硬件支持,软件即可重写(EEPROM需要硬件电路支持重写)。

NOR FLASH/NAND FLASH

NOR Flash是Intel公司于1988首先开发出的技术,彻底改变了原先由EPROM / EEPROM一统天下的局面,紧接着1989年,东芝公司发表了NAND Flash结构,强调降低每bit的成本,更高的性能,像磁盘一样可以通过接口轻松升级等。
NOP Flash的特点是片内执行(XIP,Execute In Place,这也是linux内核的一个可选项之一),这样应用程序可以直接运行在Flash闪存内,不必把代码读到系统RAM中,NOR的传输效率很高,在1-4MB的小容量时具有很高的成本效益,但很低的写入和擦除速度大大影响了它的性能。而NAND提供极高的单元密度,写入擦除也很快。NAND需要驱动的支持,而NOR Flash是可以直接连接到cpu管脚上进行访问的,通常读取NOR的速度比NAND快一些,但NAND的写入速度比NOR快很多。

这里需要注意到一点,就是NOR Flash可以XIP,也就是说可以片上执行,而NAND Flash不可以片上执行,所以系统启动代码可以放在NOR Flash上,所谓的片上执行,实际上是指,cpu是否可以直接从读取到指令,进行译码并执行,由于NAND Flash用I/O口来串行存取数据,8个引脚用来传送控制,地址和数据信息,所以需要需要控制电路,cpu无法通过直接的发送一个地址,NAND Flash返回一个数据的方式获取指令,而NOR Flash是可以直接连接到cpu的地址总线上使用的,cpu发送一个地址,NOR Flash就可以返回一个数据,所以NOR Flash叫做可以片上执行的,而NAND Flash是不可以片上执行的。实际上如果在cpu上增加NAND Flash的硬件控制电路,也是可以实现XIP片上执行的,但NAND相对于NOR来说bit翻转的几率要高,一般需要EDC/ECC校验,在执行时同时要保证数据校验,所以不太适合作为片上执行的区域。

总结:
1. NOR Flash可以直接连接到cpu地址总线上当只读内存使用,而NAND Flash的访问需要额外的控制电路,故NOR Flash一般可用作XIP片上执行,而NAND Flash不可以。
2. NAND存储密度大,便宜,写速度比NOR高很多,而NOR Flash存储密度小,贵,写速度慢,所以一般数据存储常用NAND Flash。
3. 前面提到的ROM/PROM/EPROM/EEPROM/NOR Flash/NAND Flash,说到底都是属于ROM的一种。

嵌入式设备中的应用

  • Flash属于非易失性存储设备,而常用的内存,无论是SDRAM/DDR SDRAM/DDR2/DDR3等,都是断电后数据就没了。
  • FLASH内部存储是MOSFET,里面有个悬浮门,是真正的数据存储单元,在FLASH之前,EPROM就已经用到了悬浮门存储数据技术了。
  • 在FLASH中的数据,是以是否超过一个电压阀值来判断是0还是1的。
  • 在嵌入式设备中,一个常见的组合就是:用小容量的NOR Flash存储启动代码,如uboot,然后用大容量的NandFlash存储整个系统和用户数据。而一般嵌入式平台的启动流程就是:系统从NOR Flash启动后,初始化硬件,包括SDRAM等(uboot阶段),然后将Nand Flash上的Linux内核读取到内存中,然后跳转到SDRAM中区执行内核(解压到内存中的一般是zImage),在linux内核启动的最后,去Nand Flash上,挂在根文件,比如jffs2/yaffs2等系统,挂载完成后,运行初始化脚本,启动console交互,允许与内核交互。
  • Nand Flash根据内部每个数据单元存储一个数据还是多个数据分为SLC/MLS,前者就是每个数据单元存1bit,后者就是多bit,其原理就是将电平分等级。

嵌入式设备中常用的文件系统

一般嵌入式系统会使用NAND Flash来存储文件,启动代码或数据文件等,这就需要像管理文件系统一样管理NAND Flash,包括格式化,碎片手机,磁盘整理等。目前比较广泛使用在嵌入式中的系统包括: fat,jffs2,yaffs2,ext4等等。

  • Yaffs文件系统(Yet Another Flash File System)
    Yaffs文件系统是一个开源的专为NAND Flash设计的文件系统,对小页面支持很好。
  • 存储设备的驱动:
    嵌入式设备中,如果直接用了NAND,则应该会用到kernel/driver/mtd/nand下面的代码,如果用的是emmc,则应该会用到mmc_host下面的代码。

soc(System-on-a-Chip):

一般来说,soc成为系统级芯片/片上系统,其实际上也是一个芯片(就是黑黑的一小块),比如联科发的MT6582就是一个soc芯片,其外形如图:
嵌入式存储设备学习笔记
一般来说,soc芯片中含有:
1. cpu,时钟电路,定时器,中断控制器,串并行接口,IO端口
2. 存储器(易失/非易失),以及cache等。
还是以MT6582为例,此芯片中包括:
1. 四核的ARM@Cortex-A7 mpcoretm处理器。
2. 多标准视频加速器。
3. NAND接口。
4. 支持启动SLC NAND /eMMC(这个芯片本身应该不包含存储芯片,这里的支持指的是,如果是eMMC或NAND,会硬件将数据复制到RAM,然后执行)
5. 外接存储器接口
6. 还有各种算法相关功能,如汽车传感器的缺陷像素矫正,连续的视频自动对焦,人脸检测等等

DSP(Digital signal processing)

DSP是专做数字信号处理的芯片,运行速度快,具有专门的硬件乘法器,可以用来快速的实现各种数字信号处理算法, 指的应该是那块计算芯片,dsp厂商如mtk,指的是其是制造cpu的厂商,而soc指的是cpu加上各种东西封装成一个芯片,如mt6582。

MCP(Multi-Chip-Package)

多制层封装芯片,就是将多个芯片封装起来,如将两种芯片封装起来,一种是基于NOR闪存的MCP,可以完成XIP(片上执行)功能。另一种是NAND与DRAM结合,可以执行存储下载等。
eMcp是将eMMC + LPDDR2 DRAM封装起来,一般来说一个eMcp中有1个eMMC控制芯片+多个NAND Flash + 多个LPDDR2。

高通MSM8x25,MSM8x60,联发科MT6577,MT6589,MT6572等支持的都是eMCP形式;

PoP(package-on-package)

封装提叠层技术:将具有相同外形的多种芯片再次集成,组成多层。
高通的MSM8960,MSM8x60A,MSM8x30等支持的都是PoP的封装形式。

MMC卡:

MMC卡(Multimedia Card,多媒体卡),是一种快闪存储卡标准
,在1997年由西门子和SanDisk共同开发,基于东芝的NAND快闪记忆技术,因此比早期基于NOR快闪记忆技术的记忆卡(如CF卡)更小。1998年14加公司联合成立了MMC协会,目前已有超过84个成员。MMC也是将存储单元和控制单元做到了一个卡上,智能的控制器使得MMC保证兼容性和灵活性。MMC存储卡可分为MMC/SPI两种工作模式:

  • MMC模式:是标准的默认模式,具有MMC的全部特性。
  • SPI模式:这个模式是MMC协议的一个子集,主要用于只需要小数量的卡(1个)和低数据传输率的系统,这个模式花费最小,但性能就不如MMC了。

MMC卡的尺寸:
1. 24mm x 32mm x 1.5mm (正常尺寸,一张邮票差不多)
2. 24 mm × 18 mm × 1.4(小尺寸的多媒体卡或者RS-MMC)

MMC卡共有7针。

SD卡

SD卡(Secure Digital Memory Card, 安全数码卡)是一种基于半导体闪存工艺的存储卡,1999年由日本松下主导,2000年这几家公司发起成立了SD协会(Secure Digital Association 简称SDA),他比MMC卡多了一个进行数据著作权保护的暗号认证功能,写速度比MMC卡快4倍,达到2M/s。

  • SD卡是基于MMC格式发展而来的,大小与MMC卡差不多,厚了0.7mm以容纳更大容量的存储单元。
  • SD卡与MMC卡保持向上兼容,即MMC卡可以被新的SD设备存取,但SD卡不可被MMC设备存取。
  • SD卡在MMC7针基础上多加了2针,作为数据线。
  • 尺寸: 32mm x 24mm x 2.1mm

SD卡共有9针。

miniSD卡

miniSD卡尽管外心和接口形状与SD卡不同,但其接口等电器标准与SD卡是相同的,将其插入专用适配器,可以通过原来SD卡卡遭读写mini-SD卡。不过 mini-SD卡不具备防写入锁定功能。mini-SD卡11针,比SD卡的9针还多两个针,多出来是为未来扩展用的。

  • 尺寸:21.5×20x1.4mm
    mini-SD卡共有11针。

Micro SD Card

Micro SD Card 原名Trans-flash Card(TF卡),由SanDisk公司发明,2004年正式更名为Micro SD Card。TF卡与标准SD卡功能也是兼容的,将TF卡插入特定的转接卡中,可以当作标准SD卡或Mini SD卡来使用

  • 尺寸:15.0×11.0×1.0 mm

Micro SD卡共有8个引脚。

带HC的卡

如SDHC、microSDHC,都是与其响应标准兼容的,只不过这种卡的存储空间更大。现在市面上买到的上GB的卡,大多都是带HC的。不带HC的一般都是按MB算的。

存储卡的分类

嵌入式存储设备学习笔记
嵌入式存储设备学习笔记
嵌入式存储设备学习笔记

emmc

eMMC(Embedded Multi Media Card)也是一种使用兼容MMC协议的芯片,和MMC的区别如其名,eMMC经常被用于嵌入式环境中,而MMC一般用作外接设备的标准。eMMC = NAND flash + 控制器 + 标准封装接口。
上面提到的多种卡,其内部的存储设备基本上用的都是NAND flash, nand flash和上面这些卡的区别,就是nand flash是上面这些卡内部真正的存储单元。
emmc的特点:
1. 有四种尺寸:BGA153-11.5x13, BGA169-12x16, 12x18, 14x18
一般长相如图:
嵌入式存储设备学习笔记
2. eMMC内部可以很好对MLC/TLC进行管理,有ECC除错机制,区块管理,平均默写存储区块技术,低功耗管理等。
3. 厂商不必再为NAND Flash的大小/规格重新设计硬件了,直接用eMMC就好了。

  • 在以前,每次NAND技术换代的时候,手机客户端也要重新设计,手机制造商需要选择新的与NAND flash匹配的soc芯片,而soc厂商一般要针对这款NAND flash,重新设计soc芯片(主要是内部的nand flash ccontroller),这种方式十分麻烦。

  • 在推出emmc后,soc厂商只需要在芯片上加上一个可以与mmc标准通信的控制器(一般叫做sdmmc controller/sd controller),这个控制器可以支持某种/某几种emmc标准。同时emmc芯片封装好NAND flash,向外也提供一个统一的emmc 接口(如emmc 4.3/4.4),此时只要给soc芯片选定好一个emmc接口,连上二者即可通信了。

字库

功能机时代,很多手机程序,控制信息,字库信息是存储在一个专用芯片里面的,芯片中的主要部分是字库,所以一些售后和维修人员就习惯把这个存储芯片称作字库芯片,如今的字库芯片主要是手机上的那块eMMC芯片。
字库分为:
1. 原装专用字库: 如三星手机中,原厂生产针对相应型号专门使用的芯片。
2. 原装代用字库:同样是三星生产,在原装字库短缺情况下,代替原装字库的芯片,由于不是专门适配某型号机器的,所以在体积上,与原装字库存在差异(不过应该都是eMMC标准规格芯片4种种的一种)
3. 其他品牌字库:可以替代的其他品牌的字库。
一些字库外观是一样的,但上面写着用于某款手机,这样的字库实际上用的是同一个eMMC规格,只是中间的内部程序不一样,如果重写了eMMC内容,应该就可以换着使用了。
手机的串号是存在字库中的,妹的,所谓的串号不过是eMMC中的一个数字罢了。

传统的字库:
字符显示的时候,字符信息处理系统需要配有一个字符字模库,这个库是存储了字符的点阵信息,然后显示的时候根据一个编码,去字模库中找点阵图,然后才能显示出来。原始的字库,应该是存储字模和编码对应信息用的。

易失性存储设备(见[5])

SRAM和DRAM

RAM(Random Access Memory)易挥发性随机存取存储器,随机存储指的是,不论从什么位置读写,其存取时间是相等的(以前的磁带是不相等的),易挥发性指的是断电后数据会消失。
RAM又可分为SRAM和DRAM,二者基本原理都是用来存储电荷的。二者的不同点在于:
- SRAM(Static Random Access Memory)的结构较复杂,单位面积存储量少,存取速度快,一般用作高速缓存,上电时不需要刷新电路来保存内部的数据。SRAM采用触发器(flip-flop)构造存储,其存储单元结构如下图:
嵌入式存储设备学习笔记
- DRAM(Dynamic Random Access Memory)构造简单,单位面积存储电荷多,存储时间较SRAM慢,同时由于结构简单导致DRAM的电荷会随时间渐渐消失,因此需要有个在充电(Refresh)的动作保持电容存储的资料。DRAM采用电容结构存储,其存储单元结构如下图:
嵌入式存储设备学习笔记

DRAM结构简介

DRAM由于制造简单,高密度,适合作为主存。但由于内存是放在cpu之外的,从工厂出来的晶粒需要封装和组合后,才可以和CPU连接,因此从cpu到DRAM晶粒之间依据层级由大到小为channel > DIMM > rank > chip > bank > row/column。其层级见的关系见下图:
嵌入式存储设备学习笔记
1. channel: 一个channel一般指的是一对内存条,电脑上一般内存条的插口都是成对的,貌似是一对插口应该差同样的内存条,这一对插口就对应一个channel。
2. DIMM: 一个DIMM(Dual in-line Memory Module)就是我们市面上卖到的一个内存条。
3. rank: 内存条上面的那一排芯片,就叫一个rank,一个rank上的所有chip连接到同一个CS(chip select)。
4. chip: 内存条上面的一个黑色的封装芯片,就是一个chip。
嵌入式存储设备学习笔记
5. bank: chip以上是物理上可见的,chip以下就是芯片内不可见的了,一个chip分好多个bank。
嵌入式存储设备学习笔记
6. 每个bank又是各种行列的的组合,其中的每个小方块,都是一个存储单元。每一列(绿色)的下面都有一个红色的存储单元叫row buffer,是用来缓存从当前列中读出的某个数据的,读取以行为单位。

参考资料:
[1]. http://www.crifan.com/comparison_of_nand_and_nor/
[2]. http://baike.baidu.com/link?
[3]. http://blog.chinaunix.net/uid-26404697-id-3152290.htmlurl=uVQtIvttHl5OD1VUj2T6lEFqh_Dv_cO1OPzBkULH2vVErlKBfzISYJuQ2ftTffFArg6xFTLkNXY311pb_m9M6a
[4]. http://baike.baidu.com/link?url=wqYXPUhnB8WT-5BUX0mxUROQrx_qwAeP8qqq5trevVP-wNQhTh7GyvumaagI1Wk-iTb8zXmUVb_Th1pZXWpvFa
[5]. http://www.techbang.com/posts/18381-from-the-channel-to-address-computer-main-memory-structures-to-understand