<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    C8051FXXX單片機FLASH程序的自動升級

    發布時間:2010-11-16 15:55    發布者:eetech
    關鍵詞: C8051Fxxx , Flash , 程序 , 單片機 , 自動升級
    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=0x30) %26;amp;%26;amp; (ch=0x61) %26;amp;%26;amp; (ch=0x30) %26;amp;%26;amp; (ch=0x61) %26;amp;%26;amp; (ch<=0x66))
       ru+=(ch-0x61)+0x0a;
      fwrite(%26;amp;ru,sizeof(unsigned char),1,fpw);
      fread(%26;amp;ch,sizeof(unsigned char),1,fp);/*0x0d*/
      fread(%26;amp;ch,sizeof(unsigned char),1,fp);/*0x0d*/
      fread(%26;amp;ch,sizeof(unsigned char),1,fp);/*0x0a*/
      j++;
      if (j==255)
      {
       j=0;
       fread(%26;amp;ch,sizeof(unsigned char),1,fp);
    fread(%26;amp;ch,sizeof(unsigned char),1,fp);
       fread(%26;amp;ch,sizeof(unsigned char),1,fp);
       fread(%26;amp;ch,sizeof(unsigned char),1,fp);
    fread(%26;amp;ch,sizeof(unsigned char),1,fp);
       continue;
      }
    }
    fclose(fp);fclose(fpw);
    }

    結束語  

    以上所介紹的FLASH自動升級程序的PC部分在VC6.0及TC2.0中開發,并與805lFXXX系列的單片機聯機成功,并最后用于在用戶處的單片機FLASH程序升級。
    本文地址:http://www.portaltwn.com/thread-39785-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關在線工具

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