利用Flash實(shí)現(xiàn)單片機(jī)系統(tǒng)的在線維護(hù)
由于SST29EE010是以128字節(jié)的頁(yè)方式寫(xiě)入,所以實(shí)現(xiàn)加載指令時(shí),對(duì)SST29EE010的寫(xiě)操作以128字節(jié)為分組,不足128字節(jié)的分組填充至128字節(jié)再處理。在加載程序時(shí),主機(jī)將加載程序.BIN文件以128字節(jié)為單位分組,并為每個(gè)分組加上升級(jí)指令代碼和位置參數(shù)后通過(guò)串口發(fā)送給MCU,MCU接收數(shù)據(jù)后進(jìn)行判斷,若是加載指令則將接收的數(shù)據(jù)寫(xiě)入到參數(shù)指定的FLASH區(qū),并返回操作代碼;處理流程如圖4所示。
圖4 程序加載的處理流程圖
5 注意事項(xiàng)
在系統(tǒng)設(shè)計(jì)與程序設(shè)計(jì)過(guò)程中需要注意以下幾點(diǎn):
(1)對(duì)FLASH芯片進(jìn)行讀/寫(xiě)操作時(shí),將其當(dāng)作擴(kuò)展的外部存儲(chǔ)器(用MOVX @DPTR,A指令);執(zhí)行程序時(shí),將其作為擴(kuò)展的程序存儲(chǔ)器。
(2)在寫(xiě)數(shù)據(jù)之前要打開(kāi)SST29EE010的保護(hù)鎖,寫(xiě)操作完成后要將SST29EE010的保護(hù)鎖關(guān)閉,關(guān)鎖之前要有一定的延時(shí)(通過(guò)需要10ms)。
(3)為了保證整個(gè)系統(tǒng)的可用行,需要對(duì)加載程序進(jìn)行可用行檢測(cè)機(jī)制,最簡(jiǎn)單的方法就是為所要加載的.BIN文件增加3字節(jié)的內(nèi)容,在文件前面增加2字節(jié)的.BIN文件長(zhǎng)度指示,并在加載程序之后增加1字節(jié)的程序校驗(yàn)值(如異或值),寫(xiě)入FLASH中的內(nèi)容如圖5所示。
圖5加載程序的格式與內(nèi)容
(4)為了進(jìn)一步提高系統(tǒng)的安全性,需要進(jìn)行相關(guān)的身份認(rèn)證獲取加載的權(quán)限如口令驗(yàn)證,否則不予開(kāi)放加載功能。
(5)還應(yīng)該添加一些版本控制和校驗(yàn)功能,進(jìn)行版本控制,只有在AT89C52與待加載的程序具有相同的版本時(shí)才能進(jìn)行程序加載。
(6)因?yàn)榧虞d的程序起始地址從8000H開(kāi)始,又有2字節(jié)的長(zhǎng)度指示,所以在加載程序之前增加“ORG 8002H”偽指令。
6 結(jié)束語(yǔ)
以單片機(jī)為基礎(chǔ)的需求越來(lái)越多,也就帶來(lái)了更多的維護(hù)問(wèn)題。通過(guò)上層應(yīng)用程序維護(hù)通常比直接進(jìn)行單片機(jī)底層程序的維護(hù)要方便得多!本文基于實(shí)現(xiàn)單片機(jī)系統(tǒng)在線維護(hù)的思想,介紹了一種通過(guò)PC機(jī)串行接口維護(hù)單片機(jī)系統(tǒng)的方法,從而為版本管理、程序的動(dòng)態(tài)維護(hù)以及程序存儲(chǔ)器的擴(kuò)展都提供了十分便利的手段。
參考資料
[1] 張友德,趙志英,涂時(shí)亮.單片微型機(jī)原理、應(yīng)用與實(shí)驗(yàn).上海:復(fù)旦大學(xué)出版社,2000
[2] 李朝青.PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù),北京:北京航空航天大學(xué)出版社,2001
[3] 余永權(quán).ATMEL89系列單片機(jī)應(yīng)用技術(shù),北京:北京航空航天大學(xué)出版社,2002
評(píng)論