嵌入式軟件開發 C8051F124單片機FLASH程序的自動升級

C8051FXXX系列高速SOC單片機是由美國Cygnal公司開發的完全集成的混合信號系統級芯片,具有與8051兼容的微處理器內核,內部集成128K及以上的FLASH程序存儲器,具有系統在線重新編程能力,以C8051F124為例,內部集成128K的FLASH程序存儲器。在系統控制軟件的開發調試階段,可用集成開發環境IDE來下載及調試系統。但當將C8051F124目標系統集成到產品後,在後續對用戶處產品進行功能升級時,就會遇到問題,必須用專用下載器Programmer進行升級,這是不現實的。所以,實現人機界面到下位機的自動數據傳輸,並把程序代碼自動寫入FLASH中,從而對單片機軟件進行自動升級,是非常有意義的。筆者通過實驗,在上位機為WIN 10的IPC與下位機為C8051F124的單片機控制系統之間,通過串行口進行C8051F124單片機控制程序的自動升級及程序加密,從而使用戶只要從互聯網上下載控制程序,即可實現單片機程序的自動升級。當然,也可採用網口,FIFO,SPI0等進行升級,關鍵看您所採用的上下位通訊方式。

以下簡要介紹單片機目標程序的準備及自動升級的製作過程。硬件連接方式及C8051F124處理器硬件原理如下圖:

嵌入式軟件開發    C8051F124單片機FLASH程序的自動升級


嵌入式軟件開發    C8051F124單片機FLASH程序的自動升級


C8051F120的FLASH 的BANK0/1分為用戶程序區(0000H~0FDFDH),廠家保留及加密區(0FDFEH~0FFFFH)兩部分。現將用戶程序區(0000H~0FDFDH)的0000H~0DFFFH部分用於裝載用戶程序,而0E000H~0FDFDH部分作為引導程序區,引導程序區在升級時不能改變,它用於與用戶操作界面的工控機部分進行程序接收及裝載等等工作。C8051F124單片機內部FLASH存儲結構圖如下:

嵌入式軟件開發    C8051F124單片機FLASH程序的自動升級


在控制程序區0000H~0DFFFH中,做一握手程序塊,在上電時,用於和用戶操作界面的工控機部分進行握手,當接收到工控機部分要進行軟件升級的命令時,程序跳至引導程序區,執行如下流程:

嵌入式軟件開發    C8051F124單片機FLASH程序的自動升級


C8051F124將FLASH程序區按1024字節為一頁(PAGE)來組織的,在刪除控制程序區0000H~0DFFFH時,首先屏蔽掉所有中斷,然後使能程序刪除位PSEE(PSCTL.1),同時使能PSWE(PSCTL.0)位,使MOVX指令指向FALSH程序區。應用MOVX指令在每一頁的任意一地址寫0FFH,則將該頁的所有字節都置為0FFH,從而實現了該頁的刪除。程序框圖及原程序如下:

嵌入式軟件開發    C8051F124單片機FLASH程序的自動升級

//1: 刪除0000H~0DFFFH的控制程序區

MOV DPTR,#0000H

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

INC DPH

INC DPH

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

//2:以下程序用於從工控機中接收程序並放到相應FLASH地址。在此僅使能PSWE(PSCTL.0)位,使MOVX指令指向FALSH程序區

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 WRITE ENABLE

MOV PSCTL,#01H

MOV DPTR,#0FDFEH

CLR A

MOVX @DPTR,A

MOV DPTR,#0FDFFH

MOVX @DPTR,A

MOV PSCTL,#00H

MOV FLSCL,#00H

//3:等待關機

CYCLE_FOREVER:

MOV A,FLSCL

ANL A,#0FEH

MOV FLSCL,A

MOV A,PSCTL

ANL A,#0FCH

MOV PSCTL,A;#03H

LJMP CYCLE_FOREVER

RET

3)發送到下位機的的FLASH程序的準備:

為了更快地得到下載到C 8051F124的FLASH程序,先在CYGNAL IDE開發環境中,將做好的控制程序編譯,鏈接,然後用廠家提供的串行適配器將PC與目標板連接起來,傳送FLASH程序到目標系統中去。接下來用“UPLOAD MEMORY TO FILE…”功能將0000H~0E000H的FLASH代碼程序上載到硬盤存儲器中,再將此ASCII文件轉化為16進制的HEX文件,注意將其中的0DH,0AH等回車換行字節取消,最後生成的HEX文件即可被直接下載到FLASH的0000H~0DFFFH的相應地址中。此HEX文件即可發送至用戶處,用於升級用戶的單片機控制部分。

4) 自動升級程序的最後生成:

為了達到自動升級的目的,需要在用戶界面的工控機引導時,自動檢測計算機外設,如軟盤控制器,一旦檢索到軟盤中有升級文件及其索引文件,且其版本比現有的單片機控制程序的版本高,則開始執行工控機中的下載程序,以下為執行流程:

嵌入式軟件開發    C8051F124單片機FLASH程序的自動升級


結束語:以上所介紹的工控機中的自動升級程序在win10的操作系統中用vc++IDE系統軟件開發完成.並與C8051F124單片機聯機成功,成功地用於在用戶處的單片機程序升級。


分享到:


相關文章: