k9f1g08 2K page nand flash驱动调试——转载自:作者shuiii
k9f1208 secotr size = 512byte,block_pre_sector =32sector, block size = 512*32 =16K, device=4096block=64M k9f1g08 secotr size = 2k, block_pre_sector =64sector, block size = 2*64 =128K, device=1024block=128M 以上是我以前对NANDFLASH的结构认识,其中忽略了非常重要的一块,就是NAND用来保存其它信息的一块区域,这些信息包括块好坏的标记,块的逻辑地址,还有页内数据的ECC校验和等。。。。 这部分数据通过结构SectorInfo保存 typedef struct _SectorInfo }SectorInfo, *PSectorInfo; 在读写NAND时通过 BOOL FMD_ReadSector (SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors); pSectorInfoBuff参数读取相应sector状态,如果pSectorInfoBuff参数为NULL则读写sector数据。pSectorBuff为NULL则读写sector状态。 地址循环的差别 读状态时,列地址低16位为2048,页内偏移量为2048 由于NAND设备存储数据有一定错误率,需要ECC校验保证数据的正确性。传统的文件系统一般直接和硬件驱动程序接口,但对于NAND设备,还需要增加一层FTL(flash translation layer)来完成像块逻辑地址到物理地址转换,坏块标注,ECC校验这样的工作。 [HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/FlashDrv] |
|