行情
HOME
行情
正文内容
nand引脚数量 SD NAND 的 SDIO在STM32上的应用详解(上篇)
发布时间 : 2024-11-26
作者 : 小编
访问数量 : 23
扫码分享至微信

SD NAND 的 SDIO在STM32上的应用详解(上篇)

目录

上篇:

一.SDIO简介

二.SD卡简介/内部结构

1.SD卡/SD NAND引脚

2.SD卡寄存器

3.FLASH存储器

三.SDIO总线拓扑

中篇:

四.SDIO功能框图(重点)

1.SDIO适配器

2.控制单元

3.命令通道(重点)

4.数据通道

五.命令与响应

1.命令格式

2.命令类型

3.命令描述

4.响应类型

六.SD卡/SD NAND功能描述(重重点)

1.操作条件确认

2.卡识别模式

3.数据传输模式

下篇:

七.SDIO外设结构体

1.SDIO初始化结构体

2.SDIO命令初始化结构体

3.SDIO数据初始化结构体

八.SD卡读写测试实验

1.硬件设计

2.代码讲解

3.实验结果

一.SDIO简介

SDIO (Secure Digital Input and Output)全称安全数字输入/输出接口,在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和CE-ATA设备间提供了操作接口。

多媒体卡(MMC)

MMC(MultiMedia Card)卡由西门子公司和首推CF的SanDisk于1997年推出多媒体卡(MMC)是一种小型(24x32或18x1.4mm)可擦除固态存储卡,其全称为Multi-Media Card,特别应用于移动电话和数字影像及其他移动终端中。

SD卡:(Secure Digital Memory Card)

SD卡是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。SD卡数据传送和物理规范由MMC发展而来,大小和MMC差不多,但是容纳更大容量的存贮单元。SD卡与MMC卡保持着向上兼容,也就是说,MMC可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。**

应用:SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。因此不少数码相机也开始支持SD卡。

SD I/O 卡

本身不是用于存储的卡,它是指利用 SDIO 传输协议的一种外设。比如 Wi-Fi Card,它主要是提供 Wi-Fi 功能,有些 Wi-Fi 模块是使用串口或者 SPI 接口进行通信的,但 Wi-Fi SDIO Card 是使用 SDIO 接口进行通信的,一般设计 SD I/O 卡是可以插入到 SD 的插槽

CE-ATA设备

CE-ATA 一种基于为了节省接口IO数量,专为轻薄 笔记本硬盘 设计的笔记本硬盘高速通讯接口。 一种使用MMC接口界面,ATA指令集的笔记本电脑 硬盘接口

结论:MMC卡是SD卡的前身,也就是说SD将取代MMC卡的地位,MMC卡也用的越来越少,所以我们后面只讲SD卡.

SDIO的主要功能:(关于不是SD卡的就不介绍了)1.与SD存储卡规格版本2.0全兼容(向前兼容)2.数据和命令输出使能信号,用于控制外部双向驱动器。

SDIO外设挂载在STM32的AHB总线。

这样一来,STM32(主机),就可以通过AHB总线,控制SDIO外设的寄存器进而控制SDIO外设读/写SD卡,SDIO外设向SD卡传输数据,或者向SD卡接收数据可以使用DMA进行传输(这样可以省去很多繁琐的步骤后面再讲)

当前版本的SDIO在同一时间里只能支持一个SD卡(这是ST公司限制的)

二.SD卡简介/内部结构

SD卡是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。SD卡数据传送和物理规范由MMC发展而来,大小和MMC差不多,但是容纳更大容量的存贮单元。SD卡与MMC卡保持着向上兼容,也就是说,MMC可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。**

应用:SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。因此不少数码相机也开始支持SD卡。

SD卡采用的是采用了NandFlash存储器,稍后解释NandFlash与NorFlash的区别。

1.卡容量

标准容量 SD 卡,支持最大 2GB 的容量。所有的物理规格文档都会定义这种。

高容量 SD 卡(SDHC),支持超过 2GB 的容量。本文档解释的规格最大为 32GB 容量。只有 SDIO支持 2.0 协议才能够识别这种高容量 SD 卡(而SDIO外设正好最高支持到2.0协议)。

