<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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

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

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

          3LPC1300用戶手冊-CRP磁盤卷標號

          引導(dǎo)盤虛擬的FAT文件系統(tǒng),組成了一個單一的文件firmware.bin,文件中包含了整個flash容量的信息。通常,一個盤的容量必須稍大于所需的存儲容量,取決于目錄和頂層的文件系統(tǒng)分配表。在LPC1300虛擬的FAT文件系統(tǒng)下,需要4個額外的塊提供給引導(dǎo)塊、根目錄、文件分配表。因為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,重新編排。這樣,將導(dǎo)致固件更新不成功。為此,有兩種變 通方法。最常用的方法是適當?shù)母采wfirmware.bin文件,另一個更暴力的方法是獲得管理權(quán)限直接進行磁盤設(shè)備寫/dev操作。

          4、自動化USBISP

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

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

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

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

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

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

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

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

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

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

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

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

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

          4.4寫文件到程序flash

          在Windows操作系統(tǒng)下,幾乎任一標準文件系統(tǒng)寫時序都這樣工作,Windows多樣的FAT文件系統(tǒng)以ISP磁盤上的第一個空閑塊作為起始,來分配塊。在Linux操作系統(tǒng)中,設(shè)備自己能直接被寫(用/dev),但需要同時使用dd來確認塊序列。這方法不被推薦,因為它要求用戶有administrative的權(quán)限。第二個選擇是打開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è)備

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

          圖4



          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();