<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > LPC21XX系列ARM微處理器ISP升級程序設計

LPC21XX系列ARM微處理器ISP升級程序設計

作者: 時(shí)間:2011-03-14 來(lái)源:網(wǎng)絡(luò ) 收藏


在系統中編程,英文簡(jiǎn)稱(chēng)ISP,即In System Programming,是Lattice半導體公司首先提出來(lái)的一種讓我們能在產(chǎn)品設計、制造過(guò)程中的每個(gè)環(huán)節,甚至在產(chǎn)品賣(mài)給最終用戶(hù)以后,具有對其器件、電路板或整個(gè)電子系統的邏輯和功能隨時(shí)進(jìn)行重組或重新編程的技術(shù)。
ISP使得MCU、CPLD等不必從目標板中拔出,通過(guò)串口或專(zhuān)用下載電纜就可實(shí)現本地或遠程下載來(lái)實(shí)現程序升級。
飛利浦的LPC2000系列片內含FLASH的ARM7微處理器支持ISP和IAP(In ApplIcation Programming——在應用編程)。
LPC2000系列微處理器通過(guò)其UART0與PC(或其他設備)的COM口聯(lián)機實(shí)現ISP。
復位時(shí),P0.14為低電平會(huì )使LPC2000系列微處理器進(jìn)入ISP功能模式,否則進(jìn)入正常工作模式。
P0.14在復位后默認初始化為高阻模式,用戶(hù)需要提供外部硬件條件——上拉或接地,使引腳處于一個(gè)確定的狀態(tài),否則可能導致功能紊亂——非預期的ISP模式或正常工作模式。
飛利浦提供公用的ISP下載程序,但是在某些情況下,例如為了程序統一性,個(gè)性化或固件的保密性,我們有必要設計自己的ISP下載程序。
ISP處理過(guò)程
I(yíng)SP的整個(gè)過(guò)程如下圖所示:

1. ISP模式的進(jìn)入
復位時(shí)P0.14的3ms以上持續的低電平是LPC2000系列微處理器進(jìn)入ISP功能模式的必要條件。PC的串口應設定為8個(gè)數據位、1個(gè)停止位和無(wú)奇偶校驗,波特率建議設置為9600bps,由于受ISP處理速度的影響,過(guò)高的波特率并不見(jiàn)得會(huì )提高ISP處理速度,反而容易導致ISP處理沒(méi)有響應。
2. 自動(dòng)波特率檢測
LPC2000系列微處理器在進(jìn)入ISP模式之后,會(huì )自動(dòng)進(jìn)行“自動(dòng)波特率檢測”,因為微處理器并不清楚自己所連接的晶振頻率和PC程序所設置的串口波特率。在“自動(dòng)波特率檢測”通過(guò)之后,微處理器就進(jìn)入處理PC程序所發(fā)送的ISP命令的狀態(tài)。
自動(dòng)波特率檢測的流程如下圖所示:

