基于CAN總線(xiàn)連接的MEGA8遠距離在線(xiàn)升級方案
……
ld temp,y+
mov zl,temp ; Z指針地址賦值
ld temp,y+
mov zh,temp
ldi temp,(1
rcall Do_SPM ; 執行頁(yè)寫(xiě)入
……
3、BOOT程序介紹及流程圖
Mega8單片機上電后設置冷啟動(dòng)標志,而熱啟動(dòng)入口則設置熱啟動(dòng)標志。然后初始化堆棧、串口以及必要的I/O狀態(tài)等。初始化完成后,如果BOOT程序檢測到熱啟動(dòng)標志則直接進(jìn)入燒錄狀態(tài);如果為冷啟動(dòng)標志則繼續檢測下載位是否允許(本設計通過(guò)PB0開(kāi)關(guān)選擇),如為高電平則進(jìn)入燒錄狀態(tài),如為低電平則進(jìn)入用戶(hù)程序。
BOOT引導程序在設計時(shí)提供了兩個(gè)入口,一個(gè)是系統復位時(shí)的冷啟動(dòng)入口,另一個(gè)是用戶(hù)程序在運行時(shí)進(jìn)入升級程序的熱啟動(dòng)入口。BOOT程序主要包括燒錄子程序、串口發(fā)送、串口接收、引導主程序等。
串口發(fā)送采用了查詢(xún)發(fā)送完成標志。這樣當該標志被設置時(shí),證明串口的停止位已經(jīng)發(fā)送完成,這對于CAN總線(xiàn)通訊非常有用。燒錄程序主要使用“SPM” 指令,該指令完成對MEGA8的燒錄等功能。而讀取MEGA8的指令則使用“LPM”。由于擦除,頁(yè)填充,寫(xiě)入,讀出等基本命令單片機都已解釋完成,因此所有過(guò)程都可以由計算機端程序進(jìn)行控制。
程序開(kāi)始時(shí),計算機端發(fā)送命令,先對單片機的頁(yè)進(jìn)行擦除,然后接收一幀數據,接收完畢后執行頁(yè)寫(xiě)入命令,寫(xiě)入完成再進(jìn)行讀出進(jìn)行校驗,如果校驗無(wú)誤再繼續寫(xiě)入下一頁(yè),直到所有頁(yè)都寫(xiě)入完畢,即完成一次下載過(guò)程。如果傳輸或頁(yè)校驗出現錯誤,程序會(huì )連續進(jìn)行5次測試,如再仍不成功,則認為本次下載失敗。主程序流程圖如圖3。
MEGA8單片機的主程序通過(guò)CAN接口執行計算機發(fā)送的命令,并且定義了一個(gè)更新代碼的特殊命令,當接收到該命令時(shí),主程序首先關(guān)閉中斷,關(guān)閉看門(mén)狗,然后跳轉到BOOT的熱啟動(dòng)入口,再執行BOOT下載燒錄程序。下載完成后再直接跳轉到$0000地址進(jìn)入用戶(hù)程序區,這樣就完成了代碼的在線(xiàn)升級。為了保證該命令的可靠性,本程序設計時(shí)規定單片機必須在100ms內同時(shí)接收到兩次該命令才認為正確,超過(guò)100ms則不予認可。
4、結束語(yǔ)
由于采用了MEGA8單片機的BOOT功能,以及CAN總線(xiàn)高速遠距離通信,同時(shí)抗干擾性強,使得遠距離在線(xiàn)升級,譬如通過(guò)以太網(wǎng)、無(wú)線(xiàn)等方式,成為了可能。這對于系統調試及以后的升級維護都提供了極大的便利,這也是今后單片機和CAN總線(xiàn)發(fā)展的一個(gè)方向。由于該部分具有通用性,所以可很容易地移植到 AVR其它MEGA系列的設計方案中。
評論