1. 程式人生 > >微控制器ISP、IAP和ICP幾種燒錄方式的區別

微控制器ISP、IAP和ICP幾種燒錄方式的區別

玩微控制器的都應該聽說過這幾個詞。一直搞不太清楚他們之間的區別。今天查了資料後總結整理如下。

ISP:In System Programing,在系統程式設計

IAP:In applicating Programing,在應用程式設計

ICP:In Circuit Programing,在電路程式設計

ISP是指可以在板級上進行程式設計,也就是不用拆晶片下來,寫的是整個程式,一般是通過ISP介面線來寫。

IAP雖然同樣也是在板級上進行程式設計,但是是自已對自已進行程式設計,在應用中進行程式設計,也即可以只是更改某一部分而不影響系統的其它部分,另外介面程式是自已寫的,這樣可以進行遠端升級而不影響應用。

打個比喻吧:

1、ISP是把房子拆了再重造一間,那麼在造好之前當然是不能住人的啦!

2、IAP是在造好的房子裡邊進行一些裝修,當然人可以繼續住啦!

ICP是在電路程式設計,是LPC晶片的程式設計方式,相當於ATMEL的ISP,而LPC的ISP就相當於ATMEL的IAP了。

ISP於IAP的區別

ISP:in system programming, 在系統程式設計

IAP: in applicatin programming 在應用程式設計

但兩者的操作方式,結果和應用場合有什麼區別

什麼是ISP:

用寫入器將code燒入,不過,晶片可以在目標板上,不用取出來,在設計目標板的時候就將

介面設計在上面,所以叫"在系統程式設計",即不用脫離系統;

什麼是IAP:

在應用程式設計,有晶片本身(或通過外圍的晶片)可以通過一系列操作將code寫入,比如一款支援Iap的微控制器,內分3個程式區,1作載入程式區,2作執行程式區,3作下載區,晶片通過串列埠接收到下載命令,進入引導區執行載入程式,在載入程式下將new code內容下載到下載區,下載完畢並校驗通過後再將下載區內容複製到2區,運行復位程式,則Iap完成;

應用場合:

1,ISP 程序升級需要到現場解決,不過好一點的是不必拆機器了;

2,IAP 如果有網管系統的話,用網管下載一切搞定,人不用跑來跑去,

這可能是他們的優點或應用吧

線上程式設計目前有兩種實現方法:在系統程式設計(ISP)和在應用程式設計(IAP)。ISP一般是通過微控制器專用的序列程式設計介面對微控制器內部的Flash儲存器進行程式設計,而IAP技術是從結構上將Flash儲存器對映為兩個儲存體,當執行一個儲存體上的使用者程式時,可對另一個儲存體重新程式設計,之後將控制從一個儲存體轉向另一個。ISP的實現一般需要很少的外部電路輔助實現,而IAP的實現更加靈活,通常可利用微控制器的序列口接到計算機的RS232口,通過專門設計的韌體程式來程式設計內部儲存器。 ISP和IAP很相似,都是不需要把晶片從板子上拔出來,就達到了用PC-MCU的程式設計介面(JTAG、串列埠、雙絞線、SPI等)搞定新版本的升級的目的。MCU內部都是首先執行一段獨立的Boot程式碼(這段Boot程式碼一般是出廠預置,或使用程式設計器燒錄的,通常只有1k或4k,SST通常是佔用一塊獨立的Block,Philips通常是讓BootROM地址與其他Flash重疊,以達到隱藏的效果),Boot負責控制擦除程式儲存器及給程式儲存器程式設計的程式碼(或是處理器外部提供的執行程式碼),然後通過某種與PC計算機的通訊方式(如,ether網口),將使用者指定的某個在PC上編譯完成的MCU可執行的二進位制程式碼檔案程式設計入MCU內的程式儲存器。

ISP和IAP最大的不同是:由誰來觸發。

ISP有4種觸發方式:

1.由外部硬體電路:如VDD保持高電平,給RST連續3個脈衝;

2.檢測狀態位:如ISPEN,為0時PC指標從0000H開始執行;為1時,通過“引導向量”計算出“ISP程式碼”的位置。每次復位後都會檢測該狀態位;

3.中止控制符訊號觸發晶片復位:中止控制符訊號就是指在非同步序列口的接收腳上出現長 達一幀長度的低電平,這裡一幀的長度與非同步序列口的工作模式有關。