STM32F10x 系列控制器只支持 SD 卡规范版本 2.0,即只支持标准容量 SD 和高容量SDHC 标准卡,不支持超大容量 (大于32GB)SDXC 标准卡,所以STM32可以支持的最高卡容量是 32GB。

2.速度等级我们定义了 4 个速度等级,来表示卡的最小速率:(实际上目前最高 Class10)● Class 0 – 这种卡不定义具体性能,代表了这个规范出来之前的所有卡● Class 2 – 最小 2MB/s 的性能● Class 4 – 最小 4MB/s 的性能● Class 6 – 最小 6MB/s 的性能● Class 8 – 最小 8MB/s 的性能● Class 10 – 最小 10MB/s 的性

SD卡的内部构造:

电源检测单元保证 SD 卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;

1.SD卡/SD NAND引脚

1)SD卡引脚

SD 卡使用 9-pin 接口通信,其中 3 根电源线、1 根时钟线、1 根命令线和 4 根数据线,具体说明如下:

CLK:时钟线,由 SDIO 主机产生,即由 STM32 控制器输出,最高 25MB/s 的接口速度(使用4条并行数据线);

CMD:命令控制线,SDIO 主机通过该线发送命令控制 SD 卡,如果命令要求 SD 卡提供应答(响应),SD 卡也是通过该线传输应答信息(即命令响应都是通过CMD命令控制线来串行传输的);

D0-3:数据线,传输读写数据;SD 卡可将 D0 拉低表示忙状态; VDD、VSS1、VSS2:电源和地信号。

2.SD卡寄存器

卡控制单元控制 SD 卡的运行状态,它包括有 8 个寄存器,接口驱动器控制 SD 卡引脚的输入输出

SD 卡总共有 8 个寄存器,用于设定或表示 SD 卡信息,这些寄存器只能通过对应的命令访问(STM32主机通过驱动SDIO外设通过CMD命令线向从机SD卡发送命令),SDIO 定义了 64 个命令,每个命令都有特殊意义,可以实现某一特定功能,SD 卡接收到命令后,根据命令要求对 SD 卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现 SD 卡的控制以及读写操作。

1.CID 寄存器(重点了解)卡识别(CID)寄存器是一个 128 位的寄存器。包含了卡的识别信息,用于卡识别解析(具有唯一性)。每个读/写卡都有一个特殊的识别号。CID 寄存器的结构如下:

2.RCA 寄存器(重点了解)可写的 16 位SD卡相对地址寄存器,在SD卡的初始化期间,由SD卡向外发布的卡地址。这个地址用于卡初始化进程之后,主机同卡之间的交互寻址。(在主机向SD卡读写数据时,就是发送CMD7选择/取消选择 RCA 地址卡,就是靠RCA来确定主机与哪张卡通信)为啥不用上面的CID呢 ?答:因为它太长了128位呢,仅此而已

3.CSD 寄存器(2.0)CSD V2.0 只适用于高容量

4.SCR 寄存器作为 CSD 寄存器的补充,另一个配置寄存器称为 SD 卡配置寄存器(SCR)。SCR 提供了 SD 卡的特殊功能的信息。SCR 是一个 64bit 的寄存器,这个寄存器应该由 SD 厂家设置。

5.OCR 寄存器(重点了解)

32 位的操作条件寄存器(OCR)存储了卡的 VDD 电压描述。另外,还包括了状态信息位。如果卡的上电程序完成,一个状态位会被设置。寄存器还包括另一个状态位,在设置上电状态位后,用来表明卡的容量状态。

Bit31 – 卡上电状态位(busy),这个状态位在卡的上电流程完成后设置。Bit30 – 卡容量状态位(CCS),如果是高容量卡,设置为 1,如果是标准卡,设置为 0。

卡容量状态位只有在上电流程完成,且 Bit31 设置为 1 之后才有效。主机可以读取这个状态位来判断卡的种类

上面这些寄存器的只要了解即可,后面用的不多,等后面用到再讲这样就能有个更深刻的认识。

3.FLASH存储器

