資料介紹
在網(wǎng)上的很多論壇中都看到有人提問:應用程序如何直接讀寫Flash的扇區(qū),或者是類似的問題??傊褪窍M麘贸绦蚰軌蛑苯釉L問Flash設備,直接讀寫扇區(qū)的數(shù)據(jù),或者作其他的操作。這幾天沒事,就嘗試著做了一下,把我的方法介紹給大家。
先做個簡單的介紹。WinCE支持Flash設備,一般指Nandflash或者是NORFlash,采用的架構一般是FAL+FMD架構,我們實現(xiàn)FMD相關的接口函數(shù),F(xiàn)lash的驅動就算完成了。當WinCE啟動以后,我們能夠看到Flash設備的磁盤。我們可以操作磁盤上面的文件,但是不能直接操作flash設備,對Flash設備的操作無非就是:讀,寫,擦除,讀ID。
現(xiàn)在開始介紹實現(xiàn)的方法。我們如果想在應用程序中直接調用FMD中的FMD_ReadSector(。.),F(xiàn)MD_WriteSector(。.),F(xiàn)MD_EraseBlock(。.)是不太現(xiàn)實的。這里再補充一下,這三個函數(shù)分別是Flash的讀扇區(qū),寫扇區(qū),擦除塊的函數(shù)。好像有點羅嗦了。但是我們可以在應用程序中調用到FMD_OEMIoControl(。.)函數(shù),這個是可以做到的。所以我們需要改一下Flash設備的驅動程序,也就是改Flash設備驅動中的FMD_OEMIoControl(。.)這個函數(shù)。我的改動如下:
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函數(shù)
break;
case 0xff654321:
FMD_WriteSector(。.);//調用寫Sector函數(shù)
break;
case 0xff123457:
FMD_EraseBlock(。.);//調用擦除Block函數(shù)
break;
default:
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: unrecognizedIOCTL(0x%x).rn”), dwIoControlCode));
return(FALSE);
return(TRUE);
在FMD_OEMIoControl(。.)函數(shù)里面增加了3個case,這3個case里面調用了讀/寫/擦除函數(shù)。至于Case的值,我是隨便定義的。這樣Flash設備的驅動部分就改完了。
在改完Flash驅動以后,我下面會提供兩種方法,每一種方法都和Flash設備的注冊表配置有關:
1. 以Nandflash為例,當然對于NORFlash來說大同小異,注冊表配置如下:
?。跦KEY_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
?。跦KEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlash]
“Name”=“Ep94xx NAND Flash”
“Folder”=“NANDFlash”
“PartitionDriver”=“MSPart.dll”
“AutoMount”=dword:1
“AutoPart”=dword:1
“AutoFormat”=dword:1
?。跦KEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlashFATFS]
“EnableCache”=dword:1
“CacheSize”=dword:1000
“MountBootable”=dword:1
“Flags”=dword:00000024
“CheckForFormat”=dword:1
先做個簡單的介紹。WinCE支持Flash設備,一般指Nandflash或者是NORFlash,采用的架構一般是FAL+FMD架構,我們實現(xiàn)FMD相關的接口函數(shù),F(xiàn)lash的驅動就算完成了。當WinCE啟動以后,我們能夠看到Flash設備的磁盤。我們可以操作磁盤上面的文件,但是不能直接操作flash設備,對Flash設備的操作無非就是:讀,寫,擦除,讀ID。
現(xiàn)在開始介紹實現(xiàn)的方法。我們如果想在應用程序中直接調用FMD中的FMD_ReadSector(。.),F(xiàn)MD_WriteSector(。.),F(xiàn)MD_EraseBlock(。.)是不太現(xiàn)實的。這里再補充一下,這三個函數(shù)分別是Flash的讀扇區(qū),寫扇區(qū),擦除塊的函數(shù)。好像有點羅嗦了。但是我們可以在應用程序中調用到FMD_OEMIoControl(。.)函數(shù),這個是可以做到的。所以我們需要改一下Flash設備的驅動程序,也就是改Flash設備驅動中的FMD_OEMIoControl(。.)這個函數(shù)。我的改動如下:
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函數(shù)
break;
case 0xff654321:
FMD_WriteSector(。.);//調用寫Sector函數(shù)
break;
case 0xff123457:
FMD_EraseBlock(。.);//調用擦除Block函數(shù)
break;
default:
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: unrecognizedIOCTL(0x%x).rn”), dwIoControlCode));
return(FALSE);
return(TRUE);
在FMD_OEMIoControl(。.)函數(shù)里面增加了3個case,這3個case里面調用了讀/寫/擦除函數(shù)。至于Case的值,我是隨便定義的。這樣Flash設備的驅動部分就改完了。
在改完Flash驅動以后,我下面會提供兩種方法,每一種方法都和Flash設備的注冊表配置有關:
1. 以Nandflash為例,當然對于NORFlash來說大同小異,注冊表配置如下:
?。跦KEY_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
?。跦KEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlash]
“Name”=“Ep94xx NAND Flash”
“Folder”=“NANDFlash”
“PartitionDriver”=“MSPart.dll”
“AutoMount”=dword:1
“AutoPart”=dword:1
“AutoFormat”=dword:1
?。跦KEY_LOCAL_MACHINESystemStorageManagerProfilesNSFlashFATFS]
“EnableCache”=dword:1
“CacheSize”=dword:1000
“MountBootable”=dword:1
“Flags”=dword:00000024
“CheckForFormat”=dword:1
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 可供用戶修改的FLASH燒寫驅動介紹
- 通過串口燒寫STM32程序的教程方法 0次下載
- STM32讀寫內部flash注意點
- 軟件優(yōu)化Flash擦除時間長的方法
- STM32內部Flash讀寫問題
- Android應用程序組件間通信的模糊測試方法 8次下載
- 色環(huán)電阻讀值助手應用程序免費下載 7次下載
- AVR單片機中的EEPROM介紹及EEPROM和FLASH的區(qū)別說明
- STCISP下載燒寫軟件v6.85應用程序免費下載 26次下載
- TMS470/570平臺F035設備Flash應用程序編程接口詳細記錄 30次下載
- 用Labview開發(fā)WINCE應用程序 17次下載
- WinCE下PCI設備驅動程序的設計 65次下載
- CCS的DSP片外Flash直接燒寫設計 3次下載
- CCS4向內置flash燒寫程序過程 18次下載
- 應用筆記_從應用程序寫FLASH 66次下載
- FLASH數(shù)據(jù)丟失的解決方法 512次閱讀
- 【GD32H757Z海棠派開發(fā)板使用手冊】第四講 FMC-片內Flash擦寫讀實驗 1352次閱讀
- GD32的FLASH讀、擦除、寫操作 4510次閱讀
- 怎么使用uboot引導應用程序? 1544次閱讀
- DPU編譯應用程序的不同方法 1768次閱讀
- 淺談串行 EEPROM 的讀/寫應用程序 2404次閱讀
- 英創(chuàng)信息技術如何實現(xiàn)WinCE系統(tǒng)中USB設備自動檢測概述 1418次閱讀
- 英創(chuàng)信息技術WinCE下自動啟動多個應用程序介紹 1723次閱讀
- 英創(chuàng)信息技術WinCE主板應用程序的自動啟動介紹 1654次閱讀
- 讀、寫、擦除是SSD對NAND的三大基本操作 1w次閱讀
- NOR flash和flash有什么不一樣? 1.1w次閱讀
- SPI FLASH與NOR FLASH的區(qū)別 詳解SPI FLASH與NOR FLASH的不一樣 5.4w次閱讀
- Linux下flash操作讀、寫、擦除步驟 1.5w次閱讀
- 開發(fā)板燒寫程序 7440次閱讀
- JTAG接口在線燒寫Flash的實現(xiàn) 1.5w次閱讀
下載排行
本周
- 1EMC電路設計工程師必備的EMC基礎
- 0.42 MB | 4次下載 | 2 積分
- 2AU3116 2×60W模擬輸入雙通道Class-D 音頻功率放大器數(shù)據(jù)手冊
- 1.19 MB | 1次下載 | 免費
- 3低壓降肖特基整流管SR340L數(shù)據(jù)手冊
- 0.78 MB | 1次下載 | 免費
- 4ZX8002E 觸摸調光LED集成IC數(shù)據(jù)手冊
- 2.27 MB | 次下載 | 免費
- 5SOD-323塑料封裝ESD保護二極管SD05T系列規(guī)格書
- 1.07 MB | 次下載 | 免費
- 6SOT-23塑料封裝ESD保護二極管SMxx Series系列規(guī)格書
- 0.93 MB | 次下載 | 免費
- 7高效率整流二極管HER151 THRU HER158數(shù)據(jù)手冊
- 0.54 MB | 次下載 | 免費
- 8低壓降肖特基整流管SL22 THRU SL210數(shù)據(jù)手冊
- 1.03 MB | 次下載 | 免費
本月
- 1三相逆變主電路的原理圖和PCB資料合集免費下載
- 27.35 MB | 111次下載 | 1 積分
- 2運算放大器基本電路中文資料
- 1.30 MB | 16次下載 | 免費
- 3蘋果iphone 11電路原理圖
- 4.98 MB | 11次下載 | 5 積分
- 4TL494工業(yè)用開關電源原理圖資料
- 0.22 MB | 10次下載 | 1 積分
- 5常用電子元器件介紹
- 3.21 MB | 8次下載 | 免費
- 6QW2893應急燈專用檢測芯片
- 590.40 KB | 4次下載 | 免費
- 7相關協(xié)議信號總結
- 0.94 MB | 4次下載 | 免費
- 8EMC電路設計工程師必備的EMC基礎
- 0.42 MB | 4次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935130次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191390次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183344次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81591次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評論