4.直接呼叫ISP:使用者程式也可以呼叫,但是很危險。

4種方式的目的是相同的——進入ISP子程式,比如Philips出廠的ISP子程式在1E00H-1FFFH,只要能引導PC指標指向1E00H就可以了。

而進入ISP程式碼的目的是:進入BootROM。

IAP的觸發比較簡單一些,沒有外部觸發。通過一些指示位(SST為SC0/SC1、SFCF;Philips為一段IAP子程式,儲存在FF00H~FFFFH地址空間中),達到引導到BootROM的目的。

殊途同歸,ISP、IAP所進入的BootROM裡面駐留的Boot程式碼,才是最終目標。

最後一種:並行程式設計模式。不需要BootROM,直接設定晶片的多個引腳來讓晶片識別命令(如:擦除、寫入、驗證等),從P口傳地址、資料,就可以寫入Flash

用LPC2000的IAP,你自己分配好FLASH空間,指定一個BLOCK用來存放你的資料,然後通過IAP進行寫操作。每次開機後,從這個BLOCK讀你的資料。

IAP的實現

通常在使用者需要實現IAP功能時,即使用者程式執行中作自身的更新操作,需要在設計韌體程式時編寫兩個專案程式碼,第一個專案程式不執行正常的功能操作,而只是通過某種通訊管道(如USB、USART)接收程式或資料,執行對第二部分程式碼的更新;第二個專案程式碼才是真正的功能程式碼。這兩部分專案程式碼都同時燒錄在User Flash中,當晶片上電後,首先是第一個專案程式碼開始執行,它作如下操作:

1)檢查是否需要對第二部分程式碼進行更新

2)如果不需要更新則轉到4)

3)執行更新操作

4)跳轉到第二部分程式碼執行

第一部分程式碼必須通過其它手段,如JTAG或ISP燒入;第二部分程式碼可以使用第一部分程式碼IAP功能燒入,也可以和第一部分程式碼一道燒入,以後需要程式更新是再通過第一部分IAP程式碼更新。

對於STM32來說,因為它的中斷向量表位於程式儲存器的最低地址區,為了使第一部分程式碼能夠正確地響應中斷,通常會安排第一部分程式碼處於Flash的開始區域,而第二部分程式碼緊隨其後。

在第二部分程式碼開始執行時,首先需要把CPU的中斷向量表映像到自己的向量表,然後再執行其他的操作。

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

ISP(In-System Programming)在系統可程式設計,指電路板上的空白器件可以程式設計寫入終端使用者程式碼,而不需要從電路板上取下器件,已經程式設計的器件也可以用ISP方式擦除或再程式設計。IAP(In-Application Programming)指MCU可以在系統中獲取新程式碼並對自己重新程式設計,即可用程式來改變程式。ISP和IAP技術是未來儀器儀表的發展方向。

1 ISP和IAP的工作原理

ISP的實現相對要簡單一些,一般通用做法是內部的儲存器可以由上位機的軟體通過串列埠來進行改寫。對於微控制器來講可以通過SPI或其它的序列介面接收上位機傳來的資料並寫入儲存器中。所以即使我們將晶片焊接在電路板上,只要留出和上位機介面的這個串列埠,就可以實現晶片內部儲存器的改寫,而無須再取下晶片。

IAP的實現相對要複雜一些,在實現IAP功能時,微控制器內部一定要有兩塊儲存區,一般一塊被稱為BOOT區,另外一塊被稱為儲存區。微控制器上電執行在BOOT區,如果有外部改寫程式的條件滿足,則對儲存區的程式進行改寫操作。如果外部改寫程式的條件不滿足,程式指標跳到儲存區,開始執行放在儲存區的程式,這樣便實現了IAP功能。

2 ISP和IAP在微控制器中的應用

2.1 傳統程式設計方法的不足

在一般的微控制器的實驗或開發時,程式設計器是必不可少的裝置。模擬、除錯完的程式需要藉助程式設計器燒到微控制器內部或外接的程式儲存器中。普通的程式設計器價格從幾百元到幾千元不等,對於一般的微控制器使用者來說還是一筆不小的開支。另外,在開發過程中,程式每改動一次就要拔下電路板上的晶片程式設計後再插上,這樣不但麻煩也很容易對晶片和電路板造成損傷,另外在程式需要升級做改動時,必須將裝置返廠或是技術人員到現場操作,既不方便也造成成本浪費。

