注:

Row也就是page

1.       引脚描述

I/O0 ~ I/O7-----data inputs/outputs

通过这8个I/O引脚,可以输入命令,地址和数据,也可以在读操作时输出数据。

CLE-----command latch enable

CLE输入控制了发送到命令寄存器的命令。CLE为高电平时激活,在nWE的上升沿,命令通过I/O端口被锁存到命令寄存器中,结合datasheet的相关时序图来理解更为深刻。

ALE-----address latch enable

ALE输入控制了地址发送到内部地址寄存器中,在nWE的上升沿和ALE为高电平时,地址被锁存到地址寄存器中。

nCE-----chip enable

nCE是设备选择控制引脚。

nWE-----write enable

写使能,在nWE的上升沿,命令,地址和数据被锁存。

nWP -----write protect

写保护,当此引脚为低电平激活,也即内部高压发生器复位。

R/B-----ready/busy output

就绪/忙输出引脚,通过这个引脚可以知道设备操作的状态。低电平时,表示编程或擦除或随机读操作在进行,并且根据完成情况来返回高状态。

2.       K9F1208U0B的存储结构和存储特点

2.1  K9F1208U0B的存储结构

一片K9F1208U0B总共有4096blocks,每个block包含32pages,每个page包含528bytes,关系如下:

1 device = 4096 blocks

1 block = 32 pages

1 page = 512 Bytes data field + 16 bytes spare field

所以一片K9F1208U0B的容量为4096*32*528=66MB,但是事实上每个page上的最后16bytes是用于存储校验码用的,并不能存放实际的数据,所以实际上我们可以操作的芯片容量为4096*32*512=64MB

由上图可知,1个page总共由528 bytes组成,这528 bytes安顺序由上到下以列为单位进行排列(1列代表一个byte,第0行为第0 byte,第1行为第1 byte)。这528 bytes按功能分为两大部分,分别是data field和spare field,其中spre field占528 bytes里的16 bytes,这16 bytes是用于在读写操作的时候存放校验码用的,一般不用做普通数据的存储区,除去16 bytes,剩下的512 bytes便是我们用于存放数据用的data field,所以一个page上虽然有528 bytes,但我们只按512 bytes进行容量的计算。

Data field安装位置有分为两部分,分别成为1st half和2nd half,每个half各占256 bytes,至于为什么要把data field分为两部分,后面将做进一步分析。

2.2   K9F1208U0B存储操作特点

⑴K9F1208U0B是以页为单位进行读写,以block为单位进行擦除。

⑵K9F1208U0B芯片每一位只能从1变为0,而不能从0变为1,所以在对其进行写操作之前一定要将相应块擦除(擦除即是将相应块的位全部变为1)

⑶最后16 bytes(OOB),OOB的第六个字节(即第517个byte)标志是否是坏块,如果不是坏块该值为FF,否则为坏块!

⑷除OOB第六字节外,通常至少把OOB的前3个字节存放nandflash硬件ECC码。

2.3

3.       K9F1208U0B的地址空间

64M byte物理空间需要26位地址,所以需要4个周期来发送地址,见上图

Column address

列地址,columm address其实就是指定page上的某个byte,指定这个byte,其实也就是指定此页的读写起始地址。512byte需要8bit来表示,对于528byte系列的NANDFLASH,这512byte被分成1st half和2nd half,各自的访问由不同的命令(00h/01h)来选择

因为我们的地址,命令和数据都只能通过I/O0~I/O7这8个引脚发送到nandflash,对应于A0~A7,这也就是为什么A8不出现在我们传递的地址位中,也就是说我们能够指定的column address范围为0~255,但是,1个page的datafield是有512个byte组成的,假设现在我要指定读命令从第256个byte处开始开始读取此页,那么将会发生什么情景呢?我必须把column address设置为256,但column address最大只能是255,这就造成数据溢出,正是这个原因才把data field分成2个半区。当腰读取的其实地址(column address)在0~255内时我们用00h命令,当读取的其实地址是256~511时,则使用01h命令

Page address

页地址,由于页地址总是以512byte对齐的,所以它的低9位总是0,确定读写操作时在flash上的哪个页进行的。一个block有32个page,所以需要5bit来表示,即A9~A13,即该页在blcok内的相对地址

Block address

一个K9F1208U0B flash有4096个block,所以需要12bit来表示,及A14~A25。

地址传送顺序是column address,page address,block address,但由于地址只能在I/O[7:0]上传送,因此,必须采用移位的方式进行,下面以NandAddr为例

⑴第一步是传递column address,就是NandAddr[7:0],不需要移位即可传递到I/O[7:0]上,而halfpage pointer即bit8是有操作指令(00h/01h)决定的,即指令决定是在哪个halfpage上进行读写,而真正的bit8的值是don’t care的。

⑵第2步就是将NandAddr右移9bit,将NandAddr[16:9]传到I/O[7:0]上。

⑶第3步就将NandAddr[24:17]放到I/O[7:0]上。

⑷第4步需要将NandAddr[25]放到I/O[0]上,因此,整个地址传递过程需要4步才能完成,即4-step addressing。

4.       K9F1208U0B的操作命令集

⑴ Read 1

命令是00h/01h,这两个命令用于读取datafield的数据,其中00h表示将要读取K9F1208U0B存储空间中一个页的前半部分,并且将内置指针定位到前半部分的第一个字节;01h表示将要读取K9F1208U0B存储空间中一个页的后半部分,并且将内置指针定位到后半部分的第一个字节。

