【轉】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功能。