欢迎来到天天文库
浏览记录
ID:16638851
大小:36.05 KB
页数:21页
时间:2018-08-23
《wince对flash的支持》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、wince对flash的支持WinCE中nandflash驱动开发介绍收藏先来谈一下flash,flash是一种非易失存储器,一般flash存储设备分为Nandflash和Norflash。这两种flash各有优缺点。在读写速度上,norflash的读速度快一些,nandflash的写速度会快一些。Nandflash的容量一般都比Norflash大很多,而且相比价格比较便宜。但是Norflash支持XIP,而nandflash不支持,而且Nandflash可能有坏块。相关的比较,网上很多文章都有介绍,这里就说这么多了。这里介绍nandflash驱动
2、,在WinCE中,有专门针对flash存储设备驱动的支持,一般传统采用FAL+FMD的架构。在WinCE最新的版本中,也就是WindowsCE6.0R2中,还支持MDD+PDD的架构。在FAL+FMD架构中,FAL层由微软来实现,我们需要实现FMD层的相关接口函数。在MDD+PDD的架构中,MDD替换了原来架构中的FAL,而PDD相当于原来的FMD,只要实现PDD层就可以了。如果你的系统已经升级到WinCE6.0R2,那么你应该可以在WINCE600PublicCOMMONOAKDRIVERS目录下面找到这两种架构驱动的源代码。由于MDD
3、+PDD的架构在WinCE6.0R2中才有支持,本人也没有实现过。所以这里只介绍基于FAL+FMD架构下,nandflash驱动的开发,这也是目前大家都采用的开发flash驱动的架构。如上面所说,我们需要实现FMD层的相关接口,下面来介绍一下各个接口函数:1.PVOIDFMD_Init(LPCTSTRlpActiveReg,PPCI_REG_INFOpRegIn,PPCI_REG_INFOpRegOut):这个是Flash设备的初始化函数。在WinCE启动的时候,要加载Flash驱动时,首先调用这个函数对flash设备进行初始化。如果你的系统中有n
4、andflash的controller,那么你需要在这里对你的nandflashcontroller进行初始化。如果没有的话,你需要针对你的硬件设计进行相关的片选,时序等进行配置。返回一个handle表示成功,这个handle将被FMD_Deinit(..)函数用到,如果返回NULL表示失败。2.BOOLFMD_Deinit(PVOIDhFMD):这个函数在nandflash驱动卸载的时候被调用,参数就是FMD_Init函数返回的Handle.一般在这个函数里面,你可以释放一些用到的资源,然后关闭nandflashcontroller。3.BOOL
5、FMD_ReadSector(SECTOR_ADDRstartSectorAddr,LPBYTEpSectorBuff,PSectorInfopSectorInfoBuff,DWORDdwNumSectors):这个函数用于读nandflash的一个扇区。对于nandflash来说,分大page和小page,大page是2048个bytes一页,小page是512个bytes一页。所以大page每个扇区有2048bytes,小page每个扇区有512bytes。startSectorAddr:nandflash物理扇区的起始地址,对于nandfla
6、sh来说,就是nandflash中从哪个page开始。pSectorBuff:扇区数据buffer,从nandflash中读出的每一个扇区的数据都存放在这个buffer中。pSectorInfoBuff:扇区信息buffer,一般每个扇区的信息会被保存在nandflash的带外数据中,针对小page,带外数据有16bytes,大page有64bytes。从nandflash的带外数据将该扇区的相关信息读出来,存放在这个buffer中。dwNumSectors:读取多少个扇区,对于nandflash来说相当于读取多少个page。4.BOOLFMD_W
7、riteSector(SECTOR_ADDRstartSectorAddr,LPBYTEpSectorBuff,PSectorInfopSectorInfoBuff,DWORDdwNumSectors):该函数用于写nandflash的一个扇区。参数和上面的FMD_ReadSector的参数意思一样,就不多说了。5.BOOLFMD_EraseBlock(BLOCK_IDblockID):该函数用于擦出nandflash的一个block,参数为要擦除nandflash的block地址,也就是第几个block。6.DWORDFMD_GetBlockSt
8、atus(BLOCK_IDblockID):该函数获得nandflash中某一个block的状态。参数为nandflash
此文档下载收益归作者所有