單片機(jī)三種燒錄方式ISP、IAP和ICP有什么不同?

    玩單片機(jī)的都應(yīng)該聽(tīng)說(shuō)過(guò)這幾個(gè)詞。一直搞不太清楚他們之間的區(qū)別。今天查了資料后總結(jié)整理如下。


    ISP:In System Programing,

    在系統(tǒng)編程;

    IAP:In applicaTIng Programing,

    在應(yīng)用編程;

    ICP:In Circuit Programing,

    在電路編程。


    ISP是指可以在板級(jí)上進(jìn)行編程,也就是不用拆芯片下來(lái),寫(xiě)的是整個(gè)程序,一般是通過(guò)ISP接口線(xiàn)來(lái)寫(xiě)。


    IAP雖然同樣也是在板級(jí)上進(jìn)行編程,但是是自已對(duì)自已進(jìn)行編程,在應(yīng)用中進(jìn)行編程,也即可以只是更改某一部分而不影響系統(tǒng)的其它部分,另外接口程序是自已寫(xiě)的,這樣可以進(jìn)行遠(yuǎn)程升級(jí)而不影響應(yīng)用。

    玩單片機(jī)的都應(yīng)該聽(tīng)說(shuō)過(guò)這幾個(gè)詞。一直搞不太清楚他們之間的區(qū)別。今天查了資料后總結(jié)整理如下。  ISP:In System Programing, 在系統(tǒng)編程; IAP:In applicaTIng Programing, 在應(yīng)用編程; ICP:In Circuit Programing, 在電路編程。  ISP是指可以在板級(jí)上進(jìn)行編程,也就是不用拆芯片下來(lái),寫(xiě)的是整個(gè)程序,一般是通過(guò)ISP接口線(xiàn)來(lái)寫(xiě)。  IAP雖然同樣也是在板級(jí)上進(jìn)行編程,但是是自已對(duì)自已進(jìn)行編程,在應(yīng)用中進(jìn)行編程,也即可以只是更改某一部分而不影響系統(tǒng)的其它部分,另外接口程序是自已寫(xiě)的,這樣可以進(jìn)行遠(yuǎn)程升級(jí)而不影響應(yīng)用。    打個(gè)比喻吧:ISP是把房子拆了再重造一間,那么在造好之前當(dāng)然是不能住人的;IAP是在造好的房子里邊進(jìn)行一些裝修,當(dāng)然人可以繼續(xù)住。  ICP是在電路編程,是LPC芯片的編程方式,相當(dāng)于A(yíng)TMEL的ISP,而LPC的ISP就相當(dāng)于A(yíng)TMEL的IAP了。  ISP與IAP  ISP定義  用寫(xiě)入器將code燒入,不過(guò),芯片可以在目標(biāo)板上,不用取出來(lái),在設(shè)計(jì)目標(biāo)板的時(shí)候就將接口設(shè)計(jì)在上面,所以叫“在系統(tǒng)編程”,即不用脫離系統(tǒng)。  IAP定義  在應(yīng)用編程,有芯片本身(或通過(guò)外圍的芯片)可以通過(guò)一系列操作將code寫(xiě)入,比如一款支持IAP的單片機(jī),內(nèi)分3個(gè)程序區(qū),1作引導(dǎo)程序區(qū),2作運(yùn)行程序區(qū),3作下載區(qū),芯片通過(guò)串口接收到下載命令,進(jìn)入引導(dǎo)區(qū)運(yùn)行引導(dǎo)程序,在引導(dǎo)程序下將new code內(nèi)容下載到下載區(qū),下載完畢并校驗(yàn)通過(guò)后再將下載區(qū)內(nèi)容復(fù)制到2區(qū),運(yùn)行復(fù)位程序,則IAP完成。  ISP與IAP觸發(fā)方式  ISP的觸發(fā)方式   四種觸發(fā)方式  1.由外部硬件電路:如VDD保持高電平,給RST連續(xù)3個(gè)脈沖。  2.檢測(cè)狀態(tài)位:如ISPEN,為0時(shí)PC指針從0000H開(kāi)始執(zhí)行;為1時(shí),通過(guò)“引導(dǎo)向量”計(jì)算出“ISP代碼”的位置。每次復(fù)位后都會(huì)檢測(cè)該狀態(tài)位。  3.中止控制符信號(hào)觸發(fā)芯片復(fù)位:中止控制符信號(hào)就是指在異步串行口的接收腳上出現(xiàn)長(zhǎng)達(dá)一幀長(zhǎng)度的低電平,這里一幀的長(zhǎng)度與異步串行口的工作模式有關(guān)。  4.直接調(diào)用ISP:用戶(hù)程序也可以調(diào)用,但是很危險(xiǎn)。  4種方式的目的是相同的——進(jìn)入ISP子程序。  而進(jìn)入ISP代碼的目的是:進(jìn)入BootROM。  IAP的觸發(fā)方式  IAP的觸發(fā)比較簡(jiǎn)單一些,沒(méi)有外部觸發(fā)。通過(guò)一些指示位(SST為SC0/SC1、SFCFhilips為一段IAP子程序,保存在FF00H~FFFFH地址空間中),達(dá)到引導(dǎo)到BootROM的目的。    殊途同歸,ISP、IAP所進(jìn)入的BootROM里面駐留的Boot代碼,才是最終目標(biāo)。  并行編程模式。不需要BootROM,直接設(shè)置芯片的多個(gè)引腳來(lái)讓芯片識(shí)別命令(如:擦除、寫(xiě)入、驗(yàn)證等),從P口傳地址、數(shù)據(jù),就可以寫(xiě)入Flash。  用LPC2000的IAP,你自己分配好FLASH空間,指定一個(gè)BLOCK用來(lái)存放你的數(shù)據(jù),然后通過(guò)IAP進(jìn)行寫(xiě)操作。每次開(kāi)機(jī)后,從這個(gè)BLOCK讀你的數(shù)據(jù)。  IAP的實(shí)現(xiàn)  通常在用戶(hù)需要實(shí)現(xiàn)IAP功能時(shí),即用戶(hù)程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫(xiě)兩個(gè)項(xiàng)目代碼,第一個(gè)項(xiàng)目程序不執(zhí)行正常的功能操作,而只是通過(guò)某種通信管道(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對(duì)第二部分代碼的更新;第二個(gè)項(xiàng)目代碼才是真正的功能代碼。這兩部分項(xiàng)目代碼都同時(shí)燒錄在User Flash中,當(dāng)芯片上電后,首先是第一個(gè)項(xiàng)目代碼開(kāi)始運(yùn)行,它作如下操作:  (1)檢查是否需要對(duì)第二部分代碼進(jìn)行更新; (2)如果不需要更新則轉(zhuǎn)到步驟(4); (3)執(zhí)行更新操作; (4)跳轉(zhuǎn)到第二部分代碼執(zhí)行。  第一部分代碼必須通過(guò)其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一道燒入,以后需要程序更新是再通過(guò)第一部分IAP代碼更新。    對(duì)于STM32來(lái)說(shuō),因?yàn)樗闹袛嘞蛄勘砦挥诔绦虼鎯?chǔ)器的最低地址區(qū),為了使第一部分代碼能夠正確地響應(yīng)中斷,通常會(huì)安排第一部分代碼處于Flash的開(kāi)始區(qū)域,而第二部分代碼緊隨其后。  在第二部分代碼開(kāi)始執(zhí)行時(shí),首先需要把CPU的中斷向量表映像到自己的向量表,然后再執(zhí)行其他的操作。  如果IAP程序被破壞,產(chǎn)品必須返廠(chǎng)才能重新燒寫(xiě)程序,這是很麻煩并且非常耗費(fèi)時(shí)間和金錢(qián)的。針對(duì)這樣的需求,STM32在對(duì)Flash區(qū)域?qū)嵭凶x保護(hù)的同時(shí),自動(dòng)地對(duì)用戶(hù)Flash區(qū)的開(kāi)始4頁(yè)設(shè)置為寫(xiě)保護(hù),這樣可以有效地保證IAP程序(第一部分代碼)區(qū)域不會(huì)被意外地破壞。


    打個(gè)比喻吧:ISP是把房子拆了再重造一間,那么在造好之前當(dāng)然是不能住人的;IAP是在造好的房子里邊進(jìn)行一些裝修,當(dāng)然人可以繼續(xù)住。


    ICP是在電路編程,是LPC芯片的編程方式,相當(dāng)于A(yíng)TMEL的ISP,而LPC的ISP就相當(dāng)于A(yíng)TMEL的IAP了。


    ISP與IAP


    ISP定義


    用寫(xiě)入器將code燒入,不過(guò),芯片可以在目標(biāo)板上,不用取出來(lái),在設(shè)計(jì)目標(biāo)板的時(shí)候就將接口設(shè)計(jì)在上面,所以叫“在系統(tǒng)編程”,即不用脫離系統(tǒng)。


    IAP定義


    在應(yīng)用編程,有芯片本身(或通過(guò)外圍的芯片)可以通過(guò)一系列操作將code寫(xiě)入,比如一款支持IAP的單片機(jī),內(nèi)分3個(gè)程序區(qū),1作引導(dǎo)程序區(qū),2作運(yùn)行程序區(qū),3作下載區(qū),芯片通過(guò)串口接收到下載命令,進(jìn)入引導(dǎo)區(qū)運(yùn)行引導(dǎo)程序,在引導(dǎo)程序下將new code內(nèi)容下載到下載區(qū),下載完畢并校驗(yàn)通過(guò)后再將下載區(qū)內(nèi)容復(fù)制到2區(qū),運(yùn)行復(fù)位程序,則IAP完成。


    ISP與IAP觸發(fā)方式


    ISP的觸發(fā)方式



    四種觸發(fā)方式


    1.由外部硬件電路:如VDD保持高電平,給RST連續(xù)3個(gè)脈沖。


    2.檢測(cè)狀態(tài)位:如ISPEN,為0時(shí)PC指針從0000H開(kāi)始執(zhí)行;為1時(shí),通過(guò)“引導(dǎo)向量”計(jì)算出“ISP代碼”的位置。每次復(fù)位后都會(huì)檢測(cè)該狀態(tài)位。


    3.中止控制符信號(hào)觸發(fā)芯片復(fù)位:中止控制符信號(hào)就是指在異步串行口的接收腳上出現(xiàn)長(zhǎng)達(dá)一幀長(zhǎng)度的低電平,這里一幀的長(zhǎng)度與異步串行口的工作模式有關(guān)。


    4.直接調(diào)用ISP:用戶(hù)程序也可以調(diào)用,但是很危險(xiǎn)。


    4種方式的目的是相同的——進(jìn)入ISP子程序。


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


    IAP的觸發(fā)方式


    IAP的觸發(fā)比較簡(jiǎn)單一些,沒(méi)有外部觸發(fā)。通過(guò)一些指示位(SST為SC0/SC1、SFCFhilips為一段IAP子程序,保存在FF00H~FFFFH地址空間中),達(dá)到引導(dǎo)到BootROM的目的。



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


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


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


    IAP的實(shí)現(xiàn)


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


    (1)檢查是否需要對(duì)第二部分代碼進(jìn)行更新;

    (2)如果不需要更新則轉(zhuǎn)到步驟(4);

    (3)執(zhí)行更新操作;

    (4)跳轉(zhuǎn)到第二部分代碼執(zhí)行。


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


    對(duì)于STM32來(lái)說(shuō),因?yàn)樗闹袛嘞蛄勘砦挥诔绦虼鎯?chǔ)器的最低地址區(qū),為了使第一部分代碼能夠正確地響應(yīng)中斷,通常會(huì)安排第一部分代碼處于Flash的開(kāi)始區(qū)域,而第二部分代碼緊隨其后。

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


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


    在線(xiàn)留言