Micrium公司的mC/FS是是高度可移植、可固化的嵌入式FAT文件系统。mC/FS的设备驱动结构非常简单,只需要读写分区的底层函数,所以要支持用户定制的硬件也很简单。

下面以NAND FLASH K9F2808为例,介绍基于LPC2292的NAND FLASH嵌入式文件系统的实现。处理器通过外部存储器接口BANK3扩展NAND FLASH。电路如图1所示。
NAND FLASH读写信号nNandWE、nNandRE通过nCS3片选信号控制,P1.17(R/B)检测器件当前的状态,P0.4(CE)、A20、A19组合选择地址、数据、命令操作地址。
在K9F2808U0B中,页(Page)是最基本的组织单位,每个页有(512+16)=528字节,而32个页构成一个块(Block),每个块的容量为(512+16)×32=(16K+512)字节,整个芯片共1024个块,总存储容量为(16K+512)×1024=(16M+512K)字节。
为了在mC/FS中使用特定的硬件,需要这种硬件的设备驱动程序。驱动程序中包括访问硬件的底层I/O函数和全局表,全局表中存放了这些I/O函数的
指针。
NAND FLASH的驱动物理层结构如下。
typedef struct FS_NAND_PHY_TYPE {
int (*pfEraseBlock) (U8 Unit, U32 Block);
void (*pfInit) (U8 Unit);
int (*pfIsWP) (U8 Unit);
int (*pfGetDeviceInfo) (U8 Unit, FS_NAND_DEVICE_INFO * pDevInfo);
int (*pfRead) (U8 Unit, U32 PageNo, void * pData, unsigned Off, unsigned NumBytes);
int (*pfReadEx) (U8 Unit, U32 PageNo, void * pData, unsigned Off, unsigned NumBytes, void * pSpare, unsigned OffSpare, unsigned NumBytesSpare);
void (*pfReset) (U8 Unit);
int (*pfWrite) (U8 Unit, U32 PageNo, const void * pData, unsigned Off, unsigned NumBytes);
int (*pfWriteEx) (U8 Unit, U32 PageNo, const void * pData, unsigned Off, unsigned NumBytes, const void* pSpare, unsigned OffSpare, unsigned NumBytesSpare);
}FS_NAND_PHY_TYPE;
硬件通过存储器接口方式访问NAND FLASH,因此不需要修改物理层的函数实现,只需要实现相应的硬件访问函数。Micrium公司提供了NAND FLASH的驱动程序,用户只需要提供NAND FLASH的基本硬件访问函数。
NAND FLASH的读写代码如下。
void FS_NAND_HW_X_Read(U8 Unit, U8 * pData, unsigned NumBytes) {
do
{
*pData++ = *(U8 *)_pCurrentNANDAddr;
} while(--NumBytes);
}
void FS_NAND_HW_X_Write(U8 Unit, const U8 * pData, unsigned NumBytes) {
do
{
&
0
0
免责声明:以上内容凡注明署名的,其版权属于署名者所有,转载请注明署名;所有转载的内容,EDN China发布该内容都是出于传递更多信息之目的,如果有侵犯版权事宜,请通知
edneditor@gmail.com 或 010-66422242-213,我们将在第一时间删除该信息。