楊元挺 卓樹峰
摘 要:CAN總線是一種應用廣泛的實時性現場總線。介紹一種基于CAN總線的遠程系統軟件升級設計方案,解決了遠距離系統升級的困難。該系統采用MCU控制,在CAN總線上,通過PC機控制各個智能節點,實現數據和程序的更新升級。智能節點采用具有IAP功能的MCU構成,利用IAP技術對MCU內部的存儲器進行在系統中編程,這樣可以做到數據及時保存,即使掉電,數據也不丟失,避免脫機編程帶來的麻煩,從而在網絡總線上實現了遠距離的程序下載。
關鍵詞:CAN總線;現場總線;系統升級;智能節點;IAP技術
中圖分類號:TP336文獻標識碼:A
文章編號: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 引 言
控制器局域網(Controllers Area Network,CAN)總線是國際上應用最廣泛的現場總線之一。它最早由德國Bosch公司推出,CAN通信協議是一種用于汽車內部測量與執行部件之間的數據通信協議。作為一種技術先進,可靠性高,功能完善,成本合理的遠程網絡通訊控制方式,CAN總線已被廣泛應用于各個自動化控制系統中。例如,在汽車電子、自動控制、智能大廈、電子系統、安防監控等各領域中,CAN總線具有不可比擬的優越性?;贑AN總線的這種優越性,提出一種基于CAN總線遠程系統升級的設計方案,該系統主要解決了智能終端的系統軟件遠程升級和維護困難的問題。隨著自動化水平的不斷發展,單片機的應用也越來越廣,在一些情況下,產品系統的更新升級在所難免,尤其是對遠距離節點且固化在產品上的MCU的軟件升級更加困難,一般常規的處理辦法需要將單片機產品進行收回才能實現。但是,如果有些遠程設備本身留有遠程通訊的方式:例如某些遠程數據傳輸模塊,為了上報數據,總會留有通訊接口,比如RS 232,RS 485或者局域網接口;又或者某些車載定位設備,為了與監控中心通訊,會留有相應的通訊方式。在這種情況下就可以利用其現有的通訊方式,并與CAN總線配合使用,實現對其MCU內部程序進行升級而不需要收回產品。
1 系統總體結構
該系統采用分布式設計方案。首先建立CAN總線網絡,CAN總線通信作為串行通信方式中的一種,與其他通信方式比較,有它自身的通信特點。其中,在報文傳送中不包含目標地址,而是以全總線網絡廣播為基礎,各節點根據報文中反映數據性質的標識符過濾報文,并接收該節點應該接收的報文,丟棄不應該接收的報文。此外,CAN總線通信還強化了對數據安全性的關注,可以滿足控制系統及其他具有較高安全要求的應用場合。該系統總線上的各個智能節點都是一個獨立的終端,可以分別進行電機驅動、傳感器信號的接收處理和PC機的控制等工作,并且各個節點之間是相互平等的,可以相互獨立通信,同時也可以將其中任意一個節點作為總線上其他模塊升級的控制節點,因此該節點可以利用PC機作為上位機,實現人機對話,對總線上的各個節點進行遠程操作和程序升級等。為此,該系統框圖如圖1所示。

2 CAN總線節點設計
節點是總線網絡上信息的接收和發送站,所謂的智能節點是由微處理器和可編程的CAN控制芯片等組成,兩者合二為一;同時也可以由獨立的通信控制芯片與單片機接口合成。兩種方式各有其優缺點,但從靈活性考慮,后者更為合適。該系統中節點設計是基于SJA1000的CAN總線接口模塊,模塊采用P89C51RD單片機作為處理核心,采用PCA82C250作為CAN總線收發器,使整個模塊具有較好的通用性及較強的可擴展性。其中,P89C51RD單片機在運用中編程(IAP)的功能更有利于節點程序升級。整個節點設計包括:輸入模塊、顯示模塊、電源模塊、I2C存儲模塊、CAN通信控制和CAN總線收發器,節點框圖如圖2所示。

