P89LPC932的幾種ISP編程方法
引 言:
LPC900系列Flash單片機(jī)提供從8腳到28腳的封裝形式,可以滿足各種對(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總線、SPI總線、增強(qiáng)型UART接口、模擬比較器、看門狗、4 個(gè)中斷優(yōu)先級(jí)、雙DPTR,并支持ISP/IAP編程等功能。
1 P89LPC932進(jìn)行ISP編程的基本方式
1.1內(nèi)部程序存儲(chǔ)器的三種編程方式
P89LPC932內(nèi)部集成的8 KB程序存儲(chǔ)器編程的三種方式分別是:在系統(tǒng)編程(ISP);程序運(yùn)行時(shí)編程(IAP);通過并行方式編程。
一般來說,ISP編程是指依靠某種外部工具(除了常規(guī)的并行編程器以外)去直接給處理器內(nèi)部集成的程序存儲(chǔ)器編程。這里所指的外部工具常見的有很多種,不同的處理器供應(yīng)廠商可能提供不同的方案。例如,根據(jù)編程接口的不同,就有JTAG、單線、串口、SPI口等多種方式。盡管編程方式有所不同,但其原理都是類似的,就是依靠外部條件觸發(fā)處理器,令其脫離正常執(zhí)行的內(nèi)部常規(guī)用戶應(yīng)用程序代碼的進(jìn)程,轉(zhuǎn)而執(zhí)行保存在其程序存儲(chǔ)空間內(nèi)某個(gè)固定位置處的控制擦除程序存儲(chǔ)器及給程序存儲(chǔ)器編程的代碼(或是處理器外部提供的執(zhí)行代碼),然后通過某種與PC計(jì)算機(jī)的通信方式,將用戶指定的某個(gè)在PC上編譯完成的嵌入式處理器可運(yùn)行的二進(jìn)制代碼文件編程入嵌入式處理器內(nèi)的程序存儲(chǔ)器。這種編程方式只需要常規(guī)的硬件配置(某些處理器可能需要某些叫做下載線的簡(jiǎn)單硬件電路)支持,而不需要特別的編程器(指并行編程器)支持,所以即使處理器芯片已經(jīng)焊接到了電路板上也可以實(shí)現(xiàn)編程,這也就是ISP的真實(shí)含義。P89LPC932 是利用其自身的異步串行口來實(shí)現(xiàn)ISP編程的,不需要特別的下載線或下載器,觸發(fā)LPC932進(jìn)入ISP編程模式的方法將在下文詳細(xì)解釋。
IAP編程方式與ISP編程方式類似,但它不是由外部條件來觸發(fā)的,而是在處理器正常執(zhí)行用戶設(shè)計(jì)的應(yīng)用程序代碼時(shí),直接調(diào)用執(zhí)行擦除及編程功能的固化例程。和ISP編程方式一樣,IAP編程方式也只需要常規(guī)的硬件配置來支持。P89LPC932的ISP編程實(shí)際上就是通過調(diào)用芯片的IAP服務(wù)子程序?qū)崿F(xiàn)編程的,其IAP服務(wù)子程序保存在FF00H~FFFFH地址空間中,不占用用戶程序空間。
并行方式編程需要使用一臺(tái)外部專業(yè)編程設(shè)備。換句話說,這種編程環(huán)境并不是用戶最終應(yīng)用時(shí)的硬件環(huán)境。用戶在使用這種編程方式時(shí),通常必須將處理器芯片單獨(dú)放到并行編程器上進(jìn)行編程(如果處理器芯片已經(jīng)焊接到電路板上,則必須先將處理器芯片從電路板上取下來)。處理器芯片編程完成后才能放回到電路板上,再上電令處理器運(yùn)行,才能看到用戶新寫入代碼的運(yùn)行結(jié)果。這是最傳統(tǒng)的編程方式(經(jīng)典的AT89C51就主要使用這種方式編程),但它既繁瑣,又不能滿足現(xiàn)今遠(yuǎn)程升級(jí)的實(shí)際需求,因而已逐漸被方便快捷的ISP、IAP等在線編程方式所取代。
綜合來說,ISP模式是最容易使用的,因?yàn)樗试S處理器在被焊接到用戶目標(biāo)電路板上再進(jìn)行編程,也不需要復(fù)雜的代碼設(shè)計(jì),該特性允許用戶在生產(chǎn)出硬件產(chǎn)品后再升級(jí)產(chǎn)品軟件。一般來說,增加校準(zhǔn)信息數(shù)據(jù)和現(xiàn)場(chǎng)安裝最新的軟件版本是較常見的升級(jí)操作。不僅如此,ISP編程還特別適用于用戶產(chǎn)品研發(fā)階段。顯然,用戶可以非常方便快捷地更改自己的程序代碼并立即看到新代碼的運(yùn)行結(jié)果。 P89LPC932使用串口作為ISP編程模式的主通信接口,使得這一系列處理器較那些依靠JTAG、SPI等通信接口作ISP編程接口的處理器要方便。因?yàn)橐话愕那度胧较到y(tǒng)都會(huì)配置異步串行口,這樣,在系統(tǒng)編程就不需要特殊的ISP編程器,而JTAG、SPI等及其類似的編程方式一般都需要專用的接口適配器或下載線來配合,這些都可能會(huì)增加用戶的投資和成本。
P89LPC932芯片實(shí)現(xiàn)ISP編程是依靠在出廠時(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í)行如擦除、編程等操作)和串口通信之間的接口。如果用戶需要使用ISP編程模式,則必須注意,千萬不要擦除或覆蓋包含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)換的芯片(常見的芯片包括Maxim的MAX202、MAX232等,其他公司如TI、Sipex、Linear 都有類似功能的芯片產(chǎn)品)即可實(shí)現(xiàn)P89LPC932內(nèi)異步串行口和用戶個(gè)人計(jì)算機(jī)上的RS232串口的連接。在用戶個(gè)人計(jì)算機(jī)上運(yùn)行一個(gè)簡(jiǎn)單的終端仿真程序就可以實(shí)現(xiàn)ISP編程,不過還有一種更簡(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è)其片上異步串行口與用戶個(gè)人計(jì)算機(jī)通信的波特率,進(jìn)而實(shí)現(xiàn)在用戶個(gè)人計(jì)算機(jī)控制下的代碼下載及編程。綜上所述,P89LPC932的這種ISP編程模式不需要外部編程器,但是需要一定的外部電路(串口通信電路),需要保留ISP駐留代碼,需要在用戶的應(yīng)用程序代碼中添加ISP引導(dǎo)初始化程序(如中止控制符檢測(cè)初始化),且ISP加密字的第2位(禁止ISP/IAP擦除)不能置位。
圖1P89LPC932 ISP模式硬件連接圖
1.2進(jìn)入ISP模式的方法
觸發(fā)P89LPC932進(jìn)入ISP模式的4種方法分別是:通過檢測(cè)狀態(tài)位觸發(fā)進(jìn)入ISP模式(全新芯片最初上電時(shí)的默認(rèn)狀態(tài));通過檢測(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通過檢測(cè)狀態(tài)位觸發(fā)進(jìn)入ISP模式
P89LPC932復(fù)位時(shí),是否進(jìn)入 ISP模式會(huì)受一個(gè)狀態(tài)位的控制,這個(gè)狀態(tài)位保存在Flash存儲(chǔ)器里的一個(gè)保留位置,不過這個(gè)位置并不在P89LPC932可以尋址的程序存儲(chǔ)器空間內(nèi)。在復(fù)位信號(hào)的下降沿,處理器將檢查該狀態(tài)位的值,如果其值為0,處理器將從地址0000H處開始取指令執(zhí)行,這里通常存儲(chǔ)著用戶的應(yīng)用程序代碼。如果該狀態(tài)位的值不是0,則處理器將從另一個(gè)確定的地址處開始執(zhí)行此處的代碼,這個(gè)地址(16位)的高8位由復(fù)位向量指定,低8位固定為00H。也就是說,引導(dǎo)向量的值將作為程序計(jì)數(shù)器(PC)的高字節(jié),低字節(jié)為00H。如果用戶使用的是一片新芯片,芯片中的狀態(tài)位值在出廠時(shí)就被設(shè)置為1,而啟動(dòng)向量被預(yù)編程為1EH。因此,新芯片在復(fù)位后將直接從1E00H地址處開始執(zhí)行代碼。因?yàn)閺?E00H開始處的代碼,正好就是Philips公司給芯片預(yù)置的ISP啟動(dòng)代碼。如果用戶希望從0000H地址處開始執(zhí)行代碼,則狀態(tài)位的值可以通過并行編程器去清零。實(shí)際上,通過ISP代碼的自身功能也可以給狀態(tài)位清零;如果用戶往P89LPC932內(nèi)部的程序存儲(chǔ)器寫入自己的應(yīng)用程序代碼后給狀態(tài)位清零,則下次芯片復(fù)位后處理器將直接執(zhí)行用戶代碼。另外,ISP代碼也有修改啟動(dòng)向量值的功能,用戶可以修改它的值,也就是把芯片復(fù)位后取代碼執(zhí)行的地址修改了(假如LPC932被觸發(fā)進(jìn)入ISP模式的話),而用戶自己編寫的啟動(dòng)代碼就放在那里,這種設(shè)計(jì)通常是用來執(zhí)行某些特殊功能的。不過,如果用戶修改了啟動(dòng)向量的值,使它不再是1EH,則用戶就再也不能使用LPC932出廠時(shí)預(yù)置的啟動(dòng)代碼了。如果啟動(dòng)向量被修改而指向一個(gè)不包括任何啟動(dòng)代碼的地址,用戶則不得不使用一臺(tái)并行編程器來給這枚芯片編程,以恢復(fù)它的啟動(dòng)向量值;否則,用戶將無法再使用這種ISP編程方法。
1.2.2通過檢測(cè)中止控制符信號(hào)觸發(fā)芯片復(fù)位后進(jìn)入ISP模式
通過異步串行口檢測(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í)間的低電平。不過,在第一幀的時(shí)候,中止控制符信號(hào)就會(huì)被檢測(cè)到。注意,如果用一個(gè)機(jī)械開關(guān)來拉低異步串行口的接收腳,以創(chuàng)造一個(gè)中止控制符信號(hào),同時(shí),處理器被配置為允許串行中斷,則異步串行口的接收中斷標(biāo)志必須在其中斷服務(wù)全程中被處理,否則,處理器將進(jìn)入一種不確定的狀態(tài)。
這種方式要求駐留在P89LPC932程序存儲(chǔ)器內(nèi)部的用戶應(yīng)用程序代碼必須包括初始化異步串行口的代碼。換句話說,用戶必須使能異步串行口,同時(shí),特殊功能寄存器AUXR1中的允許中止控制符信號(hào)位(EBRR)必須被置1,以允許在檢測(cè)到中止控制符信號(hào)時(shí)觸發(fā)處理器復(fù)位。此外,啟動(dòng)向量配置字節(jié)須保證為1EH(使用P89LPC932內(nèi)預(yù)置的ISP代碼),狀態(tài)字為00H(以使用戶應(yīng)用代碼得以執(zhí)行),且1E00H~1FFFH的Flash程序存儲(chǔ)器不要使用或擦除。這樣配置完成后,只要異步串行口的接收腳檢測(cè)到中止控制符信號(hào)后,處理器就會(huì)復(fù)位,復(fù)位后LPC932將從由啟動(dòng)向量指定的地址處取指令執(zhí)行。
有兩個(gè)問題在使用這種觸發(fā)方式的時(shí)候應(yīng)該了解。一是某些USB轉(zhuǎn)RS232的轉(zhuǎn)換器無法發(fā)出中止控制符信號(hào),所以無法使用檢測(cè)中止控制符信號(hào)的方式觸發(fā)處理器復(fù)位并進(jìn)入ISP模式;二是中止控制符信號(hào)在正常的串口通信不會(huì)出現(xiàn),所以用戶可以放心使用這種觸發(fā)方式。
1.2.3硬件激活進(jìn)入ISP模式
使用這種模式的好處在于,不論處理器內(nèi)部原來存儲(chǔ)著什么用戶代碼,也不論狀態(tài)位的值是什么,ISP模式總是可以進(jìn)入的(不過有一點(diǎn)還是必須得到保證,就是處理器里原來的啟動(dòng)代碼未被擦除或覆蓋,而默認(rèn)的啟動(dòng)向量1EH也沒有修改過)。由于P89LPC932引腳數(shù)比較少,而且內(nèi)置了程序存儲(chǔ)器,又沒有傳統(tǒng)的用于外擴(kuò)總線的P0、P2口和PSEN引腳,所以依靠硬件方式觸發(fā)芯片進(jìn)入ISP模式的方法與傳統(tǒng)MCS-51芯片有所不同。
上電后,如果處理器在復(fù)位腳上檢測(cè)到如圖2所示的脈沖波形,則處理器將從啟動(dòng)向量指定的地址處取指令運(yùn)行,也就是進(jìn)入ISP模式,而不是從0000H處取指令執(zhí)行。其實(shí),這種進(jìn)入方式的結(jié)果和有一個(gè)非零的狀態(tài)字節(jié)有著相同效果。不過要注意的是,產(chǎn)生的脈沖數(shù)目只允許有3個(gè),多于或少于3個(gè)脈沖都不能觸發(fā)處理器進(jìn)入ISP模式。
圖2P89LPC932硬件激活I(lǐng)SP模式波形圖
可以利用一枚外部的微處理器來產(chǎn)生這3個(gè)脈沖,同時(shí)它還控制一枚電源芯片來產(chǎn)生P89LPC932需要的電源電壓。這種方法的原理很容易弄明白,筆者在此不再贅述。另外,還有一種更簡(jiǎn)單的方法,就是由用戶PC機(jī)上的異步串行口加上部分硬件電路來直接產(chǎn)生所需的時(shí)序,具體介紹可以參看參考文獻(xiàn)1。
1.2.4直接調(diào)用法觸發(fā)處理器執(zhí)行ISP代碼
P89LPC932的ISP模式的預(yù)置啟動(dòng)向量為1EH,所以其ISP駐留代碼首地址為1E00H,要進(jìn)入ISP,直接調(diào)用1E00H處的代碼就可以了。在C代碼中,程序通過函數(shù)指針的方式就可以調(diào)用ISP駐留代碼(即進(jìn)入ISP模式)。
1.3在P89LPC932上使用Flashmagic
Flashmagic是一個(gè)免費(fèi)的軟件工具,可以為Philips的許多處理器作ISP編程,包括P89LPC932。Flashmagic啟動(dòng)時(shí)將試圖連接用戶選擇的器件,不過通常在這里都會(huì)報(bào)錯(cuò),因?yàn)椴]有任何處理器處于ISP模式,又或者還有什么其他的設(shè)置需要更改。請(qǐng)選擇Flashmagic控制的PC機(jī)上的正確串行口,同時(shí)選擇目標(biāo)器件為P89LPC932,如圖3所示。然后使這片P89LPC932進(jìn)入ISP模式(如果
圖3FlashMagic的啟動(dòng)畫面
這是一枚全新的處理器,則它這時(shí)已經(jīng)處于ISP模式了)。如果這不是一枚全新的處理器(狀態(tài)位不是1),那么必須使用硬件方式激活處理器進(jìn)入ISP模式,或用檢測(cè)中止控制符信號(hào)的方式觸發(fā)處理器復(fù)位并進(jìn)入ISP模式。
如果使用檢測(cè)中止控制符信號(hào)的方式觸發(fā)處理器復(fù)位并進(jìn)入ISP模式,如圖4所示,則應(yīng)當(dāng)配置Flashmagic,以使用這種方式來初始化ISP模式。首先,檢查“options”菜單下的“advanced options”選項(xiàng),在彈出的對(duì)話框的“hardware config”頁上應(yīng)該取消“Use DTR and RTS to enter ISP mode”選擇框中的選擇(注:FlashMagic可以記住你的各種設(shè)置,下次你再次使用,如果不需要其他設(shè)置,可不再設(shè)置它即可使用)。然后,從 “ISP”菜單下選擇選項(xiàng)“start bootrom”,并從彈出的對(duì)話框中選擇“send break condition”按鈕,F(xiàn)lashmagic可以通過PC機(jī)串行口直接向P89LPC932發(fā)出中止控制符信號(hào)。一般來說,這時(shí)P89LPC932就應(yīng)該處于ISP模式下了。不過,F(xiàn)lashmagic不會(huì)自動(dòng)校驗(yàn)P89LPC932是否已經(jīng)真正進(jìn)入了ISP模式,這個(gè)工作需要由用戶自己來做。如果 P89LPC932未處于ISP模式,若干個(gè)Flashmagic的菜單是無法使用的
(即使用戶選擇這些菜單,F(xiàn)lashmagic也會(huì)報(bào)錯(cuò)而不會(huì)有執(zhí)行結(jié)果),用戶可以通過選擇這些菜單來檢驗(yàn)P89LPC932是否已經(jīng)處于ISP模式下了,例如“ISP”菜單下的“Blank Check…”選項(xiàng)。當(dāng)然,P89LPC932未進(jìn)入ISP模式時(shí),對(duì)它的編程是無法進(jìn)行的,從這層意義上說,同樣也可以知道P89LPC932并未處于 ISP模式下。
圖4發(fā)送中止控制符條件的界面
Flashmagic的缺省設(shè)置是自動(dòng)保護(hù)P89LPC932中扇區(qū)7內(nèi)高端512字節(jié)的啟動(dòng)代碼,不過用戶可以在“options-advanced options-security”對(duì)話框中關(guān)閉這個(gè)保護(hù)功能。不過,并不推薦用戶這么做,因?yàn)檫@會(huì)提高誤操作對(duì)覆蓋ISP啟動(dòng)代碼的可能性。
注意,有些菜單選項(xiàng)在新版Flashmagic的位置可能與本文中提及的不同。本文使用的是1.74版的Flashmagic,至截稿時(shí)止,F(xiàn)lashmagic已升級(jí)至2.07版。
2 總結(jié)
Philips P89LPC932是一種功能全面、使用簡(jiǎn)單、性能可靠、性價(jià)比較高的高速51兼容微處理器,適用于產(chǎn)品研發(fā)、小批量產(chǎn)品試制、高校科研等諸多領(lǐng)域。本文對(duì)P89LPC932進(jìn)行ISP編程的具體方法和技巧進(jìn)行了詳述,希望讀者們能充分利用P89LPC932的優(yōu)秀在線編程特性。
參考文獻(xiàn)
1 周立功單片機(jī)有限公司. P89LPC932的ISP應(yīng)用設(shè)計(jì),2004
2 Philips Co. Application Note. In?system programming (ISP) with the Philips P89LPC932 microcontroller, 2003