1)FLASH简介FLSAH 存储器又称闪存,它与 EEPROM 都是掉电后数据不丢失的存储器,但 FLASH存储器容量普遍大于 EEPROM,现在基本取代了它的地位。我们生活中常用的 U 盘、SD卡、SSD 固态硬盘以及我们STM32 芯片内部用于存储程序的设备,都是 FLASH 类型的存储器。在存储控制上,最主要的区别是 FLASH 芯片只能一大片一大片地擦写,而在“I2C章节”中我们了解到 EEPROM 可以单个字节擦写。

2)NOR FLASH 和 NAND FLASH的区别FLASH 存储器又分为 NOR FLASH 和 NAND FLASH

NOR 与 NAND 的共性是在数据写入前都需要有擦除操作,而擦除操作一般是以“扇区/块”为单位的。

而 NOR 与 NAND 特性的差别,主要是由于其内部“地址/数据线”是否分开导致的。由于 NOR 的地址线和数据线分开,它可以按“字节”读写数据,符合 CPU 的指令译码执行要求,而由于 NAND 的数据和地址线共用,只能按“块”来读写数据,所以不符合CPU指令译码要求。

所以NOR FLASH 一般应用在代码存储的场合,如嵌入式控制器内部的程序存储空间。

而 NAND FLASH 一般应用在大数据量存储的场合,包括 SD 卡、U 盘以及固态硬盘等,都是 NAND FLASH 类型的。

总结一句话:NOR FLASH贵而精,NAND FLASH大而便宜

所以我们的SD卡用 NAND FLASH 作为存储单元

存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输

三.SDIO总线拓扑

总线上的通信是通过传送命令和数据实现。在SD卡总线上的基本操作是命令/响应结构(主机发送命令给SD卡,SD卡是否进行响应,主机发生命令和SD卡响应都是通过命令线(CMD)传输的(有一个响应例外等下说)),这样的总线操作在命令或总线机制下实现信息交换。

在SD/SDIO存储器卡上传送的数据是以数据块的形式传输;在MMC上传送的数据是以数据块或数据流的形式传输;

SD 卡总线有一个主机,多个SD卡,时钟线(CLK),电源(VDD)和地信号(VSS)是所以卡共用。命令线(CMD)和数据线(DAT0-3)信号是根据每张卡的。

理论上主机可以与多张卡进行数据交互,虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独 SD 总线应该连接一个单独的 SD 卡。即STM32只能接一张SD卡

SDIO 不管是从主机控制器向 SD 卡传输,还是 SD 卡向主机控制器传输都只以 CLK 时钟线的上升沿为有效。SD 卡操作过程会使用两种不同频率的时钟同步数据:识别卡阶段:时钟频率 FOD,最高为 400kHz数据传输模式:时钟频率FPP,默认最高为 25MHz如果通过相关寄存器配置使 SDIO 工作在高速模式,此时数据传输模式最高频率为 50MHz

为什么卡识别阶段的频率低?卡识别的时候为了兼容识别不同版本的SD卡

SD 总线通信是基于命令和数据传输的。通讯由一个起始位(“0”),由一个停止位(“1”)终止,SD 通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。

SD 数据是以块形式传输的,SDHC 卡数据块长度一般为 512 字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要 CRC 位来校验数据。CRC 位由 SD卡系统硬件生成。STM32 控制器可以控制使用单线或 4 线传输(D0-D3)。

SD 数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测 SD 卡忙状态,因为 SD 卡在接收到数据后存储到存储区(NandFlash)过程需要一定操作时间。SD 卡忙状态通过把 D0 线拉低表示。

数据传输:

使用 4 数据线(D0~D3)传输时,每次传输 4bit 数据,每根数据线都必须有起始位、终止位以及CRC 位,CRC 位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0 线反馈给主机。SD 卡有两种数据包格式。

1.常规数据(8bit 宽):常规数据发送是先低字节,再高字节的顺序,但是每个字节则是先高位后低位

数据位在四线顺序排列发送,DAT3 数据线发较高位,DAT0 数据线发较低位。

2.宽位数据(SD 存储寄存器):宽位数据从高位开始传输。