2.1 CAN通信控制器和CAN總線收發器
CAN接口電路由CAN通信控制器SJA1000、CAN總線收發器PCA82C250和高速光耦6N137等組成。SJA1000作為獨立CAN總線控制器,具有完成CAN通信協議所要求的全部特性,經過簡單總線連接的SJA1000,可完成CAN總線的物理層和數據鏈路層中所有功能。PCA82C250是CAN控制器與物理總線之間的接口,起到CAN總線收發器的作用。它對總線提供差動發送能力,對CAN控制器提供差動接收能力,并可以選擇三種不同的工作模式,如:待機、斜率控制和高速模式。該系統采用斜率模式,通信速率設定為1 Mb/s。
該模塊作為整個系統的通信核心模塊,起到了承上啟下的作用,電路設計的合理性決定了通信的成功與否,因此在設計電路過程中多方面考慮。在設計SJA1000與PCA82C250連接時,為了增強抗干擾能力,SJA1000的TX0和RX0引腳并沒有直接與PCA82C250的TXD,RXD相連接,而是通過高速光耦6N137后與PCA82C250相連,這樣可以實現總線上各CAN節點之間的電氣隔離。但是,在使用6N137光耦時要特別注意,因其兩側必須使用完全獨立的兩組電源VCC和+5 V,否則光耦不起作用。在PCA82C250與CAN總線的連接部分,可以將CANH和CANL兩個引腳各自通過1個5 Ω的電阻與CAN總線相連,這樣可以起到限流的作用,以保護82C250免受過流的沖擊。同時,可以在CANH和CANL與地信號(BGND)之間并聯2個30 pF的電容,以濾除總線上的高頻干擾,減少電磁輻射;還可以根據需要分別在CANH和CANL與地信號(BGND)之間接入1個保護二極管,以防止總線上較高的負電壓對PCA82C250造成損壞,另外在兩根CAN總線接入端與地之間分別接入一個防雷擊管,以防止兩端輸入與地之間瞬變干擾。該模塊電路如圖3所示(圖中VA=VB=+5 V)。
2.2 輸入模塊
該模塊作為系統調試和下位機操作的控制電路,采用傳統的開關電路輸入控制方式,通過開關斷開和閉合過程,以改變處理器上相應管腳的電平變化,主要作用是與軟件配合,設置系統參數,以及控制系統的工作流程。為此,采用開關按鍵與單片機相連的方式,并且由單片機掃描按鍵狀態。當單片機掃描到某按鍵按下時就實行該按鍵所設定的功能,主要有兩種:一是發送數據幀給各個節點;另一個是發送遠程幀,請求某個節點發送自身的狀態和數據,同時還可以切換系統程序執行的位置,保證升級程序的下載和執行。
2.3 顯示模塊
該模塊作為系統電路與操作人員的溝通橋梁,通過觀察顯示模塊,可以了解電路的工作情況以及系統工作是否穩定,進一步掌握系統工作進程,同時還可以通過它幫助設置系統參數。
目前,顯示模塊的顯示方式多種多樣,各自有各自的特點,對于選擇何種方式要根據系統的具體情況和要求。該系統顯示模塊的主要作用是完成系統的參數設置、系統工作進程指示和通信過程中錯誤指示等。因此,從操作者方便考慮,采用LCD和LED配合的顯示方式比較清晰。

