LV16-02-常见存储器
本文主要是存储介质基础知识的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
linux内核 | linux-4.15(NXP官方提供) |
STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
- 通用
分类 | 网址 | 说明 |
官方网站 | https://www.arm.com/ | ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档 |
https://www.st.com/content/st_com/zh.html | ST官方网站,在这里我们可以找到STM32的相关文档 | |
https://www.stmcu.com.cn/ | 意法半导体ST中文官方网站,在这里我们可以找到STM32的相关中文参考文档 | |
http://elm-chan.org/fsw/ff/00index_e.html | FatFs文件系统官网 | |
教程书籍 | 《ARM Cortex-M3权威指南》 | ARM公司专家Joseph Yiu(姚文祥)的力作,中文翻译是NXP的宋岩 |
《ARM Cortex-M0权威指南》 | ||
《ARM Cortex-M3与Cortex-M4权威指南》 | ||
开发论坛 | http://47.111.11.73/forum.php | 开源电子网,正点原子的资料下载及问题讨论论坛 |
https://www.firebbs.cn/forum.php | 国内Kinetis开发板-野火/秉火(刘火良)主持的论坛,现也做STM32和i.MX RT | |
https://www.amobbs.com/index.php | 阿莫(莫进明)主持的论坛,号称国内最早最火的电子论坛,以交流Atmel AVR系列单片机起家,现已拓展到嵌入式全平台,其STM32系列帖子有70W+。 | |
http://download.100ask.net/index.html | 韦东山嵌入式资料中心,有些STM32和linux的相关资料也可以来这里找。 | |
博客参考 | http://www.openedv.com/ | 开源网-原子哥个人博客 |
http://blog.chinaaet.com/jihceng0622 | 博主是原Freescale现NXP的现场应用工程师 | |
cortex-m-resources | 这其实并不算是一个博客,这是ARM公司专家Joseph Yiu收集整理的所有对开发者有用的官方Cortex-M资料链接(也包含极少数外部资源链接) |
- STM32
STM32 | STM32 HAL库开发实战指南——基于F103系列开发板 | 野火STM32开发教程在线文档 |
STM32库开发实战指南——基于野火霸道开发板 | 野火STM32开发教程在线文档 |
- SD卡
SD Association | 提供了SD存储卡和SDIO卡系统规范 |
点击查看相关文件下载
STM32F103xx英文数据手册 | STM32F103xC/D/E系列的英文数据手册 |
STM32F103xx中文数据手册 | STM32F103xC/D/E系列的中文数据手册 |
STM32F10xxx英文参考手册(RM0008) | STM32F10xxx系列的英文参考手册 |
STM32F10xxx中文参考手册(RM0008) | STM32F10xxx系列的中文参考手册 |
Arm Cortex-M3 处理器技术参考手册-英文版 | Cortex-M3技术参考手册-英文版 |
STM32F10xxx Cortex-M3编程手册-英文版(PM0056) | STM32F10xxx/20xxx/21xxx/L1xxxx系列Cortex-M3编程手册-英文版 |
SD卡相关资料——最新版本 | 有关SD卡的一些资料可以从这里下载 |
SD卡相关资料——历史版本 | 有关SD卡的一些历史版本资料可以从这里下载,比如后边看的SD卡2.0协议 |
SD 2.0 协议标准完整版 | 这是一篇关于SD卡2.0协议的中文文档,还是比较有参考价值的,可以一看 |
一、存储介质
1.基本概念
所谓的存储介质是指用于存储数据的载体,比如纸墨组合、软盘、CD光盘、DVD光盘、机械硬盘、闪存盘等。按照物理材料的不同,可以将存储介质分为四大类,分别为光学存储介质、半导体存储介质、磁性存储介质和其他存储介质。
2. 光学存储介质
光学存储简称光存储,主要是由光盘表面的介质来实现或影响数据存储的,光盘上存在很多凹凸不平的微观小坑,激光照射到上面会产生不同的反射,通过技术处理再转化为0、1的数字信号形成了光存储。光盘不反射激光的点代表着那里是一个小坑,主机识别它为一个“1”;光盘反射激光回来的那个点,主机识别它为“0”。所谓的光盘是一个统称,包括CD和DVD等光盘介质,靠配套光驱等主机读取或写入数据。
从光盘是否可刻录的特性来分,一般又可以将光盘分为两类,即只读型光盘,另一类则是可刻录型光盘。刻录光盘的概念原理是这样的:光盘在刻录时,通过激光强度的变化在光盘介质上烧录出不同的凹凸点。
3. 磁性存储介质
磁性存储介质指存储器的存储材料采用磁性材料,该存储器系统一般由磁头、磁性存储介质、电路和伺服机械等部分组成。
机械硬盘HDD就是以磁性存储介质来存储数据的,其典型组成是“马达+磁头+磁盘”的机械结构,以“磁头+马达”的方式在磁盘上进行寻址读取或写入数据。
4. 半导体存储介质
半导体存储介质属于一种特殊的固态存储介质,主要包括易失性半导体介质(DRAM、SRAM)、非易失性半导体介质(FLASH、EEPROM、PROM、EPROM等)和新型介质(包括3D XPonit、MRAM、RRAM、FRAM、PCM等)。
目前,半导体存储介质的主要方向为FLASH、3D XPonit、MRAM、RRAM等,其中FLASH应用比较广泛。
当前闪存生产供应商主要有Samsung(三星)、Micron(美光)、东芝铠侠、WD&Sandisk(西数&闪迪)、长江存储、SK Hynix(现代海力士)等。
二、常见的存储器
1. 分类
存储器是计算机结构的重要组成部分。存储器是用来存储程序代码和数据的部件,有了存储器计算机才具有记忆功能。基本的存储器种类见图基本存储器种类。
存储器按其存储介质特性主要分为“易失性存储器”和“非易失性存储器”两大类。其中的“易失/非易失”是指存储器断电后,它存储的数据内容是否会丢失的特性。由于一般易失性存储器存取速度快,而非易失性存储器可长期保存数据,它们都在计算机中占据着重要角色。在计算机中易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。
2. 易失性存储器
RAM,即“Random Access Memory”,被译为随机存储器。所谓“随机存取”,指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。这个词的由来是因为早期计算机曾使用磁鼓作为存储器,磁鼓是顺序读写设备,而 RAM 可随读取其内部任意地址的数据,时间都是相同的,因此得名。它是一个与CPU直接交换数据的内部存储器,它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。实际上现在 RAM 已经专门用于指代作为计算机内存的易失性半导体存储器。
根据 RAM 的存储机制,又分为动态随机存储器 DRAM(Dynamic RAM) 以及静态随机存储器SRAM(Static RAM) 两种。SRAM常用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。DRAM则常用来作为图形系统的帧缓冲区。
2.1 DRAM
动态随机存储器 DRAM 的存储单元以电容的电荷来表示数据,有电荷代表 1,无电荷代表 0,见下图:
但时间一长,代表 1 的电容会放电,代表 0 的电容会吸收电荷,因此它需要定期刷新操作,这就是“动态 (Dynamic)”一词所形容的特性。刷新操作会对电容进行检查,若电量大于满电量的 1/2,则认为其代表 1,并把电容充满电;若电量小于 1/2,则认为其代表 0,并把电容放电,以此来保证数据的正确性 。
2.1.1 SDRAM
根据 DRAM 的通讯方式,又分为同步和异步两种,这两种方式根据通讯时是否需要使用时钟信号来区分。如下图,是一种利用时钟进行同步的通讯时序,它在时钟的上升沿表示有效数据。
由于使用时钟同步的通讯速度更快,所以同步 DRAM 使用更为广泛,常见的DRAM都采用同步方式 , 被称为SDRAM(Synchronous DRAM)。
2.1.2 DDR SDRAM
双倍数据速率同步 DRAM(Double Data-Rate Synchronous DRAM),中文名为“双倍数据流SDRAM”。为了进一步提高 SDRAM 的通讯速度,人们设计了 DDR SDRAM 存储器 (Double Data RateSDRAM)。它的存储特性与 SDRAM 没有区别,但 SDRAM 只在上升沿表示有效数据,在 1 个时钟周期内,只能表示 1 个有数据;而 DDRSDRAM 在时钟的上升沿及下降沿各表示一个数据,也就是说在 1 个时钟周期内可以表示 2 位数据,在时钟频率同样的情况下,提高了一倍的速度。
至于 DDRII 和 DDRIII,它们的通讯方式并没有区别,主要是通讯同步时钟的频率提高了。当前个人计算机常用的内存条是 DDRIII SDRAM 存储器,在一个内存条上包含多个 DDRIII SDRAM 芯片。
2.1.3 不同种类SDRAM
种类 | 特点 |
---|---|
普通SDRAM | 在上升沿时同步数据 |
DDRII SDRAM | 在上升沿及下降沿都同步数据, 时钟极限频率800MHz |
DDRIII SDRAM | 在上升沿及下降沿都同步数据, 时钟极限频率1600MHz |
2.2 SRAM
静态随机存储器 SRAM 的存储单元以锁存器来存储数据,见下图:
这种电路结构不需要定时刷新充电,就能保持状态 (当然,如果断电了,数据还是会丢失的),所以这种存储器被称为“静态 (Static)” RAM。 SRAM 是利用双稳态触发器来保存信息的,只要不掉电,信息是不会丢失的。因此存取速度快,但是体积大,功耗大,成本高,适用于CPU的L1cache 和 L2cache(一级缓存、二级缓存),寄存器等。即使有干扰来扰乱电压,当干扰消除时,电路就会恢复到稳定值。
同样地, SRAM 根据其通讯方式也分为同步 (SSRAM) 和异步 SRAM,相对来说,异步 SRAM 用得比较广泛。下图是一种异步的通讯时序,它不需要时钟,但是对于一些信号的保持时间却有一定的要求。
2.3 DRAM 与 SRAM 的应用场合
对比 DRAM 与 SRAM 的结构,可知 DRAM 的结构简单得多,所以生产相同容量的存储器, DRAM的成本要更低,且集成度更高。而 DRAM 中的电容结构则决定了它的存取速度不如 SRAM ,它们的特性对比如下:
特性 | DRAM | SRAM |
---|---|---|
存取速度 | 较慢 | 较快 |
集成度 | 较高 | 较低 |
生产成本 | 较低 | 较高 |
是否需要刷新 | 是 | 否 |
所以在实际应用场合中, SRAM 一般只用于 CPU 内部的高速缓存 (Cache),而外部扩展的内存一般使用 DRAM。在 STM32 系统的控制器中,只有STM32F429 型号或更高级的芯片才支持扩展SDRAM,其它型号如 STM32F1、 STM32F2 及 STM32F407 等型号只能扩展 SRAM。
2. 非易失性存储器
非易失性存储器种类非常多,半导体类的有 ROM 和 FLASH,而其它的则包括光盘、软盘及机械硬盘。
2.1 ROM存储器
ROM,即“Read Only Memory”的缩写,意为只能读的存储器。由于技术的发展,后来设计出了可以方便写入数据的 ROM,而这个“Read Only Memory”的名称被沿用下来了,现在一般用于指代非易失性半导体存储器,包括后面介绍的 FLASH 存储器,有些人也把它归到 ROM 类里边。 它一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变。计算机中的ROM主要是用来存储一些系统信息,或者启动程序BIOS程序,这些都是非常重要的,只可以读一般不能修改,断电也不会消失。
ROM存储器又可以分为以下几类:
种类 | 特性 |
---|---|
MASK ROM | 出厂时固化, 不可修改 |
OTPROM | 用户可写入一次, 之后不可修改 |
EPROM | 可重复擦写, 需要使用专用紫外线照射设备擦除 |
EEPROM | 可重复擦写, 电擦除, 使用方便 |
2.1.1 MASK ROM
MASK(掩膜) ROM 就是正宗的“Read Only Memory”,存储在它内部的数据是在出厂时使用特殊工艺固化的,生产后就不可修改,其主要优势是大批量生产时成本低。当前在生产量大,数据不需要修改的场合,还有应用。
2.1.2 OTPROM
OTPROM(One Time Programable ROM) 是一次可编程存储器。这种存储器出厂时内部并没有资料,用户可以使用专用的编程器将自己的资料写入,但只能写入一次,被写入过后,它的内容也不可再修改。在 NXP 公司生产的控制器芯片中常使用 OTPROM 来存储密钥;在 STM32F429 芯片中也具有一部分 OTPROM 空间。
2.1.3 EPROM
EPROM(Erasable Programmable ROM) 是可重复擦写的存储器,它解决了 PROM 芯片只能写入一次的问题。这种存储器使用紫外线照射芯片内部擦除数据,擦除和写入都要专用的设备。现在这种存储器基本淘汰,被 EEPROM 取代。
2.1.4 EEPROM
EEPROM(Electrically Erasable Programmable ROM) 是电可擦除存储器。 EEPROM 可以重复擦写,它的擦除和写入都是直接使用电路控制,不需要再使用外部设备来擦写。而且可以按字节为单位修改数据,无需整个芯片擦除。现在主要使用的 ROM 芯片都是 EEPROM。
2.2 FLASH存储器
FLASH 存储器又称为闪存,它也是可重复擦写的储器,部分书籍会把 FLASH 存储器称为 FLASH ROM,但它的容量一般比 EEPROM 大得多,且在擦除时,一般以多个字节为单位。如有的 FLASH存储器以 4096 个字节为扇区,最小的擦除单位为一个扇区。根据存储单元电路的不同, FLASH存储器又分为 NOR FLASH 和 NAND FLASH.
2.2.1 NOR FLASH
- NOR FLASH :NOR FLASH的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NOR FLASH有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在NOR Flash上可以直接运行程序,所以NOR FLASH可以直接用来做boot,采用NOR FLASH启动的时候会把地址映射到0x00上。写入数据时可以按字节写入。比如说STM32的内部FLASH就是NOR FLASH,还有我们后边会学习的W25Q128等。
2.2.2 NAND FLASH
- NAND FLASH:NAND FLASH没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR FLASH来运行启动代码。写入数据时必须以块或者扇区为单位进行读写。
2.2.3 特性对比
NOR_FLASH 与 NAND_FLASH 特性对比
特性 | NOR FLASH | NAND FLASH |
---|---|---|
同容量存储器成本 | 较贵 | 较便宜 |
集成度 | 较低 | 较高 |
介质类型 | 随机存储 | 连续存储 |
地址线和数据线 | 独立分开 | 共用 |
擦除单元 | 以“扇区/块” 擦除 | 以“扇区/块” 擦除 |
读写单元 | 可以基于字节读写 | 必须以“块” 为单位读写 |
读取速度 | 较高 | 较低 |
写入速度 | 较低 | 较高 |
坏块 | 较少 | 较多 |
是否支持XIP | 支持 | 不支持 |
NOR 与 NAND 的共性是在数据写入前都需要有擦除操作,而擦除操作一般是以“扇区/块”为单位的。而 NOR 与 NAND 特性的差别,主要是由于其内部“地址/数据线”是否分开导致的。
由于 NOR 的地址线和数据线分开,它可以按“字节”读写数据,符合 CPU 的指令译码执行要求,所以假如 NOR 上存储了代码指令, CPU 给 NOR 一个地址, NOR 就能向 CPU 返回一个数据让CPU 执行,中间不需要额外的处理操作。而由于 NAND 的数据和地址线共用,只能按“块”来读写数据,假如 NAND 上存储了代码指令,CPU 给 NAND 地址后,它无法直接返回该地址的数据,所以不符合指令译码要求。 表 NOR_FLASH 与 NAND_FLASH 特性对比 中的最后一项“是否支持 XIP”描述的就是这种立即执行的特性 (eXecute In Place)。
若代码存储在 NAND 上,可以把它先加载到 RAM 存储器上,再由 CPU 执行。所以在功能上可以认为 NOR 是一种断电后数据不丢失的 RAM,但它的擦除单位与 RAM 有区别,且读写速度比RAM 要慢得多。
另外, FLASH 的擦除次数都是有限的 (现在普遍是 10 万次左右),当它的使用接近寿命的时候,可能会出现写操作失败。由于 NAND 通常是整块擦写,块内有一位失效整个块就会失效,这被称为坏块,而且由于擦写过程复杂,从整体来说 NOR 块块更少,寿命更长。由于可能存在坏块,所以 FLASH 存储器需要“探测/错误更正 (EDC/ECC)”算法来确保数据的正确性。
由于两种 FLASH 存储器特性的差异, NOR FLASH 一般应用在代码存储的场合,如嵌入式控制器内部的程序存储空间。而 NAND FLASH 一般应用在大数据量存储的场合,包括 SD 卡、 U 盘以及固态硬盘(SSD)等,都是 NAND FLASH 类型的。
三、 eMMC?
常见的还有一种叫eMMC,全称为embeded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand flash和Nand flash控制器组成,以BGA方式封装在一款chip上。简单说就是NAND闪存+闪存控制芯片+标准接口封装。
eMMC特点就是功耗低,容量小,随机读写性能差.体积超小、低复杂度、高度集成、低布线难度。eMMC基于闪存(NAND FLASH),其作用类似于硬盘。它广泛应用于平板电脑、手机的机身内存。
四、单片机中的FLASH和SRAM
我们在进行STM32芯片选型的时候,会看到这样的参数:
比如这里,我们使用的STM32F103ZE系列芯片,有512KB的Flash和64KB的SRAM,这是什么意思呢?
在STM32中 SRAM 及 FLASH 是作为内存和程序存储空间的。我们平时使用电脑,会考虑内存大小,有4GB、8GB、16GB等,也会看到硬盘的大小,512GB、1TB等。在单片机中,SRAM就类似于内存条,整个程序中,所用到的需要被改写的量,都存储在RAM中,“被改变的量”包括全局变量、局部变量、堆栈段。Flash用来存储程序,存放指令代码和一些固定数值,程序运行后不可改动的那些东西。