丁香婷婷网,黄色av网站裸体无码www,亚洲午夜无码精品一级毛片,国产一区二区免费播放

現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>C8051FXXX單片機(jī)FLASH程序的自動升級

C8051FXXX單片機(jī)FLASH程序的自動升級

時(shí)間:2023-02-20 23:03:59 電子通信論文 我要投稿
  • 相關(guān)推薦

C8051FXXX單片機(jī)FLASH程序的自動升級

作者Email:  wolfman6353@sina.com

引言:

  C8051FXXX系列高速SOC單片機(jī)是由美國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)品到了用戶處之后,如要再進(jìn)行FLASH程序的更新,則必須更換相應(yīng)的集成電路印刷板,造成很多麻煩及不可靠因素。筆者通過實(shí)驗(yàn),在用戶操作界面的PC機(jī)及C8051F020的單片機(jī)控制系統(tǒng)之間,通過串行口進(jìn)行C8051F020單片機(jī)控制程序的自動升級及程序加密,從而使用戶只要從互聯(lián)網(wǎng)上下載控制程序,即可實(shí)現(xiàn)單片機(jī)程序的自動升級。以下以64KBFLASH RAM為例簡要介紹單片機(jī)目標(biāo)程序的準(zhǔn)備及自動升級的制作過程。

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

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

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

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

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

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

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

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

->加密

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

2)刪除0000H~ODFFFH的FLASH程序區(qū)
C8051FXXX系列單片機(jī)將FLASH程序區(qū)按512字節(jié)為一頁(PAGE)來組織,在刪除控制程序區(qū)0000H~ODFFFH時(shí),首先屏蔽掉所有中斷,使能程序刪除位PSEE(PSCTL.1),同時(shí)使能PSWE(PSCTL.0)MOVX指令指向FALSH程序區(qū)。應(yīng)用MOVX指令在每一頁的任意一地址寫0FFH,則將該頁的所有字節(jié)都置為0FFH,從而實(shí)現(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機(jī)中接收程序并放到相應(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
   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程序的準(zhǔn)備

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

5)C程序的準(zhǔn)備
//發(fā)送FLASH程序文件到單片機(jī)中去
BOOL SendFileToFlash()
{
 unsigned  char ch;
 FILE *fp;
 long int flen,wi=0;
 int i,j;

 if ((fp = fopen("flashwl","rb"))==NULL)
 {
  return FALSE;
 }
 //初使化串口,且與單片機(jī)系統(tǒng)握手
 InitialCommuClass();

 //發(fā)送數(shù)據(jù)
 for (wi=0,j=0;wi<flen;wi++)
 {
  if (feof(fp)!=0)//到達(dá)文件結(jié)束
   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");
 }

}

//轉(zhuǎn)換上載文件為可下載的HEX目標(biāo)文件
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);
}
結(jié)束語

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



【C8051FXXX單片機(jī)FLASH程序的自動升級】相關(guān)文章:

串行FLASH SSF1101在單片機(jī)08-06

ATMEGA128單片機(jī)的軟件遠(yuǎn)程升級08-06

利用Flash實(shí)現(xiàn)DSP對多個(gè)程序有選擇的加載08-06

化工自動化控制系統(tǒng)升級與發(fā)展08-18

用PComm開發(fā)PC機(jī)與單片機(jī)的通信程序08-06

教案:flash入門08-16

升級了作文12-26

FLASH5簡介08-16

基于單片機(jī)的選頻表自動變步長的設(shè)計(jì)實(shí)現(xiàn)08-06