printk(“write error!\n”);
else {//再将写入的数据读出,与原数据比较核对
unsigned char RdDat[512];
ReadPage(addr, RdDat);
for(i=0; i<512; i++)
if(RdDat[i]!=buf[i]) {
printk("write error!\n”);
break;
}
}
}
unsigned int EraseBlock(unsigned int addr)
{//参数addr为页地址(包含块地址)
unsigned char stat;
addr &= ~0x1f;//将块内页地址置零,以确保块地址对齐
NFChipEn();//芯片使能
WrNFCmd(ERASECMD0);//送出擦除命令
//将块地址分时送出
WrNFAddr(addr);
WrNFAddr(addr>>8);
WrNFAddr(addr>>16);
WrNFCmd(ERASECMD1);//送出另一个擦除命令,开始擦除的第二个阶段
stat = WaitNFBusy();//等待硬件操作完成
NFChipDs();//解除芯片使能
return stat;
}
4 Linux下编程
Linux对低层的操作进行了封装,并为用户提供了友好的接口,使用户在不熟悉Nandflash的存储原理及其机制的情况下,也能在应用层像读写一个普通文件一样,愉快地对Nandflash进行读写,即使在内核层也无需再像无操作系统下通过对寄存器写命令来操作Nandflash,除非活动在硬件驱动层。而Nandflash硬件驱动与在无操作系统下对Nandflash的操作极为相似,只要把物理地址映射为虚拟地址,并把程序修改为Linux驱动程序所需的格式,基本上就行了。
|