NANDFlash驱动程序结构..docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NANDFlash驱动程序结构.

NAND Flash驱动程序 NAND Flash驱动程序框架 FAT文件系统下的NAND Flash驱动程序采用了分层结构。驱动程序的上层是Flash抽象层,是物理操作无关层,该层对NAND Flash的操作进行抽象,并采用一定的策略平衡了NAND Flash的擦写。NAND Flash驱动程序的结构如图5.5所示。 图5.5 FAT下NAND Flash驱动结构 在图中: File System 即文件系统。在这里,采用的是FAT文件系统。FAT文件系统是一种采用链式分配方式的文件系统。并没有对NAND Flash的特点优化,因此需要在下层的驱动程序做优化。 Flash Driver 即NAND Flash驱动程序。对上层的文件系统提供以DSK为前缀的流驱动接口。该层驱动程序本身分为两层:FAL层、FMD层。 (1)、FAL层 即Flash Abstraction Layer,Flash抽象层。该层主要提供三个功能: A、将物理的Flash抽象成统一的接口提供给上层的文件系统。 B、将逻辑扇区地址转换成物理扇区地址。上层的FAT文件系统使用的是逻辑扇区地址,并不是真正的物理扇区,其转换由FAL实现。 C、对Flash实现损耗平衡(Wear-level)。为了避免反复的擦写Flash的同一个块,需要一种策略来减少反复的擦写块。 (2)、FMD层 即Flash Media Driver,Flash介质驱动层。该层实现FAL层的请求,对Flash物理扇区进行操作。 Flash Hardware 即NAND Flash物理芯片。 2、FAL层(Flash Abstraction Layer) 函数接口定义 FAL层对上的函数接口也就是整个NAND Flash驱动程序的对外接口,由于NAND Flash是块设备,Windows CE中块设备采用的是流驱动接口,流驱动接口是一个标准的统一接口,只是各个驱动的前缀不同,在这里NAND Flash函数接口的前缀为“DSK”,这个前缀也使得Windows CE将“DSKxx:”的文件名看作为设备,使得我们能够通过Windows CE标准的Win32 API,如CreateFile、DeviceIOControl等来对设备进行打开、读写等操作。 具体的函数接口定义如下: DWORD DSK_Init(DWORD dwContext); BOOL DSK_Deinit(DWORD dwContext); DWORD DSK_Open(DWORD dwData, DWORD dwAccess, DWORD dwShareMode); BOOL DSK_Close(DWORD Handle); DWORD DSK_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes); DWORD DSK_Write(DWORD Handle, LPCVOID pBuffer, DWORD dwInBytes); DWORD DSK_Seek(DWORD Handle, long lDistance, DWORD dwMoveMethod); BOOL DSK_IOControl(DWORD Handle, DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize, PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned); VOID DSK_PowerUp(VOID); VOID DSK_PowerDown(VOID); 这里,实际使用的函数只有DSK_Init、DSK_Deinit、DSK_IOControl、DSK_PowerUp、DSK_PowerDown。其他函数均为空函数。 DSK_Init NAND Flash驱动程序初始化函数,系统启动时加载驱动程序时会通过设备管理器调用此函数对NAND Flash进行初始化。 DSK_Deinit NAND Flash驱动程序卸载函数,在卸载驱动程序的时候调用此函数。 DSK_IOControl NAND Flash驱动程序的I/O函数,所有对设备进行的读写擦等操作都是由该函数实现的,也是上层主要使用的函数,而DSK_Read、DSK_Write、DSK_Seek均为空函数,不起任何作用。 DSK_PowerUp NAND Flash驱动程序电源管理函数。在系统唤醒时调用此函数对Flash进行电源管理。此函数是通过调用FMD层的电源管理函数实现的。 DSK_PowerDown NAND Flash驱动程序电源管理函数。在

文档评论(0)

bhzs + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档