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