S3C2440读写NAND Flash问题

[复制链接]
3021|5
 楼主| gavin_li 发表于 2009-8-10 16:01 | 显示全部楼层 |阅读模式
我的NAND Flash是K9F1208 64M的。现在想读写第4905块,第31页,该如何传这个地址呢?比如读函数是下面这个
static void ReadPage(U32 addr, U8 *buf)   //addr表示flash中的第几页,即‘flash地址>>9’
{
U16 i;
NFChipEn();   //使能NandFlash
WrNFCmd(READCMD0); //发送读指令‘0x00’,由于是整页读取,所以选用指令‘0x00’
WrNFAddr(0);   //写地址的第1个cycle,即Column Address,由于是整页读取所以取0
WrNFAddr(addr);   //写地址的第2个cycle,即A[9:16]
WrNFAddr(addr>>8);   //写地址的第3个cycle,即A[17:24]
WrNFAddr(addr>>16); //写地址的第4个cycle,即A[25]。
WaitNFBusy(); //等待系统不忙
for(i=0; i<512; i++)
   buf[i] = RdNFDat(); //循环读出1页数据
NFChipDs();   //释放NandFlash
}
我这个addr该传入什么值呢,这个值是如何计算得到的?
 楼主| gavin_li 发表于 2009-8-10 16:06 | 显示全部楼层
我知道64M 的NAND flash的容量是4096(块)*32(页)*512(字节)得到的。但是不包括16字节的冗余区。如果不考虑冗余区,add=4094*32*512,这个值对吗?还是add=4094*32*528?还是其他。
阿南 发表于 2009-8-10 16:52 | 显示全部楼层
把地址转成块、页号
 楼主| gavin_li 发表于 2009-8-10 17:08 | 显示全部楼层
我的问题是知道块,页,如何确定它的地址?
阿南能够解释详细一点嘛
myitlover 发表于 2009-8-10 20:07 | 显示全部楼层
addr = (4095<<5 ) | 31
 楼主| gavin_li 发表于 2009-8-11 11:39 | 显示全部楼层
本帖最后由 gavin_li 于 2009-8-11 11:45 编辑

请问5楼,你如何得到这个值呢
我昨晚思考了一夜。考虑到这个值应当这样计算
10987654321098765432109876543210
                                                00000000[7:0]--这里代表Column Address从0开始
                                              0[8]--这里0表示上半页,1表示下半页。
                                    11111[13:9]--这里表示Page Address。第31页
            111111111111[25:14]--这里表示Block Address,第4095块
00000011111111111111111000000000 --所以地址应当是这个值,即0X3FFFE00,不知道对不对?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

150

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部