王德龍, 王冬捷, 姜瑞政
(大連海事大學(xué) 輪機工程學(xué)院, 遼寧 大連 116026)
輪機模擬器I/O單元遠程升級設(shè)計
王德龍, 王冬捷, 姜瑞政
(大連海事大學(xué) 輪機工程學(xué)院, 遼寧 大連 116026)
P89V51RD2單片機通過驅(qū)動網(wǎng)絡(luò)芯片W5100實現(xiàn)與以太網(wǎng)的聯(lián)系。借助在應(yīng)用中編程(In-Application Programming, IAP)的功能,實現(xiàn)在運行中對輪機模擬器I/O單元程序的讀取、擦除和燒寫。在計算機上用MATLAB的圖形用戶界面(Graphical User Interface, GUI)設(shè)計遠程主機升級界面,創(chuàng)建網(wǎng)絡(luò)端口;通過以太網(wǎng)發(fā)送HEX可執(zhí)行文件,實現(xiàn)對輪機模擬器I/O單元運行程序的遠程升級。
船舶工程; 輪機模擬器; 單片機; 以太網(wǎng); 在應(yīng)用中編程(IAP); 圖形用戶界面(GUI)
Abstract: The microcontroller P89V51RD2 drives the network chip W5100 to achieve the Ethernet connection, which makes it possible that one read, erase and program the code when the microcontroller program is running by means of the In-Application Programming (IAP). The remote host update interface is developed with MATLAB Graphical User Interface (GUI) on a PC. A network port to send HEX records via the Ethernet network is created. This design allows the input and output unit microcontroller programs of the marine engine room simulator to be updated remotely.
Keywords: ship engineering; marine engine room simulator; microcontroller; Ethernet; IAP; GUI
隨著大連海事大學(xué)輪機自動化實驗室開發(fā)的全任務(wù)輪機模擬器逐漸在各個實訓(xùn)基地推廣和改進,為方便后續(xù)升級維護,對其使用的板卡(輪機模擬器I/O單元)進行遠程升級成為亟待解決的問題。
傳統(tǒng)的單片機編程方式是在焊接到印刷電路板之前使用并行燒寫器將代碼燒寫到Flash中;現(xiàn)在單片機已實現(xiàn)在線編程技術(shù)(In System Programming, ISP),即單片機焊接到印刷電路板之后,通過串口線,配合計算機中專用的燒寫軟件將程序燒寫到單片機的Flash中。但是,若要隨時對分布在各地的輪機模擬器I/O單元的程序進行升級維護,上述2種方式都無法實現(xiàn)。輪機模擬器I/O單元遠程程序升級設(shè)計就是在該需求下提出的,通過在單片機的外圍電路中加入集成有硬件TCP/IP協(xié)議棧的網(wǎng)絡(luò)芯片W5100,使單片機與以太網(wǎng)建立連接;利用在應(yīng)用中編程(In-Application Programming, IAP)功能將從遠程主機發(fā)送來的新程序數(shù)據(jù)燒寫到單片機的Flash中重新編程,即可實現(xiàn)單片機的遠程升級操作。圖1為該設(shè)計的總體示意。
圖1 輪機模擬器I/O單元遠程程序升級設(shè)計總體示意
輪機模擬器I/O單元處理器采用的是Philips公司生產(chǎn)的一款80C51內(nèi)核微處理器P89V51RD2,包含64 KB的Flash、1 024字節(jié)的數(shù)據(jù)RAM及單獨的一塊8 KB的Flash,存儲有Philips公司在芯片出廠時燒寫的引導(dǎo)加載程序[1],用于實現(xiàn)IAP和ISP下載。
W5100 是一款多功能單片網(wǎng)絡(luò)接口芯片,內(nèi)部集成有 10/100 Mbites/s的以太網(wǎng)控制器。使用 W5100 可實現(xiàn)沒有操作系統(tǒng)的 Internet 連接。W5100 內(nèi)部集成有全硬件的TCP/IP 協(xié)議棧、以太網(wǎng)介質(zhì)傳輸層(MAC)和物理層(PHY),其中全硬件TCP/IP協(xié)議棧支持 TCP,UDP,IPv4,ICMP,ARP和IGMP 等;此外還集成有 16 KB 存儲器,用于數(shù)據(jù)傳輸。使用W5100無需考慮以太網(wǎng)的控制,只需進行簡單的端口編程即可實現(xiàn)與以太網(wǎng)的連接。[2]
硬件電路設(shè)計包括P89V51RD2外圍電路設(shè)計和W5100外圍電路設(shè)計。P89V51RD2外圍電路主要執(zhí)行的是輪機模擬器I/O單元的相關(guān)任務(wù): 16通道數(shù)字量輸出、16通道數(shù)字量輸入、8通道模擬量輸出及對W5100進行控制。其對W5100有直接地址總線、間接地址總線和SPI總線等3種訪問方式。雖然使用直接地址總線方式便于編程和提高通信效率,但鑒于P89V51RD2自帶SPI控制器接口,使用SPI總線方式不僅能節(jié)約單片機的I/O口資源,而且利于簡化印刷電路板布局,減小PCB板尺寸,因此在電路設(shè)計上P89V51RD2通過SPI總線訪問W5100。為保證通信及時,W5100的中斷信號線連接到P89V51RD2的INT1上,網(wǎng)口使用自帶網(wǎng)絡(luò)變壓器的RJ-45。圖2為在Altium Designer環(huán)境中繪制的P89V51RD2及W5100外圍電路原理。
a) P89V51RD2外圍電路原理
b) W5100外圍電路原理
程序設(shè)計包括模擬器相關(guān)任務(wù)、W5100網(wǎng)絡(luò)實現(xiàn)和程序升級任務(wù)。這里模擬器相關(guān)任務(wù)不作詳細介紹。
2.1W5100網(wǎng)絡(luò)實現(xiàn)
P89V51RD2通過SPI總線方式訪問W5100,其中:P89V51RD2工作于主機模式;W5100工作于從機模式;SPI總線工作于模式3。[3]對W5100的讀操作格式為:0X0F(操作符)+2字節(jié)地址+1字節(jié)數(shù)據(jù)。對W5100的寫操作格式為:0XF0(操作符)+2字節(jié)地址+1字節(jié)數(shù)據(jù)。
通過設(shè)置相關(guān)的寄存器和存儲器進行初始化,W5100即可與以太網(wǎng)連接。初始化完成后即可創(chuàng)建端口進行數(shù)據(jù)通信。W5100支持TCP,UDP,IP_RAW和MAC_RAW模式通信,且可創(chuàng)建4個端口。為提高通信效率,該設(shè)計使用UDP模式。圖3為W5100 UDP方式的通信流程。
2.2IAP功能實現(xiàn)
IAP功能允許在應(yīng)用中自行對用戶程序代碼進行部分或全部修改,為用戶提供一種可行的程序更新途徑。P89V51RD2的Flash存儲結(jié)構(gòu)見圖4,其中:64 KB的用戶Flash的地址范圍為0X0000~0XFFFF;8 KB的引導(dǎo)Flash的地址范圍為0X0000~0X1FFF。雖然二者的地址會有部分重疊,但正常運行時引導(dǎo)Flash會被覆蓋掉,而激活引導(dǎo)Flash時用戶Flash的0X0000~0X1FFF部分會被覆蓋掉,因此二者不會產(chǎn)生沖突。
圖3 W5100UDP方式的通信流程
圖4 P89V51RD2的Flash存儲結(jié)構(gòu)
Philips公司在引導(dǎo)Flash中針對IAP功能提供有封裝好的子函數(shù),該設(shè)計使用的IAP子函數(shù)有用戶代碼燒錄和扇區(qū)擦除功能。由于引導(dǎo)Flash與用戶Flash的部分地址存在重疊,因此只有通過匯編語言才能正確調(diào)用,且調(diào)用點必須位于0X2000之后。但是,該設(shè)計的主函數(shù)采用的是C語言,因此需在C語言中調(diào)用匯編語言。[4]以下實例是在IAPSubFun.asm中編寫的調(diào)用IAP燒錄子函數(shù)的匯編實現(xiàn),在C語言環(huán)境中按相同函數(shù)名“P89V51RD2_Write_IAP”聲明之后即可調(diào)用。
PUBLIC_P89V51RD2_Write_IAP
?PR?_P89V51RD2_Write_IAP?IAPSUBFUN SEGMENT CODE
RSEG ?PR?_P89V51RD2_Write_IAP?IAPSUBFUN
_P89V51RD2_Write_IAP:
PUSH DPH
PUSH DPL
CLR EA; 關(guān)閉中斷
MOV R1, 02H; 調(diào)用字節(jié)寫命令
ANL 0B1H, 0FCH; 清零BSEL位
MOV DPH,R6; 存儲器高字節(jié)地址
MOV DPL,R7; 存儲器低字節(jié)地址
MOV A,R5; 燒錄的數(shù)據(jù)
LCALL 1FF0H; 進入引導(dǎo)Flash
MOV R7,A ; 由R7返回是否成功寫入的消息
ORL 0B1H, #01H ; 返回用戶程序
SETB EA; 開中斷
POP DPL
POP DPH
RET
為使上述函數(shù)的調(diào)用點在0X2000之后,在Keil工程“BL51 Misc”選項卡的“Code”中輸入“?PR?_P89V51RD2_Write_IAP?IAPSUBFUN(0XF800)”即可將上述燒錄函數(shù)的入口地址定位在用戶Flash空間的0XF800處。同理可實現(xiàn)扇區(qū)擦除函數(shù)。
2.3升級程序設(shè)計
由于P89V51RD2有64 KB的Flash,而一般的用戶程序代碼很少超過30 KB(設(shè)計中模擬器相關(guān)任務(wù)Code不超過1.5 KB,完整的網(wǎng)絡(luò)實現(xiàn)任務(wù)及IAP操作功能函數(shù)不超過2 KB),因此為簡化電路,避免添加存儲器件,可將剩余的部分空間利用起來當(dāng)作數(shù)據(jù)存儲器[5],作為新代碼的暫存區(qū),直到新程序代碼完全正確接收后再拷貝到主運行空間,避免升級中斷導(dǎo)致原程序損壞而死機。圖4中將用戶Flash 分為主運行空間30 KB(0X0000~0X77FF)、升級暫存空間30 KB(0X7800~0XEFFF)和IAP功能操作空間4 KB(0XF000~OXFFFF)等3部分。
具體的設(shè)計為:正常運行的程序代碼存在主運行空間[6];與IAP功能相關(guān)的函數(shù)通過絕對地址定位存儲在IAP操作空間;升級時,首先擦除升級暫存空間,將接收到的代碼的存儲地址偏移0X7800后存儲在暫存空間,代碼準(zhǔn)確接收完成后再將暫存空間的代碼拷貝到主運行空間,完成升級操作。若代碼的地址在IAP操作空間,則程序就將忽略該條代碼,防止IAP操作空間被修改。
單片機工程通過Keil編譯后即可獲得Intel HEX格式的可執(zhí)行文件,該文件內(nèi)的每一行記錄為一條十六進制代碼,具體形式為
:NNAAAARRDD…DDCC
(1)
式(1)中:“:”為記錄的起始標(biāo)志;“NN”為有效數(shù)據(jù)DD的長度,最大為16個,即0X10;“AAAA”為裝入地址;“RR”為數(shù)據(jù)類型,00表示數(shù)據(jù)記錄,01表示結(jié)束;“DD”為將要燒寫的數(shù)據(jù);“CC”為校驗和,一條記錄中除“:”外的所有數(shù)據(jù)相加的和應(yīng)為0,否則出錯。
在遠程主機上按上述格式將HEX記錄逐條發(fā)送給現(xiàn)場的單片機,單片機接收到數(shù)據(jù)后解析出燒寫地址和有效數(shù)據(jù)并校驗,HEX記錄校驗通過才可寫入到對應(yīng)的升級暫存空間中。圖5為單片機端收到新數(shù)據(jù)升級操作流程。
平時單片機執(zhí)行模擬器相關(guān)任務(wù),遠程主機發(fā)來升級指令后,單片機首先擦除暫存空間,然后回復(fù)遠程主機準(zhǔn)備完畢代號;遠程主機收到代號后再發(fā)送新的代碼數(shù)據(jù)。為保證代碼數(shù)據(jù)的準(zhǔn)確性,每接收一條記錄,待校驗通過并燒寫后,單片機再讀取剛燒寫的數(shù)據(jù)并回復(fù),遠程主機確認(rèn)無誤后再發(fā)送下一條記錄,如此往復(fù),直到發(fā)送完畢。若校驗不通過或出現(xiàn)其他錯誤,則中斷此次升級操作,并返回相應(yīng)的錯誤代號。單片機收到結(jié)束指令時,程序跳轉(zhuǎn)到代碼拷貝函數(shù):擦除主運行空間、將暫存空間的代碼拷貝到主運行空間中??截愅瓿珊?,啟動看門狗定時器復(fù)位,單片機即進入到新程序中運行,并回復(fù)升級完成代號給遠程主機。
圖5 單片機端收到新數(shù)據(jù)升級操作流程
MATLAB GUI是MATLAB中的交互式圖形用戶界面開發(fā)工具,用戶可在MATLAB環(huán)境的支持下開發(fā)需要的應(yīng)用程序,兼顧MATLAB強大的數(shù)據(jù)處理能力和用戶界面良好的交互特性。遠程主機升級界面的主要功能為:讀取HEX文件、創(chuàng)建UDP端口及將HEX記錄按UDP協(xié)議發(fā)送到指定的終端并監(jiān)控過程狀態(tài)。圖6為該遠程主機升級界面流程。
圖6 遠程主機升級界面流程
圖7為遠程主機升級界面的初始化界面,其中:文本框用來輸入指定終端單片機的IP地址、網(wǎng)絡(luò)端口及本地的網(wǎng)絡(luò)端口;“選擇文件”按鈕用來選擇HEX文件;“升級申請”按鈕用來發(fā)送升級指令,開始升級操作。
將包含有模擬器相關(guān)任務(wù)、W5100網(wǎng)絡(luò)實現(xiàn)和程序升級任務(wù)等相關(guān)任務(wù)對應(yīng)函數(shù)的Keil工程編譯好,獲得HEX可執(zhí)行文件;該文件通過ISP下載方式下載到P89V51RD2之后,單片機即可通過以太網(wǎng)與遠程主機聯(lián)系,并具有遠程程序升級功能。打開MATLAB中的遠程主機升級界面,輸入待升級板卡的IP地址、網(wǎng)絡(luò)端口及本地計算機的網(wǎng)絡(luò)端口,添加更新后的模擬器功能任務(wù)的HEX可執(zhí)行文件,點擊“升級申請”按鈕;遠程單片機收到升級指令之后,會在清除暫存區(qū)后返回準(zhǔn)備完畢代號,此時遠程主機升級界面上隱藏的“發(fā)送”按鈕會顯示出來,表明可開始發(fā)送;點擊“發(fā)送”按鈕,開始發(fā)送HEX記錄,直到發(fā)送完成。單片機將升級暫存空間的數(shù)據(jù)對應(yīng)拷貝到主運行空間之后,看門狗定時器復(fù)位,程序跳轉(zhuǎn)到0X0000處開始執(zhí)行新的程序并回復(fù)升級完成代號。完成后的遠程主機升級界面見圖8。
圖7 遠程主機升級界面初始化界面
圖8 完成后的遠程主機升級界面
針對輪機模擬器I/O單元遠程程序升級設(shè)計,通過以太網(wǎng),以較低的硬件成本和簡單的操作即可實現(xiàn)對輪機模擬器I/O單元程序的遠程升級維護,無需定制引導(dǎo)加載程序,可隨時對程序進行升級或漏洞修復(fù),避免派專業(yè)人員攜帶編程設(shè)備到現(xiàn)場處理,可大大提高工作效率和模擬器的智能化水平。
[1] 汪萍,李隊員. 基于P89V51RD2的IAP設(shè)計[J]. 工業(yè)控制計算機,2008,21(11): 96-97.
[2] 王計元. 單片網(wǎng)絡(luò)接口芯片W5100的原理與應(yīng)用[J]. 上海電力學(xué)院學(xué)報,2011,21(2): 153-159.
[3] 蔣偉,文昱. SPI總線及其在單片機系統(tǒng)中的應(yīng)用[J]. 科技廣場,2008(10): 201-202.
[4] 楊加國. 單片機C語言與匯編語言混合編程[J]. 成都大學(xué)學(xué)報(自然科學(xué)版),2008(3): 208-211.
[5] 綦聲波,褚東升,劉濱,等. 基于P89C51RD2 IAP功能的數(shù)據(jù)存取與軟件升級[J]. 單片機與嵌入式系統(tǒng)應(yīng)用,2002(11): 46-48.
[6] ZHANG Xufei, WANG Jian. Realization of Remote Online Upgrading Technology Based on RealView MDK and IAP Function[C]. Mechanic Automation and Control Engineering (MACE), 2010: 6266-6269.
RemoteUpdateofI/OUnitsofMarineEngineRoomSimulator
WANGDelong,WANGDongjie,JIANGRuizheng
(Marine Engineering College, Dalian Maritime University, Dalian 116026, China)
U665.261
A
2016-05-19
王德龍(1989—),男,河南信陽人,碩士,主要研究方向為輪機自動化與智能化。E-mail: wdldmu2009@163.com
1000-4653(2016)03-0016-04