1. 程式人生 > >微控制器ISP、IAP、ICP燒寫方式的概念與區別

微控制器ISP、IAP、ICP燒寫方式的概念與區別

玩微控制器的都應該聽說過ISP、IAP和ICP這幾個詞。一直搞不太清楚他們之間的區別。今天就給大家詳細講講。

ISP:In System Programing          在系統程式設計
IAP:In applicating Programing    在應用程式設計
ICP:In Circuit Programing           在電路程式設計

區別:
1、ISP是把房子拆了再重造一間,那麼在造好之前當然是不能住人的啦!
2、IAP是在造好的房子裡邊進行一些裝修,裝修的時候人還住在裡面!
3、ICP是在電路程式設計,是LPC晶片的程式設計方式,相當於ATMEL的ISP,而LPC的ISP就相當於ATMEL的IAP了。

ISP是指可以在板級上進行程式設計,而不用把晶片拆下來放到燒寫器中,即不脫離系統,所以稱作“在系統程式設計”,它是對整個程式的擦除和寫入,通過微控制器專用的序列程式設計介面對微控制器內部的Flash儲存器進行程式設計。即使晶片焊接在電路板上,只要留出和上位機介面的序列口就能進行燒寫。

IAP同樣是在板級上進行程式設計,MCU獲取新程式碼並對程式的某部分重新程式設計,即可用程式來改變程式,修改程式的一部分達到升級、消除bug的目的,而不影響系統的其它部分,燒寫過程中程式可以繼續執行,另外介面程式是自已寫的,這樣可以進行遠端升級而不影響應用。IAP的實現更加靈活,通常可利用微控制器的序列口接到計算機的RS232口,通過專門設計的韌體程式來程式設計內部儲存器。

IAP的實現

程式執行在CPU內部的高速Flash時無法完成內部Flash中程式碼的更新,為解決此問題,IAP從結構上將Flash儲存器對映為兩個儲存體——應用boot區和程式儲存區,在設計韌體程式時編寫兩個專案程式碼,第一個專案程式存放在應用boot區,不執行正常的功能操作,而只是通過某種通訊管道(如USB、USART)接收程式或資料,執行對第二部分程式碼的更新;第二個專案程式碼才是真正的功能程式碼,存放在程式儲存區。這兩部分專案程式碼都同時燒錄在User Flash中,當晶片上電後,首先執行應用boot區程式,它作如下操作:
1)檢查是否需要對第二部分程式碼進行更新
2)如果不需要更新則轉到4)
3)執行更新操作
4)跳轉到第二部分程式碼執行。

應用boot區程式碼為一個簡單的應用程式,實現從外部Flash匯入應用程式程式碼以及嚮應用程式程式碼區入口跳轉的功能。應用boot通常存放在CPU內部Flash的開始部分,必須通過其它手段,如JTAG或ISP燒入,而且一旦寫入後不再修改。

程式儲存區程式碼可以使用第一部分程式碼IAP功能燒入,也可以和第一部分程式碼一道燒入,以後需要程式更新時再通過第一部分IAP程式碼更新。

對於STM32來說,因為它的中斷向量表位於程式儲存器的最低地址區,為了使第一部分程式碼能夠正確地響應中斷,第一部分程式碼通常位於Flash的開始區域(bootloader),而第二部分程式碼緊隨其後。在第二部分程式碼開始執行時,首先需要把CPU的中斷向量表映像到自己的向量表,然後再執行其他的操作。

如果IAP程式被破壞,產品必須返廠才能重新燒寫程式,這是很麻煩並且非常耗費時間和金錢的。針對這樣的需求,STM32在對Flash區域實行讀保護的同時,自動地對使用者Flash區的開始4頁設定為防寫,這樣可以有效地保證IAP程式(第一部分程式碼)區域不會被意外地破壞。

ISP、IAP、ICP與傳統燒寫方式的區別

