天天看点

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

本节书摘来异步社区《嵌入式linux软硬件开发详解——基于s5pv210处理器》一书中的第2章,第2.1节,作者:刘龙,更多章节内容可以访问云栖社区“异步社区”公众号查看

嵌入式linux软硬件开发详解——基于s5pv210处理器

在嵌入式系统中,很多信息在系统关闭电源后不能够丢失,这些信息需要使用非易失性存储器来存储,我们可以使用nor flash和nand flash来实现。

nor flash和nand flash是现在市场上两种主要的非易失闪存技术。intel公司于1988年首先开发出nor flash技术;1989年,东芝公司开发出nand flash技术。nand flash和nor flash的主要区别如表2-3所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

在嵌入式设备中使用slc和mlc这两种不同类型的nand flash闪存技术的设备都很常见。slc全称为single-level cell,单层单元闪存;mlc全称为multi-level cell,多层单元闪存。两者的主要区别是slc每一个单元储存一位数据,而mlc通过使用多个电压等级,每一个单元储存两位数据,数据密度比较大。

slc生产成本较高,但在效能上大幅胜于mlc。slc晶片可重复写入约10万次,而mlc晶片的写入次数约为1万次,目前三星采用的mlc芯片写入寿命在5000次左右。在读写速度上,相对于主流slc芯片,mlc芯片理论速度较慢。mlc能耗大于slc,在相同使用条件下比slc要多15%左右的能耗,因为mlc理论写入次数上限相对较少,所以在相同使用情况下,使用寿命比slc短。

两种闪存技术对应芯片区别如表2-4所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

smart210开发板无nor flash。采用的是slc类型nand flash,容量为512mb,型号为k9f4g08uob。

k9f4g08uob的引脚排列如图2-8所示,各个引脚的功能如表2-5所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片
《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

i/o0~i/o7:地址、数据和命令输入/输出引脚。

cle、ale:命令锁存使能引脚和地址锁存使能引脚,用来选择i/o输入的信号是命令还是地址。

overline {{text{ce}}}、overline {{text{re}}}、overline {{text{we}}} :片选信号、读使能信号和写使能信号引脚。

overline {frac{{text{r}}}{{text{b}}}}:状态引脚,表示设备的状态,当数据写入、编程和随机读取时,overline {frac{{text{r}}}{{text{b}}}}处于高电平,表明芯片正忙,否则输出低电平。

k9f4g08uob内部结构如图2-9所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

nand flash设备的存储容量是以页(page)和块(block)为单位,1block=64page,1page=2112byte(2048byte用于存放数据,其余64byte用于存放其他信息,如块好坏的标记、块的逻辑地址、页内数据的ecc校验和等)。

容量为512mb的nand flash存储结构为:2048byte×64page×4096blocks。

芯片(device)、块(block)、页(page)之间的关系如下。

1 device = 4,096 blocks = 4096×64 pages = 256k pages

1 block = 64 page

1 page = 2112 byte = 2048 byte + 64 byte

用于数据存储的单元有 2048 bytes×64 pages×4096 blocks = 512 mb。

用于ecc校验或其他功能的单元有64 bytes×64 pages×4096 blocks = 16mb 。

nand flash以页为单位进行读和编程(写)操作,一页为2048byte;以块为单位进行擦除操作,一块为2048byte×64page=128kb。

k9f4g08uob的内部对每一页又进行了划分,每页分成前2048byte的main域和64byte的spare域,在main域中,分成a、b、c、d四个扇区;spare域中,分成e、f、g、h四个扇区。每个扇区占据不同的存储空间,具体分布情况如图2-10、图2-11所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

s5pv210和k9f4g08uob的连接方式如图2-12所示。

k9f4g08uob的访问地址、数据和控制命令只能在引脚i/o[7:0]上传递。对于不同的数据类型,s5pv210微处理器和nand flash之间是通过控制总线和一些命令序列来进行区分的。该nand flash芯片所支持的命令序列如表2-6所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片
《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

通过表2-6我们可以看出,如果微处理器想要读nand flash的内容,可以在cle和overline {{text{re}}}引脚的配合下,通过i/o0~i/o7引脚先后发送00h与30h命令;如果想要读取nand flash的内部厂商内置的id,可以在cle和overline {{text{re}}}引脚的配合下,发送90h命令;如果s5pv210想要对nand flash进行随机地址的写操作,可以在cle和overline {{text{we}}}引脚的配合下,首先发送85h命令,然后指定所要写的地址。

k9f4g08uob容量为512mb,需要30根地址线确定微处理器要访问的地址,而k9f4g08uob只有8个i/o口,所要操作的地址是在控制引脚的配合下,先后5次发送至flash内部。发送地址时地址序列如表2-7所示。

《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.3 SLC Nand Flash芯片

序列中列地址为a0~a11,行地址为a12~a29,l表示在写的时候置为0。对s5pv210访问nand flash地址的指定,只需要分5步将地址值写入s5pv210的nand flash控制寄存器即可,nand flash控制器会自动地通过8个i/o,在控制引脚帮助下,分五次通过i/o0~i/o7完成对nand flash地址的写操作。

继续阅读