ARM微處理器ISP升級程序設計與應用
ISP使得MCU、CPLD等不必從目標板中拔出,通過串口或專用下載電纜就可實現本地或遠程下載來實現程序升級。
飛利浦的LPC2000系列片內含FLASH的ARM7微處理器支持ISP和IAP(In ApplIcation Programming——在應用編程)。
LPC2000系列微處理器通過其UART0與PC(或其他設備)的COM口聯機實現ISP。
復位時,P0.14為低電平會使LPC2000系列微處理器進入ISP功能模式,否則進入正常工作模式。
P0.14在復位后默認初始化為高阻模式,用戶需要提供外部硬件條件——上拉或接地,使引腳處于一個確定的狀態,否則可能導致功能紊亂——非預期的ISP模式或正常工作模式。
飛利浦提供公用的ISP下載程序,但是在某些情況下,例如為了程序統一性,個性化或固件的保密性,我們有必要設計自己的ISP下載程序。
ISP處理過程
ISP的整個過程如下圖所示:
1. ISP模式的進入
復位時P0.14的3ms以上持續的低電平是LPC2000系列微處理器進入ISP功能模式的必要條件。PC的串口應設定為8個數據位、1個停止位和無奇偶校驗,波特率建議設置為9600bps,由于受ISP處理速度的影響,過高的波特率并不見得會提高ISP處理速度,反而容易導致ISP處理沒有響應。
2. 自動波特率檢測
大多數SCI模塊硬件不支持自動波特率檢測。一般情況下嵌入式控制器的SCI時鐘由PLL提供,設計的系統工作會改變PLL復位時的工作狀態,這樣很難支持自動波特率檢測功能。而在TMS320F2812處理器上,增強功能的SCI模塊硬件支持自動波特率檢測邏輯。寄存器SCIFFCT位ABD和CDC位控制自動波特率邏輯,使能SCIRST位使自動波特率邏輯工作。增加自動波特率檢測功能的SCI通信接口除了能夠滿足正常通信自動檢測系統的通信速率外,還支持采用SOl接口上電引導裝載程序?這對于通過上位機采用SCI接口實時更新系統軟件非常重要。
當CDC為1時,如果ABD也置位表示自動波特率檢測開始工作,就會產生SCI發送FIFO中斷(TXINT)。同時在中斷服務程序中必須使用軟件將CDC位清0,否則如果中斷服務程序執行完CDC仍然為1,則以后不會產生中斷。具體操作步驟如下。
(1)將SCIFFCT中的CDC位(位13)置位,清除ABD位(位15),使能SCI的自動波特率檢測模式。
(2)初始化波特率寄存器為1或限制在500 Kb/s內。
(3)允許SCI以期望的波特率從一個主機接收字符“A”或字符“a”。如果第一個字符是“A”或“a”,則說明自動波特率檢測硬件已經檢測到SCI通信的波特率,然后將ABD位置1。
(4)自動檢測硬件將用檢測到的波特率的十六進制值刷新波特率寄存器的值,這個刷新邏輯器也會產生一個CPU中斷。
(5)通過向SCIFFCT寄存器的ABD CLR位(位13)寫入1清除ABD位,響應中斷。寫0清除CDC位,禁止自動波特率邏輯。
(6)讀到接收緩沖為字符“A”或“a”時,清空緩沖和緩沖狀態位。
(7)當CDC為1時,如果ABD也置位表示自動波特率檢測開始工作,就會產生SCI發送FIFO中斷(TXINT),同時在中斷服務程序中必須使用軟件將CDC位清0。
LPC2000系列微處理器在進入ISP模式之后,會自動進行“自動波特率檢測”,因為微處理器并不清楚自己所連接的晶振頻率和PC程序所設置的串口波特率。在“自動波特率檢測”通過之后,微處理器就進入處理PC程序所發送的ISP命令的狀態。
自動波特率檢測的流程如下圖所示:
PC機先發送一個同步字“?”,若微處理器因為在復位時檢測到P0.14為低電平而進入了ISP模式,則微處理器會發送“Synchronized\”給PC,PC在接收到“Synchronized\”之后,回發“Synchronized\”給微處理器,微處理器在收到“Synchronized\”之后,發送“Synchronized\OK\”給PC,PC在收到“Synchronized\OK\”之后,以ASCII碼的形式發送晶振頻率(kHz)給微處理器。例如晶振頻率為12MHz,則PC發送給微處理器的字串為“12000\”。微處理器在接收到晶振頻率之后會發送“OK\”給PC作為響應。
注意事項:
(1) 處理器與PC的數據交換過程中,所有數據均以“\”作為結尾,十六進制為0x0D,0x0A。
(2) 任何發送或接收出錯之后,只能通過PC軟件提示“操作失敗”,并要求用戶重啟(復位/開關電源)微處理器來解決。
(3) 所有數字均以ASCII碼的形式發送。
3.ISP命令處理
在自動波特率檢測之后,PC就可以通過串口發送ISP命令和數據給微處理器了。
ISP命令簡介
LPC2000系列微處理器支持的ISP命令如下表所示。
ISP命令簡單匯總
ISP命令 功能
U 23130 解鎖。在對 FLASH編程、擦除運行之前必須執行該命令。
B 波特率>停止位> 設置波特率。
A 1/0> 回聲開關。控制微處理器是否將接收到的數據回發給 PC。
W RAM地址>長度> PC寫數據到微處理器RAM。數據格式為UU碼。
R RAM地址>長度> PC從微處理器RAM讀數據。數據格式為UU碼。
P 起始扇區>結束扇區> 選定即將操作的扇區范圍。
C FLASH地址>RAM地址>字節數> 命令微處理器將 RAM中的數據燒寫到FLASH中。
G 地址>模式> 執行 FLASH或RAM中的代碼。
E 起始扇區>結束扇區> 擦除選定的扇區。
I 起始扇區>結束扇區> 檢查指定的扇區是否為空。
J 讀器件 ID。
K 讀 BOOT代碼版本號。
M 地址1>地址2>字節數> 比較 FLASH和/或RAM中的數據。
ISP讀取器件ID的過程
這里之所以介紹通過ISP讀取器件ID的過程,是因為通過ISP命令來燒寫程序相對通過ISP讀取器件ID來說復雜很多,而且燒寫程序之前往往包含讀取器件ID部分。
評論