2.4 I2C存儲模塊
該存儲模塊采用串行的E2PROM作為存儲器。增加該模塊的目的是為了保證一些系統參數和工作狀態的數據,使其在系統掉電后仍可以保存。因此在下次系統重啟時,可以不必重新設置系統參數,同時也可以了解上次掉電前系統情況。
2.5 電源模塊
在總線節點接口模塊的設計中,還需要注意電源電壓與地信號的隔離。在圖3接口電路中采用3組不同電源電壓VCC,VA和VB。其中,VCC用于單片機、SJA1000數字邏輯和其他數字邏輯器件供電;VA用于SJA1000輸出驅動器及6N137一側的供電;VB用于總線收發器PCA82C250及6N137另一側的供電。與此相對應,接口電路使用3組不同的地信號GND,AGND和BGND。在設計中,可以將VCC和VA,GND和AGND通過電磁珠在單點進行連接,但VB,BGND與其他的電源信號之間應該保持斷開的狀態,否則6N137將起不到應有的隔離作用。
2.6 系統軟件設計
軟件設計主要包括RS 232通信程序和CAN通信程序兩部分。其中,節點設計又以CAN通信程序設計為主。CAN通信程序主要由CAN初始化、數據發送、 數據接收等子程序模塊構成。CAN初始化主要是設置CAN的通信參數。需要初始化的CAN控制寄存器有模式寄存器、時分寄存器、接收代碼寄存器、屏蔽寄存器、總線定時寄存器、輸出控制寄存器等。值得注意的是這些寄存器只能在CAN控制器處于復位狀態下才可寫訪問。發送數據程序把數據存儲區中待發送的數據取出,組成信息幀,并將主機的ID地址填入幀頭,然后將信息幀發送到 CAN控制器的發送緩沖區。在接收到主機的發送請求后,發送程序啟動發送命令。從CAN控制器發送到總線的信息是由CAN控制器自動完成的。從CAN總線到CAN控制器接收緩沖區的信息也是由CAN控制器自動完成的。 接收程序只需從接收緩沖區讀取信息,并將其存儲在數據存儲區即可。系統通信軟件設計流程圖如圖4所示。
3 程序升級系統
P89C51是Philips公司生產的眾多單片機系列中的一種,該單片機是8位80C51單片機的派生產品。除了保留原有80C51指令系統和硬件結構的大框架外,在其他多方面都發生了加強、擴展和創新。

其中,在存儲容量大小上,片上RAM增加為1 024 B,片上FLASH/EPROM也增加為64 KB,并且在ROM的內部添加了帶塊擦除的內部程序存儲器,內部固化了1 KB的BOOT ROM,包含一個低級的在系統編程子程序和一個默認裝載程序,用戶可調用這些程序來實現在運行中編程(IAP)。
在運行中編程(IAP)指在用戶的應用程序中對FLASH塊、FLASH寄存器、加密位等進行擦除和編程等操作。其中,擦除和編程等操作子程序已經在BOOT ROM固件中固化了,只要應用程序調用即可。固件上有引導裝載程序,可以接收主機經串口傳來的命令和數據(如經PC機的RS 232口),這個固件放在64 KB程序存儲器的最高端,與片內FLASH地址0FC00H~0FFFFH相覆蓋,需要用特殊功能寄存器AUXR1的ENBOOT位進行固件和FLASH之間的切換,ENBOOT=1 范圍尋址到固件;ENBOOT=0 范圍尋址到FLASH。為了方便調用,給各種功能子程序提供了一個共用的函數調用入口,名為PGM-MTP,地址為0FFF0H。該函數具有相應的輸入參數和返回參數,如果需要,返回參數則可以放在ACC中,而擦除和編程所用的振蕩器頻率經舍棄后為整數值,作為輸入參數放于寄存器R0中;同時為了區分各功能子程序而用的功能碼則放于寄存器R1中,功能碼如表1所示。

