P89LPC932的幾種ISP編程方法
引 言:
本文引用地址:http://cafeforensic.com/article/171732.htmLPC900系列Flash單片機(jī)提供從8腳到28腳的封裝形式,可以滿(mǎn)足各種對(duì)成本和電路板空間有限制而又要求高性能、高可靠性的應(yīng)用需要,同時(shí)具有高速率(6倍于傳統(tǒng)MCS51單片機(jī)),低功耗(完全掉電模式下耗電低于1 μA),高穩(wěn)定性,小封裝,多功能(內(nèi)嵌眾多流行的功能模塊)等特點(diǎn)。P89LPC932就是該家族中的重要一員,其集成了8 KB的Flash程序存儲(chǔ)器、512B的靜態(tài)數(shù)據(jù)存儲(chǔ)器、512B的E2PROM、I2C總線(xiàn)、SPI總線(xiàn)、增強(qiáng)型UART接口、模擬比較器、看門(mén)狗、4 個(gè)中斷優(yōu)先級(jí)、雙DPTR,并支持ISP/IAP編程等功能。
1.1內(nèi)部程序存儲(chǔ)器的三種編程方式
P89LPC932內(nèi)部集成的8 KB程序存儲(chǔ)器編程的三種方式分別是:在系統(tǒng)編程(ISP);程序運(yùn)行時(shí)編程(IAP);通過(guò)并行方式編程。
一般來(lái)說(shuō),ISP編程是指依靠某種外部工具(除了常規(guī)的并行編程器以外)去直接給處理器內(nèi)部集成的程序存儲(chǔ)器編程。這里所指的外部工具常見(jiàn)的有很多種,不同的處理器供應(yīng)廠(chǎng)商可能提供不同的方案。例如,根據(jù)編程接口的不同,就有JTAG、單線(xiàn)、串口、SPI口等多種方式。盡管編程方式有所不同,但其原理都是類(lèi)似的,就是依靠外部條件觸發(fā)處理器,令其脫離正常執(zhí)行的內(nèi)部常規(guī)用戶(hù)應(yīng)用程序代碼的進(jìn)程,轉(zhuǎn)而執(zhí)行保存在其程序存儲(chǔ)空間內(nèi)某個(gè)固定位置處的控制擦除程序存儲(chǔ)器及給程序存儲(chǔ)器編程的代碼(或是處理器外部提供的執(zhí)行代碼),然后通過(guò)某種與PC計(jì)算機(jī)的通信方式,將用戶(hù)指定的某個(gè)在PC上編譯完成的嵌入式處理器可運(yùn)行的二進(jìn)制代碼文件編程入嵌入式處理器內(nèi)的程序存儲(chǔ)器。這種編程方式只需要常規(guī)的硬件配置(某些處理器可能需要某些叫做下載線(xiàn)的簡(jiǎn)單硬件電路)支持,而不需要特別的編程器(指并行編程器)支持,所以即使處理器芯片已經(jīng)焊接到了電路板上也可以實(shí)現(xiàn)編程,這也就是ISP的真實(shí)含義。P89LPC932 是利用其自身的異步串行口來(lái)實(shí)現(xiàn)ISP編程的,不需要特別的下載線(xiàn)或下載器,觸發(fā)LPC932進(jìn)入ISP編程模式的方法將在下文詳細(xì)解釋。
IAP編程方式與ISP編程方式類(lèi)似,但它不是由外部條件來(lái)觸發(fā)的,而是在處理器正常執(zhí)行用戶(hù)設(shè)計(jì)的應(yīng)用程序代碼時(shí),直接調(diào)用執(zhí)行擦除及編程功能的固化例程。和ISP編程方式一樣,IAP編程方式也只需要常規(guī)的硬件配置來(lái)支持。P89LPC932的ISP編程實(shí)際上就是通過(guò)調(diào)用芯片的IAP服務(wù)子程序?qū)崿F(xiàn)編程的,其IAP服務(wù)子程序保存在FF00H~FFFFH地址空間中,不占用用戶(hù)程序空間。
并行方式編程需要使用一臺(tái)外部專(zhuān)業(yè)編程設(shè)備。換句話(huà)說(shuō),這種編程環(huán)境并不是用戶(hù)最終應(yīng)用時(shí)的硬件環(huán)境。用戶(hù)在使用這種編程方式時(shí),通常必須將處理器芯片單獨(dú)放到并行編程器上進(jìn)行編程(如果處理器芯片已經(jīng)焊接到電路板上,則必須先將處理器芯片從電路板上取下來(lái))。處理器芯片編程完成后才能放回到電路板上,再上電令處理器運(yùn)行,才能看到用戶(hù)新寫(xiě)入代碼的運(yùn)行結(jié)果。這是最傳統(tǒng)的編程方式(經(jīng)典的AT89C51就主要使用這種方式編程),但它既繁瑣,又不能滿(mǎn)足現(xiàn)今遠(yuǎn)程升級(jí)的實(shí)際需求,因而已逐漸被方便快捷的ISP、IAP等在線(xiàn)編程方式所取代。
綜合來(lái)說(shuō),ISP模式是最容易使用的,因?yàn)樗试S處理器在被焊接到用戶(hù)目標(biāo)電路板上再進(jìn)行編程,也不需要復(fù)雜的代碼設(shè)計(jì),該特性允許用戶(hù)在生產(chǎn)出硬件產(chǎn)品后再升級(jí)產(chǎn)品軟件。一般來(lái)說(shuō),增加校準(zhǔn)信息數(shù)據(jù)和現(xiàn)場(chǎng)安裝最新的軟件版本是較常見(jiàn)的升級(jí)操作。不僅如此,ISP編程還特別適用于用戶(hù)產(chǎn)品研發(fā)階段。顯然,用戶(hù)可以非常方便快捷地更改自己的程序代碼并立即看到新代碼的運(yùn)行結(jié)果。 P89LPC932使用串口作為ISP編程模式的主通信接口,使得這一系列處理器較那些依靠JTAG、SPI等通信接口作ISP編程接口的處理器要方便。因?yàn)橐话愕那度胧较到y(tǒng)都會(huì)配置異步串行口,這樣,在系統(tǒng)編程就不需要特殊的ISP編程器,而JTAG、SPI等及其類(lèi)似的編程方式一般都需要專(zhuān)用的接口適配器或下載線(xiàn)來(lái)配合,這些都可能會(huì)增加用戶(hù)的投資和成本。
P89LPC932芯片實(shí)現(xiàn)ISP編程是依靠在出廠(chǎng)時(shí)預(yù)置的一段啟動(dòng)代碼,這段代碼存儲(chǔ)在P89LPC932代碼空間內(nèi)7號(hào)扇區(qū)的高端512B地址處(P89LPC932內(nèi)部的8 KB程序存儲(chǔ)器被組織成8個(gè)扇區(qū),每個(gè)扇區(qū)有1 KB)。這段代碼提供了設(shè)備底層操作代碼(執(zhí)行如擦除、編程等操作)和串口通信之間的接口。如果用戶(hù)需要使用ISP編程模式,則必須注意,千萬(wàn)不要擦除或覆蓋包含ISP預(yù)置代碼的那個(gè)扇區(qū),也就是7號(hào)扇區(qū)(1C00~1FFFH),因?yàn)镻89LPC932的擦除操作是以扇區(qū)為基本單位的。
如圖1所示,用P89LPC932實(shí)現(xiàn)ISP的硬件連接很簡(jiǎn)單,它只需使用VDD電壓即可執(zhí)行擦除和編程算法,不需要特殊的高編程電壓,所以,芯片外部只需要1片TTL和RS232電平相互轉(zhuǎn)換的芯片(常見(jiàn)的芯片包括Maxim的MAX202、MAX232等,其他公司如TI、Sipex、Linear 都有類(lèi)似功能的芯片產(chǎn)品)即可實(shí)現(xiàn)P89LPC932內(nèi)異步串行口和用戶(hù)個(gè)人計(jì)算機(jī)上的RS232串口的連接。在用戶(hù)個(gè)人計(jì)算機(jī)上運(yùn)行一個(gè)簡(jiǎn)單的終端仿真程序就可以實(shí)現(xiàn)ISP編程,不過(guò)還有一種更簡(jiǎn)單的方法,就是運(yùn)行一個(gè)現(xiàn)成的免費(fèi)程序,比如Flashmagic,就可以實(shí)現(xiàn)這個(gè)目的,這個(gè)程序集成了所有針對(duì)Philips LPC900系列處理器的ISP功能。P89LPC932內(nèi)部的ISP代碼能夠自動(dòng)檢測(cè)其片上異步串行口與用戶(hù)個(gè)人計(jì)算機(jī)通信的波特率,進(jìn)而實(shí)現(xiàn)在用戶(hù)個(gè)人計(jì)算機(jī)控制下的代碼下載及編程。綜上所述,P89LPC932的這種ISP編程模式不需要外部編程器,但是需要一定的外部電路(串口通信電路),需要保留ISP駐留代碼,需要在用戶(hù)的應(yīng)用程序代碼中添加ISP引導(dǎo)初始化程序(如中止控制符檢測(cè)初始化),且ISP加密字的第2位(禁止ISP/IAP擦除)不能置位。
圖1P89LPC932 ISP模式硬件連接圖
1.2進(jìn)入ISP模式的方法
觸發(fā)P89LPC932進(jìn)入ISP模式的4種方法分別是:通過(guò)檢測(cè)狀態(tài)位觸發(fā)進(jìn)入ISP模式(全新芯片最初上電時(shí)的默認(rèn)狀態(tài));通過(guò)檢測(cè)中止控制符信號(hào)觸發(fā)復(fù)位后進(jìn)入ISP模式(最實(shí)用而且常用的方法);上電時(shí)在復(fù)位引腳上檢測(cè)到特定脈沖后觸發(fā)進(jìn)入ISP模式(即硬件激活進(jìn)入ISP模式);直接調(diào)用 ISP代碼實(shí)現(xiàn)進(jìn)入ISP模式。
1.2.1通過(guò)檢測(cè)狀態(tài)位觸發(fā)進(jìn)入ISP模式
P89LPC932復(fù)位時(shí),是否進(jìn)入 ISP模式會(huì)受一個(gè)狀態(tài)位的控制,這個(gè)狀態(tài)位保存在Flash存儲(chǔ)器里的一個(gè)保留位置,不過(guò)這個(gè)位置并不在P89LPC932可以尋址的程序存儲(chǔ)器空間內(nèi)。在復(fù)位信號(hào)的下降沿,處理器將檢查該狀態(tài)位的值,如果其值為0,處理器將從地址0000H處開(kāi)始取指令執(zhí)行,這里通常存儲(chǔ)著用戶(hù)的應(yīng)用程序代碼。如果該狀態(tài)位的值不是0,則處理器將從另一個(gè)確定的地址處開(kāi)始執(zhí)行此處的代碼,這個(gè)地址(16位)的高8位由復(fù)位向量指定,低8位固定為00H。也就是說(shuō),引導(dǎo)向量的值將作為程序計(jì)數(shù)器(PC)的高字節(jié),低字節(jié)為00H。如果用戶(hù)使用的是一片新芯片,芯片中的狀態(tài)位值在出廠(chǎng)時(shí)就被設(shè)置為1,而啟動(dòng)向量被預(yù)編程為1EH。因此,新芯片在復(fù)位后將直接從1E00H地址處開(kāi)始執(zhí)行代碼。因?yàn)閺?E00H開(kāi)始處的代碼,正好就是Philips公司給芯片預(yù)置的ISP啟動(dòng)代碼。如果用戶(hù)希望從0000H地址處開(kāi)始執(zhí)行代碼,則狀態(tài)位的值可以通過(guò)并行編程器去清零。實(shí)際上,通過(guò)ISP代碼的自身功能也可以給狀態(tài)位清零;如果用戶(hù)往P89LPC932內(nèi)部的程序存儲(chǔ)器寫(xiě)入自己的應(yīng)用程序代碼后給狀態(tài)位清零,則下次芯片復(fù)位后處理器將直接執(zhí)行用戶(hù)代碼。另外,ISP代碼也有修改啟動(dòng)向量值的功能,用戶(hù)可以修改它的值,也就是把芯片復(fù)位后取代碼執(zhí)行的地址修改了(假如LPC932被觸發(fā)進(jìn)入ISP模式的話(huà)),而用戶(hù)自己編寫(xiě)的啟動(dòng)代碼就放在那里,這種設(shè)計(jì)通常是用來(lái)執(zhí)行某些特殊功能的。不過(guò),如果用戶(hù)修改了啟動(dòng)向量的值,使它不再是1EH,則用戶(hù)就再也不能使用LPC932出廠(chǎng)時(shí)預(yù)置的啟動(dòng)代碼了。如果啟動(dòng)向量被修改而指向一個(gè)不包括任何啟動(dòng)代碼的地址,用戶(hù)則不得不使用一臺(tái)并行編程器來(lái)給這枚芯片編程,以恢復(fù)它的啟動(dòng)向量值;否則,用戶(hù)將無(wú)法再使用這種ISP編程方法。
1.2.2通過(guò)檢測(cè)中止控制符信號(hào)觸發(fā)芯片復(fù)位后進(jìn)入ISP模式
通過(guò)異步串行口檢測(cè)到中止控制符信號(hào)觸發(fā)芯片復(fù)位后進(jìn)入ISP模式是進(jìn)入ISP模式的第二種方式。中止控制符信號(hào)就是指在異步串行口的接收腳上出現(xiàn)長(zhǎng)達(dá)一幀長(zhǎng)度的低電平,這里一幀的長(zhǎng)度與異步串行口的工作模式有關(guān)。例如,在異步串行口的“模式一”中,一幀相當(dāng)于10個(gè)比特的傳輸時(shí)間。一般地,當(dāng)一個(gè)中止控制符信號(hào)發(fā)出時(shí),異步串行口的接收腳將會(huì)持續(xù)相當(dāng)于很多幀時(shí)間的低電平。不過(guò),在第一幀的時(shí)候,中止控制符信號(hào)就會(huì)被檢測(cè)到。注意,如果用一個(gè)機(jī)械開(kāi)關(guān)來(lái)拉低異步串行口的接收腳,以創(chuàng)造一個(gè)中止控制符信號(hào),同時(shí),處理器被配置為允許串行中斷,則異步串行口的接收中斷標(biāo)志必須在其中斷服務(wù)全程中被處理,否則,處理器將進(jìn)入一種不確定的狀態(tài)。
評(píng)論