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