|
我将 光盘上的代码 中读 nand 的代码函数 调用了下 确定是正确的。
但是,那个代码没有严格的按照提供的nand flash的资料来定义地址访问的时序吧…………
这个是教程函数
static void rLB_ReadPage(unsigned int addr,unsigned char * to)
{
unsigned int i;
rNF_Reset();
//enable the chip
NF_nFCE_L();
NF_CLEAR_RB();
//Issue Read command
NF_CMD(CMD_READ);
//set up address
NF_ADDR(0x00);
NF_ADDR(0x00);
NF_ADDR((addr) & 0xff);
NF_ADDR((addr >> 8) & 0xff);
NF_ADDR((addr >> 16) & 0xff);
NF_CMD(CMD_READ3);
NF_DETECT_RB(); //wait tR(max 12us)
for(i = 0;i < 2048;i++)
{
to[i] = NF_RDDATA8();
}
NF_nFCE_H();
}
我按照nand flash的资料来 稍微修改了 那个读函数
//use for k9f2g08u0a nand flash write
static void rLB_K9F2G08U0A_WritePage(unsigned int addr,unsigned char *from)
{
unsigned int i;
rNF_Reset();
//enable the chip
NF_nFCE_L();
NF_CLEAR_RB();
//issue write command
NF_CMD(CMD_WRITE1);
//set up address
NF_ADDR((addr) & 0xff);
NF_ADDR((addr >> 8) & 0x0f);
NF_ADDR((addr >> 12) & 0xff);
NF_ADDR((addr >> 20) & 0xff);
NF_ADDR((addr >> 28) & 0x01);
for(i = 0;i < 2048;i++)
{
NF_WRDATA(from[i]);
}
NF_CMD(CMD_WRITE2);
}
同时我也修改了 RdNF2SDRAM()函数,主要是这段(调用以前的函数是成功的)
unsigned int start_addr = 4096;//我放了一个点板子led程序在这个位置
unsigned char * to = (unsigned char *)0x30000000;
unsigned int size = 2048;
for(i = (start_addr >> 11);size > 0;)
{
rLB_K9F2G08U0A_ReadPage(start_addr,to);
size -= 2048;
to += 2048;
i ++;
start_addr += 2048
}
但是这个程序失败了,无法使用,肯求指教!!! |
|