1)在開發階段
改code時, 不再需要將MCU從板子上拔起來, 拿到燒錄器上燒, 然後再裝回去. 可以直接利用ISP/ICP Programmer做板上燒錄, 為開發者提供了極大的便利性.
2)在量產階段
客戶可以採用”先焊到板子上再燒code”的方式, 將燒code的動作安排在生產線的某一站.
那麼傳統的方式 (先將code燒好再焊到板子上)有什麼缺點?
傳統的方式是這樣的: 拆封–>從tray盤取出chip–>燒錄–>把chip放回tray盤.
這樣的流程比起上面建議的方式: 增加了燒錄時間, 容易造成QFP包裝的chip彎腳, 或忘了燒code即放回tray盤.
3)在成品階段
已組裝好的成品若要改code, 可以透過預留的介面, 利用ISP或ICP, 更新MCU, 不需要拆機.
什麼是 IAP (In-Application Programming)?
IAP指的是, MCU在執行的狀態下, 利用ISP的機制, 不透過外接工具 (例如: ISP Programmer) 的幫忙, 去更新APROM, DataFlash 或 CONFIG. 要實現這種功能,
系統必須有取得更新資料的能力, 例如: 處於某一種聯機的狀態.
(注: 有時候, ISP/IAP的分別並不是那麼清楚!)

ISP與ICP的差別

For ISP
(1) MCU必須處於可執行程式的狀態 (除了上電, 還要接XTAL), 且必須預燒ISP-code在LDROM裡面
(2) 燒錄範圍只限於APROM, DataFlash或CONFIG (但對使用者來說, 應經夠了!)
(3) chip在LOCK的狀態下, 仍然可以只更新某一區塊 (APROM, DataFlash或CONFIG)
(4) 因為燒錄的動作取決於ISP-code的寫法, 所以給系統設計者的彈性較大
For ICP
(1) MCU只要處於上電狀態即可, 不必預燒任何code在MCU裡面
(2) 燒錄範圍涵蓋整顆MCU, 包括 APROM, DataFlash, CONFIG, LDROM 和 ROMMAP
(3) chip在LOCK的狀態下, 無法只更新某一區塊, 只能在erase-ALL之後, 更新某一區塊, 再逐一燒回其它區塊(因為ICP的本質就是走序列介面的Writer Mode, chip被LOCK之後, 除了erase-ALL, 所有燒錄動作皆會被禁止)
(4) 因為燒錄純粹是ICP硬體的行為, MCU無法自己更新自己, 所以給系統設計者的彈性較小(例如: 無法藉由ICP去實現IAP的功能)

ISP與ICP的使用場合
依這兩者的特性, 配合客戶的系統需求, 而後才建議客戶使用ISP或ICP.
注:上述差別的第(3)點和第(4)點, 可能是ICP帶給使用者的最大限制. 站在使用者的觀點, 若ISP與ICP只能擇一的話, ISP會是必要的選擇。

目前市場上不少的微控制器具有ISP/IAP功能
ATMEL公司的微控制器AT89SXXXX系列,提供了一個SPI序列介面對內部程式儲存器程式設計(ISP)。
ATMEL公司的微控制器AVR系列,提供了一個SPI序列介面對內部程式儲存器程式設計(ISP)。
PHILIPS 公司的P89C51RX2xx系列是帶ISP/IAP的8位Flash微控制器。PHILIPS公司為了使ISP技術和IAP技術得以推廣,在晶片上免費提供了Boot ROM韌體,並且巧妙地解決了韌體和FLASH的地址覆蓋問題及一些具體實現細節問題,使它們的實現變得簡單。
ST公司的μPSD32××系列微控制器片內帶128KB/256KB的FLASH儲存器及32KB Boot ROM,通過JTAG序列口能很容易地實現ISP功能,IAP功能則可由使用者在應用中實現。
SST公司的微控制器SST89C54,其最大的特點內部有兩塊獨立的FLASH儲存器,具有IAP功能,對於8052系列的其它公司的微控制器(ATMEL、 WINBOND、ISSI)可以直接代換,軟硬體無須做任何改動。
PHILIPS公司的P89C51RX2xx系列是帶ISP/IAP的8位Flash微控制器。PHILIPS公司為了使ISP技術和IAP技術得以推廣,在晶片上免費提供了Boot ROM韌體,並且巧妙地解決了韌體和FLASH的地址覆蓋問題及一些具體實現細節問題,使它們的實現變得簡單。
很多家公司的微控制器都具備ISP功能,ISP在微控制器領域的應用成為了必然的趨勢。此外在外圍器件中ST公司的PSD系列產品片內帶大容量儲存器,支援ISP及IAP功能。

轉載—開源嵌入式微信  公眾號