电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>基于WinCE应用程序直接读/写/擦除flash设备的方法

基于WinCE应用程序直接读/写/擦除flash设备的方法

2017-11-03 | rar | 0.6 MB | 次下载 | 1积分

资料介绍

在网上的很多论坛中都看到有人提问:应用程序如何直接读写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
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费