对 SD 卡而言宽位数据包发送方式是针对 SD 卡 SSR(SD 状态)寄存器内容发送的,SSR 寄存器总共有 512bit,在主机发出ACMD13 命令后(当然在发送ACMD13 之前需要发送CMD55 ) SD 卡将 SSR 寄存器内容通过数据线发送给主机。

【本文转载自CSDN,作者:rivencode】

全文目录内容分为三篇【上/中/下】原文链接跳转如下:

SD NAND 的 SDIO在STM32上的应用详解(上篇): http://www.longsto.com/news/58.html

SD NAND 的 SDIO在STM32上的应用详解(中篇): http://www.longsto.com/news/59.html

SD NAND 的 SDIO在STM32上的应用详解(下篇): http://www.longsto.com/news/60.html

智能座舱之存储篇第三篇---NAND Flash 一眼就看明白了

上期内容我们重点说了NAND FLASH本身的一些特殊性,比如写之前要进行擦除,而且存在坏块的可能性性,所以很多车厂在评估NAND FLASH的时候,会评估目前容量的冗余量是多少,要保障有足够多的空间去预防坏块的产生后的数据搬移。

这期内容重点说说NAND FLASH的一些操作特性,怎么进行控制和读取的。这期的内容有点硬核,需要有一些专业知识的人进行阅读,科普类的文章咱们下期继续。

NAND FLASH的硬件特性介绍

上图是镁光 NAND FLASH MT29F1G08ABAEAH4的引脚(Pin)所对应的功能,简单翻译如下:

1. I/O0 ~ I/O7:用于输入地址/数据/命令,输出数据

2. CLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能

3. ALE:Address Latch Enable,地址锁存使能,在输入地址之前,要先在模式寄存器中,设置ALE使能

4. CE#:Chip Enable,芯片使能,在操作Nand Flash之前,要先选中此芯片,才能操作

5. RE#:Read Enable,读使能,在读取数据之前,要先使CE#有效。

6. WE#:Write Enable,写使能,在写取数据之前,要先使WE#有效。

7. WP#:Write Protect,写保护

8. R/B#:Ready/Busy Output,就绪/忙,主要用于在发送完编程/擦除命令后,检测这些操作是否完成,忙,表示编程/擦除操作仍在进行中,就绪表示操作完成.

9. Vcc:Power,电源

10. Vss:Ground,接地

11. N.C:Non-Connection,未定义,未连接。

实际项目的NAND FLASH原理图

上图中我们可以发现有两个地方需要上拉电阻R/B#:、WP#,其他都是CPU同nand flash直接相连接。通过查询flash 的datasheet可以发现,这两个引脚是开漏极输出,需要上拉电阻。

而且可以看到电路设计中WP#引脚一端接上拉电阻,一端通过二极管和0欧姆电阻连接到CPU复位引脚,CPU主芯片平台的复位是低电平复位,WP#引脚是低电平的时候写保护有效,这样做的目的就是,在复位期间,即CPU复位引脚为低电平期间此时WP#引脚也为二极管电压(0.7V)为低电平,为写保护状态,在复位期间,CPU引脚状态不定,容易对flash进行误操作。这样做的目的就是硬件实现在CPU复位期间,flash是写保护状态,不允许写入的。

很多时候掉电产生的擦除数据,导致数据丢失无法开机、无法保存掉电记忆等等问题都可以使用这个方案来对策解决问题。

为何需要ALE和CLE

比如命令锁存使能(Command Latch Enable,CLE)和地址锁存使能(Address Latch Enable,ALE),那是因为,Nand Flash就8个I/O,而且是复用的,也就是,可以传数据,也可以传地址,也可以传命令,为了区分你当前传入的到底是啥,所以,先要用发一个CLE(或ALE)命令,告诉nand Flash的控制器一声,我下面要传的是命令(或地址),这样,里面才能根据传入的内容,进行对应的动作。否则,nand flash内部,怎么知道你传入的是数据,还是地址,还是命令啊,也就无法实现正确的操作了。

Nand Flash只有8个I/O引脚的好处

1. 减少外围引脚:相对于并口(Parellel)的Nor Flash的48或52个引脚来说,的确是大大减小了引脚数目,这样封装后的芯片体积,就小很多。现在芯片在向体积更小,功能更强,功耗更低发展,减小芯片体积,就是很大的优势。同时,减少芯片接口,也意味着使用此芯片的相关的外围电路会更简化,避免了繁琐的硬件连线。

