新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LPC1300通過USB在線系統(tǒng)編程ISP

LPC1300通過USB在線系統(tǒng)編程ISP

作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏

LPC1300模擬的磁盤有不用的卷標(biāo)號(hào),卷標(biāo)號(hào)取決于代碼讀保護(hù)(CRP)的設(shè)置和重新編程過程中的細(xì)微改變。這些內(nèi)容在下面會(huì)給出簡(jiǎn)要介紹,完整的文檔請(qǐng)參考LPC1300用戶手冊(cè)中的UM10375部分。

如果CRP1或者CRP2可用,當(dāng)文件被刪除或復(fù)制新文件而導(dǎo)致原文件改變,用戶flash將被擦除。

如果CRP1可用,或者兩個(gè)CRP都不用,用戶flash將被擦除或重新編程(當(dāng)復(fù)制新文件時(shí))。盡管這樣,也只有被新文件覆蓋的區(qū)域才會(huì)被擦除或重新編程。因此,理想情況下,新的編程文件將包含整個(gè)flash容量(LPC1300為32KB),這樣,整個(gè)flash容量將處于已知狀態(tài)。使用填補(bǔ)(32KB或flash大小)編程文件,也可以通過編程工具,對(duì)已連接的LPC部件進(jìn)行錯(cuò)誤檢查(比較新的固件文件與設(shè)備上firmware.bin文件的大小),而不需要額外的配置信息。

注意:只有Windows命令支持LPC1300flash映像文件夾的復(fù)制和刪除。在覆蓋的過程中虛擬盤的空間不足以存儲(chǔ)Windows創(chuàng)建的臨時(shí)文件時(shí),覆蓋操作使用Windows的資源管理器將不成功。

3LPC1300用戶手冊(cè)-CRP磁盤卷標(biāo)號(hào)

引導(dǎo)盤虛擬的FAT文件系統(tǒng),組成了一個(gè)單一的文件firmware.bin,文件中包含了整個(gè)flash容量的信息。通常,一個(gè)盤的容量必須稍大于所需的存儲(chǔ)容量,取決于目錄和頂層的文件系統(tǒng)分配表。在LPC1300虛擬的FAT文件系統(tǒng)下,需要4個(gè)額外的塊提供給引導(dǎo)塊、根目錄、文件分配表。因?yàn)镸CU需要使用ISP來編程整個(gè)flash存儲(chǔ)器,這些額外的塊使用RAM和ROM上的數(shù)據(jù)模擬,而不是映射到flash上作為代碼存儲(chǔ)。因此,掉電時(shí)文件系統(tǒng)的元數(shù)據(jù)將丟失,只有通過文件寫的方式編入flash的數(shù)據(jù)才會(huì)被保存。

在 flash上,寫進(jìn)文件系統(tǒng)的數(shù)據(jù)按照磁盤塊的順序存儲(chǔ),以塊4作為起點(diǎn)。如果firmware.bin文件被刪除,PC在運(yùn)行Windows時(shí)將以塊4 作為起點(diǎn)分配任一新的文件,并隨著寫入數(shù)據(jù)的增多而使用更多的塊。這意味著,在Windows中,可以使用任一標(biāo)準(zhǔn)的程序或工具,把固件寫進(jìn) LPC1300。在Windows瀏覽器窗口中,用戶可以刪除firmware.bin文件,并拖動(dòng)一個(gè)新文件來編程flash。不幸的是,Mac和 Linux機(jī)器上的FAT文件系統(tǒng)以不同的規(guī)則分配塊,數(shù)據(jù)寫進(jìn)ISP磁盤,固件寫進(jìn)flash,重新編排。這樣,將導(dǎo)致固件更新不成功。為此,有兩種變 通方法。最常用的方法是適當(dāng)?shù)母采wfirmware.bin文件,另一個(gè)更暴力的方法是獲得管理權(quán)限直接進(jìn)行磁盤設(shè)備寫/dev操作。

4、自動(dòng)化USBISP

