新聞中心

        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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石阡县| 阿拉尔市| 镇安县| 睢宁县| 桦南县| 南皮县| 汶川县| 麻阳| 海林市| 婺源县| 云南省| 通海县| 塔城市| 宁武县| 昔阳县| 外汇| 成安县| 平泉县| 香港| 辽阳市| 嘉鱼县| 望江县| 佳木斯市| 万安县| 白沙| 蓬溪县| 桂东县| 盖州市| 昭觉县| 宜春市| 沧源| 遂川县| 房产| 晋江市| 谢通门县| 怀安县| 徐汇区| 邻水| 嘉峪关市| 东丽区| 崇明县|