C8051F單片機(jī)的軟件IAP技術(shù)
C8051Fxxx系列高速SoC單片機(jī)是由美國(guó)Cygnal公司開(kāi)發(fā)的完全集成的混合信號(hào)系統(tǒng)級(jí)芯片,具有與8051兼容的微處理器內(nèi)核。C8051Fxxx單片機(jī)有大容量的Flash存儲(chǔ)器,用于存儲(chǔ)程序代碼和非易失性數(shù)據(jù),可在應(yīng)用編程。以 C8051F120為例,C8051F120x 和C8051F13x 系列MCU內(nèi)部有128 KB(C8051F12x 和C8051F130/1)或64 KB(C8051F132/3)的在應(yīng)用可編程Flash 存儲(chǔ)器,用于程序代碼和非易失性數(shù)據(jù)存儲(chǔ);另外還有256字節(jié)的Flash頁(yè),可以用于數(shù)據(jù)存儲(chǔ)。可以通過(guò)JTAG接口對(duì)Flash存儲(chǔ)器進(jìn)行在應(yīng)用編程,或由應(yīng)用軟件使用MOVX 指令編程。用C8051F120 MCU做成的產(chǎn)品到了用戶處之后,用軟件通過(guò)串口就可以為產(chǎn)品進(jìn)行Flash程序的更新。筆者通過(guò)實(shí)驗(yàn),在用戶操作界面的PC機(jī)及C8051F120的單片機(jī)控制系統(tǒng)之間,通過(guò)串行口進(jìn)行C8051F120 單片機(jī)控制程序的自動(dòng)升級(jí)及程序加密。用戶只要從互聯(lián)網(wǎng)上下載控制程序,即可實(shí)現(xiàn)單片機(jī)程序的自動(dòng)升級(jí)。該方案解決了升級(jí)過(guò)程意外中斷、遠(yuǎn)程升級(jí)傳輸誤碼等關(guān)鍵技術(shù)問(wèn)題,避免了傳統(tǒng)固件升級(jí)需要更換主機(jī)、主板或芯片等問(wèn)題,節(jié)約了人力和資金等資源,已在實(shí)際系統(tǒng)中應(yīng)用并受到用戶好評(píng)。以下以64 KB Flash為例,簡(jiǎn)要介紹單片機(jī)目標(biāo)程序的準(zhǔn)備及自動(dòng)升級(jí)的制作過(guò)程。
1自動(dòng)升級(jí)的實(shí)現(xiàn)方法
C8051Fxxx系列單片機(jī)將Flash程序區(qū)按512字節(jié)為一頁(yè)(page)來(lái)組織。在刪除控制程序區(qū)時(shí),首先屏蔽所有中斷,使能程序刪除位 PSEE(PSCTL.1),同時(shí)使能PSWE(PSCTL=0x03, 即PSWE = 1, PSEE = 1,頁(yè)擦除模式) ,用C51語(yǔ)言的一個(gè)指針指向Falsh程序區(qū)。如:
char xdata * data address=0x0000;
每擦除一頁(yè)地址指針加512,依此操作可刪除所有的程序頁(yè)。刪除部分程序如下:
while(address<0x0F800) {//0xF800=62KB
*address = 0x00; //向扇區(qū)空寫(xiě),啟動(dòng)擦除操作
for (i=0;i<10;i++);
address =address +512;
}
這樣就把62 KB的Flash的舊程序刪除了。實(shí)際上就是應(yīng)用匯編語(yǔ)言中MOVX指令在每一頁(yè)的任一地址寫(xiě)0FFH,就可以將該頁(yè)的所有字節(jié)都置為0FFH,從而實(shí)現(xiàn)了該頁(yè)的刪除。
擦除掉所選的區(qū)域后要關(guān)掉對(duì)Flash的寫(xiě)操作,否則可因其他環(huán)境造成程序的丟失:
PSCTL &= ~0x03;// PSWE = 0; PSEE = 0
FLSCL&=~0x01;//關(guān)閉Flash寫(xiě)/擦除
1.1更新程序的方法
在接收新程序部分,寫(xiě)入一握手程序塊,以保證程序的可靠性。握手的協(xié)議可自己定義,其中包括一些需要知道的信息,如長(zhǎng)度、頭部、尾部等。
同樣,“char xdata *data address=0x0000;”指向要寫(xiě)的區(qū)域。
FLSCL |= 0x01;//使能Flash寫(xiě)/擦除
PSCTL |= 0x01; // PSWE = 1
然后通過(guò)串口用查詢的方法獲得新的程序代碼。
while(len--) {
*address++= Get_COM_Code();
}
PSCTL=00; // PSWE = 0; PSEE = 0
FLSCL =00;
1.2運(yùn)行新程序
在更新完程序后,有兩種方法可以重新運(yùn)行程序;斷電再上電和軟件復(fù)位。 C8051F120內(nèi)部有復(fù)位寄存器,通過(guò)使能該寄存器,可以實(shí)現(xiàn)軟件復(fù)位。
評(píng)論