2. 提高系统的可扩展性,因为没有像其他设备一样用物理大小对应的完全数目的addr引脚,在芯片内部换了芯片的大小等的改动,对于用全部的地址addr的引脚,那么就会引起这些引脚数目的增加,比如容量扩大一倍,地址空间/寻址空间扩大一倍,所以,地址线数目/addr引脚数目,就要多加一个,而对于统一用8个I/O的引脚的Nand Flash,由于对外提供的都是统一的8个引脚,内部的芯片大小的变化或者其他的变化,对于外部使用者(比如编写nand flash驱动的人)来说,不需要关心,只是保证新的芯片,还是遵循同样的接口,同样的时序,同样的命令,就可以了。这样就提高了系统的扩展性。

片选无关(CE don’t-care)技术

Nand flash支持一个叫做CE don’t-care的技术,字面意思就是,不关心是否片选,那有人会问了,

如果不片选,那还能对其操作吗?答案就是,这个技术,主要用在当时是不需要选中芯片却还可以继续操作的这些情况:在某些应用,比如录音,音频播放等应用中,外部使用的微秒(us)级的时钟周期,此处假设是比较少的2us,在进行读取一页或者对页编程时,是对Nand Flash操作,这样的串行(Serial Access)访问的周期都是20/30/50ns,都是纳秒(ns)级的,此处假设是50ns,当你已经发了对应的读或写的命令之后,接下来只是需要Nand Flash内部去自己操作,将数据读取除了或写入进去到内部的数据寄存器中而已,此处,如果可以把片选取消,CE#是低电平有效,取消片选就是拉高电平,这样会在下一个外部命令发送过来之前,即微秒量级的时间里面,即2us-50ns≈2us,这段时间的取消片选,可以降低很少的系统功耗,但是多次的操作,就可以在很大程度上降低整体的功耗了。

总结起来简单解释就是:由于某些外部应用的频率比较低,而Nand Flash内部操作速度比较快,所以具体读写操作的大部分时间里面,都是在等待外部命令的输入,同时却选中芯片,产生了多余的功耗,此“不关心片选”技术,就是在Nand Flash的内部的相对快速的操作(读或写)完成之后,就取消片选,以节省系统功耗。待下次外部命令/数据/地址输入来的时候,再选中芯片,即可正常继续操作了。这样,整体上,就可以大大降低系统功耗了。

NAND FLASH 的读操作详细解读

以最简单的read操作为例,解释如何理解时序图,以及将时序图中的要求,转化为代码。解释时序图之前,让我们先要搞清楚,我们要做的事情:那就是,要从nand flash的某个页里面,读取我们要的数据。要实现此功能,会涉及到几部分的知识,至少很容易想到的就是:需要用到哪些命令,怎么发这些命令,怎么计算所需要的地址,怎么读取我们要的数据等等。

就好比你去图书馆借书,想想是一个什么样的流程,首先得告诉馆长你要要借书还是还书、然后把要借书的位置告诉馆长,最后是把图书卡或者借书证件给馆长,此时就耐心等待要借的书籍了。

下面,就一步步的解释,需要做什么,以及如何去做:

1.需要使用何种命令

首先,是要了解,对于读取数据,要用什么命令。

下面是datasheet中的命令集合:

很容易看出,我们要读取数据,要用到Read命令,该命令需要2个周期,第一个周期发0x00,第二个周期发0x30。

2.发送命令前的准备工作以及时序图各个信号的具体含义

知道了用何命令后,再去了解如何发送这些命令。

Nand Flash数据读取操作的时序图

注:此图来自镁光的型号MT29F1G08ABAEAH4:E的nand flash的数据手册(datasheet)。

我们来一起看看,我在图中的特意标注的①边上的红色竖线。

红色竖线所处的时刻,是在发送读操作的第一个周期的命令0x00之前的那一刻。让我们看看,在那一刻,其所穿过好几行都对应什么值,以及进一步理解,为何要那个值。

