<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > C8051FXXX單片機FLASH程序的自動(dòng)升級

C8051FXXX單片機FLASH程序的自動(dòng)升級

作者: 時(shí)間:2004-12-11 來(lái)源:網(wǎng)絡(luò ) 收藏

作者Email: wolfman6353@sina.com

引言:

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

1)系統簡(jiǎn)介及自動(dòng)升級的實(shí)現方法

PC機(80486/DX2以上) 具有1.44既砬及串行口。單片機控制系統(具有串行口及內置的FLASH程序區)。PC與之間通過(guò)九針串行接口線(xiàn)相連。設置傳送速率為115200BIT/S。

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

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

->發(fā)送準備升級字節到PC機

->刪除FLASH程序區

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

->接收且放到相應地址

->加密

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

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


//刪除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//使能頁(yè)刪除及頁(yè)寫(xiě)操作
MOV A,#0FFH
MOVX @DPTR,A//將該頁(yè)全填充為0FFH
INC DPH
INC DPH//調節頁(yè)指針
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 寫(xiě)使能
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;死循環(huán)
RET


4)FLASH程序的準備

為了更快地得到―下載到C8051F020的FLASH程序,先在CYGNAL IDE開(kāi)發(fā)環(huán)境中,將做好的控制程序編澤,鏈按,然后用廠(chǎng)家提供的串行適配器將PC與目標板連接起來(lái),傳送FLASH程序到目標系統中去。接下來(lái)用“UPLOAD MEMORY T0 PILE…”(如圖示)功能將0000H~OEOOOH的FLASH代碼程序上載到硬盤(pán)存儲器中,再將此ASCII文件轉化為16進(jìn)制的HE文件,注意將其十的0DH,0AH等回車(chē)換行字節取消,最后生成的HEX文件即可被直接下載到FLASH的0000H~0DFFFH的相應地址中。此HEX文件即可發(fā)送至用戶(hù)處,用于升級用戶(hù)的單片機FLASH程序。

5)C程序的準備
//發(fā)送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();

//發(fā)送數據
for (wi=0,j=0;wiflen;wi++)
{
if (feof(fp)!=0)//到達文件結束
break;

fread(ch,sizeof(unsigned char),1,fp);
for (;;)
if (SendAByte(ch)==TRUE)
break;

Printf("%ld bytes is transmitted!",wi);}
fclose(fp);
for (;;)
{
Printf("All bytes is transmitted!");
}

}

//轉換上載文件為可下載的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);
}
結束語(yǔ)

以上所介紹的FLASH自動(dòng)升級程序的PC部分在VC6.0及TC2.0中開(kāi)發(fā),并與805lFXXX系列的單片機聯(lián)機成功,并最后用于在用戶(hù)處的單片機FLASH程序升級。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>