關於IAP和ISP

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[1,0];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程序(第一部分代碼)區域不會被意外地破壞。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/joe3501/archive/2009/05/08/4160461.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章