基于嵌入式文件系统mC/FS的NAND Flash移植

技术分类: 嵌入式系统  | 2008-02-01
张爱华,北京麦克泰软件技术有限公司

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

图1K9F2808硬件连接


  下面以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,我们将在第一时间删除该信息。
1】【2
加载中

对文章的评论

更多评论

剩余字数:  

Google提供的广告

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组