TQ2440之nand flash读写
NF_MECC_UnLock();
NF_nFCE_L();
NF_CLEAR_RB();
NF_CMD(CMD_WRITE1);
NF_ADDR(0x00);
NF_ADDR(0x00);
NF_ADDR((page_number) & 0xff);
NF_ADDR((page_number >> 8) & 0xff);
NF_ADDR((page_number >> 16) & 0xff);
for (i = 0; i < 2048; i++)//写入一页数据
{
NF_WRDATA8(mydata);
i += 6;
Uart_Printf("\n test %s",mydata);
}
NF_MECC_Lock();
mecc0=rNFMECC0;
//把ECC校验码由字型转换为字节型,并保存到全局变量数组ECCBuf中
ECCBuf[0]=(U8)(mecc0&0xff);
ECCBuf[1]=(U8)((mecc0>>8) & 0xff);
ECCBuf[2]=(U8)((mecc0>>16) & 0xff);
ECCBuf[3]=(U8)((mecc0>>24) & 0xff);
NF_SECC_UnLock();
//把main区的ECC值写入到spare区的前4个字节地址内,即第2048~2051地址
for(i=0;i<4;i++)
{
NF_WRDATA8(ECCBuf[i]);
}
NF_SECC_Lock();
secc=rNFSECC;
//把ECC校验码保存到全局变量数组ECCBuf中
ECCBuf[4]=(U8)(secc&0xff);
ECCBuf[5]=(U8)((secc>>8) & 0xff);
//把spare区的ECC值继续写入到spare区的第2052~2053地址内
for(i=4;i<6;i++)
{
NF_WRDATA8(ECCBuf[i]);
}
NF_CMD(CMD_STATUS);
//判断状态值的第6位是否为1,即是否在忙,该语句的作用与NF_DETECT_RB();相同
do{
stat = NF_RDDATA8();
}while(!(stat&0x40));
NF_nFCE_H();
//判断状态值的第0位是否为0,为0则写操作正确,否则错误
if (stat & 0x1)
{
temp = rNF_MarkBadBlock(page_number>>6);//标注该页所在的块为坏块
if (temp == 0x21)
return 0x43;
else
return 0x44;
}
else
return 0x66;
}
U8 rNF_ReadPage( U32 page_number)
{
NF_RSTECC();
NF_MECC_UnLock();
NF_CMD(CMD_READ1);
NF_CMD(CMD_READ2);
NF_MECC_Lock();
NF_SECC_UnLock();
mecc0=NF_RDDATA();
rNFMECCD0=((mecc0&0xff00)<8)|(mecc0&0xff);
rNFMECCD1=((mecc0&0xff000000)>>8)|((mecc0&0xff0000)>>16);
NF_SECC_Lock();
secc=NF_RDDATA();
rNFSECCD=((secc&0xff00)<8)|(secc&0xff);
if((rNFESTAT0 & 0xf) == 0x0)
return 0x66;
else
return 0x44;
}
void Main(void)
{
S8 myid;
S8 *str = "BERLIN";
Port_Init();
Uart_Select(0);
Uart_Init(50000000,115200);//初始化串口
Uart_Printf("\n\nWelcome to test nand flash!\n");
delay(100);
Uart_Printf("Now begin to init the nand flash\n");
rNF_Init();//初始化nand flash
Uart_Printf("Complete\n");
delay(100);
Uart_Printf("Now begin to reset\n");
rNF_Reset();//复位
Uart_Printf("Complete\n");
delay(100);
Uart_Printf("Now begin to read ID\n");
myid=rNF_ReadID();//读ID
Uart_Printf("The ID is %s \n",myid);
delay(100);
Uart_Printf("Now begin to erase the nand flash\n");
rNF_
TQ2440nandflash读 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)