資料介紹
在網(wǎng)上的很多論壇中都看到有人提問(wèn):應(yīng)用程序如何直接讀寫(xiě)Flash的扇區(qū),或者是類似的問(wèn)題??傊?,就是希望應(yīng)用程序能夠直接訪問(wèn)Flash設(shè)備,直接讀寫(xiě)扇區(qū)的數(shù)據(jù),或者作其他的操作。這幾天沒(méi)事,就嘗試著做了一下,把我的方法介紹給大家。
先做個(gè)簡(jiǎn)單的介紹。WinCE支持Flash設(shè)備,一般指Nandflash或者是NORFlash,采用的架構(gòu)一般是FAL+FMD架構(gòu),我們實(shí)現(xiàn)FMD相關(guān)的接口函數(shù),F(xiàn)lash的驅(qū)動(dòng)就算完成了。當(dāng)WinCE啟動(dòng)以后,我們能夠看到Flash設(shè)備的磁盤(pán)。我們可以操作磁盤(pán)上面的文件,但是不能直接操作flash設(shè)備,對(duì)Flash設(shè)備的操作無(wú)非就是:讀,寫(xiě),擦除,讀ID。
現(xiàn)在開(kāi)始介紹實(shí)現(xiàn)的方法。我們?nèi)绻朐趹?yīng)用程序中直接調(diào)用FMD中的FMD_ReadSector(。.),F(xiàn)MD_WriteSector(。.),F(xiàn)MD_EraseBlock(。.)是不太現(xiàn)實(shí)的。這里再補(bǔ)充一下,這三個(gè)函數(shù)分別是Flash的讀扇區(qū),寫(xiě)扇區(qū),擦除塊的函數(shù)。好像有點(diǎn)羅嗦了。但是我們可以在應(yīng)用程序中調(diào)用到FMD_OEMIoControl(。.)函數(shù),這個(gè)是可以做到的。所以我們需要改一下Flash設(shè)備的驅(qū)動(dòng)程序,也就是改Flash設(shè)備驅(qū)動(dòng)中的FMD_OEMIoControl(。.)這個(gè)函數(shù)。我的改動(dòng)如下:
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(。.);//調(diào)用讀Sector函數(shù)
break;
case 0xff654321:
FMD_WriteSector(。.);//調(diào)用寫(xiě)Sector函數(shù)
break;
case 0xff123457:
FMD_EraseBlock(。.);//調(diào)用擦除Block函數(shù)
break;
default:
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: unrecognizedIOCTL(0x%x).rn”), dwIoControlCode));
return(FALSE);
return(TRUE);
在FMD_OEMIoControl(。.)函數(shù)里面增加了3個(gè)case,這3個(gè)case里面調(diào)用了讀/寫(xiě)/擦除函數(shù)。至于Case的值,我是隨便定義的。這樣Flash設(shè)備的驅(qū)動(dòng)部分就改完了。
在改完Flash驅(qū)動(dòng)以后,我下面會(huì)提供兩種方法,每一種方法都和Flash設(shè)備的注冊(cè)表配置有關(guān):
1. 以Nandflash為例,當(dāng)然對(duì)于NORFlash來(lái)說(shuō)大同小異,注冊(cè)表配置如下:
?。跦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
[HKEY_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
先做個(gè)簡(jiǎn)單的介紹。WinCE支持Flash設(shè)備,一般指Nandflash或者是NORFlash,采用的架構(gòu)一般是FAL+FMD架構(gòu),我們實(shí)現(xiàn)FMD相關(guān)的接口函數(shù),F(xiàn)lash的驅(qū)動(dòng)就算完成了。當(dāng)WinCE啟動(dòng)以后,我們能夠看到Flash設(shè)備的磁盤(pán)。我們可以操作磁盤(pán)上面的文件,但是不能直接操作flash設(shè)備,對(duì)Flash設(shè)備的操作無(wú)非就是:讀,寫(xiě),擦除,讀ID。
現(xiàn)在開(kāi)始介紹實(shí)現(xiàn)的方法。我們?nèi)绻朐趹?yīng)用程序中直接調(diào)用FMD中的FMD_ReadSector(。.),F(xiàn)MD_WriteSector(。.),F(xiàn)MD_EraseBlock(。.)是不太現(xiàn)實(shí)的。這里再補(bǔ)充一下,這三個(gè)函數(shù)分別是Flash的讀扇區(qū),寫(xiě)扇區(qū),擦除塊的函數(shù)。好像有點(diǎn)羅嗦了。但是我們可以在應(yīng)用程序中調(diào)用到FMD_OEMIoControl(。.)函數(shù),這個(gè)是可以做到的。所以我們需要改一下Flash設(shè)備的驅(qū)動(dòng)程序,也就是改Flash設(shè)備驅(qū)動(dòng)中的FMD_OEMIoControl(。.)這個(gè)函數(shù)。我的改動(dòng)如下:
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(。.);//調(diào)用讀Sector函數(shù)
break;
case 0xff654321:
FMD_WriteSector(。.);//調(diào)用寫(xiě)Sector函數(shù)
break;
case 0xff123457:
FMD_EraseBlock(。.);//調(diào)用擦除Block函數(shù)
break;
default:
DEBUGMSG(1, (TEXT(“FMD_OEMIoControl: unrecognizedIOCTL(0x%x).rn”), dwIoControlCode));
return(FALSE);
return(TRUE);
在FMD_OEMIoControl(。.)函數(shù)里面增加了3個(gè)case,這3個(gè)case里面調(diào)用了讀/寫(xiě)/擦除函數(shù)。至于Case的值,我是隨便定義的。這樣Flash設(shè)備的驅(qū)動(dòng)部分就改完了。
在改完Flash驅(qū)動(dòng)以后,我下面會(huì)提供兩種方法,每一種方法都和Flash設(shè)備的注冊(cè)表配置有關(guān):
1. 以Nandflash為例,當(dāng)然對(duì)于NORFlash來(lái)說(shuō)大同小異,注冊(cè)表配置如下:
?。跦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
[HKEY_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燒寫(xiě)驅(qū)動(dòng)介紹
- 通過(guò)串口燒寫(xiě)STM32程序的教程方法 0次下載
- STM32讀寫(xiě)內(nèi)部flash注意點(diǎn)
- 軟件優(yōu)化Flash擦除時(shí)間長(zhǎng)的方法
- STM32內(nèi)部Flash讀寫(xiě)問(wèn)題
- Android應(yīng)用程序組件間通信的模糊測(cè)試方法 8次下載
- 色環(huán)電阻讀值助手應(yīng)用程序免費(fèi)下載 7次下載
- AVR單片機(jī)中的EEPROM介紹及EEPROM和FLASH的區(qū)別說(shuō)明
- STCISP下載燒寫(xiě)軟件v6.85應(yīng)用程序免費(fèi)下載 25次下載
- TMS470/570平臺(tái)F035設(shè)備Flash應(yīng)用程序編程接口詳細(xì)記錄 30次下載
- 用Labview開(kāi)發(fā)WINCE應(yīng)用程序 17次下載
- WinCE下PCI設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì) 65次下載
- CCS的DSP片外Flash直接燒寫(xiě)設(shè)計(jì) 3次下載
- CCS4向內(nèi)置flash燒寫(xiě)程序過(guò)程 18次下載
- 應(yīng)用筆記_從應(yīng)用程序寫(xiě)FLASH 66次下載
- 【GD32H757Z海棠派開(kāi)發(fā)板使用手冊(cè)】第四講 FMC-片內(nèi)Flash擦寫(xiě)讀實(shí)驗(yàn) 970次閱讀
- GD32的FLASH讀、擦除、寫(xiě)操作 3094次閱讀
- 怎么使用uboot引導(dǎo)應(yīng)用程序? 1360次閱讀
- DPU編譯應(yīng)用程序的不同方法 1579次閱讀
- 淺談串行 EEPROM 的讀/寫(xiě)應(yīng)用程序 2226次閱讀
- 單片機(jī)中EEPROM和FLASH的區(qū)別是什么 3w次閱讀
- 英創(chuàng)信息技術(shù)如何實(shí)現(xiàn)WinCE系統(tǒng)中USB設(shè)備自動(dòng)檢測(cè)概述 1303次閱讀
- 英創(chuàng)信息技術(shù)WinCE下自動(dòng)啟動(dòng)多個(gè)應(yīng)用程序介紹 1601次閱讀
- 英創(chuàng)信息技術(shù)WinCE主板應(yīng)用程序的自動(dòng)啟動(dòng)介紹 1548次閱讀
- 讀、寫(xiě)、擦除是SSD對(duì)NAND的三大基本操作 9915次閱讀
- NOR flash和flash有什么不一樣? 1.1w次閱讀
- SPI FLASH與NOR FLASH的區(qū)別 詳解SPI FLASH與NOR FLASH的不一樣 5.3w次閱讀
- Linux下flash操作讀、寫(xiě)、擦除步驟 1.4w次閱讀
- 開(kāi)發(fā)板燒寫(xiě)程序 7310次閱讀
- JTAG接口在線燒寫(xiě)Flash的實(shí)現(xiàn) 1.5w次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多