(1)红色竖线穿过的第一行,是CLE。还记得前面介绍命令所存使能(CLE)那个引脚吧?CLE,将CLE置1,就说明你将要通过I/O复用端口发送进入Nand Flash的,是命令,而不是地址或者其他类型的数据。只有这样将CLE置1,使其有效,才能去通知了内部硬件逻辑,你接下来将收到的是命令,内部硬件逻辑,才会将受到的命令,放到命令寄存器中,才能实现后面正确的操作,否则,不去将CLE置1使其有效,硬件会无所适从,不知道你传入的到底是数据还是命令了。

(2)而第二行,是CE#,那一刻的值是0。这个道理很简单,你既然要向Nand Flash发命令,那么先要选中它,所以,要保证CE#为低电平,使其有效,也就是片选有效。

(3)第三行是WE#,意思是写使能。因为接下来是往nand Flash里面写命令,所以,要使得WE#有效,所以设为低电平。

(4)第四行,是ALE是低电平,而ALE是高电平有效,此时意思就是使其无效。而对应地,前面介绍的,使CLE有效,因为将要数据的是命令,而不是地址。如果在其他某些场合,比如接下来的要输入地址的时候,就要使其有效,而使CLE无效了。

(5)第五行,RE#,此时是高电平,无效。可以看到,知道后面低6阶段,才变成低电平,才有效,因为那时候,要发生读取命令,去读取数据。

(6)第六行,就是我们重点要介绍的,复用的输入输出I/O端口了,此刻,还没有输入数据,接下来,在不同的阶段,会输入或输出不同的数据/地址。

(7)第七行,R/B#,高电平,表示R(Ready)/就绪,因为到了后面的第5阶段,硬件内部,在第四阶段,接受了外界的读取命令后,把该页的数据一点点送到页寄存器中,这段时间,属于系统在忙着干活,属于忙的阶段,所以,R/B#才变成低,表示Busy忙的状态的。

介绍了时刻①的各个信号的值,以及为何是这个值之后,相信,后面的各个时刻,对应的不同信号的各个值,大家就会自己慢慢分析了,也就容易理解具体的操作顺序和原理了。

3.如何计算出,我们要传入的地址

在介绍具体读取数据的详细流程之前,还要做一件事,那就是,先要搞懂我们要访问的地址,以及这些地址,如何分解后,一点点传入进去,使得硬件能识别才行。

此处还是以MT29F1G08ABAEAH4:E为例,此nand flash,一共有1024个块,每个块内有64页,每个页是2K+64 Bytes,假设,我们要访问其中的第1000个块中的第25页中的1208字节处的地址,此时,我们就要先把具体的地址算出来:

物理地址=块大小×块号+页大小×页号+页内地址=1000×128K+2K×25+1208=0x7D0CCB8,接下来,我们就看看,怎么才能把这个实际的物理地址,转化为nand Flash所要求的格式。

在解释地址组成之前,先要来看看其datasheet中关于地址周期的介绍:

图 Nand Flash的地址周期组成

结合时序图的2,3阶段,我们可以看出,此nand flash地址周期共有4个,2个列(Column)周期,2个行(Row)周期。

而对于对应的,我们可以看出,实际上,列地址CA0~CA10,就是页内地址,11位地址范围是从0到2047,即2K,而多出的A11,理论上可以表示2048~4095,但是实际上,上述规格书中说明当CA11为1时,CA【10:6】都必须为0,所以我们最多也只用到了2048~2112,用于表示页内的oob区域,其大小是64字节。

PA0~PA5,称作页号,页的号码,可以定位到具体是哪一个页。由6个位控制,最多寻址64页,符合规格书中的一块有64页。

而其中,BA6~BA15,表示对应的块号,即属于哪个块,有10个位控制,寻址范围为1024个块。

// 可见:地址的传输顺序是是 页内地址,页号,块号。从小到大。

简单解释完了地址组成,那么就很容易分析上面例子中的地址了:

0x7D0CCB8 = 0111 1101 0000 1100 0000 1100 1011 1000,分别分配到4个地址周期就是:

1st 周期,CA7~CA0 :1011 1000 = 0x B8

2nd周期,CA11~CA8 :0000 1100 = 0x 0C

