在WinCE下,應用程序直接讀/寫/擦除flash設備的方法
然后編寫應用程序,主要就是通過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為例,當然對于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
[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設備應該是由WinCE的文件系統來管理的,而現在你的應用程序也可以直接訪問它了,所以保險起見,添加互斥量保護避免訪問沖突。
上面的所有實現,都是在WinCE6.0上面做得,相信在WinCE5.0上面應該差不多。
評論