預設 MFDeploy 僅能部署 TinyCLR 及應用程式至特定 Flash 區塊。作者開發 Flash 遠端讀寫外掛,突破區塊限制,可讀寫 Bootstrap、Config、Code、Deployment、Storage、FileSystem 等所有區塊,並支援直接執行下載程式無需重啟。
const BlockRange g_K9F2G_8_BlockStatus[] = {
{ BLOCKTYPE_BOOTSTRAP, 0, 1 },
{ BLOCKTYPE_CONFIG, 2, 2 },
{ BLOCKTYPE_CODE, 3, 24 },
{ BLOCKTYPE_DEPLOYMENT, 25, 29 },
{ BLOCKTYPE_DEPLOYMENT, 30, 34 },
{ BLOCKTYPE_DEPLOYMENT, 35, 39 },
{ BLOCKTYPE_DEPLOYMENT, 40, 48 },
{ BLOCKTYPE_STORAGE_A, 49, 49 },
{ BLOCKTYPE_STORAGE_B, 50, 50 },
{ BLOCKTYPE_FILESYSTEM, 51, FLASH_BLOCK_COUNT-1 }
};
public class PlugInHandle : MFPlugInMenuItem {
public override string Name { get { return "Read/Write Flash"; } }
public override void OnAction(IMFDeployForm form, MFDevice device) {
if (form == null || device == null) return;
(new frmRWFlash(form, device)).ShowDialog();
}
}
呼叫 engine.GetFlashSectorMap() 取得 Monitor_FlashSectorMap.Reply,解析 m_address、m_size、m_flags (用途:Application、Bootstrap、Code、Config、Deployment、FileSystem、Storage 等)。
// 讀取
bool ret = engine.ReadMemory(addr, buflen, out bytData);
// 寫入
bool ret = engine.WriteMemory(addr, FileIndex.GetBytes(), 0, (int)FileIndex.HeadSize);
編輯 \CLR\Debugger\Debugger.cpp 中 CheckPermission 函數,直接回傳 true:
bool CLR_DBG_Debugger::CheckPermission(ByteAddress address, int mode) {
NATIVE_PROFILE_CLR_DEBUGGER();
return true; // 允許所有區塊讀寫
/* 原本依區塊類型限制的 switch 邏輯註解掉 */
}
MFDeploy.exe 同目錄下 PlugIn 資料夾。Plug-in 選單出現 Read/Write Flash。此外掛為後續「遠端檔案瀏覽器」奠基,並曾用於將 LCD 顯示用位圖下載至裝置。