LPC1300通過 USB 在線系統編程 ISP
1、簡介
基于ARM?Cortex-M3?CPU架構的LPC1300系列微控制器,在嵌入式應用中具有高級別塊集成支持和低功耗的特點。LPC1300輔助外設,包括高達32KB的flash存儲器,8KB的數據存儲器,USB接口,1個UART,1個SSP控制器,SPI接口,I2C接口,8通道10位ADC,4個通用定時器/PWMs,以及高達40個通用I/O引腳。
另外,可在線系統編程的片上ROM(a?bootloader)支持UART和USB?flash編程,類似于APIs的用戶代碼編程方式。flash?API通過一個簡單的接口實現板上flash編程功能,并可隨時進入ISP模式。USB?API能夠兼容人機接口設備(HID)和大容量存儲設備(MSC)的新產品,既不需要用戶編寫驅動程序,也不需要存儲在flash上。
包含在該使用手冊上的條目如下
- 1、USB在線系統編程概述
- 2、USB?ISP?詳述
- 3、自動化的?USB?ISP
- 4、USB?ISP的自動化入口
- 5、軟件實例
- 6、結論
2、USB?In-System?Programming(ISP)?概述
LPC1300片上的USB?ISP固件,終端用戶可以通過標準個人電腦操作系統對其進行編程和更新。本文檔引用了一部分LPC1343的內容,其他同樣帶有片上USB的LPC1300系列產品也作了類似處理。
在上電期間保持PIO0_1低電平將引發片上ISP固件進入ISP模式(除非被NO_ISP代碼讀保護[CRP]模式所禁止)。一旦進入ISP模式,USB?VBUS上的PIO0_3口將會進行電平檢測。如果是高電平,將會進入USB?ISP;若是低電平,則進入UART?ISP。在用戶指南手冊標題為“Boot?Process?Flowchart”的章節中,有圖表詳細的介紹了這一過程。
進入USB?ISP模式后,LPC1300可以把片上全速USB接口作為大容量存儲設備使用。這個磁盤設備含有FAT12文件系統,是大多數操作系統的標準磁盤設備。盤符將指出CRP狀態而且盤中將包含單個文件firmware.bin。在代碼保護的設置允許的情況下,刪除和重寫這個文件將寫到flash存儲器。讀flash存儲器上的內容,就像復制firmware.bin文件一樣簡單。
圖1???LPC?1300?USB?ISP?系統
圖2???Windows?XP上的USB?ISP?firmware.bin文件
3.??USB?ISP?詳述
LPC1300片上USB?ISP固件,虛擬FAT文件系統,這樣就可以通過PC軟件讀寫固件。我們詳細描述了在幾種標準的主流操作系統上更新固件的模擬過程和技巧。
LPC1300連接USB主機,并初始化USB?ISP模式之后,枚舉了USB供應商ID?0x04CC和設備ID?0x0003。這些信息通常對終端用戶屏蔽,但通過固件更新軟件,這些信息可以用來尋找已經連接到計算機上的,含有LPC1300的USB設備。一旦找到這些設備,將會發送存儲設備查詢指令,之后會返回一串描述LPC微控制器產品的附件。LPC134X產品的查詢字符串是“NXP?LPC134X?IFLASH?1.0”。通過設備產商的名稱“NXP”以及設備型號“LPC134X?IFLASH”也可以識別這些設備。這樣,設備型號ID的全稱為“NXP_LPC13XX_IFLASH”。
LPC1300模擬的磁盤有不用的卷標號,卷標號取決于代碼讀保護(CRP)的設置和重新編程過程中的細微改變。這些內容在下面會給出簡要介紹,完整的文檔請參考LPC1300用戶手冊中的UM10375部分。
?如果CRP1或者CRP2可用,當文件被刪除或復制新文件而導致原文件改變,用戶flash將被擦除。
如果CRP1可用,或者兩個CRP都不用,用戶flash將被擦除或重新編程(當復制新文件時)。盡管這樣,也只有被新文件覆蓋的區域才會被擦除或重新編程。因此,理想情況下,新的編程文件將包含整個flash容量(LPC1300為32KB),這樣,整個flash容量將處于已知狀態。使用填補(32KB或flash大小)編程文件,也可以通過編程工具,對已連接的LPC部件進行錯誤檢查(比較新的固件文件與設備上firmware.bin文件的大小),而不需要額外的配置信息。
注意:只有Windows命令支持LPC1300?flash?映像文件夾的復制和刪除。在覆蓋的過程中虛擬盤的空間不足以存儲Windows創建的臨時文件時,覆蓋操作使用Windows的資源管理器將不成功。
圖?3??LPC1300用戶手冊-CRP磁盤卷標號
引導盤虛擬的FAT文件系統,組成了一個單一的文件firmware.bin,文件中包含了整個flash容量的信息。通常,一個盤的容量必須稍大于所需的存儲容量,取決于目錄和頂層的文件系統分配表。在LPC1300虛擬的FAT文件系統下,需要4個額外的塊提供給引導塊、根目錄、文件分配表。因為MCU需要使用ISP來編程整個flash存儲器,這些額外的塊使用RAM和ROM上的數據模擬,而不是映射到flash上作為代碼存儲。因此,掉電時文件系統的元數據將丟失,只有通過文件寫的方式編入flash的數據才會被保存。
在flash上,寫進文件系統的數據按照磁盤塊的順序存儲,以塊4作為起點。如果firmware.bin文件被刪除,PC在運行Windows時將以塊4作為起點分配任一新的文件,并隨著寫入數據的增多而使用更多的塊。這意味著,在Windows中,可以使用任一標準的程序或工具,把固件寫進LPC1300。在Windows瀏覽器窗口中,用戶可以刪除firmware.bin文件,并拖動一個新文件來編程flash。不幸的是,Mac和Linux機器上的FAT文件系統以不同的規則分配塊,數據寫進ISP磁盤,固件寫進flash,重新編排。這樣,將導致固件更新不成功。為此,有兩種變通方法。最常用的方法是適當的覆蓋firmware.bin文件,另一個更暴力的方法是獲得管理權限直接進行磁盤設備寫/dev操作。
4、自動化?USB?ISP
有時候,要求系統執行固件的更新不需要用戶介入。要求用戶確定哪個盤驅動器連接到USB設備,或要求他們手動刪除和重寫一個文件,常常是很復雜的事情。在電腦程序的控制下,固件經常需要被自動更新。此部分將描述這是如何實現。為了在電腦上全自動化運行,程序需要找到正確的USB設備進行更新,改變USB設備“handle”到一個文件路徑,檢查CRP模式,存盤的文件燒寫到flash,在確保flash內容保存的情況下最終卸載盤設備器。這些步驟將被單獨的討論。這能有效的驗證被燒寫的固件文件。通過LPC134X用戶手冊里的“Criterion?for?Valid?User?Code”,可以對其進行驗證,這已用Windows?ISP工具執行過。它也合理的驗證在被燒寫的設備空間里是相同長度。這是在?Mac?和?Linux?系統中應用的ISP例子。注意:在這些步驟中產生的一些偏差,在不同操作系統的簡易執行中影響不大。
4.1?找到正確的USB設備
枚舉USB設備的方法取決于不同的操作系統。在Linux上,大多數分配提供一個叫lsusb的程序,這程序能搜索指定供應商ID和產品ID的?USB?設備。然后,udevadm(目前系統上使用udev設備文件系統)可以分列出USB?型號ID和系統設備路徑。LPC1300系列的型號ID為“NXP_LPC13XX_IFLASH”。一旦供應商ID、產品ID和型號ID被確認,你肯定會發現一個處于ISP模式的NXP?LPC1300微控制器。在Windows和Mac?OS-X中,這個步驟有點不同。在Mac上,可以從磁盤數據庫取得的USB設備型號信息,也就沒有去找實際USB設備。相反,直到正確的生產商和設備型號被找到,磁盤設備才開始檢測。在Windows下,有相似的過程,通過iTuner?UsbManager來檢索磁盤信息。
4.2?改變USB設備控制權到文件路徑
在Linux中,一個USB設備的控制權能被轉換到文件路徑,通過循環訪問在udev文件系統中的所有盤設備和為它們的系統設備路徑查詢udevadm,直到一個帶有ISP的USB設備被找到。
1、lsusb以生產商ID和NXP?ISP設備產品ID來命名。lsusb輸出總線和設備ID到standard?out(控制臺)。輸出結果用來為USB設備創建一個udev路徑,例如,總線2設備3的路徑為/dev/bus/usb/002/003。
2、一個盤設備名從/dev?截取,在我們的樣品腳本中,我們使用一個與/dev/sd[a-z]匹配的通配符,并在設備間循環,這些設備與像/dev/sda,?/dev/sdb,?/dev/sdc,etc這樣的組合相匹配。這就可以在系統上找到磁盤驅動器,包括硬盤和USB大容量存儲器。
3、完整的低級盤設備文件路徑?用udevadm?info?-q?path?–n?/dev/sdX?查找,如果盤設備與我們找到的USB設備有聯系,那么返回的文件路徑以低級USB設備文件路徑開頭。
4、最后,mount命令的輸出用于決定在步驟2測試過的盤設備名安裝到linux文件系統的哪個地方。我們現在有了一個文件系統路徑用于我們的的USB?ISP設備并能夠訪問fi?rmware.bin
在?Mac?和?Windows?系統下,我們采用?盤操作?(替代USB設備操作)和查詢操作系統的盤符和文件路徑
4.3?檢查代碼的read保護(CRP)
LPC1300?USB?ISP的特色是設置USB盤的盤符指出CRP模式。USB?ISP?flash編程器的穩定設計將檢查盤符來確認CRP沒有使能。在Linux系統下,FAT盤文件系統盤符能用?mtools包讀出。遺憾的是,這不被推薦,因為它需要administrative來訪問。另一種方法在Linux系統下讀文件系統盤符是使用?mount?-l?命令,如果你的系統mount版本能夠支持的話。這將列出所有安裝的文件系統和它們的盤符。在?Mac?和?Windows?操作系統中,盤符信息顯示在DiskDescription目錄或在Volume中來自?WMI?各自的目標檢索。
如果CRP1或CRP2被使能,在USB?ISP?盤中的?firmware.bin?文件在新文件能寫入之前肯定要被刪除來禁止代碼保護。刪除?firmware.bin?后,設備需要掉電和重連接,以使改變的CRP設置生效,這樣固件就能更新。如果CRP3被使能,設備不能被擦除和固件不能被更新。
4.4寫文件到程序flash
在Windows操作系統下,幾乎任一標準文件系統寫時序都這樣工作,Windows多樣的FAT文件系統以ISP磁盤上的第一個空閑塊作為起始,來分配塊。在Linux操作系統中,設備自己能直接被寫(用/dev),但需要同時使用dd來確認塊序列。這方法不被推薦,因為它要求用戶有?administrative??的權限。第二個選擇是打開USB?ISP盤中已存在的?firmware.bin?并重寫內容。如果文件打開后沒有截位,新的數據將以與已有文件(ISP固件建立的文件)相同的規則寫入。(記住“file?metadata”?是通過ROM代碼創建的,且不存儲到flash)通過conv=nocreat,notrunc.選項,使用dd來寫入firmware.bin文件,可以實現重寫。如果代碼用C語言,盡可能的使用?open(path,?O_RDWR)?或?fopen(path,?“r+”)。此外,在Windows操作系統中沒有必要覆蓋已有的文件,這樣,就有存儲空間可用,只要覆蓋或刪除當前文件以釋放存儲空間。在我們提供的Windows程序例子中,我們使了C#?函數System.IO.File.WriteAllBytes(filePath,?firmwareData),在寫之前做了簡化處理。
4.5?卸載盤設備
大多數操作系統在一個延時之后將最終完整寫到盤,但強制卸載是最后的有效步驟,以確保操作系統完成數據寫入磁盤的操作,這樣的話,當設備成功移除時就會告知用戶。為了卸載操作成功,所有打開的文件包括firmware.bin?文件必須先關閉。在Linux操作系統中?,可以使用posix(可移值接口)標準?umount?命令。通常,卸載自動加載的USB大容量存儲設備不需要管理權限。在Mac操作系統中,因為磁盤仲裁器能夠自動管理加載操作,使用DADiskUnmount系統呼叫是最好的路徑。在Windows操作系統中,大多數用戶使用自我卸載或使用SetupAPI?里的CM_Request_Device_Eject函數。我們的例子中Windows?ISP?更新器不卸載設備當它,反而,它會顯示一個對話框提醒用戶。
圖4
5、自動進入USB?ISP
在前面的章節,我們解釋了在USB?ISP模式下,PC更新設備固件的過程。當固件未編程,或者拉低一個引腳(在LPC134x系列是PIO0.1腳),設備復位/上電,NXP?LPC1300微控制器默認為ISP模式。有時,ISP模式下更新固件、連接設備,用戶不想去按一下按鈕。這樣的話,我們可以設計出允許ISP模式下編程的固件。
在LPC1300片上ROM中,通過In-Application?Programming?API請求,可以實現ISP模式下編程。固件更新之后,用戶需要重啟設備以使新的固件生效。下載新固件之后,新固件可以預設置看門狗定時器來重新設置LPC1300。下面的流程圖顯示了設備自動化ISP過程。名為“autoisp”的軟件實例演示了這一技術。
?圖5
6 軟件例子
為了盡早建立用戶界面友好的固件更新工具,NXP發布了三個實例(一個ISP下載程序并提供了源代碼)。提供一個基于C#的應用程序窗體,可運行于Windows?XP、Windows?Vista和Windows?7?。使用Microsoft?Visual?Studio?C#?Express?2010,可以讓Windows的應用得到擴展。一個用C語言編寫的命令行工具可以在Mac上使用。這個工具在Apple?Xcode中得到加強,可以運行在OS-X?10.5或更高的版本上。最后,Ubuntu?Linux也有一個程序化的腳本,已在Ubuntu?10.04通過測試,并可以運行在具有相同udev文件系統和工具的不同版本的Linux上。
所有工具都是開放的、沒有限制,可重復使用,除了Windows應用[取決于iTuner(http://ituner.codeplex.com/)?計劃的USB磁盤設備等級]。這是一個在開源許可下,要求公開源代碼的衍生著作。
應用手冊中還包括一個實現代碼讀保護的blinky的程序。這個程序用在the?LPCXpresso?IDE,在the?LPCXpresso板上讓LED閃爍,在嵌入式板上讓七段數碼管顯示屏計數。有九種程序編譯版本,所以,設備可以反復的編程(使用不同的CRP模式和LED閃爍/計數速率)。?????????????????還有一個叫“autoisp”的程序。這個例子演示了如何在程序控制下進入ISP模式。在LED閃爍十秒鐘之后,進入ISP模式。如果設備連接到PC上,它將順序輸出,固件開始閃動。這期間,LPC1343進入ISP模式,看門狗定時器繼續工作。時間到了之后,LPC1343復位并再次運行固件。
最后,還有一個叫“padto”的小命令行程序。這個程序用來從開發工具獲得二進制輸出,并填補成0xFF字節,直到與LPC上的flash大小相匹配。這種匹配有助于PC主機上的ISP下載程序,確保固件適用于連接到USB上的特定的LPC134X。
Windows?NXPISP?實用工具
這程序是基于Microsoft?.NET?,當setup.exe?程序運行時啟動,附帶的Visual?Studio?Installer?將檢查電腦和下載??NET?的最新版本(如果還未安裝)。因此,當你第一次運行setup.exe程序時,請確認你已經通過寬帶連接到互聯網上。在Windows?.NET子系統更新完之后,NXPISP程序將自動安裝并運行。NXPISP運行時,點擊“Select?Firmware.”一個文件選擇對話框將會彈出,讓你選擇一個.bin文件。這個.bin文件將用“Criterion?for?Valid?User?Code”核對,即向量表的前8個32位字總和為0。如果?bin?文件符合要求,“Select?Firmware”?按鈕的那個綠色的檢查標志將顯示正確,否則。顯示一個紅色的X。
實際燒寫一個設備,單擊?“Update?Firmware.”?,“Update?Firmware.”?按鈕工作起來像一個觸發器,而且當單擊時能停留在壓低或再一次單擊時釋放,當按鍵被按下,電腦將掃描NXP?ISP設備,如果有一個被發現,它的固件將被更新,而且“Update?Firmware”?按鈕的綠色檢查標志顯示正確并且按鈕將釋放,如果沒有設備被找到,“Update?Firmware”按鈕將停留在壓低而且工具將等待設備被連接。設備被找到和更新后,綠色檢查標志將顯示而且“Update?Firmware”?按鈕將彈起,如果實用工具等待設備連接(“Update?Firmware”?按鈕仍然壓低)它將通過再一次單擊“Update?Firmware”?按鈕取消而且導致彈起。
安全彈出USB?ISP設備以確保新固件已經寫入(Windows?NXPISP工具不會卸載設備)。通過Windows硬件彈出圖標和Windows瀏覽器彈出選項來安全彈出設備。這個步驟失敗將導致固件惡化。
聲明:本站部分內容根據互聯網資料整理而成,若侵犯您的權益,請聯系我們,我們會盡快處理。