2.2 ISP和IAP的優點

ISP技術的優勢是不需要程式設計器就可以進行微控制器的實驗和開發,微控制器晶片可以直接焊接到電路板上,除錯結束即成成品,免去了除錯時由於頻繁地插入取出晶片對晶片和電路板帶來的不便。

IAP技術是從結構上將Flash儲存器對映為兩個儲存體,當執行一個儲存體上的使用者程式時,可對另一個儲存體重新程式設計,之後將程式從一個儲存體轉向另一個。

ISP的實現一般需要很少的外部電路輔助實現,而IAP的實現更加靈活,通常可利用微控制器的序列口接到計算機的RS232口,通過專門設計的韌體程式來程式設計內部儲存器,可以通過現有的INTERNET或其它通訊方式很方便地實現遠端升級和維護。

2.3 產品分析

目前市場上不少的微控制器具有ISP和IAP功能。

ST公司的μPSD32××系列微控制器片內帶128KB/256KB的FLASH儲存器及32KB Boot ROM,通過JTAG序列口能很容易地實現ISP功能。IAP功能則可由使用者在應用中實現。

ATMEL公司的微控制器AT89S8252,提供了一個SPI序列介面對內部程式儲存器程式設計(ISP)。SST公司的微控制器SST89C54,其最大的特點內部有兩塊獨立的FLASH儲存器,具有IAP(應用中線上程式設計)功能,對於8052系列的其它公司的微控制器(ATMEL、 WINBOND、ISSI)可以直接代換,軟硬體無須做任何改動。

PHILIPS公司的P89C51RX2xx系列是帶ISP/IAP的8位Flash微控制器。PHILIPS公司為了使ISP技術和IAP技術得以推廣,在晶片上免費提供了Boot ROM韌體,並且巧妙地解決了韌體和FLASH的地址覆蓋問題及一些具體實現細節問題,使它們的實現變得簡單。

此外在外圍器件中ST公司的PSD系列產品片內帶大容量儲存器,支援ISP及IAP功能。

ISP,In System Programing

主要是指代晶片的燒寫方式,以往寫片子需要把片子拿下來,離開電路,用程式設計器燒,換句話說,晶片不能不脫離應用系統進行寫入。ISP 主要針對這個問題,使用JTAG或者序列口(MCU 內部有Boot Loader ,通過指定的方式啟用之,它可以和PC或其它上位機通過串列埠聯絡,不用使微控制器離開應用系統而更新內部的程式/設定)進行程式的燒寫操作。

因此,具有ISP 功能的MCU 可以不使用程式設計器進行程式設計。當然,實現ISP 可能需要一些硬體電路支援,具體的在資料手冊中有說明。IAP,In Application Programing微控制器內部具有一些可擦寫的非易失儲存器,如Flash。在微控制器獨立執行時,不具備IAP 功能的微控制器並不能對Flash的資料進行修改,比如,對自身的某一個模組的程式碼,資料進行修改。具備了IAP 功能的MCU ,能夠通過使用各自公司開發的技術,對於自身進行修改。

簡言之:ISP=>修改MCU 內部資料需要有外部介入;IAP=>修改MCU 內部資料可以不用外部介入。二者可以說是資料更新的一種實現機制。一般具備ISP 功能後,就不要程式設計器了,而是使用下載線進行程式設計工作。但是不是說他們就一定不支援程式設計器了,具體型號具體分析。是否需要模擬器進行模擬和是否具備ISP和IAP沒有必然的聯絡。只不過具備了IAP功能,可以在MCU內寫入監控程式,模擬一個模擬器,當然,這個監控程式是要消耗資源的,和使用硬體的模擬器還有一定的差異。IAP的應用,在51上可能比較多,就是SST出的那個SoftICE功能。他的MCU 其實不具備ISP功能,需要使用程式設計器燒一個Boot Loader進去,然後,利用IAP功能,就可以通過序列口下載資料了。SST的那個,使用的是自己開發的一個SoftICE軟體,和Keil C的Mon51介面。看DataSheet上說,先要用程式設計器燒Boot Loader進去,然後,用串列埠燒SoftICE進去,然後就可以用了。