资料介绍
在网上的很多论坛中都看到有人提问:应用程序如何直接读写Flash的扇区,或者是类似的问题。总之,就是希望应用程序能够直接访问Flash设备,直接读写扇区的数据,或者作其他的操作。这几天没事,就尝试着做了一下,把我的方法介绍给大家。
先做个简单的介绍。WinCE支持Flash设备,一般指Nandflash或者是NORFlash,采用的架构一般是FAL+FMD架构,我们实现FMD相关的接口函数,Flash的驱动就算完成了。当WinCE启动以后,我们能够看到Flash设备的磁盘。我们可以操作磁盘上面的文件,但是不能直接操作flash设备,对Flash设备的操作无非就是:读,写,擦除,读ID。
现在开始介绍实现的方法。我们如果想在应用程序中直接调用FMD中的FMD_ReadSector(。.),FMD_WriteSector(。.),FMD_EraseBlock(。.)是不太现实的。这里再补充一下,这三个函数分别是Flash的读扇区,写扇区,擦除块的函数。好像有点罗嗦了。但是我们可以在应用程序中调用到FMD_OEMIoControl(。.)函数,这个是可以做到的。所以我们需要改一下Flash设备的驱动程序,也就是改Flash设备驱动中的FMD_OEMIoControl(。.)这个函数。我的改动如下:
BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf,DWORDnInBufSize, PBYTE pOutBuf, DWORD nOutBufSize,PDWORDpBytesReturned)
PFMDInterface pInterface = (PFMDInterface)pOutBuf;
RETAILMSG(1, (TEXT(“FMD_OEMIoControl: control code is0x%xrn”),dwIoControlCode));
switch(dwIoControlCode)
case IOCTL_FMD_GET_INTERFACE:
if (!pOutBuf nOutBufSize 《 sizeof(FMDInterface))
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: IOCTL_FMD_GET_INTERFACEbadmeter(s).rn”)));
return(FALSE);
pInterface-》cbSize = sizeof(FMDInterface);
pInterface-》pInit = FMD_Init;
pInterface-》pDeInit = FMD_Deinit;
pInterface-》pGetInfo = FMD_GetInfo;
pInterface-》pGetInfoEx = NULL; //FMD_GetInfoEx;
pInterface-》pGetBlockStatus = FMD_GetBlockStatus;
pInterface-》pSetBlockStatus = FMD_SetBlockStatus;
pInterface-》pReadSector = FMD_ReadSector;
pInterface-》pWriteSector = FMD_WriteSector;
pInterface-》pEraseBlock = FMD_EraseBlock;
pInterface-》pPowerUp = FMD_PowerUp;
pInterface-》pPowerDown = FMD_PowerDown;
pInterface-》pGetPhysSectorAddr = NULL;
pInterface-》pOEMIoControl = FMD_OEMIoControl;
break;
case 0xff123456:
FMD_ReadSector(。.);//调用读Sector函数
break;
case 0xff654321:
FMD_WriteSector(。.);//调用写Sector函数
break;
case 0xff123457:
FMD_EraseBlock(。.);//调用擦除Block函数
break;
default:
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: unrecognizedIOCTL(0x%x).rn”), dwIoControlCode));
return(FALSE);
return(TRUE);
在FMD_OEMIoControl(。.)函数里面增加了3个case,这3个case里面调用了读/写/擦除函数。至于Case的值,我是随便定义的。这样Flash设备的驱动部分就改完了。
在改完Flash驱动以后,我下面会提供两种方法,每一种方法都和Flash设备的注册表配置有关:
1. 以Nandflash为例,当然对于NORFlash来说大同小异,注册表配置如下:
[HKEY_LOCAL_MACHINEDriversBuiltInNANDFlash]
“Dll”=“ep94xxnandflash.dll”
“Prefix”=“DSK”
“Order”=dword:4
;“Ioctl”=dword:4
“Profile”=“NSFlash”
“IClass”=“A4E7EDDA-E575-4252-9D6B-4195D48BB865”
; Override names in default profile
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlash]
“Name”=“Ep94xx NAND Flash”
“Folder”=“NANDFlash”
“PartitionDriver”=“MSPart.dll”
“AutoMount”=dword:1
“AutoPart”=dword:1
“AutoFormat”=dword:1
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlashFATFS]
“EnableCache”=dword:1
“CacheSize”=dword:1000
“MountBootable”=dword:1
“Flags”=dword:00000024
“CheckForFormat”=dword:1
先做个简单的介绍。WinCE支持Flash设备,一般指Nandflash或者是NORFlash,采用的架构一般是FAL+FMD架构,我们实现FMD相关的接口函数,Flash的驱动就算完成了。当WinCE启动以后,我们能够看到Flash设备的磁盘。我们可以操作磁盘上面的文件,但是不能直接操作flash设备,对Flash设备的操作无非就是:读,写,擦除,读ID。
现在开始介绍实现的方法。我们如果想在应用程序中直接调用FMD中的FMD_ReadSector(。.),FMD_WriteSector(。.),FMD_EraseBlock(。.)是不太现实的。这里再补充一下,这三个函数分别是Flash的读扇区,写扇区,擦除块的函数。好像有点罗嗦了。但是我们可以在应用程序中调用到FMD_OEMIoControl(。.)函数,这个是可以做到的。所以我们需要改一下Flash设备的驱动程序,也就是改Flash设备驱动中的FMD_OEMIoControl(。.)这个函数。我的改动如下:
BOOL FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf,DWORDnInBufSize, PBYTE pOutBuf, DWORD nOutBufSize,PDWORDpBytesReturned)
PFMDInterface pInterface = (PFMDInterface)pOutBuf;
RETAILMSG(1, (TEXT(“FMD_OEMIoControl: control code is0x%xrn”),dwIoControlCode));
switch(dwIoControlCode)
case IOCTL_FMD_GET_INTERFACE:
if (!pOutBuf nOutBufSize 《 sizeof(FMDInterface))
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: IOCTL_FMD_GET_INTERFACEbadmeter(s).rn”)));
return(FALSE);
pInterface-》cbSize = sizeof(FMDInterface);
pInterface-》pInit = FMD_Init;
pInterface-》pDeInit = FMD_Deinit;
pInterface-》pGetInfo = FMD_GetInfo;
pInterface-》pGetInfoEx = NULL; //FMD_GetInfoEx;
pInterface-》pGetBlockStatus = FMD_GetBlockStatus;
pInterface-》pSetBlockStatus = FMD_SetBlockStatus;
pInterface-》pReadSector = FMD_ReadSector;
pInterface-》pWriteSector = FMD_WriteSector;
pInterface-》pEraseBlock = FMD_EraseBlock;
pInterface-》pPowerUp = FMD_PowerUp;
pInterface-》pPowerDown = FMD_PowerDown;
pInterface-》pGetPhysSectorAddr = NULL;
pInterface-》pOEMIoControl = FMD_OEMIoControl;
break;
case 0xff123456:
FMD_ReadSector(。.);//调用读Sector函数
break;
case 0xff654321:
FMD_WriteSector(。.);//调用写Sector函数
break;
case 0xff123457:
FMD_EraseBlock(。.);//调用擦除Block函数
break;
default:
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: unrecognizedIOCTL(0x%x).rn”), dwIoControlCode));
return(FALSE);
return(TRUE);
在FMD_OEMIoControl(。.)函数里面增加了3个case,这3个case里面调用了读/写/擦除函数。至于Case的值,我是随便定义的。这样Flash设备的驱动部分就改完了。
在改完Flash驱动以后,我下面会提供两种方法,每一种方法都和Flash设备的注册表配置有关:
1. 以Nandflash为例,当然对于NORFlash来说大同小异,注册表配置如下:
[HKEY_LOCAL_MACHINEDriversBuiltInNANDFlash]
“Dll”=“ep94xxnandflash.dll”
“Prefix”=“DSK”
“Order”=dword:4
;“Ioctl”=dword:4
“Profile”=“NSFlash”
“IClass”=“A4E7EDDA-E575-4252-9D6B-4195D48BB865”
; Override names in default profile
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlash]
“Name”=“Ep94xx NAND Flash”
“Folder”=“NANDFlash”
“PartitionDriver”=“MSPart.dll”
“AutoMount”=dword:1
“AutoPart”=dword:1
“AutoFormat”=dword:1
[HKEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlashFATFS]
“EnableCache”=dword:1
“CacheSize”=dword:1000
“MountBootable”=dword:1
“Flags”=dword:00000024
“CheckForFormat”=dword:1
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 可供用户修改的FLASH烧写驱动介绍
- 通过串口烧写STM32程序的教程方法 0次下载
- STM32读写内部flash注意点
- 软件优化Flash擦除时间长的方法
- STM32内部Flash读写问题
- Android应用程序组件间通信的模糊测试方法 8次下载
- 色环电阻读值助手应用程序免费下载 7次下载
- AVR单片机中的EEPROM介绍及EEPROM和FLASH的区别说明
- STCISP下载烧写软件v6.85应用程序免费下载 25次下载
- TMS470/570平台F035设备Flash应用程序编程接口详细记录 30次下载
- 用Labview开发WINCE应用程序 17次下载
- WinCE下PCI设备驱动程序的设计 65次下载
- CCS的DSP片外Flash直接烧写设计 3次下载
- CCS4向内置flash烧写程序过程 18次下载
- 应用笔记_从应用程序写FLASH 66次下载
- 【GD32H757Z海棠派开发板使用手册】第四讲 FMC-片内Flash擦写读实验 970次阅读
- GD32的FLASH读、擦除、写操作 3094次阅读
- 怎么使用uboot引导应用程序? 1360次阅读
- DPU编译应用程序的不同方法 1579次阅读
- 浅谈串行 EEPROM 的读/写应用程序 2226次阅读
- 单片机中EEPROM和FLASH的区别是什么 3w次阅读
- 英创信息技术如何实现WinCE系统中USB设备自动检测概述 1303次阅读
- 英创信息技术WinCE下自动启动多个应用程序介绍 1601次阅读
- 英创信息技术WinCE主板应用程序的自动启动介绍 1548次阅读
- 读、写、擦除是SSD对NAND的三大基本操作 9915次阅读
- NOR flash和flash有什么不一样? 1.1w次阅读
- SPI FLASH与NOR FLASH的区别 详解SPI FLASH与NOR FLASH的不一样 5.3w次阅读
- Linux下flash操作读、写、擦除步骤 1.4w次阅读
- 开发板烧写程序 7310次阅读
- JTAG接口在线烧写Flash的实现 1.5w次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多