- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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驱动程序电源管理函数。在
您可能关注的文档
最近下载
- 医院手术分级目录.xls VIP
- 《增强小学生英语口语能力的实践与研究》结题报告.docx VIP
- 糖尿病饮食的实施糖尿病饮食治疗.pptx VIP
- (高清版)-B-T 34590.1-2022 道路车辆 功能安全 第1部分:术语.pdf VIP
- 餐饮业员工流失现状及解决对策研究——以季季红餐饮管理有限公司为例.doc VIP
- 电泳电压、时间与膜厚关系的试验与探讨.pdf VIP
- 材料电化学教学(浙大)电化学测试基础知识.pdf VIP
- 银行合规内控管理体系建设项目实施建议书.docx VIP
- 天线与电波传播天线基础知识.pptx VIP
- 2025年质量员-土建方向-通用基础(质量员)证考试题库及答案.pdf VIP
文档评论(0)