<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 在WinCE下,應用程序直接讀/寫(xiě)/擦除flash設備的方法

在WinCE下,應用程序直接讀/寫(xiě)/擦除flash設備的方法

作者: 時(shí)間:2009-05-27 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/258023.htm
然后編寫(xiě)應用程序,主要就是通過(guò)CreateFile來(lái)打開(kāi)DSK1:設備,然后通過(guò)DeviceIoControl(..)函數來(lái)調用FMD_OEMIoControl(..)函數,來(lái)達到直接讀/寫(xiě)/擦除Flash設備的目的。應用程序代碼如下:

  HANDLE hFirm;

  hFirm = CreateFile(TEXT(DSK1:), GENERIC_READ GENERIC_WRITE,0,NULL, OPEN_EXISTING, 0, NULL);

  printf(Open Flash Device Failed);

  return 0;

  iRet = DeviceIoControl(hFirm, 0xff123456, 1, 2, 3, 4, 5,6);//Read Flash Sector

  iRet = DeviceIoControl(hFirm, 0xff654321, 1, 2, 3, 4, 5,6);//Write Flash Sector

  iRet = DeviceIoControl(hFirm, 0xff123457, 1, 2, 3, 4, 5,6);//Erase Flash Block

  printf(DeviceIoControl OKrn);

  while(1)

  ;

通過(guò)上面的應用程序,就能夠調用到Flash設備驅動(dòng)中的FMD_OEMIoControl(..)函數,這樣根據不同的case就可以調用讀/寫(xiě)/擦除函數了。

2. 以Nandflash為例,當然對于來(lái)說(shuō)大同小異,注冊表配置如下:

  [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

  [HKEY_LOCAL_MACHINESystemStorageManagerAutoLoadNSFlash]

  DriverPath=DriversBuiltInNANDFlash

  LoadFlags=dword:0

  BootPhase=dword:1

然后編寫(xiě)應用程序,主要就是通過(guò)OpenStore來(lái)打開(kāi)NSFlash,然后通過(guò)DeviceIoControl(..)函數來(lái)調用FMD_OEMIoControl(..)函數,來(lái)達到直接讀/寫(xiě)/擦除Flash設備的目的。應用程序代碼如下:

  HANDLE hFirm;

  hFirm = OpenStore(LNSFlash);

  printf(Open Flash Device Failed);

  return 0;

  iRet = DeviceIoControl(hFirm, 0xff123456, 1, 2, 3, 4, 5, 6);

  iRet = DeviceIoControl(hFirm, 0xff654321, 1, 2, 3, 4, 5, 6);

  iRet = DeviceIoControl(hFirm, 0xff123457, 1, 2, 3, 4, 5, 6);

  printf(DeviceIoControl OKrn);

  while(1)

  ;

通過(guò)這種方法,也可以在應用程序中調用到FMD_OEMIoControl(..)函數,從而達到直接訪(fǎng)問(wèn)Flash設備的目的。

總結一下,上面的兩種方法大致原理其實(shí)是一樣的,都是通過(guò)DeviceIoControl函數來(lái)調用FMD_OEMIoControl函數,然后達到直接訪(fǎng)問(wèn)Flash驅動(dòng)的目的,這樣就可以在應用程序中直接讀/寫(xiě)/擦除Flash設備了。

最后需要注意的是:你的Flash驅動(dòng)里面需要對讀/寫(xiě)/擦除等直接操作Flash硬件的函數進(jìn)行保護,因為Flash設備應該是由的文件系統來(lái)管理的,而現在你的應用程序也可以直接訪(fǎng)問(wèn)它了,所以保險起見(jiàn),添加互斥量保護避免訪(fǎng)問(wèn)沖突。

上面的所有實(shí)現,都是在6.0上面做得,相信在5.0上面應該差不多。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>