PC機先發(fā)送一個(gè)同步字“?”,若微處理器因為在復位時(shí)檢測到P0.14為低電平而進(jìn)入了ISP模式,則微處理器會(huì )發(fā)送“Synchronized\r\n”給PC,PC在接收到“Synchronized\r\n”之后,回發(fā)“Synchronized\r\n”給微處理器,微處理器在收到“Synchronized\r\n”之后,發(fā)送“Synchronized\r\nOK\r\n”給PC,PC在收到“Synchronized\r\nOK\r\n”之后,以ASCII碼的形式發(fā)送晶振頻率(kHz)給微處理器。例如晶振頻率為12MHz,則PC發(fā)送給微處理器的字串為“12000\r\n”。微處理器在接收到晶振頻率之后會(huì )發(fā)送“OK\r\n”給PC作為響應。
注意事項:
(1) 處理器與PC的數據交換過(guò)程中,所有數據均以“\r\n”作為結尾,十六進(jìn)制為0x0D,0x0A。
(2) 任何發(fā)送或接收出錯之后,只能通過(guò)PC軟件提示“操作失敗”,并要求用戶(hù)重啟(復位/開(kāi)關(guān)電源)微處理器來(lái)解決。
(3) 所有數字均以ASCII碼的形式發(fā)送。
3.ISP命令處理
在自動(dòng)波特率檢測之后,PC就可以通過(guò)串口發(fā)送ISP命令和數據給微處理器了。
ISP命令簡(jiǎn)介
LPC2000系列微處理器支持的ISP命令如下表所示,更詳細的介紹參見(jiàn)周立功網(wǎng)站的http://www.zlgmcu.com/philips/arm/about/LPC2000_FLASH.pdf以及《ARM微控制器基礎與實(shí)戰》一書(shū)。
ISP命令簡(jiǎn)單匯總
ISP命令 功能
U 23130 解鎖。在對 FLASH編程、擦除運行之前必須執行該命令。
B 波特率>停止位>設置波特率。
A 1/0>回聲開(kāi)關(guān)??刂莆⑻幚砥魇欠駥⒔邮盏降臄祿匕l(fā)給 PC。
W RAM地址>長(cháng)度>PC寫(xiě)數據到微處理器RAM。數據格式為UU碼。
R RAM地址>長(cháng)度>PC從微處理器RAM讀數據。數據格式為UU碼。
P 起始扇區>結束扇區>選定即將操作的扇區范圍。
C FLASH地址>RAM地址>字節數>命令微處理器將 RAM中的數據燒寫(xiě)到FLASH中。
G 地址>模式>執行 FLASH或RAM中的代碼。
E 起始扇區>結束扇區>擦除選定的扇區。
I(yíng) 起始扇區>結束扇區>檢查指定的扇區是否為空。
J讀器件 ID。
K讀 BOOT代碼版本號。
M 地址1>地址2>字節數>比較 FLASH和/或RAM中的數據。
注意事項:
(1) 處理器與PC的數據交換過(guò)程中,所有數據均以“\r\n”作為結尾,十六進(jìn)制為0x0D,0x0A。
(2) 任何發(fā)送或接收出錯之后,只能通過(guò)PC軟件提示“操作失敗”,并要求用戶(hù)重啟(復位/開(kāi)關(guān)電源)微處理器來(lái)解決。
(3) 所有數字均以ASCII碼的形式發(fā)送。
(4) 所有參數均以空格作為分隔符, 十六進(jìn)制為0x20。
ISP命令的響應
在執行ISP命令之后,微處理器會(huì )發(fā)送“0\r\n”之類(lèi)的字串給PC作為響應。這里的“0”即為執行結果?!?”表示執行結果正確,非“0”表示執行失敗,至于非“0”的具體的含義,參見(jiàn)周立功網(wǎng)站的http://www.zlgmcu.com/philips/arm/about/LPC2000_FLASH.pdf以及《ARM微控制器基礎與實(shí)戰》一書(shū)。
ISP讀取器件ID的過(guò)程
這里之所以介紹通過(guò)ISP讀取器件ID的過(guò)程,是因為通過(guò)ISP命令來(lái)燒寫(xiě)程序相對通過(guò)ISP讀取器件ID來(lái)說(shuō)復雜很多,而且燒寫(xiě)程序之前往往包含讀取器件ID部分。
下面為對ISP2106讀器件ID的完整的過(guò)程: OPEN COM bps:9600, StopBits:1, Parity:No, DataBits:8
WRITE 0x3F
?
READ 0x53 0x79 0x6E 0x63 0x68 0x72 0x6F 0x6E 0x69 0x7A 0x65 0x64 0x0D 0x0A
Synchronized\r\n
WRITE 0x53 0x79 0x6E 0x63 0x68 0x72 0x6F 0x6E 0x69 0x7A 0x65 0x64 0x0D 0x0A
Synchronized\r\n
READ 0x53 0x79 0x6E 0x63 0x68 0x72 0x6F 0x6E 0x69 0x7A 0x65 0x64 0x0D 0x0A 0x4F 0x4B 0x0D 0x0A
Synchronized\r\nOK\r\n
WRITE 0x31 0x32 0x30 0x30 0x30 0x0D 0x0A
12000\r\n
READ 0x31 0x32 0x30 0x30 0x30 0x0D 0x0A 0x4F 0x4B 0x0D 0x0A
12000\r\nOK\r\n
WRITE 0x55 0x20 0x32 0x33 0x31 0x33 0x30 0x0D 0x0A
U 23130\r\n
READ 0x55 0x20 0x32 0x33 0x31 0x33 0x30 0x0D 0x0A 0x30 0x0D 0x0A
U 23130\r\n0\r\n
WRITE 0x4A 0x0D 0x0A
J\r\n
READ 0x4A 0x0D 0x0A 0x30 0x0D 0x0A
J\r\n0\r\n
READ 0x34 0x32 0x39 0x33 0x39 0x38 0x34 0x30 0x35 0x30 0x0D 0x0A
4293984050

