楊元挺 卓樹(shù)峰
摘 要:CAN總線是一種應(yīng)用廣泛的實(shí)時(shí)性現(xiàn)場(chǎng)總線。介紹一種基于CAN總線的遠(yuǎn)程系統(tǒng)軟件升級(jí)設(shè)計(jì)方案,解決了遠(yuǎn)距離系統(tǒng)升級(jí)的困難。該系統(tǒng)采用MCU控制,在CAN總線上,通過(guò)PC機(jī)控制各個(gè)智能節(jié)點(diǎn),實(shí)現(xiàn)數(shù)據(jù)和程序的更新升級(jí)。智能節(jié)點(diǎn)采用具有IAP功能的MCU構(gòu)成,利用IAP技術(shù)對(duì)MCU內(nèi)部的存儲(chǔ)器進(jìn)行在系統(tǒng)中編程,這樣可以做到數(shù)據(jù)及時(shí)保存,即使掉電,數(shù)據(jù)也不丟失,避免脫機(jī)編程帶來(lái)的麻煩,從而在網(wǎng)絡(luò)總線上實(shí)現(xiàn)了遠(yuǎn)距離的程序下載。
關(guān)鍵詞:CAN總線;現(xiàn)場(chǎng)總線;系統(tǒng)升級(jí);智能節(jié)點(diǎn);IAP技術(shù)
中圖分類號(hào):TP336文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2009)10-083-04
Remote Upgrading System Based on CAN Bus
YANG Yuanting,ZHUO Shufeng
(Fujian Polytechnic of Information Technology,Fuzhou,350003,China)
Abstract:CAN bus is a wide-applied real-time field bus.In this paper,a CAN-based long-distance bus system software upgrade program is designed to address the long-range system upgrade difficulties.This system is controlled by MCU,CAN bus,the programs′updating and upgrading of each intelligent node is congtrolled by PC,intelligent node constituted by MCU which has the function of the IAP,IAP use of technology in-house MCU′s memory in the system for programming,which can save data in a timely manner,even if the data is not lost down to avoid the off-line programming brought about by trouble on the bus network in order to achieve long-range program.
Keywords:CAN bus;field bus;system upgrading;intelligent node;IAP technology
0 引 言
控制器局域網(wǎng)(Controllers Area Network,CAN)總線是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。它最早由德國(guó)Bosch公司推出,CAN通信協(xié)議是一種用于汽車內(nèi)部測(cè)量與執(zhí)行部件之間的數(shù)據(jù)通信協(xié)議。作為一種技術(shù)先進(jìn),可靠性高,功能完善,成本合理的遠(yuǎn)程網(wǎng)絡(luò)通訊控制方式,CAN總線已被廣泛應(yīng)用于各個(gè)自動(dòng)化控制系統(tǒng)中。例如,在汽車電子、自動(dòng)控制、智能大廈、電子系統(tǒng)、安防監(jiān)控等各領(lǐng)域中,CAN總線具有不可比擬的優(yōu)越性。基于CAN總線的這種優(yōu)越性,提出一種基于CAN總線遠(yuǎn)程系統(tǒng)升級(jí)的設(shè)計(jì)方案,該系統(tǒng)主要解決了智能終端的系統(tǒng)軟件遠(yuǎn)程升級(jí)和維護(hù)困難的問(wèn)題。隨著自動(dòng)化水平的不斷發(fā)展,單片機(jī)的應(yīng)用也越來(lái)越廣,在一些情況下,產(chǎn)品系統(tǒng)的更新升級(jí)在所難免,尤其是對(duì)遠(yuǎn)距離節(jié)點(diǎn)且固化在產(chǎn)品上的MCU的軟件升級(jí)更加困難,一般常規(guī)的處理辦法需要將單片機(jī)產(chǎn)品進(jìn)行收回才能實(shí)現(xiàn)。但是,如果有些遠(yuǎn)程設(shè)備本身留有遠(yuǎn)程通訊的方式:例如某些遠(yuǎn)程數(shù)據(jù)傳輸模塊,為了上報(bào)數(shù)據(jù),總會(huì)留有通訊接口,比如RS 232,RS 485或者局域網(wǎng)接口;又或者某些車載定位設(shè)備,為了與監(jiān)控中心通訊,會(huì)留有相應(yīng)的通訊方式。在這種情況下就可以利用其現(xiàn)有的通訊方式,并與CAN總線配合使用,實(shí)現(xiàn)對(duì)其MCU內(nèi)部程序進(jìn)行升級(jí)而不需要收回產(chǎn)品。
1 系統(tǒng)總體結(jié)構(gòu)
該系統(tǒng)采用分布式設(shè)計(jì)方案。首先建立CAN總線網(wǎng)絡(luò),CAN總線通信作為串行通信方式中的一種,與其他通信方式比較,有它自身的通信特點(diǎn)。其中,在報(bào)文傳送中不包含目標(biāo)地址,而是以全總線網(wǎng)絡(luò)廣播為基礎(chǔ),各節(jié)點(diǎn)根據(jù)報(bào)文中反映數(shù)據(jù)性質(zhì)的標(biāo)識(shí)符過(guò)濾報(bào)文,并接收該節(jié)點(diǎn)應(yīng)該接收的報(bào)文,丟棄不應(yīng)該接收的報(bào)文。此外,CAN總線通信還強(qiáng)化了對(duì)數(shù)據(jù)安全性的關(guān)注,可以滿足控制系統(tǒng)及其他具有較高安全要求的應(yīng)用場(chǎng)合。該系統(tǒng)總線上的各個(gè)智能節(jié)點(diǎn)都是一個(gè)獨(dú)立的終端,可以分別進(jìn)行電機(jī)驅(qū)動(dòng)、傳感器信號(hào)的接收處理和PC機(jī)的控制等工作,并且各個(gè)節(jié)點(diǎn)之間是相互平等的,可以相互獨(dú)立通信,同時(shí)也可以將其中任意一個(gè)節(jié)點(diǎn)作為總線上其他模塊升級(jí)的控制節(jié)點(diǎn),因此該節(jié)點(diǎn)可以利用PC機(jī)作為上位機(jī),實(shí)現(xiàn)人機(jī)對(duì)話,對(duì)總線上的各個(gè)節(jié)點(diǎn)進(jìn)行遠(yuǎn)程操作和程序升級(jí)等。為此,該系統(tǒng)框圖如圖1所示。
2 CAN總線節(jié)點(diǎn)設(shè)計(jì)
節(jié)點(diǎn)是總線網(wǎng)絡(luò)上信息的接收和發(fā)送站,所謂的智能節(jié)點(diǎn)是由微處理器和可編程的CAN控制芯片等組成,兩者合二為一;同時(shí)也可以由獨(dú)立的通信控制芯片與單片機(jī)接口合成。兩種方式各有其優(yōu)缺點(diǎn),但從靈活性考慮,后者更為合適。該系統(tǒng)中節(jié)點(diǎn)設(shè)計(jì)是基于SJA1000的CAN總線接口模塊,模塊采用P89C51RD單片機(jī)作為處理核心,采用PCA82C250作為CAN總線收發(fā)器,使整個(gè)模塊具有較好的通用性及較強(qiáng)的可擴(kuò)展性。其中,P89C51RD單片機(jī)在運(yùn)用中編程(IAP)的功能更有利于節(jié)點(diǎn)程序升級(jí)。整個(gè)節(jié)點(diǎn)設(shè)計(jì)包括:輸入模塊、顯示模塊、電源模塊、I2C存儲(chǔ)模塊、CAN通信控制和CAN總線收發(fā)器,節(jié)點(diǎn)框圖如圖2所示。
2.1 CAN通信控制器和CAN總線收發(fā)器
CAN接口電路由CAN通信控制器SJA1000、CAN總線收發(fā)器PCA82C250和高速光耦6N137等組成。SJA1000作為獨(dú)立CAN總線控制器,具有完成CAN通信協(xié)議所要求的全部特性,經(jīng)過(guò)簡(jiǎn)單總線連接的SJA1000,可完成CAN總線的物理層和數(shù)據(jù)鏈路層中所有功能。PCA82C250是CAN控制器與物理總線之間的接口,起到CAN總線收發(fā)器的作用。它對(duì)總線提供差動(dòng)發(fā)送能力,對(duì)CAN控制器提供差動(dòng)接收能力,并可以選擇三種不同的工作模式,如:待機(jī)、斜率控制和高速模式。該系統(tǒng)采用斜率模式,通信速率設(shè)定為1 Mb/s。
該模塊作為整個(gè)系統(tǒng)的通信核心模塊,起到了承上啟下的作用,電路設(shè)計(jì)的合理性決定了通信的成功與否,因此在設(shè)計(jì)電路過(guò)程中多方面考慮。在設(shè)計(jì)SJA1000與PCA82C250連接時(shí),為了增強(qiáng)抗干擾能力,SJA1000的TX0和RX0引腳并沒(méi)有直接與PCA82C250的TXD,RXD相連接,而是通過(guò)高速光耦6N137后與PCA82C250相連,這樣可以實(shí)現(xiàn)總線上各CAN節(jié)點(diǎn)之間的電氣隔離。但是,在使用6N137光耦時(shí)要特別注意,因其兩側(cè)必須使用完全獨(dú)立的兩組電源VCC和+5 V,否則光耦不起作用。在PCA82C250與CAN總線的連接部分,可以將CANH和CANL兩個(gè)引腳各自通過(guò)1個(gè)5 Ω的電阻與CAN總線相連,這樣可以起到限流的作用,以保護(hù)82C250免受過(guò)流的沖擊。同時(shí),可以在CANH和CANL與地信號(hào)(BGND)之間并聯(lián)2個(gè)30 pF的電容,以濾除總線上的高頻干擾,減少電磁輻射;還可以根據(jù)需要分別在CANH和CANL與地信號(hào)(BGND)之間接入1個(gè)保護(hù)二極管,以防止總線上較高的負(fù)電壓對(duì)PCA82C250造成損壞,另外在兩根CAN總線接入端與地之間分別接入一個(gè)防雷擊管,以防止兩端輸入與地之間瞬變干擾。該模塊電路如圖3所示(圖中VA=VB=+5 V)。
2.2 輸入模塊
該模塊作為系統(tǒng)調(diào)試和下位機(jī)操作的控制電路,采用傳統(tǒng)的開(kāi)關(guān)電路輸入控制方式,通過(guò)開(kāi)關(guān)斷開(kāi)和閉合過(guò)程,以改變處理器上相應(yīng)管腳的電平變化,主要作用是與軟件配合,設(shè)置系統(tǒng)參數(shù),以及控制系統(tǒng)的工作流程。為此,采用開(kāi)關(guān)按鍵與單片機(jī)相連的方式,并且由單片機(jī)掃描按鍵狀態(tài)。當(dāng)單片機(jī)掃描到某按鍵按下時(shí)就實(shí)行該按鍵所設(shè)定的功能,主要有兩種:一是發(fā)送數(shù)據(jù)幀給各個(gè)節(jié)點(diǎn);另一個(gè)是發(fā)送遠(yuǎn)程幀,請(qǐng)求某個(gè)節(jié)點(diǎn)發(fā)送自身的狀態(tài)和數(shù)據(jù),同時(shí)還可以切換系統(tǒng)程序執(zhí)行的位置,保證升級(jí)程序的下載和執(zhí)行。
2.3 顯示模塊
該模塊作為系統(tǒng)電路與操作人員的溝通橋梁,通過(guò)觀察顯示模塊,可以了解電路的工作情況以及系統(tǒng)工作是否穩(wěn)定,進(jìn)一步掌握系統(tǒng)工作進(jìn)程,同時(shí)還可以通過(guò)它幫助設(shè)置系統(tǒng)參數(shù)。
目前,顯示模塊的顯示方式多種多樣,各自有各自的特點(diǎn),對(duì)于選擇何種方式要根據(jù)系統(tǒng)的具體情況和要求。該系統(tǒng)顯示模塊的主要作用是完成系統(tǒng)的參數(shù)設(shè)置、系統(tǒng)工作進(jìn)程指示和通信過(guò)程中錯(cuò)誤指示等。因此,從操作者方便考慮,采用LCD和LED配合的顯示方式比較清晰。
2.4 I2C存儲(chǔ)模塊
該存儲(chǔ)模塊采用串行的E2PROM作為存儲(chǔ)器。增加該模塊的目的是為了保證一些系統(tǒng)參數(shù)和工作狀態(tài)的數(shù)據(jù),使其在系統(tǒng)掉電后仍可以保存。因此在下次系統(tǒng)重啟時(shí),可以不必重新設(shè)置系統(tǒng)參數(shù),同時(shí)也可以了解上次掉電前系統(tǒng)情況。
2.5 電源模塊
在總線節(jié)點(diǎn)接口模塊的設(shè)計(jì)中,還需要注意電源電壓與地信號(hào)的隔離。在圖3接口電路中采用3組不同電源電壓VCC,VA和VB。其中,VCC用于單片機(jī)、SJA1000數(shù)字邏輯和其他數(shù)字邏輯器件供電;VA用于SJA1000輸出驅(qū)動(dòng)器及6N137一側(cè)的供電;VB用于總線收發(fā)器PCA82C250及6N137另一側(cè)的供電。與此相對(duì)應(yīng),接口電路使用3組不同的地信號(hào)GND,AGND和BGND。在設(shè)計(jì)中,可以將VCC和VA,GND和AGND通過(guò)電磁珠在單點(diǎn)進(jìn)行連接,但VB,BGND與其他的電源信號(hào)之間應(yīng)該保持?jǐn)嚅_(kāi)的狀態(tài),否則6N137將起不到應(yīng)有的隔離作用。
2.6 系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)主要包括RS 232通信程序和CAN通信程序兩部分。其中,節(jié)點(diǎn)設(shè)計(jì)又以CAN通信程序設(shè)計(jì)為主。CAN通信程序主要由CAN初始化、數(shù)據(jù)發(fā)送、 數(shù)據(jù)接收等子程序模塊構(gòu)成。CAN初始化主要是設(shè)置CAN的通信參數(shù)。需要初始化的CAN控制寄存器有模式寄存器、時(shí)分寄存器、接收代碼寄存器、屏蔽寄存器、總線定時(shí)寄存器、輸出控制寄存器等。值得注意的是這些寄存器只能在CAN控制器處于復(fù)位狀態(tài)下才可寫(xiě)訪問(wèn)。發(fā)送數(shù)據(jù)程序把數(shù)據(jù)存儲(chǔ)區(qū)中待發(fā)送的數(shù)據(jù)取出,組成信息幀,并將主機(jī)的ID地址填入幀頭,然后將信息幀發(fā)送到 CAN控制器的發(fā)送緩沖區(qū)。在接收到主機(jī)的發(fā)送請(qǐng)求后,發(fā)送程序啟動(dòng)發(fā)送命令。從CAN控制器發(fā)送到總線的信息是由CAN控制器自動(dòng)完成的。從CAN總線到CAN控制器接收緩沖區(qū)的信息也是由CAN控制器自動(dòng)完成的。 接收程序只需從接收緩沖區(qū)讀取信息,并將其存儲(chǔ)在數(shù)據(jù)存儲(chǔ)區(qū)即可。系統(tǒng)通信軟件設(shè)計(jì)流程圖如圖4所示。
3 程序升級(jí)系統(tǒng)
P89C51是Philips公司生產(chǎn)的眾多單片機(jī)系列中的一種,該單片機(jī)是8位80C51單片機(jī)的派生產(chǎn)品。除了保留原有80C51指令系統(tǒng)和硬件結(jié)構(gòu)的大框架外,在其他多方面都發(fā)生了加強(qiáng)、擴(kuò)展和創(chuàng)新。
其中,在存儲(chǔ)容量大小上,片上RAM增加為1 024 B,片上FLASH/EPROM也增加為64 KB,并且在ROM的內(nèi)部添加了帶塊擦除的內(nèi)部程序存儲(chǔ)器,內(nèi)部固化了1 KB的BOOT ROM,包含一個(gè)低級(jí)的在系統(tǒng)編程子程序和一個(gè)默認(rèn)裝載程序,用戶可調(diào)用這些程序來(lái)實(shí)現(xiàn)在運(yùn)行中編程(IAP)。
在運(yùn)行中編程(IAP)指在用戶的應(yīng)用程序中對(duì)FLASH塊、FLASH寄存器、加密位等進(jìn)行擦除和編程等操作。其中,擦除和編程等操作子程序已經(jīng)在BOOT ROM固件中固化了,只要應(yīng)用程序調(diào)用即可。固件上有引導(dǎo)裝載程序,可以接收主機(jī)經(jīng)串口傳來(lái)的命令和數(shù)據(jù)(如經(jīng)PC機(jī)的RS 232口),這個(gè)固件放在64 KB程序存儲(chǔ)器的最高端,與片內(nèi)FLASH地址0FC00H~0FFFFH相覆蓋,需要用特殊功能寄存器AUXR1的ENBOOT位進(jìn)行固件和FLASH之間的切換,ENBOOT=1 范圍尋址到固件;ENBOOT=0 范圍尋址到FLASH。為了方便調(diào)用,給各種功能子程序提供了一個(gè)共用的函數(shù)調(diào)用入口,名為PGM-MTP,地址為0FFF0H。該函數(shù)具有相應(yīng)的輸入?yún)?shù)和返回參數(shù),如果需要,返回參數(shù)則可以放在ACC中,而擦除和編程所用的振蕩器頻率經(jīng)舍棄后為整數(shù)值,作為輸入?yún)?shù)放于寄存器R0中;同時(shí)為了區(qū)分各功能子程序而用的功能碼則放于寄存器R1中,功能碼如表1所示。
除此之外,還有部分的地址和數(shù)據(jù)也作為輸入?yún)?shù)存在DPTR中,一起作為函數(shù)參數(shù)被調(diào)用。但是,最終用戶程序中調(diào)用IAP操作的入口程序之前必須先設(shè)置ENBOOT,ENBOOT=1地址在0FC00H~0FFFFH范圍尋址到固件;ENBOOT=0地址在0FC00H~0FFFFH范圍尋址到FLASH。
在運(yùn)行中,編程(IAP)的最大意義在于能把采集到的大量數(shù)據(jù)固化到FLASH ROM中保存,以供以后處理。這種數(shù)據(jù)的保存跟程序的保存一樣安全,除非擦除操作,數(shù)據(jù)內(nèi)容是不會(huì)改變和消失的。因此,可以把需要更新的節(jié)點(diǎn)程序先進(jìn)行相應(yīng)的編譯,編譯后的程序以16進(jìn)制數(shù)據(jù)形式保存到FLASH ROM的特定地址中。同時(shí),再設(shè)置單片機(jī)中兩個(gè)特殊的FLASH寄存器:STATUS BYTE和BOOT VECTOR。上電復(fù)位,RST腳由有效正電平轉(zhuǎn)入下降沿時(shí),單片機(jī)自動(dòng)檢查STATUS BYTE的內(nèi)容,如果是0,則轉(zhuǎn)去0000H地址開(kāi)始執(zhí)行程序,這是正常運(yùn)行方式;如果不是0,則去BOOT VECTOR寄存器取其內(nèi)容,作為程序計(jì)數(shù)器的高字節(jié),低字節(jié)固定為00H,芯片出廠時(shí)給BOOT VECTOR寄存器預(yù)置為缺省值0FCH,相當(dāng)于0FC00H地址,該地址訪問(wèn)的內(nèi)容最終還是由上述的ENBOOT來(lái)決定,這樣就可以使單片機(jī)執(zhí)行更新程序。
4 上位機(jī)通信節(jié)點(diǎn)設(shè)計(jì)
該上位機(jī)節(jié)點(diǎn)設(shè)計(jì)軟件采用高級(jí)語(yǔ)言Visual Basic(VB)編寫(xiě)完成。主要完成的任務(wù)是通過(guò)對(duì)上位機(jī)的操作實(shí)現(xiàn)向下位機(jī)發(fā)送升級(jí)程序工作。硬件電路的實(shí)現(xiàn)采用標(biāo)準(zhǔn)的RS 232總線接口,而軟件設(shè)計(jì)中數(shù)據(jù)的下傳采用主動(dòng)發(fā)送方式,要求下位機(jī)處于等待接收狀態(tài)時(shí)進(jìn)行。數(shù)據(jù)串行通信,利用VB的串行控件Mscomm實(shí)現(xiàn)系統(tǒng)的串行通訊。該控件屏蔽了通信過(guò)程中的底層操作,通過(guò)設(shè)置、監(jiān)視Mscomm控件的屬性和事件,再結(jié)合Timer控件,即可完成對(duì)串行口的初始化和數(shù)據(jù)的輸入/輸出工作。Mscomm控件的主要屬性如下:
(1) Commport 設(shè)置并返回通訊端口號(hào)。端口號(hào)可以設(shè)置為1~16的任何數(shù);
(2) Setting 設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位;
(3) Portopen 設(shè)置并返回通訊端口的狀態(tài),也可以打開(kāi)和關(guān)閉端口;
(4) Input 從接收緩沖區(qū)返回和刪除字符,該屬性在運(yùn)行時(shí)為只讀;
(5) InputLen 設(shè)置并返回每次Input屬性從接收緩沖區(qū)中讀取的字符數(shù);
(6) Output 向傳送緩沖區(qū)寫(xiě)數(shù)據(jù),要傳送的數(shù)據(jù)可是文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù);
(7) CommEvent 返回最近的通信事件或錯(cuò)誤。只要有通信錯(cuò)誤或事件發(fā)生錯(cuò)誤時(shí)就會(huì)產(chǎn)生Oncomm事件。CommEvent屬性中存有該錯(cuò)誤或事件的數(shù)值代碼。
5 結(jié) 語(yǔ)
以上是該設(shè)計(jì)的簡(jiǎn)要介紹,通過(guò)多次實(shí)驗(yàn)CAN總線節(jié)點(diǎn)間的通信系統(tǒng)工作穩(wěn)定,沒(méi)有發(fā)生總線超載現(xiàn)象,總線無(wú)錯(cuò)誤,引入光耦隔離之后大大提高了通信的抗干擾能力,達(dá)到理想的效果,并且采用了錯(cuò)誤標(biāo)識(shí)顯示,使系統(tǒng)更加可靠,系統(tǒng)升級(jí)更加成功。
參考文獻(xiàn)
[1]鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2002.
[2]汪晉寬,馬淑華,吳雨川.工業(yè)網(wǎng)絡(luò)技術(shù)[M].北京:北京郵電大學(xué)出版社,2007.
[3]饒運(yùn)濤,鄒繼軍,鄭勇蕓.現(xiàn)場(chǎng)總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2007.
[4]陸前鋒.基于SJA1000的CAN智能控制系統(tǒng)設(shè)計(jì)[J].自動(dòng)化設(shè)計(jì)與應(yīng)用,2003,22(1):61-64.
[5]Philips Semiconductors.SJA1000 Stand-alone CAN Controller [Z].1999.
[6]Philips Semiconductors.PCA82C250 CAN Controller[Z].1999.
[7]孟傳良.工控系統(tǒng)的通信抗干擾技術(shù)[J].貴州工業(yè)大學(xué)學(xué)報(bào),1999(1):75-77.
[8]李江全,張麗,岑紅蕾.Visual Basic串口通信與測(cè)控應(yīng)用技術(shù)實(shí)戰(zhàn)詳解[M].北京:人民郵電出版社,2007.
[9]李長(zhǎng)林.Visual Basic串口通信技術(shù)與典型實(shí)例[M].北京:清華大學(xué)出版社,2006.
[10]李朝青,劉艷玲.單片機(jī)與PC機(jī)網(wǎng)絡(luò)通信技術(shù)[M].北京: 北京航空航天大學(xué)出版社,2007.
[11]南金瑞,劉瀾波.汽車單片機(jī)及車載總線技術(shù)[M].北京:北京理工大學(xué)出版社,2005.