⑵ Read 2

命令是50h,用于读取sparefield的数据。

⑶ Read ID

命令是90h,读取nandflash芯片的ID号

⑷ Reset

命令是FFh,重启nandflash芯片。

⑸ Page Program

对页进行编程命令,由于写操作,首先写入00h(A区)/01h(B区)/50h,表示写入那个区;再写入80h开始编程模式(写入模式),接下来写入地址和数据,最后写入10h表示编程结束。

⑹ Block Erase

块擦除命令,首先写入60h进入擦写模式,然后输入块地址;接下来写入D0h,表示擦写结束。

⑺ Read Status

读取内部状态寄存器值命令,命令式70h。

Nandflash K9F1208U0B学习相关推荐

  1. NANDFLASH的学习(二)

    文章目录 三.动态坏块处理 (一).坏块的概念 (二).坏块管理的方法 1.跳过坏块 2.保留坏块 (三).动态坏块管理算法设计思想 (四).动态管理算法设计流程及函数实现 1.建立坏块表 与之相关联 ...

  2. NANDFLASH的学习(三)

    文章目录 三.动态坏块处理 (四).动态管理算法设计流程及函数实现 2.建立逻辑块地址-物理块地址映射表 与之相关联的文章: NANDFLASH的学习(一) NANDFLASH的学习(二) NANDF ...

  3. NANDFLASH的学习(一)

    文章目录 一.存储器的发展和类别 (一).存储器的发展历史 (二).存储器的类别 二.NAND Flash的结构与原理 (一).NAND Flash种类 1.SLC(Single-Level Cell ...

  4. 嵌入式裸机NandFlash和 SD/iNand学习笔记

    一. Nandflash 1.1 定义 Nand-flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案.Nand-flash存储器具有容 ...

  5. NandFlash K9F1208U0A/ K9F1208U0B的读取操作

    s3c2410 NandFlash K9F1208U0A/ K9F1208U0B的读取操作 作者:蔡于清 www.another-prj.com 我的板子上使用的是SAMSUNG的K9F1208U0B ...

  6. 【转】s3c2410 NandFlash K9F1208U0A/K9F1208U0B的读取操作

    [转]s3c2410 NandFlash K9F1208U0A/K9F1208U0B的读取操作 我的板子上使用的是SAMSUNG的K9F1208U0B,下面我将对此型号的NandFlash读取操作做一 ...

  7. s3c2410 NandFlash K9F1208U0A /K9F1208U0B的读取操作1 (转)

    板子上使用的是SAMSUNG的K9F1208U0B,下面我将对此型号的NandFlash读取操作做一个讲解.首先我们先从物理结构上来了解这颗芯片,结构图如下所示: 正如硬盘的盘片被分为磁道,每个磁道又 ...

  8. s3c2410 NandFlash K9F1208U0A/ K9F1208U0B的读取操作

    这篇文章是转载自AnotherProject论坛的: ) 我的板子上使用的是SAMSUNG的K9F1208U0B.首先我们先从物理结构上来了解这颗芯片,结构图如下所示 图片附件: 1.jpg (200 ...

  9. s3c2410 NandFlash K9F1208U0A/K9F1208U0B的读取操作

    转自:http://www.dzjs.net/html/qianrushixitong/2008/0730/3275.html 我的板子上使用的是SAMSUNG的K9F1208U0B,下面我将对此型号 ...

最新文章

  1. PyTorch 笔记(03)— Tensor 数据类型分类(默认数据类型、CPU tensor、GPU tensor、CPU 和 GPU 之间的转换、数据类型之间转换)
  2. 【Linux】【Services】【Package】rpm
  3. Leaflet中添加标记、折线、圆圈、多边形、弹窗显示点击处坐标
  4. 安装tensorflow_gpu,无法定位程序输入点
  5. 推荐系统里的那些坑儿
  6. 微信小程序_组件学习_001
  7. Linux中的动态链接库与静态链接库
  8. 实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定
  9. 属性动画基础之ValueAnimator
  10. Leetcode--94. 二叉树的中序遍历(迭代递归)
  11. Scrapy 轻松定制网络爬虫
  12. android系统证书导入工具,如何将CA证书导入Android手机?
  13. 前后落差大用什么词语_【刺激】全国最长滑索!“白云飞索”全长1500米,落差200多米!...
  14. html代码表白_作为一个程序员,表白都要玩出花样
  15. Mysql环境变量配置
  16. 微信小程序获取用户手机号
  17. endnote x9 word 闪退
  18. MSDC 4.3 接口规范(20)
  19. CAD异常闪退的原因
  20. How to Install Nvidia Kernel Module Cuda and Pyrit in Kali Linux

热门文章

  1. 002_centos7上安装mysql8
  2. 024_jdbc-mysql的Dao模式
  3. 002_入门HelloWorldServlet
  4. 帝国cms 多个php,帝国cms多值字段数据显示方法
  5. Smoke Test与Ad hoc Test
  6. mysql raiserror_RAISERROR在SQL Server数据库中的用法
  7. python重命名文件或目录_Python重命名多个文件的实例方法
  8. 深入理解 Kotlin coroutine (二)
  9. 自定义YUM软件仓库----FTP网络YUM源-----网络YUM源的配置
  10. 服务器策略文件,如何解决服务器对文件请求的缓存策略教程