作者Email: wolfman6353@sina.com
引言:
C8051FXXX系列高速SOC單片機是由美國Cygnal公司開發的完全集成的混合信號系統級芯片,具有與8051兼容的微處理器內核,內部集成FLASH程序存儲器,具有在系統重新編程能力,以C8051F020為例,內部集成64K的FLASH程序存儲器。在系統控制軟件的開發調試階段,可用集成開發環境來下載及測試系統,但當將C8051F020目標系統集成到產品后,則由于操作系統及軟硬件接口不一樣等等原因,不能在最終產品中用集成開發環境來下載FLASH程序,故產品到了用戶處之后,如要再進行FLASH程序的更新,則必須更換相應的集成電路印刷板,造成很多麻煩及不可靠因素。筆者通過實驗,在用戶操作界面的PC機及C8051F020的單片機控制系統之間,通過串行口進行C8051F020單片機控制程序的自動升級及程序加密,從而使用戶只要從互聯網上下載控制程序,即可實現單片機程序的自動升級。以下以64KBFLASH RAM為例簡要介紹單片機目標程序的準備及自動升級的制作過程。
1)系統簡介及自動升級的實現方法
PC機(80486/DX2以上) 具有1.44吋軟驅及串行口。單片機控制系統(具有串行口及內置的FLASH程序區)。PC與C8051FXXX之間通過九針串行接口線相連。設置傳送速率為115200BIT/S。
C8051F020單片機的FLASH RAM分為用戶程序區(0000H~0FDFDH),廠家保留及加密區(0FDFEH~0FFFFH)兩部分?,F將用戶程序區(0000H~0FDFDH)的0000H~0DFFFH部分用于裝載用戶程序,而0E000H~0FDFDH部分作為引導程序區,引導程序區在升級時不能改變,它用于與用戶操作界面的PC機部分進行程序接收及裝載等工作。
在控制程序區0000H~0DFFFH中,做一握手程序塊,在上電時,用于和用戶操作界面PC機部分進行握手,當接收到PC機部分要進行軟件升級的命令時,程序跳至引導程序區,執行如下流程:
->發送準備升級字節到PC機
->刪除FLASH程序區
->發送開始下載命令到PC機
->接收且放到相應地址
->加密
為了達到自動升級的目的,需要在用戶界面的PC機引導時,自動檢測PC機外設,軟盤控制器,一旦檢索到軟盤中有升級文件及其索引文件,且其版本比現有的單片機控制程序的版本高,則開始執行PC機中的下載程序。
2)刪除0000H~ODFFFH的FLASH程序區
C8051FXXX系列單片機將FLASH程序區按512字節為一頁(PAGE)來組織,在刪除控制程序區0000H~ODFFFH時,首先屏蔽掉所有中斷,使能程序刪除位PSEE(PSCTL.1),同時使能PSWE(PSCTL.0)MOVX指令指向FALSH程序區。應用MOVX指令在每一頁的任意一地址寫0FFH,則將該頁的所有字節都置為0FFH,從而實現了該頁的刪除。依此操作可刪除所有的程序頁。刪除部分程序如下:
//刪除0000H’ODFFFH的FLASH程序區
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 //調節頁指針
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字節
以下程序用于從PC機中接收程序并放到相應的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 寫使能
MOV PSCTL,#01H
MOV DPTR,#0FDFEH
CLR A
MOVX @DPTR,A
MOV DPTR,#0FDFFH
MOVX @DPTR,A
MOV PSCTL,#00H
MOV FLSCL,#00H
CYCLE_FOREVER:SJMP CYCLE_FOREVER;死循環
RET
4)FLASH程序的準備
為了更快地得到—下載到C8051F020的FLASH程序,先在CYGNAL IDE開發環境中,將做好的控制程序編澤,鏈按,然后用廠家提供的串行適配器將PC與目標板連接起來,傳送FLASH程序到目標系統中去。接下來用“UPLOAD MEMORY T0 PILE…”(如圖示)功能將0000H~OEOOOH的FLASH代碼程序上載到硬盤存儲器中,再將此ASCII文件轉化為16進制的HE文件,注意將其十的0DH,0AH等回車換行字節取消,最后生成的HEX文件即可被直接下載到FLASH的0000H~0DFFFH的相應地址中。此HEX文件即可發送至用戶處,用于升級用戶的單片機FLASH程序。
5)C程序的準備
//發送FLASH程序文件到單片機中去
BOOL SendFileToFlash()
{
unsigned char ch;
FILE *fp;
long int flen,wi=0;
int i,j;
if ((fp = fopen("flashwl","rb"))==NULL)
{
return FALSE;
}
//初使化串口,且與單片機系統握手
InitialCommuClass();
//發送數據
for (wi=0,j=0;wi
if (feof(fp)!=0)//到達文件結束
break;
fread(&ch,sizeof(unsigned char),1,fp);
for (;;)
if (SendAByte(ch)==TRUE)
break;
Printf("%ld bytes is transmitted!\n",wi); }
fclose(fp);
for (;;)
{
Printf("All bytes is transmitted!\n");
}
}
//轉換上載文件為可下載的HEX目標文件
BOOL ConvertFileToFlash()
{
unsigned char ch,ru;
FILE *fp,*fpw;
long int flen,wi=0;
int i,j;
if ((fp = fopen("SOURCEC","rb"))==NULL)
{
return FALSE;
}
if ((fpw = fopen("HEXOBJECT","wb"))==NULL)
{
return FALSE;
}
for (wi=0,j=0;;wi++)
{
if (feof(fp)!=0)
break;
ru=0;
fread(&ch,sizeof(unsigned char),1,fp);
if ((ch>=0x30) && (ch<=0x39))
ru+=(ch-0x30)*16;
else if ((ch>=0x61) && (ch<=0x66))
ru+=((ch-0x61)+0x0a)*16;
fread(&ch,sizeof(unsigned char),1,fp);
if ((ch>=0x30) && (ch<=0x39))
ru+=ch-0x30;
else if ((ch>=0x61) && (ch<=0x66))
ru+=(ch-0x61)+0x0a;
fwrite(&ru,sizeof(unsigned char),1,fpw);
fread(&ch,sizeof(unsigned char),1,fp);/*0x0d*/
fread(&ch,sizeof(unsigned char),1,fp);/*0x0d*/
fread(&ch,sizeof(unsigned char),1,fp);/*0x0a*/
j++;
if (j==255)
{
j=0;
fread(&ch,sizeof(unsigned char),1,fp);
fread(&ch,sizeof(unsigned char),1,fp);
fread(&ch,sizeof(unsigned char),1,fp);
fread(&ch,sizeof(unsigned char),1,fp);
fread(&ch,sizeof(unsigned char),1,fp);
continue;
}
}
fclose(fp);fclose(fpw);
}
結束語
以上所介紹的FLASH自動升級程序的PC部分在VC6.0及TC2.0中開發,并與805lFXXX系列的單片機聯機成功,并最后用于在用戶處的單片機FLASH程序升級。
- c805(9848)
- 自動升級(5236)
相關推薦
(全套資料)單片機C語言程序設計實訓100例——基于8051+Proteu...
8051單片機
8051系列單片機C程序設計完全手冊
8051系列單片機c程序完全手冊——很好的單片機學習資料
8051系列單片機固件升級iap聲明
C8051F310單片機
C8051F35X單片機內部Flash存儲器的擦寫方法
C8051F單片機的IAP系統設計與實現
C8051F系列單片機
c8051f單片機簡介
c8051f單片機資料下載
單片機C8051F353資料推薦
單片機C語言程序設計實訓100例——基于8051+Proteus仿真.pdf
單片機C語言的優越性是什么
單片機為什么要使用C語言
單片機為什么要使用C語言
單片機如何在flash中運行程序
CYGNAL單片機簡介
CYGNAL單片機資料介紹
FPGA嵌入8051單片機 IP核編程
Linux下ARM和單片機的串口通信設計資料分享
[原創c8051f單片機應用解析之c8051f330
[原創]使用單片機C語言的好處
[灌水]c8051f單片機仿真器(EC3)---性能好,價格低(90元/套)
[討論]給大家介紹一個非常不錯的c8051f單片機學習網站
《單片機C語言程序設計實訓100例——基于8051+Proteus仿真》...
【下載】《單片機C語言程序設計實訓100例–基于8051 PROTEUS仿真》
了解C8051F360單片機的定時器模塊和中斷模塊
介紹8051系列單片機的c語言(C51)程序設計方法
關于看門狗斷電不復位的問題
基于8051 Proteus仿真的單片機C語言程序設計實訓100例
基于8051 Proteus仿真,單片機C語言程序設計100例分享
求《8051系列單片機C程序設計完全手冊》
詳述經典《8051單片機C語言程序設計與實例解析》
c8051f pdf datasheet
![](https://skin.elecfans.com/images/2021-soft/load.png)
cygnal單片機教程
![](https://skin.elecfans.com/images/2021-soft/load.png)
CYGNAL單片機簡介
![](https://skin.elecfans.com/images/2021-soft/load.png)
C8051F35X單片機內部Flash存儲器的擦寫方法
![](https://skin.elecfans.com/images/2021-soft/load.png)
CYGNAL 單片機原理
![](https://skin.elecfans.com/images/2021-soft/load.png)
CYGNAL 單片機基礎知識手冊
![](https://skin.elecfans.com/images/2021-soft/load.png)
8位FLASH單片機HR7P169BFGSD
C8051Fxxx程序丟失問題的分析
![](https://skin.elecfans.com/images/2021-soft/eye.png)
C8051Fxxx高速SOC單片機原理及應用_潘琢金
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于Linux的ARM/單片機串口通信設計
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/EB/DF/pIYBAGB-Lz6AaGw-AACGU4oGdfE637.jpg)
Linux下ARM 和單片機的串口通信設計
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/EB/67/o4YBAGB-LhGAbyBZAACHf18L118624.jpg)
C8051F與80C51系列單片機的初始化比較
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file1.elecfans.com//web2/M00/A6/44/wKgZomUMPJiACdPNAAATAAF4G0E100.jpg)
Linux下ARM和單片機的串口通信設計
![](https://skin.elecfans.com/images/2021-soft/eye.png)
![](https://file.elecfans.com/web1/M00/EB/67/o4YBAGB-LpmAe2CPAACH3ndRvIM280.jpg)
PIC18Fxxx單片機程序設計及應用PDF電子書免費下載
![](https://skin.elecfans.com/images/2021-soft/load.png)
C8051Fxxx系列單片機的中文資料簡介
![](https://skin.elecfans.com/images/2021-soft/load.png)
C8051F串口升級程序
![](https://skin.elecfans.com/images/2021-soft/load.png)
零開始構建單片機遠程升級平臺
![](https://skin.elecfans.com/images/2021-soft/load.png)
評論