有時(shí)候,要求系統(tǒng)執(zhí)行固件的更新不需要用戶介入。要求用戶確定哪個(gè)盤驅(qū)動(dòng)器連接到USB設(shè)備,或要求他們手動(dòng)刪除和重寫一個(gè)文件,常常是很復(fù)雜的事情。在電腦程序的控制下,固件經(jīng)常需要被自動(dòng)更新。此部分將描述這是如何實(shí)現(xiàn)。為了在電腦上全自動(dòng)化運(yùn)行,程序需要找到正確的USB設(shè)備進(jìn)行更新,改變USB設(shè)備“handle”到一個(gè)文件路徑,檢查CRP模式,存盤的文件燒寫到flash,在確保flash內(nèi)容保存的情況下最終卸載盤設(shè)備器。這些步驟將被單獨(dú)的討論。這能有效的驗(yàn)證被燒寫的固件文件。通過LPC134X用戶手冊(cè)里的“CriterionforValidUserCode”,可以對(duì)其進(jìn)行驗(yàn)證,這已用WindowsISP工具執(zhí)行過。它也合理的驗(yàn)證在被燒寫的設(shè)備空間里是相同長(zhǎng)度。這是在MacLinux系統(tǒng)中應(yīng)用的ISP例子。注意:在這些步驟中產(chǎn)生的一些偏差,在不同操作系統(tǒng)的簡(jiǎn)易執(zhí)行中影響不大。

4.1找到正確的USB設(shè)備

枚舉USB設(shè)備的方法取決于不同的操作系統(tǒng)。在Linux上,大多數(shù)分配提供一個(gè)叫l(wèi)susb的程序,這程序能搜索指定供應(yīng)商ID和產(chǎn)品ID的USB設(shè)備。然后,udevadm(目前系統(tǒng)上使用udev設(shè)備文件系統(tǒng))可以分列出USB型號(hào)ID和系統(tǒng)設(shè)備路徑。LPC1300系列的型號(hào)ID為“NXP_LPC13XX_IFLASH”。一旦供應(yīng)商ID、產(chǎn)品ID和型號(hào)ID被確認(rèn),你肯定會(huì)發(fā)現(xiàn)一個(gè)處于ISP模式的NXPLPC1300微控制器。在Windows和MacOS-X中,這個(gè)步驟有點(diǎn)不同。在Mac上,可以從磁盤數(shù)據(jù)庫(kù)取得的USB設(shè)備型號(hào)信息,也就沒有去找實(shí)際USB設(shè)備。相反,直到正確的生產(chǎn)商和設(shè)備型號(hào)被找到,磁盤設(shè)備才開始檢測(cè)。在Windows下,有相似的過程,通過iTunerUsbManager來檢索磁盤信息。

4.2改變USB設(shè)備控制權(quán)到文件路徑

在Linux中,一個(gè)USB設(shè)備的控制權(quán)能被轉(zhuǎn)換到文件路徑,通過循環(huán)訪問在udev文件系統(tǒng)中的所有盤設(shè)備和為它們的系統(tǒng)設(shè)備路徑查詢udevadm,直到一個(gè)帶有ISP的USB設(shè)備被找到。

1、lsusb以生產(chǎn)商ID和NXPISP設(shè)備產(chǎn)品ID來命名。lsusb輸出總線和設(shè)備ID到standardout(控制臺(tái))。輸出結(jié)果用來為USB設(shè)備創(chuàng)建一個(gè)udev路徑,例如,總線2設(shè)備3的路徑為/dev/bus/usb/002/003。

2、一個(gè)盤設(shè)備名從/dev截取,在我們的樣品腳本中,我們使用一個(gè)與/dev/sd[a-z]匹配的通配符,并在設(shè)備間循環(huán),這些設(shè)備與像/dev/sda,/dev/sdb,/dev/sdc,etc這樣的組合相匹配。這就可以在系統(tǒng)上找到磁盤驅(qū)動(dòng)器,包括硬盤和USB大容量存儲(chǔ)器。

3、完整的低級(jí)盤設(shè)備文件路徑用udevadminfo-qpath–n/dev/sdX查找,如果盤設(shè)備與我們找到的USB設(shè)備有聯(lián)系,那么返回的文件路徑以低級(jí)USB設(shè)備文件路徑開頭。

4、最后,mount命令的輸出用于決定在步驟2測(cè)試過的盤設(shè)備名安裝到linux文件系統(tǒng)的哪個(gè)地方。我們現(xiàn)在有了一個(gè)文件系統(tǒng)路徑用于我們的的USBISP設(shè)備并能夠訪問firmware.bin

MacWindows系統(tǒng)下,我們采用盤操作(替代USB設(shè)備操作)和查詢操作系統(tǒng)的盤符和文件路徑

4.3檢查代碼的read保護(hù)(CRP)

LPC1300USBISP的特色是設(shè)置USB盤的盤符指出CRP模式。USBISPflash編程器的穩(wěn)定設(shè)計(jì)將檢查盤符來確認(rèn)CRP沒有使能。在Linux系統(tǒng)下,F(xiàn)AT盤文件系統(tǒng)盤符能用mtools包讀出。遺憾的是,這不被推薦,因?yàn)樗枰猘dministrative來訪問。另一種方法在Linux系統(tǒng)下讀文件系統(tǒng)盤符是使用mount-l命令,如果你的系統(tǒng)mount版本能夠支持的話。這將列出所有安裝的文件系統(tǒng)和它們的盤符。在MacWindows操作系統(tǒng)中,盤符信息顯示在DiskDescription目錄或在Volume中來自WMI各自的目標(biāo)檢索。

如果CRP1或CRP2被使能,在USBISP盤中的firmware.bin文件在新文件能寫入之前肯定要被刪除來禁止代碼保護(hù)。刪除firmware.bin后,設(shè)備需要掉電和重連接,以使改變的CRP設(shè)置生效,這樣固件就能更新。如果CRP3被使能,設(shè)備不能被擦除和固件不能被更新。

4.4寫文件到程序flash

在Windows操作系統(tǒng)下,幾乎任一標(biāo)準(zhǔn)文件系統(tǒng)寫時(shí)序都這樣工作,Windows多樣的FAT文件系統(tǒng)以ISP磁盤上的第一個(gè)空閑塊作為起始,來分配塊。在Linux操作系統(tǒng)中,設(shè)備自己能直接被寫(用/dev),但需要同時(shí)使用dd來確認(rèn)塊序列。這方法不被推薦,因?yàn)樗笥脩粲?wbr />administrative的權(quán)限。第二個(gè)選擇是打開USBISP盤中已存在的firmware.bin并重寫內(nèi)容。如果文件打開后沒有截位,新的數(shù)據(jù)將以與已有文件(ISP固件建立的文件)相同的規(guī)則寫入。(記住“filemetadata”是通過ROM代碼創(chuàng)建的,且不存儲(chǔ)到flash)通過conv=nocreat,notrunc.選項(xiàng),使用dd來寫入firmware.bin文件,可以實(shí)現(xiàn)重寫。如果代碼用C語(yǔ)言,盡可能的使用open(path,O_RDWR)fopen(path,“r+”)。此外,在Windows操作系統(tǒng)中沒有必要覆蓋已有的文件,這樣,就有存儲(chǔ)空間可用,只要覆蓋或刪除當(dāng)前文件以釋放存儲(chǔ)空間。在我們提供的Windows程序例子中,我們使了C#函數(shù)System.IO.File.WriteAllBytes(filePath,firmwareData),在寫之前做了簡(jiǎn)化處理。

4.5卸載盤設(shè)備

大多數(shù)操作系統(tǒng)在一個(gè)延時(shí)之后將最終完整寫到盤,但強(qiáng)制卸載是最后的有效步驟,以確保操作系統(tǒng)完成數(shù)據(jù)寫入磁盤的操作,這樣的話,當(dāng)設(shè)備成功移除時(shí)就會(huì)告知用戶。為了卸載操作成功,所有打開的文件包括firmware.bin文件必須先關(guān)閉。在Linux操作系統(tǒng)中,可以使用posix(可移值接口)標(biāo)準(zhǔn)umount命令。通常,卸載自動(dòng)加載的USB大容量存儲(chǔ)設(shè)備不需要管理權(quán)限。在Mac操作系統(tǒng)中,因?yàn)榇疟P仲裁器能夠自動(dòng)管理加載操作,使用DADiskUnmount系統(tǒng)呼叫是最好的路徑。在Windows操作系統(tǒng)中,大多數(shù)用戶使用自我卸載或使用SetupAPI里的CM_Request_Device_Eject函數(shù)。我們的例子中WindowsISP更新器不卸載設(shè)備當(dāng)它,反而,它會(huì)顯示一個(gè)對(duì)話框提醒用戶。

圖4



評(píng)論


技術(shù)專區(qū)

關(guān)閉