打印

S3C2440读写NAND Flash问题

[复制链接]
2495|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 | 只看该作者
我的问题是知道块,页,如何确定它的地址?
阿南能够解释详细一点嘛

使用特权

评论回复
5
myitlover| | 2009-8-10 20:07 | 只看该作者
addr = (4095<<5 ) | 31

使用特权

评论回复
6
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

粉丝