3rd周期,BA7~PA0 :0000 1100 = 0x 0C

4th周期,A27~A20 :0111 1101 = 0x 7D

注意,上图图中对应的,*L,意思是低电平,由于未用到那些位,datasheet中强制要求设为0,所以,才有上面的2nd周期中的高4位是0000.。因此,接下来要介绍的,我们要访问第1000个块中的第25页中的1208字节处的话,所要传入的地址就是分4个周期,分别传入2个列地址的:0xB8,0x0C,然后再传2个行地址的:0x0C,0x7D,这样硬件才能识别。

4.读操作过程的解释

准备工作终于完了,下面就可以开始解释说明,对于读操作的,上面图中标出来的,1-6个阶段,具体是什么含义。

(1) 操作准备阶段:此处是读(Read)操作,所以,先发一个图5中读命令的第一个阶段的0x00,表示,让硬件先准备一下,接下来的操作是读。

(2) 发送两个周期的列地址。也就是页内地址,表示,我要从一个页的什么位置开始读取数据。

(3) 接下来再传入三个行地址。对应的也就是页号。

(4) 然后再发一个读操作的第二个周期的命令0x30。接下来,就是硬件内部自己的事情了。

(5)Nand Flash内部硬件逻辑,负责去按照你的要求,根据传入的地址,找到哪个块中的哪个页,然后把整个这一页的数据,都一点点搬运到页缓存中去。而在此期间,你所能做的事,也就只需要去读取状态寄存器,看看对应的位的值,也就是R/B#那一位,是1还是0,0的话,就表示,系统是busy,仍在”忙“(着读取数据),如果是1,就说系统活干完了,忙清了,已经把整个页的数据都搬运到页缓存里去了,你可以接下来读取你要的数据了。

对于这里。估计有人会问了,这一个页一共2048+64字节,如果我传入的页内地址,就像上面给的1028一类的值,只是想读取1028到2011这部分数据,而不是页开始的0地址整个页的数据,那么内部硬件却读取整个页的数据出来,岂不是很浪费吗?答案是,的确很浪费,效率看起来不高,但是实际就是这么做的,而且本身读取整个页的数据,相对时间并不长,而且读出来之后,内部数据指针会定位到你刚才所制定的1208的那个位置。

(6) 接下来,就是“窃取“系统忙了半天之后的劳动成果的时候了,呵呵。通过先去Nand Flash的控制器中的数据寄存器中写入你要读取多少个字节(byte)/字(word),然后就可以去Nand Flash的控制器的FIFO中,一点点读取你要的数据了。

至此,整个Nand Flash的读操作就完成了。

对于其他操作,可以根据上面的分析,一点点自己去看datasheet,根据里面的时序图去分析具体的操作过程,然后对照代码,会更加清楚具体是如何实现的。

NAND FLASH 搭配NOR FLASH的优缺点

常见的应用组合就是,用小容量的Nor Flash存储启动代码,比如uboot,系统启动后,初始化对应的硬件,包括SDRAM等,然后将Nand Flash上的Linux 内核读取到内存中,做好该做的事情后,就跳转到SDRAM中去执行内核了。

这样的好处是由于NAND 本身有坏块的可能性,所以为了保障启动万无一失,很多要求高级安全的产品,标注必须从NOR Flash启动uboot,而且从NOR启动还有一个好处就是启动速度快,NAND Flash的优点是容量大,但是读取速度不快,比不上NOR Flash,比如一些对于开机速度有要求的产品应用,比如车载液晶仪表,这类产品为了快速启动一般都是NOR FLASH+EMMC的配置,当然像赛普拉斯平台直接上hyperflash那就更快了。

NAND Flash的ECC校验简单说明

我们先来说说为什么需要ECC校验这个事情,其实上一篇文章我们说过由于NAND flash的自身的不稳定性,存在位翻转的现象,所以就存在写入到flash中的数据和读出来的数据不一样的情况发生,此时就需要有一个检验的机制,防止读出来的不正确,还可以纠正过来。

