Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10448419
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: LINUX

2011-03-24 00:01:51

1.正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,

1block = 32page

1page = 512bytes(datafield) + 16bytes(oob 即out   of   band 带外数据.)

对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash的擦写,而擦写则是以一个block为单位的。同时必须提醒的是,512bytes理论上被分为1st half 和2sd half,每个half各占256个字节。

(1).Nand Flash的地址寄存器把一个完整的Nand Flash地址分解成Column Address与Page Address.进行寻址。

Column Address: 列地址。Column Address其实就是指定Page上的某个Byte,指定这个Byte其实也就是指定此页的读写起始地址。

Paage Address:页地址。由于页地址总是以512Bytes对齐的,所以它的低9位总是0。

Read1命令

当我们得到一个Nand Flash地址src_addr时可以这样分解出Column Address和Page Address

column_addr=src_addr%512;                 // column address

page_address=(src_addr>>9);                  // page address

能够指定的 Column Address范围为0~255(用于传递Column Address的数据线有8条(I/O0~I/O7,对应A0~A7),

(2)假定,指定读命令从第256个字节处 开始读取此页,把Column Address设置为256,但Column Address最大只能是255,这就造成数据溢出。。。所以必须Data Field分为两个半区,当要读取的起始地址(Column Address)在0~255内时用00h命令,当读取的起始地址是在256~511时,则使用01h命令.假设现在我要指定从第256个byte开 始读取此页,那么我将这样发送命令串

column_addr=256;

NF_CMD=0x01; ß                       2nd half开始读取

NF_ADDR=column_addr&0xff;            1st Cycle

NF_ADDR=page_address&0xff;             2nd.Cycle

NF_ADDR=(page_address>>8)&0xff;         3rd.Cycle

NF_ADDR=(page_address>>16)&0xff;        4th.Cycle

阅读(2164) | 评论(0) | 转发(0) |
0

上一篇:qt4-arm通用配置单

下一篇:什么是MTD

给主人留下些什么吧!~~