西南技術物理研究所 楊光海
中國電子科技集團公司第十研究所 彭文淵
西南技術物理研究所 張 川 公丕華 王 ?!⌒臁〉ぁ恰?/p>
利用RS422串口實現(xiàn)微控制器程序在線升級的方法
西南技術物理研究所楊光海
中國電子科技集團公司第十研究所彭文淵
西南技術物理研究所張川公丕華王海徐丹吳曄
本文以工程應用為出發(fā)點,介紹了在微控制器軟件使用中,利用RS422異步串口實現(xiàn)微控制器程序在線升級的方法,從而實現(xiàn)了不打開配有微控制器的設備不開箱實現(xiàn)程序升級,以供工程開發(fā)者進行選用。
【摘要】RS422;微控制器;在線升級
微控制器是將微型計算機的主要部分集成在一個芯片上的單芯片微型計算機。單片機為微控制器中的一種,相當于一個微型的計算機,具有體積小、質(zhì)量輕、性價比高等特點。如今,單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統(tǒng)、家用電器等。在上述電子系統(tǒng)中,各部件間的計算機微控制芯片(單片機)都需要進行數(shù)據(jù)交換建立通訊聯(lián)系,使用串行通訊手段是其中一種重要、常用的通訊方式。串行通訊工作方式分為同步方式和異步方式兩種,在實際工作中,異步方式用得最多,包括三個常用的總線標準:RS-232、RS-422、RS-485。單片機(Mircocontrollers)是一種集成電路芯片,是采用超大規(guī)模集成電路技術把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計數(shù)器等功能(某些還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉換器、A/D轉換器、SPI等電路)集成到一塊硅片上構成一個小而完善的微型計算機。
目前,單片機的程序存貯器一般都由可編程的FLASH存貯器組成,相對于原來的SRAM存儲器,具有不揮發(fā)性、高密度、低功耗、快速讀取、在線可重寫等優(yōu)點,可實現(xiàn)電子設備需求更改時,不需更換設備上單片機,只需重新改寫單片機FLASH內(nèi)的軟件程序即可。隨著電子系統(tǒng)的發(fā)展,對其外形尺寸、重量的需求越來越高,電子系統(tǒng)機箱小型化、易維護性、可靠性等需求日益增長。機箱越小,勢必造成機箱內(nèi)的電路板越來越小,這也造成機箱內(nèi)的電路板拆卸、維護、維修造成不便。而一般而言,電子系統(tǒng)的維護、維修需要對系統(tǒng)內(nèi)的單片機FLASH內(nèi)的軟件程序進行改寫升級即可,但電子系統(tǒng)的小型化,給單片機的軟件程序改寫升級工作帶來不便。
串行通信接口是微控制芯片單片機常用的通訊接口,本文以串行通信接口中最為常用的RS422接口,升級Silabs公司的C8051F120單片機為例,介紹利用RS422串口實現(xiàn)微控制器程序在線升級的方法。
目前,多數(shù)單片機程序升級都是基于單片機的IAP(In-System programming)技術,IAP技術是應用在Flash程序存儲器的一種編程模式,它從結構上將Flash存儲器映射為兩個存儲區(qū)域,通過運行其中一個存儲區(qū)域上特定的IAP程序(在線升級基程序)接收PC上位機內(nèi)在線升級界面軟件的程序數(shù)據(jù),來對另一個存儲區(qū)域進行編程操作,編程完成后跳轉到嵌入式設備內(nèi)單片機工作程序開始運行,利用RS422串口實現(xiàn)升級的示意圖如圖1所示。
圖1 RS422串口升級微控制器程序的示意圖
C8051F120采用高速、流水線結構的CIP-51內(nèi)核,與MCS-51兼容,其內(nèi)部PLL可倍頻至100MHz,具有2個UART串口,128KB可在系統(tǒng)編程的Flash存儲器,8488字節(jié)的片上RAM,有JTAG接口可以直接下載程序可執(zhí)行代碼到Flash存儲器,完全具備單片機程序進行RS422串口升級程序的條件。
上位機與下位機之間應先約定兩者之間的通訊協(xié)議,包括串行通訊的通訊格式檢測數(shù)據(jù)幀是否符合格式要求,以設置串行通訊時數(shù)據(jù)的數(shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗、發(fā)送和接收的波特率,通訊的命令字、狀態(tài)字,以及每幀傳輸?shù)某绦驍?shù)據(jù)個數(shù)(一般一幀數(shù)據(jù)中包含1024個程序數(shù)據(jù)字節(jié))、錯誤重發(fā)機制等。
2.1下位機硬件設計
在下位機機箱中的單片機C8051F120硬件設計如圖2所示,該單片機通過串口驅(qū)動芯片MAX3491,配以相應的匹配電阻,構成串口驅(qū)動電路,與上位機建立RS422串口通訊聯(lián)系。
圖2 單片機RS422串口硬件設計示意圖
圖3 下位機單片機升級軟件工作流程
2.2下位機軟件設計
該軟件設計僅為結合硬件電路系統(tǒng)及通訊協(xié)議給出的單片機C8051F120的部分程序,以設置RS422異步串行通訊時數(shù)據(jù)串的數(shù)據(jù)位數(shù)、停止位數(shù)、奇偶校驗、發(fā)送和接收的波特率及中斷方式等。
在單片機片內(nèi)的Flash存儲區(qū)域先劃定一定起始地址的IAP程序存儲區(qū)域和工作程序存放區(qū)域。IAP程序存儲區(qū)域用來存放下位機的IAP程序(在線升級基程序),以便IAP程序運行后把上位機傳來的工作程序數(shù)據(jù)搬放到工作程序存放區(qū)域。
下位機單片機軟件的工作過程為:
單片機上電,先進行單片機初始化工作,初始化完成后,向上位機發(fā)送程序裝載握手數(shù)據(jù)幀。收到上位機發(fā)送的握手成功數(shù)據(jù)幀后,向上位機返回“發(fā)送下一幀程序數(shù)據(jù)幀”請求;收到上位機發(fā)送的程序數(shù)據(jù)幀后,擦除單片機FLASH上相應區(qū)域的數(shù)據(jù)內(nèi)容,并將上位機傳來的程序數(shù)據(jù)寫入剛擦除完畢的Flash區(qū)域,直到將最后一幀程序數(shù)據(jù)內(nèi)容寫入單片機FLASH上相應區(qū)域;讀取寫入Flash區(qū)域的數(shù)據(jù),計算校驗和并與上位機傳來的校驗和比較,將比較結果返回給上位機。單片機上電后設計6秒內(nèi),上位機須返回握手數(shù)據(jù),否則單片機進入工作程序,不能再通過RS422串口進行程序升級。單片機升級軟件工作流程如圖3所示。
在本設計中,單片機C8051F120的串行波特率設置為115200,通訊格式為8位數(shù)據(jù)位,1位停止位,IAP程序(在線升級基程序)部分函數(shù)簡化如下:
void UART_Init( void )
{
……
SCON0 = 0x50;
SSTA0 = 0x05;
……
}
void EraseFlash( unsigned int div )
{
……
FLSCL | = 0x01;
PSCTL | = 0x03;
XBYTE[div * 0x400] = 0xFF;
FLSCL & = ~0x01;
PSCTL & = ~0x03;
……
}
void Copy2Flash(unsigned int dst, unsigned char *src, unsigned int len)
{
……
for(i=0;i< len;i++)
{
Tmp = *(src+i);
FLSCL | = 0x01;
PSCTL | = 0x01;
XBYTE[dst+i] = tmp;
FLSCL & = ~0x01;
PSCTL & = ~0x01;
}
……
}
char ReadFlash(unsigned int n, unsigned int verify)
{
……
for(i=0x400;i<n;i++)
{
Check += (unsigned char)*(ptr+i);
}
if(check == verify)
{
return 1;
}
else
{
return 0;
}
……
}
3.1上位機硬件設計
上位機使用一臺帶有RS422串口功能的臺式PC機或其它兼容機均可,另需準備一根PC機串口端口到下位機嵌入式設備單片機RS422數(shù)據(jù)接收端的線纜,PC機作為上位機,通過串行通訊接口電纜與下位機電子機箱內(nèi)的單片機系統(tǒng)進行數(shù)據(jù)交換。
3.2上位機工作軟件設計
上位機PC機軟件可采用VC++等高級語言將下位機單片機工作軟件程序可執(zhí)行代碼轉換為16進制的Hex文件,根據(jù)上位機與下位機之間約定的通訊格式要求,將Hex文件依次分成若干個相同長度(一般一幀數(shù)據(jù)中包含1024個程序數(shù)據(jù)字節(jié))的數(shù)據(jù)幀,并將上述數(shù)據(jù)幀通過串行通訊接口依次發(fā)送給下位機IAP程序(在線升級基程序)。其軟件界面如圖4示。
圖4 上位機工作軟件界面
上位機工作軟件工作流程為:點擊圖4上位機工作軟件中“轉化HEX”按鈕,將單片機工作軟件程序可執(zhí)行代碼轉換為16進制的Hex文件;設置好上位機工作軟件界面上的“串口連接狀態(tài)選擇”;下位機電子箱內(nèi)單片機系統(tǒng)上電后,點擊“連接”按鈕,收到下位機發(fā)來的程序裝載握手數(shù)據(jù)幀后,向下位機發(fā)送握手正確狀態(tài)數(shù)據(jù)幀;收到下位機發(fā)來的“發(fā)送下一幀程序數(shù)據(jù)幀請求”后,將單片機工作程序HEX文件及程序數(shù)據(jù)校驗和按順序一幀一幀的發(fā)送給下位機;收到下位機發(fā)送來的“發(fā)送程序數(shù)據(jù)錯誤數(shù)據(jù)幀”后,重復發(fā)送上一幀單片機工作程序HEX文件數(shù)據(jù);將與下位機通訊的實時狀態(tài)顯示在“上位機軟件工作狀態(tài)”區(qū)域。
上位機工作軟件部分簡化程序如下:
Void CFlashDonloadDlg:OnButtonStart()
{
……
m_nTotalCont = file.GetLength();
m_nDataLeft= m_nTotalCont;
m_nVerify= 0;
if( (m_nTotalCont%1024) == 0 )
{
m_nToalFrame = m_nTotalCont/1024;
}
else
{
m_nToalFrame = m_nTotalCont/1024+1;
}
……
for( int i=0x400;i< m_nTotalCont;i++ )
{
m_nVerify + = (unsigned char)addArray[i];
}
m_nVerify &= 0x0000FFFF;
m_strEdit += “等待下位機握手信號… ”;
……
}
通過RS422串口實現(xiàn)對電子機箱等設備內(nèi)的微控制器進行程序在線升級,實現(xiàn)不打開設備升級程序的方法,以解決現(xiàn)有電子系統(tǒng)機箱內(nèi)單片機軟件程序需開箱改寫升級的不足之處,提供一種直觀簡單,設計流程短,可靠性高,不需打開電子系統(tǒng)機箱,通過RS422串行異步通訊升級電子系統(tǒng)機箱內(nèi)微控制器軟件程序的方法,以提高工作效率。
[1]楊光海,彭曉樂等.遠程升級控制系統(tǒng)嵌入式設備程序的設計方法[J].工業(yè)控制計算機,2016,6:18-19.
[2]張麥龍,朱國強.DSP平臺使用串口升級軟件的實現(xiàn)[J].信息與電腦(理論版),2012,08:166-167.
[3]吳小艨,李正宇,周進松.通過RS232串口實現(xiàn)DSP并行FLASH程序升級[J].通信技術,2012,01:148-150.
[4]汪晶晶,蘇建徽,孫佩石.基于串口通信的DSP應用程序在線升級方法[J].微型機與應用,2013,14:19-21,28.
楊光海(1978—),大學本科,工程師,研究方向:嵌入式控制。