C8051FXXX單片機FLASH程序的自動升級 (1)2011-05-07 21:14:19來源:互聯(lián)網(wǎng)
引言:

C8051FXXX系列高速SOC單片機是由美國Cygnal公司開發(fā)的完全集成的混合信號系統(tǒng)級芯片,具有與8051兼容的微處理器內(nèi)核,內(nèi)部集成FLASH程序存儲器,具有在系統(tǒng)重新編程能力,以C8051F020為例,內(nèi)部集成64K的FLASH程序存儲器。在系統(tǒng)控制軟件的開發(fā)調(diào)試階段,可用集成開發(fā)環(huán)境來下載及測試系統(tǒng),但當(dāng)將C8051F020目標(biāo)系統(tǒng)集成到產(chǎn)品后,則由于操作系統(tǒng)及軟硬件接口不一樣等等原因,不能在最終產(chǎn)品中用集成開發(fā)環(huán)境來下載FLASH程序,故產(chǎn)品到了用戶處之后,如要再進行FLASH程序的更新,則必須更換相應(yīng)的集成電路印刷板,造成很多麻煩及不可靠因素。筆者通過實驗,在用戶操作界面的PC機及C8051F020的單片機控制系統(tǒng)之間,通過串行口進行C8051F020單片機控制程序的自動升級及程序加密,從而使用戶只要從互聯(lián)網(wǎng)上下載控制程序,即可實現(xiàn)單片機程序的自動升級。以下以64KBFLASH RAM為例簡要介紹單片機目標(biāo)程序的準(zhǔn)備及自動升級的制作過程。

1)系統(tǒng)簡介及自動升級的實現(xiàn)方法

PC機(80486/DX2以上) 具有1.44吋軟驅(qū)及串行口。單片機控制系統(tǒng)(具有串行口及內(nèi)置的FLASH程序區(qū))。PC與C8051FXXX之間通過九針串行接口線相連。設(shè)置傳送速率為115200BIT/S。

C8051F020單片機的FLASH RAM分為用戶程序區(qū)(0000H~0FDFDH),廠家保留及加密區(qū)(0FDFEH~0FFFFH)兩部分?,F(xiàn)將用戶程序區(qū)(0000H~0FDFDH)的0000H~0DFFFH部分用于裝載用戶程序,而0E000H~0FDFDH部分作為引導(dǎo)程序區(qū),引導(dǎo)程序區(qū)在升級時不能改變,它用于與用戶操作界面的PC機部分進行程序接收及裝載等工作。

在控制程序區(qū)0000H~0DFFFH中,做一握手程序塊,在上電時,用于和用戶操作界面PC機部分進行握手,當(dāng)接收到PC機部分要進行軟件升級的命令時,程序跳至引導(dǎo)程序區(qū),執(zhí)行如下流程:

->發(fā)送準(zhǔn)備升級字節(jié)到PC機

->刪除FLASH程序區(qū)

->發(fā)送開始下載命令到PC機

->接收且放到相應(yīng)地址

->加密

為了達到自動升級的目的,需要在用戶界面的PC機引導(dǎo)時,自動檢測PC機外設(shè),軟盤控制器,一旦檢索到軟盤中有升級文件及其索引文件,且其版本比現(xiàn)有的單片機控制程序的版本高,則開始執(zhí)行PC機中的下載程序。

2)刪除0000H~ODFFFH的FLASH程序區(qū)

C8051FXXX系列單片機將FLASH程序區(qū)按512字節(jié)為一頁(PAGE)來組織,在刪除控制程序區(qū)0000H~ODFFFH時,首先屏蔽掉所有中斷,使能程序刪除位PSEE(PSCTL.1),同時使能PSWE(PSCTL.0)MOVX指令指向FALSH程序區(qū)。應(yīng)用MOVX指令在每一頁的任意一地址寫0FFH,則將該頁的所有字節(jié)都置為0FFH,從而實現(xiàn)了該頁的刪除。依此操作可刪除所有的程序頁。刪除部分程序如下:

//刪除0000H’ODFFFH的FLASH程序區(qū)
DEL_NEXT_PAGE:   
CLR EA
MOV A,FLSCL
ANL A,#0FEH
ORL A,#01H
MOV FLSCL,A
MOV A,PSCTL
ANL A,#0FCH
ORL A,#03H
MOV PSCTL,A;#03H//使能頁刪除及頁寫操作
MOV A,#0FFH
MOVX @DPTR,A   //將該頁全填充為0FFH
INC DPH
INC DPH   //調(diào)節(jié)頁指針
MOV A,PSCTL
ANL A,#0FDH
MOV PSCTL,A;#03H
MOV A,DPH
CJNE A,#0E0H,DEL01_NEXT_PAGE
DEL01_NEXT_PAGE:
JC DEL_NEXT_PAGE

3)從PC中接收FLASH字節(jié)

以下程序用于從PC機中接收程序并放到相應(yīng)的FLASH地址。在此僅使能PSWE(PSCTL.0)位,使MOVX指令指向FALSH程序區(qū)。
MOV DPTR,#0000H
MOV FLSCL,#01H
MOV PSCTL,#01H;
RECEIVE_NEXT_DOWNLOAD_CHAR:
MOV FLSCL,#01H
MOV PSCTL,#01H;
JNB RI,$
CLR RI
MOV A,SBUF0
MOVX @DPTR,A
INC DPTR
MOV A,DPH
CJNE A,#0E0H,RECEIVE_NEXT_DOWNLOAD_CHAR
MOV FLSCL,#01H //FLASH 寫使能
MOV PSCTL,#01H
MOV DPTR,#0FDFEH
CLR A

[1][2] [3]