- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NAND Flash驱动程序结构
NAND Flash驱动程序NAND Flash驱动程序下的NAND Flash驱动程序采用了分层结构驱动的上层NAND Flash的操作进行抽象,并采用一定的平衡了NAND Flash的擦写。NAND Flash驱动程序的结构如图.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抽象成统一的接口提供给上层的文件系统。
将逻辑扇区地址转换成物理扇区地址。上层的FAT文件系统使用的是逻辑扇区地址,并不是真正的物理扇区,其转换由FAL实现。
对Flash实现损耗平衡(Wear-level)。为了避免反复的擦写Flash的同一个块,需要一种策略来减少反复的擦写块。
(2)、FMD层
即Flash Media Driver,Flash介质驱动层。该层实现FAL层的请求,对Flash物理扇区进行操作。
Flash Hardware
即NAND Flash芯片。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驱动程序初始化函数,系统启动时加载时调用此函数DSK_Deinit
NAND Flash驱动程序卸载函数,在卸载的时候调用此函数。
DSK_IOControl
NAND Flash驱动程序的I/O函数,读写等,也是上层主要使用的函数DSK_Read、DSK_Write、DSK_Seek均为空函数,不起任何作用。
DSK_PowerUp
NAND Flash驱动程序电源管理函数。在系统唤醒时调用此函数对Flash进行电源管理。DSK_PowerDown
NAND Flash驱动程序电源管理函数。在系统睡眠时调用此函数对Flash进行电源管理。
数据结构
DISK_INFO
DISK_INFO结构包含了有关磁盘设备的。
typedef struct _DISK_INFO {
DWORD di_total_sectors;
DWORD di_bytes
文档评论(0)