LPC1300模擬的磁盤有不用的卷標號,卷標號取決于代碼讀保護(CRP)的設置和重新編程過程中的細微改變。這些內(nèi)容在下面會給出簡要介紹,完整的文檔請參考LPC1300用戶手冊中的UM10375部分。
如果CRP1或者CRP2可用,當文件被刪除或復制新文件而導致原文件改變,用戶flash將被擦除。
如果CRP1可用,或者兩個CRP都不用,用戶flash將被擦除或重新編程(當復制新文件時)。盡管這樣,也只有被新文件覆蓋的區(qū)域才會被擦除或重新編程。因此,理想情況下,新的編程文件將包含整個flash容量(LPC1300為32KB),這樣,整個flash容量將處于已知狀態(tài)。使用填補(32KB或flash大?。┚幊涛募部梢酝ㄟ^編程工具,對已連接的LPC部件進行錯誤檢查(比較新的固件文件與設備上firmware.bin文件的大?。?,而不需要額外的配置信息。
注意:只有Windows命令支持LPC1300flash映像文件夾的復制和刪除。在覆蓋的過程中虛擬盤的空間不足以存儲Windows創(chuàng)建的臨時文件時,覆蓋操作使用Windows的資源管理器將不成功。
圖3LPC1300用戶手冊-CRP磁盤卷標號
引導盤虛擬的FAT文件系統(tǒng),組成了一個單一的文件firmware.bin,文件中包含了整個flash容量的信息。通常,一個盤的容量必須稍大于所需的存儲容量,取決于目錄和頂層的文件系統(tǒng)分配表。在LPC1300虛擬的FAT文件系統(tǒng)下,需要4個額外的塊提供給引導塊、根目錄、文件分配表。因為MCU需要使用ISP來編程整個flash存儲器,這些額外的塊使用RAM和ROM上的數(shù)據(jù)模擬,而不是映射到flash上作為代碼存儲。因此,掉電時文件系統(tǒng)的元數(shù)據(jù)將丟失,只有通過文件寫的方式編入flash的數(shù)據(jù)才會被保存。
在 flash上,寫進文件系統(tǒng)的數(shù)據(jù)按照磁盤塊的順序存儲,以塊4作為起點。如果firmware.bin文件被刪除,PC在運行Windows時將以塊4 作為起點分配任一新的文件,并隨著寫入數(shù)據(jù)的增多而使用更多的塊。這意味著,在Windows中,可以使用任一標準的程序或工具,把固件寫進 LPC1300。在Windows瀏覽器窗口中,用戶可以刪除firmware.bin文件,并拖動一個新文件來編程flash。不幸的是,Mac和 Linux機器上的FAT文件系統(tǒng)以不同的規(guī)則分配塊,數(shù)據(jù)寫進ISP磁盤,固件寫進flash,重新編排。這樣,將導致固件更新不成功。為此,有兩種變 通方法。最常用的方法是適當?shù)母采wfirmware.bin文件,另一個更暴力的方法是獲得管理權限直接進行磁盤設備寫/dev操作。
4、自動化USBISP
有時候,要求系統(tǒng)執(zhí)行固件的更新不需要用戶介入。要求用戶確定哪個盤驅(qū)動器連接到USB設備,或要求他們手動刪除和重寫一個文件,常常是很復雜的事情。在電腦程序的控制下,固件經(jīng)常需要被自動更新。此部分將描述這是如何實現(xiàn)。為了在電腦上全自動化運行,程序需要找到正確的USB設備進行更新,改變USB設備“handle”到一個文件路徑,檢查CRP模式,存盤的文件燒寫到flash,在確保flash內(nèi)容保存的情況下最終卸載盤設備器。這些步驟將被單獨的討論。這能有效的驗證被燒寫的固件文件。通過LPC134X用戶手冊里的“CriterionforValidUserCode”,可以對其進行驗證,這已用WindowsISP工具執(zhí)行過。它也合理的驗證在被燒寫的設備空間里是相同長度。這是在Mac和Linux系統(tǒng)中應用的ISP例子。注意:在這些步驟中產(chǎn)生的一些偏差,在不同操作系統(tǒng)的簡易執(zhí)行中影響不大。
4.1找到正確的USB設備
枚舉USB設備的方法取決于不同的操作系統(tǒng)。在Linux上,大多數(shù)分配提供一個叫l(wèi)susb的程序,這程序能搜索指定供應商ID和產(chǎn)品ID的USB設備。然后,udevadm(目前系統(tǒng)上使用udev設備文件系統(tǒng))可以分列出USB型號ID和系統(tǒng)設備路徑。LPC1300系列的型號ID為“NXP_LPC13XX_IFLASH”。一旦供應商ID、產(chǎn)品ID和型號ID被確認,你肯定會發(fā)現(xiàn)一個處于ISP模式的NXPLPC1300微控制器。在Windows和MacOS-X中,這個步驟有點不同。在Mac上,可以從磁盤數(shù)據(jù)庫取得的USB設備型號信息,也就沒有去找實際USB設備。相反,直到正確的生產(chǎn)商和設備型號被找到,磁盤設備才開始檢測。在Windows下,有相似的過程,通過iTunerUsbManager來檢索磁盤信息。
4.2改變USB設備控制權到文件路徑
在Linux中,一個USB設備的控制權能被轉(zhuǎn)換到文件路徑,通過循環(huán)訪問在udev文件系統(tǒng)中的所有盤設備和為它們的系統(tǒng)設備路徑查詢udevadm,直到一個帶有ISP的USB設備被找到。
1、lsusb以生產(chǎn)商ID和NXPISP設備產(chǎn)品ID來命名。lsusb輸出總線和設備ID到standardout(控制臺)。輸出結果用來為USB設備創(chuàng)建一個udev路徑,例如,總線2設備3的路徑為/dev/bus/usb/002/003。
2、一個盤設備名從/dev截取,在我們的樣品腳本中,我們使用一個與/dev/sd[a-z]匹配的通配符,并在設備間循環(huán),這些設備與像/dev/sda,/dev/sdb,/dev/sdc,etc這樣的組合相匹配。這就可以在系統(tǒng)上找到磁盤驅(qū)動器,包括硬盤和USB大容量存儲器。
3、完整的低級盤設備文件路徑用udevadminfo-qpath–n/dev/sdX查找,如果盤設備與我們找到的USB設備有聯(lián)系,那么返回的文件路徑以低級USB設備文件路徑開頭。
4、最后,mount命令的輸出用于決定在步驟2測試過的盤設備名安裝到linux文件系統(tǒng)的哪個地方。我們現(xiàn)在有了一個文件系統(tǒng)路徑用于我們的的USBISP設備并能夠訪問firmware.bin
在Mac和Windows系統(tǒng)下,我們采用盤操作(替代USB設備操作)和查詢操作系統(tǒng)的盤符和文件路徑
4.3檢查代碼的read保護(CRP)
LPC1300USBISP的特色是設置USB盤的盤符指出CRP模式。USBISPflash編程器的穩(wěn)定設計將檢查盤符來確認CRP沒有使能。在Linux系統(tǒng)下,F(xiàn)AT盤文件系統(tǒng)盤符能用mtools包讀出。遺憾的是,這不被推薦,因為它需要administrative來訪問。另一種方法在Linux系統(tǒng)下讀文件系統(tǒng)盤符是使用mount-l命令,如果你的系統(tǒng)mount版本能夠支持的話。這將列出所有安裝的文件系統(tǒng)和它們的盤符。在Mac和Windows操作系統(tǒng)中,盤符信息顯示在DiskDescription目錄或在Volume中來自WMI各自的目標檢索。
如果CRP1或CRP2被使能,在USBISP盤中的firmware.bin文件在新文件能寫入之前肯定要被刪除來禁止代碼保護。刪除firmware.bin后,設備需要掉電和重連接,以使改變的CRP設置生效,這樣固件就能更新。如果CRP3被使能,設備不能被擦除和固件不能被更新。
4.4寫文件到程序flash
在Windows操作系統(tǒng)下,幾乎任一標準文件系統(tǒng)寫時序都這樣工作,Windows多樣的FAT文件系統(tǒng)以ISP磁盤上的第一個空閑塊作為起始,來分配塊。在Linux操作系統(tǒng)中,設備自己能直接被寫(用/dev),但需要同時使用dd來確認塊序列。這方法不被推薦,因為它要求用戶有administrative的權限。第二個選擇是打開USBISP盤中已存在的firmware.bin并重寫內(nèi)容。如果文件打開后沒有截位,新的數(shù)據(jù)將以與已有文件(ISP固件建立的文件)相同的規(guī)則寫入。(記住“filemetadata”是通過ROM代碼創(chuàng)建的,且不存儲到flash)通過conv=nocreat,notrunc.選項,使用dd來寫入firmware.bin文件,可以實現(xiàn)重寫。如果代碼用C語言,盡可能的使用open(path,O_RDWR)或fopen(path,“r+”)。此外,在Windows操作系統(tǒng)中沒有必要覆蓋已有的文件,這樣,就有存儲空間可用,只要覆蓋或刪除當前文件以釋放存儲空間。在我們提供的Windows程序例子中,我們使了C#函數(shù)System.IO.File.WriteAllBytes(filePath,firmwareData),在寫之前做了簡化處理。
4.5卸載盤設備
大多數(shù)操作系統(tǒng)在一個延時之后將最終完整寫到盤,但強制卸載是最后的有效步驟,以確保操作系統(tǒng)完成數(shù)據(jù)寫入磁盤的操作,這樣的話,當設備成功移除時就會告知用戶。為了卸載操作成功,所有打開的文件包括firmware.bin文件必須先關閉。在Linux操作系統(tǒng)中,可以使用posix(可移值接口)標準umount命令。通常,卸載自動加載的USB大容量存儲設備不需要管理權限。在Mac操作系統(tǒng)中,因為磁盤仲裁器能夠自動管理加載操作,使用DADiskUnmount系統(tǒng)呼叫是最好的路徑。在Windows操作系統(tǒng)中,大多數(shù)用戶使用自我卸載或使用SetupAPI里的CM_Request_Device_Eject函數(shù)。我們的例子中WindowsISP更新器不卸載設備當它,反而,它會顯示一個對話框提醒用戶。
圖4
評論