新聞中心

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

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

        作者: 時間:2009-05-27 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/258023.htm
        然后編寫應用程序,主要就是通過CreateFile來打開DSK1:設備,然后通過DeviceIoControl(..)函數來調用FMD_OEMIoControl(..)函數,來達到直接讀/寫/擦除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)

          ;

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

        2. 以Nandflash為例,當然對于來說大同小異,注冊表配置如下:

          [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

        然后編寫應用程序,主要就是通過OpenStore來打開NSFlash,然后通過DeviceIoControl(..)函數來調用FMD_OEMIoControl(..)函數,來達到直接讀/寫/擦除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)

          ;

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

        總結一下,上面的兩種方法大致原理其實是一樣的,都是通過DeviceIoControl函數來調用FMD_OEMIoControl函數,然后達到直接訪問Flash驅動的目的,這樣就可以在應用程序中直接讀/寫/擦除Flash設備了。

        最后需要注意的是:你的Flash驅動里面需要對讀/寫/擦除等直接操作Flash硬件的函數進行保護,因為Flash設備應該是由的文件系統來管理的,而現在你的應用程序也可以直接訪問它了,所以保險起見,添加互斥量保護避免訪問沖突。

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 麻栗坡县| 许昌县| 金沙县| 德昌县| 洛扎县| 图片| 赤水市| 封开县| 包头市| 乐山市| 册亨县| 扶风县| 克什克腾旗| 长治市| 延津县| 枣强县| 高陵县| 临沧市| 北海市| 阳江市| 自治县| 廉江市| 文登市| 高碑店市| 大同县| 黔东| 壶关县| 黎城县| 娄底市| 蕲春县| 东台市| 临桂县| 慈利县| 乐亭县| 山东省| 八宿县| 迁安市| 颍上县| 焦作市| 宾川县| 奉节县|