其实这个就类似于去银行存钱,你存了1W,过几天去银行去取钱的时候发现只有9000了,这个时候你就会拿出存条找银行理论,上次明明存的就是1W啊,你少的1000必须跟我纠正过来,其实这个就是NAND flash的ECC检验原理,发现有读出来的数据和存进去的数据不正确,此时就需要去纠正回来,当然这里的纠正的数据是有限制的,不是所有数据出错都能纠正过来。

ECC 校验是在奇偶校验的基础上发展而来的,它将数据块看作一个矩阵,利用矩阵的行、列奇偶信息生成 ECC 校验码。它能够检测并纠正单比特错误和检测双比特错误,但对双比特以上的错误不能保证检测。它克服了传统奇偶校验只能检出奇数位出错、校验码冗长、不能纠错的局限性。每 nbit 的 Ecc 数值可满足 2的n次方bit 数据包的校验要求。

当往Nand Flash 的Page 中写入数据的时候,每256字节我们生成一个ECC 校验和,称之为原ECC校验和,保存到 PAGE 的OOB数据区中。当从Nand Flash 中读取数据的时候,每 256 字节我们生成一个ECC校验和,称之为新 ECC 校验和。

校验的时候,根据上述ECC生成原理不难推断:将从 OOB 区中读出的原 ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错(或是出现了ECC无法检测的错误):若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠正;若3个字节异或结果中只存在1个比特位为1,表示OOB区出错:其他情况均表示出现了无法纠正的错误。

这两期我们基本上把NAND FLASH的相关设计和使用都完整讲了一遍,下期会讲讲车载DRAM和EMMC的相关内容,敬请期待。

相关问答

emmc和 nand 外观区别?

1emmc和nand的外观区别在于它们的封装形式和引脚数量不同。2emmc通常采用BGA封装,引脚数量较多,一般为153或169个;而nand则可以采用BGA或TSOP封装,引脚数量...

用51单片机对nandflash进行读写以实现大容量存储要注意什么?

实没啥需要特别注意的。要说的话对于初学者需要注意电源别弄错了;如果电源域不同,则需要确认管脚电气参数是否匹配,必要时添加接口转换芯片;剩下的就是按照...

什么是嵌入式系统?

嵌入式系统是指由硬件和软件组成并且能够移植到硬件设备的操作系统。而相比较于普通的PC操作系统,嵌入式操作系统不能存储大容量的内存和程序。所以嵌入式操作系...

慧荣科技推出的SM3282主控怎么样?

该主控承诺为那些注重成本效益的移动硬盘提供最高400MB/s的连续读取速度。SM3282主控包含一个USB3.0(USB3.2Gen1)主控,以及提供2个NAND通道、每个通道有4...

SD卡有几种类型?

1、TF和SDSD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。内部结合了SanDisk快闪记忆卡控制与MLC(MultilevelCell)技术和Toshiba(东芝)0...

已经破解过的PSV系统如何二次破解?

PSV破解新情报闪存内容和游戏卡内容均可备份根据国外黑客博客消息,现在已经有人可以做到对PSV的NAND闪存进行备份了。理论上来说这样让PSV的降级成为可能。...

诸位前辈!给推荐推荐,矿用小型挖掘机可进电梯,小型挖掘机...

[回答]企业主要产品:目前企业的主要产品以服务于农民的微型挖掘机为主,适合家用,农场用,果园用。同时还适合小型工程,园林绿化等。公司主要技术负责人从事...

程序员在写代码的时候bug太多会给计算机造成损坏吗?为什么?

原则上程序员写代码调试对于计算机的冲击是有限的,但编程来讲不是什么都是绝对的,如果是windows编程写的代码对于cpu或者硬盘有非常大的冲击,也会造成计算机损...

长按电源键强制关机,真的会弄坏电脑吗?

首先,按住电源键强制关机和拔电源关机并不一样,这点对笔记本和台式机都是如此。按住电源键关机,在硬件上看就是拉住PWRBTN#引脚,保持一段时间。在电源键按下...

微星b150m mortar搭配什么cpu好-ZOL问答

NGFF接口又称为M.2接口,作为Intel为超极本量身定做的新一代接口标准,其尺寸仅为42mmX22mm,单面布置NAND颗粒的话厚度为2.75mm,双面的话厚度则是3.85mm,而目前mS...

 关羽斩六将  许明虎 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部