国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

新聞中心

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

LPC21XX系列ARM微處理器ISP升級程序設(shè)計

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


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

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

PC機(jī)先發(fā)送一個同步字“?”,若微處理器因為在復(fù)位時檢測到P0.14為低電平而進(jìn)入了ISP模式,則微處理器會發(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”。微處理器在接收到晶振頻率之后會發(fā)送“OK\r\n”給PC作為響應(yīng)。
注意事項:
(1) 處理器與PC的數(shù)據(jù)交換過程中,所有數(shù)據(jù)均以“\r\n”作為結(jié)尾,十六進(jìn)制為0x0D,0x0A。
(2) 任何發(fā)送或接收出錯之后,只能通過PC軟件提示“操作失敗”,并要求用戶重啟(復(fù)位/開關(guān)電源)微處理器來解決。
(3) 所有數(shù)字均以ASCII碼的形式發(fā)送。
3.ISP命令處理
在自動波特率檢測之后,PC就可以通過串口發(fā)送ISP命令和數(shù)據(jù)給微處理器了。
ISP命令簡介
LPC2000系列微處理器支持的ISP命令如下表所示,更詳細(xì)的介紹參見周立功網(wǎng)站的http://www.zlgmcu.com/philips/arm/about/LPC2000_FLASH.pdf以及《ARM微控制器基礎(chǔ)與實戰(zhàn)》一書。
ISP命令簡單匯總
ISP命令 功能
U 23130 解鎖。在對 FLASH編程、擦除運(yùn)行之前必須執(zhí)行該命令。
B 波特率>停止位>設(shè)置波特率。
A 1/0>回聲開關(guān)。控制微處理器是否將接收到的數(shù)據(jù)回發(fā)給 PC。
W RAM地址>長度>PC寫數(shù)據(jù)到微處理器RAM。數(shù)據(jù)格式為UU碼。
R RAM地址>長度>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代碼版本號。
M 地址1>地址2>字節(jié)數(shù)>比較 FLASH和/或RAM中的數(shù)據(jù)。
注意事項:
(1) 處理器與PC的數(shù)據(jù)交換過程中,所有數(shù)據(jù)均以“\r\n”作為結(jié)尾,十六進(jìn)制為0x0D,0x0A。
(2) 任何發(fā)送或接收出錯之后,只能通過PC軟件提示“操作失敗”,并要求用戶重啟(復(fù)位/開關(guān)電源)微處理器來解決。
(3) 所有數(shù)字均以ASCII碼的形式發(fā)送。
(4) 所有參數(shù)均以空格作為分隔符, 十六進(jìn)制為0x20。
ISP命令的響應(yīng)
在執(zhí)行ISP命令之后,微處理器會發(fā)送“0\r\n”之類的字串給PC作為響應(yīng)。這里的“0”即為執(zhí)行結(jié)果?!?”表示執(zhí)行結(jié)果正確,非“0”表示執(zhí)行失敗,至于非“0”的具體的含義,參見周立功網(wǎng)站的http://www.zlgmcu.com/philips/arm/about/LPC2000_FLASH.pdf以及《ARM微控制器基礎(chǔ)與實戰(zhàn)》一書。
ISP讀取器件ID的過程
這里之所以介紹通過ISP讀取器件ID的過程,是因為通過ISP命令來燒寫程序相對通過ISP讀取器件ID來說復(fù)雜很多,而且燒寫程序之前往往包含讀取器件ID部分。
下面為對ISP2106讀器件ID的完整的過程: 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編碼簡介
向FLASH中燒寫的程序代碼是通過UU編碼之后傳給微處理器的。
UU編碼算法將3字節(jié)二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成4字節(jié)可打印的ASCII字符集。因為Hex格式是將1字節(jié)二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成2字節(jié)ASCII數(shù)據(jù),所以UU編碼的效率高于Hex格式。
UU編碼的編碼方法如下:
因為3字節(jié)二進(jìn)制數(shù)據(jù)共24Bits,把它們按6Bits分成4份,這樣就變成了4個字節(jié),再把新生成的4個字節(jié)每個都加上0x20,若這樣處理后的數(shù)值為0x20,則用0x60取代。用C語言表示的UU編碼過程如下:
#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);
若原數(shù)據(jù)字節(jié)數(shù)不是3的倍數(shù),則以0x00填充。
數(shù)據(jù)通過UU編碼之后,以UU編碼行的形式打包發(fā)送。
UU編碼行的第一個字節(jié)表示數(shù)據(jù)的長度,且為UU編碼。
UU編碼規(guī)定:任何UU編碼行的長度都不應(yīng)超過61個字節(jié)(字符),也就是說,一個UU編碼最多可以包含45字節(jié)原始的二進(jìn)制數(shù)據(jù)。
例如,對一個用十六進(jìn)制表示的數(shù)據(jù)“18F09FE518F09FE518F09FE518F09FE5”,(注意該數(shù)據(jù)實際長度為16字節(jié),因為顯示的問題,這里采用HEX表示。)在經(jīng)過UU編碼之后,數(shù)據(jù)變?yōu)椤癕/"?Y1CPG^48\)_E/"?Y1CPG^6`7R"Y\/\?Y1CPG^7`````0````$0```!(”。
LPC2000系列微處理器UU編碼發(fā)送規(guī)則
LPC2000系列微處理器規(guī)定:
1.發(fā)送器(通常為PC)以UU編碼行的形式發(fā)送實際數(shù)據(jù),且每個數(shù)據(jù)包都以 “\r\n”結(jié)束,所以在UU編碼行長度為61字節(jié)的時候,發(fā)送器實際發(fā)送的數(shù)據(jù)長度為63字節(jié)(61個字節(jié)UU編碼+2字節(jié)“\r\n”)。
2.在發(fā)送20個UU編碼行之后,應(yīng)該發(fā)送數(shù)據(jù)校驗和。
數(shù)據(jù)校驗和即為上次校驗和計算之后所有發(fā)送的原始數(shù)據(jù)的和。
數(shù)據(jù)校驗和以ASCII碼的方式發(fā)送,以 “\r\n”結(jié)束。
接收器在收到校驗和后與它接收的數(shù)據(jù)的校驗和相比較,如果校驗和匹配,接收器就發(fā)送“OK\r\n”,并等待下一次發(fā)送。如果校驗和不匹配,接收器就發(fā)送“RESEND\r\n”。
3.在數(shù)據(jù)發(fā)送結(jié)束,即使不足20個UU編碼行也仍然應(yīng)該發(fā)送數(shù)據(jù)校驗和。
由于FLASH的燒寫通常是以4096字節(jié)為單位的,所以在每發(fā)送4096字節(jié)之后也必須發(fā)送一個數(shù)據(jù)校驗和。(4096字節(jié)=91個UU編碼行+1個字節(jié)=4×20個UU編碼行+11UU編碼行+1個字節(jié))
所以實際發(fā)送4096字節(jié)數(shù)據(jù)的過程如下:
WRITE 63BYTES(1)
WRITE 63BYTES(2)
WRITE 63BYTES(3)
......
WRITE 63BYTES(18)
WRITE 63BYTES(19)
WRITE 63BYTES(20)
WRITE CHECKSUM(已發(fā)送900字節(jié))
WRITE 63BYTES(21)
WRITE 63BYTES(22)
WRITE 63BYTES(23)
......
WRITE 63BYTES(38)
WRITE 63BYTES(39)
WRITE 63BYTES(40)
WRITE CHECKSUM(已發(fā)送1800字節(jié))
WRITE 63BYTES(41)
WRITE 63BYTES(42)
WRITE 63BYTES(43)
......
WRITE 63BYTES(58)
WRITE 63BYTES(59)
WRITE 63BYTES(60)
WRITE CHECKSUM(已發(fā)送2700字節(jié))
WRITE 63BYTES(61)
WRITE 63BYTES(62)
WRITE 63BYTES(63)
......
WRITE 63BYTES(78)
WRITE 63BYTES(79)
WRITE 63BYTES(80)
WRITE CHECKSUM(已發(fā)送3600字節(jié))
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字節(jié))
注意上面只包含的PC向微處理器寫數(shù)據(jù)的情況,實際上若沒關(guān)閉“回聲”,微處理器會將上面所有數(shù)據(jù)回發(fā)一次,另外還有校驗和響應(yīng)等。
LPC2000系列微處理器ISP編程完整過程
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字節(jié)UU編碼后的數(shù)據(jù)
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字節(jié)UU編碼后的數(shù)據(jù)
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字節(jié)UU編碼后的數(shù)據(jù)
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字節(jié)UU編碼后的數(shù)據(jù)
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
實際程序長度12,380字節(jié)

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


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