C8051F單片機的軟件IAP技術(shù)
RSTSRC=0x10;//實現(xiàn)軟件復位
Jmpmain();
對RSTSRC的寫操作均用直接賦值方式完成(如RSTSRC = 0x02),不能用讀/寫指令(如ORL或ANL)來完成。例如,代碼“RSTSRC |= 0x02”就是非法的。為保證完美的復位,在設(shè)置了復位寄存器后筆者還添加了匯編復位程序,以做到萬無一失。
Jmpmain:
LJMP 0000H
RET
這樣通過一條長跳轉(zhuǎn)指令跳到程序區(qū)最開始的位置。在C中調(diào)用匯編程序的方法請參考其他文檔。
2引導區(qū)的編譯
作為程序引導區(qū)的程序,平時不參與主程序的執(zhí)行。而主程序主要用于和用戶操作界面PC 機部分進行握手,當接收到PC 機部分要進行軟件升級的命令時,程序跳至引導程序區(qū),執(zhí)行如下流程:
發(fā)送準備升級字節(jié)到PC 機→刪除Flash 程序區(qū)→發(fā)送開始下載命令到PC 機→接收且放到相應地址。
圖1主程序流程
主程序流程如圖1所示。引導區(qū)的程序要固定在一個位置,并單獨編譯,由 JTAG下載到MCU中。引導區(qū)的程序不能編譯分配Flash地址。筆者使用的Keil編譯器是一個很簡單、易用的編譯器。在Keil中,定位升級程序位置的實現(xiàn)方法非常簡單,通過修改其Project菜單下的Options for target一項就可以了。
在本程序中,引導區(qū)的程序定義在62 KB之后的位置。
編者注: 硬件接口和主從機程序見本刊網(wǎng)站www.mesnet.com.cn。
3注意的問題
① 使用內(nèi)部振蕩器,這樣能提高系統(tǒng)時鐘的抗干擾能力。
② 使用Flash時會限制執(zhí)行寫操作的速度。完成1個字節(jié)的操作最長需要40 μs ,所以最好選用9 600的波特率。
③ 減少將PSWE置1的指令操作。理想的情況是只有2個操作會將PSWE置1,即寫1個Flash字節(jié)和擦除1個Flash字節(jié)。
④ 將Flash寫/擦除指針指向data或idata區(qū)。
⑤ 引導區(qū)的程序應該以512字節(jié)為邊界。
⑥ 升級用的HEX程序必須由PC機上的軟件轉(zhuǎn)化為BIN文件。
⑦ C8051F120 MCU程序的操作最大特點是:在配置寄存器時能切換到該寄存器所在的頁。
⑧ 引導區(qū)的程序在擦除或者寫時,不可以開中斷,且要關(guān)掉所有中斷。
結(jié)語
本文中的軟硬件模塊已被嵌入到相關(guān)的應用系統(tǒng)之中,提高了系統(tǒng)的性價比。該方案解決了升級過程中的一些關(guān)鍵技術(shù)問題,節(jié)約了資源,將會在一些高端控制中得到更為廣泛的應用。軟件IAP 技術(shù)不但適用于C8051F單片機,而且對使用其他單片機的產(chǎn)品設(shè)計也具有重要的參考價值。
參考文獻
[1] 姜曉梅,李祥和.基于ARM的IAP在線及遠程升級技術(shù)[J].計算機應用,2008(2):519521.
[2] 周立功,張華.深入淺出ARM7[M].北京:北京航空航天大學出版社, 2005: 426438.
[3] 劉憶輝,魏銀庫,等.片外Flash存儲器IAP的一種方案[J].單片機與嵌入式系統(tǒng)應用, 2006(2).
[4] 王颯.用C8051F020的SPI接口擴展大容量數(shù)據(jù)存儲器[J].微計算機信息, 2006(22).
[5] 李光飛,陽富民,樓然苗.基于K9F2808UOC的FAT16文件系統(tǒng)[J].浙江海洋學院學報:自然科學版,2006(6).
[6] K9F2808UOC datasheets[OL]. http: //www. samsung. com /Prod?ucts/datasheets. htm.
評論