其中WRITE和READ是針對PC而言的。
UU編碼簡(jiǎn)介
向FLASH中燒寫(xiě)的程序代碼是通過(guò)UU編碼之后傳給微處理器的。
UU編碼算法將3字節二進(jìn)制數據轉換成4字節可打印的ASCII字符集。因為Hex格式是將1字節二進(jìn)制數據轉換成2字節ASCII數據,所以UU編碼的效率高于Hex格式。
UU編碼的編碼方法如下:
因為3字節二進(jìn)制數據共24Bits,把它們按6Bits分成4份,這樣就變成了4個(gè)字節,再把新生成的4個(gè)字節每個(gè)都加上0x20,若這樣處理后的數值為0x20,則用0x60取代。用C語(yǔ)言表示的UU編碼過(guò)程如下:
#define ENCODE_BYTE(b) (((b) == 0) ? 0x60 : ((b) + 0x20))
outbuf [0] = ENCODE_BYTE ((inbytep [0] 0xFC) >> 2);
outbuf [1] = ENCODE_BYTE (((inbytep [0] 0x03) 4) +
((inbytep [1] 0xF0) >> 4));
outbuf [2] = ENCODE_BYTE (((inbytep [1] 0x0F) 2) +
((inbytep [2] 0xC0) >> 6));
outbuf [3] = ENCODE_BYTE (inbytep [2] 0x3F);
若原數據字節數不是3的倍數,則以0x00填充。
數據通過(guò)UU編碼之后,以UU編碼行的形式打包發(fā)送。
UU編碼行的第一個(gè)字節表示數據的長(cháng)度,且為UU編碼。
UU編碼規定:任何UU編碼行的長(cháng)度都不應超過(guò)61個(gè)字節(字符),也就是說(shuō),一個(gè)UU編碼最多可以包含45字節原始的二進(jìn)制數據。
例如,對一個(gè)用十六進(jìn)制表示的數據“18F09FE518F09FE518F09FE518F09FE5”,(注意該數據實(shí)際長(cháng)度為16字節,因為顯示的問(wèn)題,這里采用HEX表示。)在經(jīng)過(guò)UU編碼之后,數據變?yōu)椤癕/"?Y1CPG^48\)_E/"?Y1CPG^6`7R"Y\/\?Y1CPG^7`````0````$0```!(”。
LPC2000系列微處理器UU編碼發(fā)送規則
LPC2000系列微處理器規定:
1.發(fā)送器(通常為PC)以UU編碼行的形式發(fā)送實(shí)際數據,且每個(gè)數據包都以 “\r\n”結束,所以在UU編碼行長(cháng)度為61字節的時(shí)候,發(fā)送器實(shí)際發(fā)送的數據長(cháng)度為63字節(61個(gè)字節UU編碼+2字節“\r\n”)。
2.在發(fā)送20個(gè)UU編碼行之后,應該發(fā)送數據校驗和。
數據校驗和即為上次校驗和計算之后所有發(fā)送的原始數據的和。
數據校驗和以ASCII碼的方式發(fā)送,以 “\r\n”結束。
接收器在收到校驗和后與它接收的數據的校驗和相比較,如果校驗和匹配,接收器就發(fā)送“OK\r\n”,并等待下一次發(fā)送。如果校驗和不匹配,接收器就發(fā)送“RESEND\r\n”。
3.在數據發(fā)送結束,即使不足20個(gè)UU編碼行也仍然應該發(fā)送數據校驗和。
由于FLASH的燒寫(xiě)通常是以4096字節為單位的,所以在每發(fā)送4096字節之后也必須發(fā)送一個(gè)數據校驗和。(4096字節=91個(gè)UU編碼行+1個(gè)字節=4×20個(gè)UU編碼行+11UU編碼行+1個(gè)字節)
所以實(shí)際發(fā)送4096字節數據的過(guò)程如下:
WRITE 63BYTES(1)
WRITE 63BYTES(2)
WRITE 63BYTES(3)
......
WRITE 63BYTES(18)
WRITE 63BYTES(19)
WRITE 63BYTES(20)
WRITE CHECKSUM(已發(fā)送900字節)
WRITE 63BYTES(21)
WRITE 63BYTES(22)
WRITE 63BYTES(23)
......
WRITE 63BYTES(38)
WRITE 63BYTES(39)
WRITE 63BYTES(40)
WRITE CHECKSUM(已發(fā)送1800字節)
WRITE 63BYTES(41)
WRITE 63BYTES(42)
WRITE 63BYTES(43)
......
WRITE 63BYTES(58)
WRITE 63BYTES(59)
WRITE 63BYTES(60)
WRITE CHECKSUM(已發(fā)送2700字節)
WRITE 63BYTES(61)
WRITE 63BYTES(62)
WRITE 63BYTES(63)
......
WRITE 63BYTES(78)
WRITE 63BYTES(79)
WRITE 63BYTES(80)
WRITE CHECKSUM(已發(fā)送3600字節)
WRITE 63BYTES(81)
WRITE 63BYTES(82)
WRITE 63BYTES(83)
WRITE 63BYTES(84)
WRITE 63BYTES(85)
WRITE 63BYTES(86)
WRITE 63BYTES(87)
WRITE 63BYTES(88)
WRITE 63BYTES(89)
WRITE 63BYTES(90)
WRITE 63BYTES(91)
WRITE 7 BYTES
WRITE CHECKSUM(已發(fā)送4096字節)
注意上面只包含的PC向微處理器寫(xiě)數據的情況,實(shí)際上若沒(méi)關(guān)閉“回聲”,微處理器會(huì )將上面所有數據回發(fā)一次,另外還有校驗和響應等。
LPC2000系列微處理器ISP編程完整過(guò)程
WRITE ?
READSynchronized\r\n
WRITE Synchronized\r\n
READSynchronized\r\n
READOK\r\n
WRITE 12000\r\n
READ12000\r\n
READOK\r\n
WRITE U 23130\r\n
READU 23130\r\n
READ0\r\n
WRITE P 0 1\r\n
READP 0 1\r\n
READ0\r\n
WRITE E 0 1\r\n
READE 0 1\r\n
READ0\r\n
WRITE W 1073742336 4096\r\n
READW 1073742336 4096\r\n
READ0\r\n

發(fā)送4096字節UU編碼后的數據
WRITE P 0 0\r\n
READP 0 0\r\n
READ0\r\n
WRITE C 0 1073742336 4096\r\n
READC 0 1073742336 4096\r\n
READ0\r\n

發(fā)送4096字節UU編碼后的數據
WRITE P 0 0\r\n
READP 0 0\r\n
READ0\r\n
WRITE C 4096 1073742336 4096\r\n
READC 4096 1073742336 4096\r\n
READ0\r\n

發(fā)送4096字節UU編碼后的數據
WRITE P 1 1\r\n
READP 1 1\r\n
READ0\r\n
WRITE C 8192 1073742336 4096\r\n
READC 8192 1073742336 4096\r\n
READ0\r\n
發(fā)送92字節UU編碼后的數據
WRITE P 1 1\r\n
READP 1 1\r\n
READ0\r\n
WRITE C 12288 1073742336 4096\r\n
READC 12288 1073742336 4096\r\n
READ0\r\n
實(shí)際程序長(cháng)度12,380字節

程序下載:
LPC21XXISP.rarhttp://www.dragon-2008.com/download/ArmDsp/LPC21XXISP.rar
參考資料:
1.LPC210X Datasheet
2.LPC2000系列ARM Flash存儲器系統和編程
http://www.zlgmcu.com/philips/arm/about/LPC2000_FLASH.pdf
3.《ARM微控制器基礎與實(shí)戰》
相關(guān)連接:
1.Intel HEX文件格式http://www.dragon-2008.com/ArmDsp/ARTICLE/INTEL-HEX.htm
2.UU編碼簡(jiǎn)介http://www.dragon-2008.com/ArmDsp/ARTICLE/UUCODE.htm
(綜合電子論壇)
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>