除此之外,還有部分的地址和數據也作為輸入參數存在DPTR中,一起作為函數參數被調用。但是,最終用戶程序中調用IAP操作的入口程序之前必須先設置ENBOOT,ENBOOT=1地址在0FC00H~0FFFFH范圍尋址到固件;ENBOOT=0地址在0FC00H~0FFFFH范圍尋址到FLASH。
在運行中,編程(IAP)的最大意義在于能把采集到的大量數據固化到FLASH ROM中保存,以供以后處理。這種數據的保存跟程序的保存一樣安全,除非擦除操作,數據內容是不會改變和消失的。因此,可以把需要更新的節點程序先進行相應的編譯,編譯后的程序以16進制數據形式保存到FLASH ROM的特定地址中。同時,再設置單片機中兩個特殊的FLASH寄存器:STATUS BYTE和BOOT VECTOR。上電復位,RST腳由有效正電平轉入下降沿時,單片機自動檢查STATUS BYTE的內容,如果是0,則轉去0000H地址開始執行程序,這是正常運行方式;如果不是0,則去BOOT VECTOR寄存器取其內容,作為程序計數器的高字節,低字節固定為00H,芯片出廠時給BOOT VECTOR寄存器預置為缺省值0FCH,相當于0FC00H地址,該地址訪問的內容最終還是由上述的ENBOOT來決定,這樣就可以使單片機執行更新程序。
4 上位機通信節點設計
該上位機節點設計軟件采用高級語言Visual Basic(VB)編寫完成。主要完成的任務是通過對上位機的操作實現向下位機發送升級程序工作。硬件電路的實現采用標準的RS 232總線接口,而軟件設計中數據的下傳采用主動發送方式,要求下位機處于等待接收狀態時進行。數據串行通信,利用VB的串行控件Mscomm實現系統的串行通訊。該控件屏蔽了通信過程中的底層操作,通過設置、監視Mscomm控件的屬性和事件,再結合Timer控件,即可完成對串行口的初始化和數據的輸入/輸出工作。Mscomm控件的主要屬性如下:
(1) Commport 設置并返回通訊端口號。端口號可以設置為1~16的任何數;
(2) Setting 設置并返回波特率、奇偶校驗、數據位、停止位;
(3) Portopen 設置并返回通訊端口的狀態,也可以打開和關閉端口;
(4) Input 從接收緩沖區返回和刪除字符,該屬性在運行時為只讀;
(5) InputLen 設置并返回每次Input屬性從接收緩沖區中讀取的字符數;
(6) Output 向傳送緩沖區寫數據,要傳送的數據可是文本數據或二進制數據;
(7) CommEvent 返回最近的通信事件或錯誤。只要有通信錯誤或事件發生錯誤時就會產生Oncomm事件。CommEvent屬性中存有該錯誤或事件的數值代碼。
5 結 語
以上是該設計的簡要介紹,通過多次實驗CAN總線節點間的通信系統工作穩定,沒有發生總線超載現象,總線無錯誤,引入光耦隔離之后大大提高了通信的抗干擾能力,達到理想的效果,并且采用了錯誤標識顯示,使系統更加可靠,系統升級更加成功。
參考文獻
[1]鄔寬明.CAN總線原理和應用系統設計[M].北京:北京航空航天大學出版社,2002.
[2]汪晉寬,馬淑華,吳雨川.工業網絡技術[M].北京:北京郵電大學出版社,2007.
[3]饒運濤,鄒繼軍,鄭勇蕓.現場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2007.
[4]陸前鋒.基于SJA1000的CAN智能控制系統設計[J].自動化設計與應用,2003,22(1):61-64.
[5]Philips Semiconductors.SJA1000 Stand-alone CAN Controller [Z].1999.
[6]Philips Semiconductors.PCA82C250 CAN Controller[Z].1999.
[7]孟傳良.工控系統的通信抗干擾技術[J].貴州工業大學學報,1999(1):75-77.
[8]李江全,張麗,岑紅蕾.Visual Basic串口通信與測控應用技術實戰詳解[M].北京:人民郵電出版社,2007.
[9]李長林.Visual Basic串口通信技術與典型實例[M].北京:清華大學出版社,2006.
[10]李朝青,劉艷玲.單片機與PC機網絡通信技術[M].北京: 北京航空航天大學出版社,2007.
[11]南金瑞,劉瀾波.汽車單片機及車載總線技術[M].北京:北京理工大學出版社,2005.