我使用的板子是friendly arm 的micro2440a,因为要做nand boot启动,需要开发k9f2g08uom(每页2048byte,2048 block,每块64页)的驱动,目前碰到两个问题:
1,程序烧写不正确。使用sjf2440 软件烧写,然后读出,发现部分数据烧写部分不正确,sjf2440 软件是否会自动处理坏块?如果不能自动处理坏块,怎么烧写呢?用什么工具呢?
2,以下是我的读nandflash页的程序,之前我已经把文件烧写到nandflash的第一块,也就是第64页,我的问题是为什么读取到的数据每页开头都有若干0xff数据?这个数据确定不是spare 区的数据。
3,页地址和块地址是怎么经过页索引和块索引得到的呢???
// 页读, U8 K9F2G_PageRead(U8 *Buf, U32 size, U32 PageIndex)
{
U32 i;
U32 PageAddr;
U8 *DATA;
PageAddr = PageIndex<<12;
if(Buf != NULL)
{
NF_nFCE_L();
NF_CLEAR_RB();
NF_CMD(K9F2G_PGAEREAD1);
NF_ADDR((PageAddr>>0)&0xFF);
NF_ADDR((PageAddr>>8)&0x0F);
NF_ADDR((PageAddr>>12)&0xFF);
NF_ADDR((PageAddr>>20)&0xFF);
NF_ADDR((PageAddr>>28)&0x01);
NF_CMD(K9F2G_PAGEREAD2);
NF_DETECT_RB();
for(i=0; i<10; i++);
for(i=0; i<size; i++)
{
Buf = NF_RDDATA8(); // Read Cycle Time: 30ns(min)
}
NF_nFCE_H();
return TRUE;
}
return FALSE;
}
void CopyProgramFromNand(void)
{
U8 i= K9F2G_init();
//U32 startPageIndex,endPageIndex;
U32 j,m=0;
unsigned char *RAM = (unsigned char *)0x30100000;
for(j=64;j<100;j++)//从64页开始读取,每页读取2048个byte
{
K9F2G_PageRead(RAM+m, 2048, j);
m+=2048;
}
有知道的帮我解答下哈,谢谢
对了谁有的话,可否给我传一个,不胜感激,meadow163@163.com
关键词:
k9f2g08uom
驱动
问题