天天看點

單片機:ISP

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

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

什麼是ISP:

用寫入器将code燒入,不過,晶片可以在目标闆上,不用取出來,在設計目标闆的時候就将接口設計在上面,是以叫“在系統程式設計”,即不用脫離系統;

什麼是IAP:

在應用程式設計,有晶片本身(或通過外圍的晶片)可以通過一系列操作将code寫入,比如一款支援Iap的單片機,内分3個程式區,1作引導程式區,2作運作程式區,3作下載下傳區,晶片通過序列槽接收到下載下傳指令,進入引導區運作引導程式,在引導程式下将new code内容下載下傳到下載下傳區,下載下傳完畢并校驗通過後再将下載下傳區内容複制到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讀你的資料。