天天看點

單片機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進去,然後就可以用了。

繼續閱讀