<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)的ISP 與 IAP

          單片機(jī)的ISP 與 IAP

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          ISP:in system programming, 在系統(tǒng)編程

          IAP: in applicatin programming 在應(yīng)用編程

          本文引用地址:http://www.ex-cimer.com/article/201611/321429.htm

          但兩者的操作方式,結(jié)果和應(yīng)用場合有什么區(qū)別

          什么是ISP:
          用寫入器將code燒入,不過,芯片可以在目標(biāo)板上,不用取出來,在設(shè)計目標(biāo)板的時候就將接口設(shè)計在上面,所以叫"在系統(tǒng)編程",即不用脫離系統(tǒng);
          什么是IAP:
          在應(yīng)用編程,有芯片本身(或通過外圍的芯片)可以通過一系列操作將code寫入,比如一款支持Iap的單片機(jī),內(nèi)分3個程序區(qū),1作引導(dǎo)程序區(qū),2作運行程序區(qū),3作下載區(qū),芯片通過串口接收到下載命令,進(jìn)入引導(dǎo)區(qū)運行引導(dǎo)程序,在引導(dǎo)程序下將new code內(nèi)容下載到下載區(qū),下載完畢并校驗通過后再將下載區(qū)內(nèi)容復(fù)制到2區(qū),運行復(fù)位程序,則Iap完成;

          應(yīng)用場合:
          1,ISP 程序升級需要到現(xiàn)場解決,不過好一點的是不必拆機(jī)器了;
          2,IAP 如果有網(wǎng)管系統(tǒng)的話,用網(wǎng)管下載一切搞定,人不用跑來跑去,
          這可能是他們的優(yōu)點或應(yīng)用吧

          在線編程目前有兩種實現(xiàn)方法:在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)。ISP一般是通過單片機(jī)專用的串行編程接口對單片機(jī)內(nèi)部的Flash存儲器進(jìn)行編程,而IAP技術(shù)是從結(jié)構(gòu)上將Flash存儲器映射為兩個存儲體,當(dāng)運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之后將控制從一個存儲體轉(zhuǎn)向另一個。ISP的實現(xiàn)一般需要很少的外部電路輔助實現(xiàn),而IAP的實現(xiàn)更加靈活,通常可利用單片機(jī)的串行口接到計算機(jī)的RS232口,通過專門設(shè)計的固件程序來編程內(nèi)部存儲器。 ISP和IAP很相似,都是不需要把芯片從板子上拔出來,就達(dá)到了用PC-MCU的編程接口(JTAG、串口、雙絞線、SPI等)搞定新版本的升級的目的。MCU內(nèi)部都是首先執(zhí)行一段獨立的Boot代碼(這段Boot代碼一般是出廠預(yù)置,或使用編程器燒錄的,通常只有1k或4k,SST通常是占用一塊獨立的Block,Philips通常是讓BootROM地址與其他Flash重疊,以達(dá)到隱藏的效果),Boot負(fù)責(zé)控制擦除程序存儲器及給程序存儲器編程的代碼(或是處理器外部提供的執(zhí)行代碼),然后通過某種與PC計算機(jī)的通信方式(如,ether網(wǎng)口),將用戶指定的某個在PC上編譯完成的MCU可運行的二進(jìn)制代碼文件編程入MCU內(nèi)的程序存儲器。

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

          ISP有4種觸發(fā)方式:
          1.由外部硬件電路:如VDD保持高電平,給RST連續(xù)3個脈沖;
          2.檢測狀態(tài)位:如ISPEN,為0時PC指針從0000H開始執(zhí)行;為1時,通過“引導(dǎo)向量”計算出“ISP代碼”的位置。每次復(fù)位后都會檢測該狀態(tài)位;
          3.中止控制符信號觸發(fā)芯片復(fù)位:中止控制符信號就是指在異步串行口的接收腳上出現(xiàn)長達(dá)一幀長度的低電平,這里一幀的長度與異步串行口的工作模式有關(guān)。
          4.直接調(diào)用ISP:用戶程序也可以調(diào)用,但是很危險。

          4種方式的目的是相同的——進(jìn)入ISP子程序,比如Philips出廠的ISP子程序在1E00H-1FFFH,只要能引導(dǎo)PC指針指向1E00H就可以了。

          而進(jìn)入ISP代碼的目的是:進(jìn)入BootROM。

          IAP的觸發(fā)比較簡單一些,沒有外部觸發(fā)。通過一些指示位(SST為SC0/SC1、SFCF[1,0];Philips為一段IAP子程序,保存在FF00H~FFFFH地址空間中),達(dá)到引導(dǎo)到BootROM的目的。

          殊途同歸,ISP、IAP所進(jìn)入的BootROM里面駐留的Boot代碼,才是最終目標(biāo)。

          最后一種:并行編程模式。不需要BootROM,直接設(shè)置芯片的多個引腳來讓芯片識別命令(如:擦除、寫入、驗證等),從P口傳地址、數(shù)據(jù),就可以寫入Flash

          用LPC2000的IAP,你自己分配好FLASH空間,指定一個BLOCK用來存放你的數(shù)據(jù),然后通過IAP進(jìn)行寫操作。每次開機(jī)后,從這個BLOCK讀你的數(shù)據(jù)。

          IAP的實現(xiàn)

          通常在用戶需要實現(xiàn)IAP功能時,即用戶程序運行中作自身的更新操作,需要在設(shè)計固件程序時編寫兩個項目代碼,第一個項目程序不執(zhí)行正常的功能操作,而只是通過某種通信管道(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對第二部分代碼的更新;第二個項目代碼才是真正的功能代碼。這兩部分項目代碼都同時燒錄在User Flash中,當(dāng)芯片上電后,首先是第一個項目代碼開始運行,它作如下操作:

          1)檢查是否需要對第二部分代碼進(jìn)行更新
          2)如果不需要更新則轉(zhuǎn)到4)
          3)執(zhí)行更新操作
          4)跳轉(zhuǎn)到第二部分代碼執(zhí)行

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

          對于STM32來說,因為它的中斷向量表位于程序存儲器的最低地址區(qū),為了使第一部分代碼能夠正確地響應(yīng)中斷,通常會安排第一部分代碼處于Flash的開始區(qū)域,而第二部分代碼緊隨其后。

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

          如果IAP程序被破壞,產(chǎn)品必須返廠才能重新燒寫程序,這是很麻煩并且非常耗費時間和金錢的。針對這樣的需求,STM32在對Flash區(qū)域?qū)嵭凶x保護(hù)的同時,自動地對用戶Flash區(qū)的開始4頁設(shè)置為寫保護(hù),這樣可以有效地保證IAP程序(第一部分代碼)區(qū)域不會被意外地破壞。



          關(guān)鍵詞: 單片機(jī)ISPIA

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();