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