李起偉
(煤炭科學(xué)技術(shù)研究院有限公司,北京 100013)
?
基于RTThread的CAN轉(zhuǎn)以太網(wǎng)網(wǎng)關(guān)的設(shè)計(jì)
李起偉
(煤炭科學(xué)技術(shù)研究院有限公司,北京 100013)
摘要:為了解決煤礦數(shù)字安全監(jiān)控系統(tǒng)中CAN總線網(wǎng)絡(luò)無法與以太網(wǎng)直接進(jìn)行數(shù)據(jù)交互的問題,結(jié)合煤礦安全監(jiān)控系統(tǒng)的應(yīng)用要求,設(shè)計(jì)了一種以STM32F107VC為控制核心,基于RT-Thread實(shí)時(shí)操作系統(tǒng)的嵌入式CAN轉(zhuǎn)以太網(wǎng)網(wǎng)關(guān)。詳細(xì)介紹了網(wǎng)關(guān)的硬件和軟件設(shè)計(jì),并且為了提高數(shù)據(jù)傳輸?shù)目煽啃院头€(wěn)定性,使用了大容量的外部數(shù)據(jù)存儲(chǔ)器。經(jīng)實(shí)際測(cè)試,網(wǎng)關(guān)實(shí)現(xiàn)了CAN總線網(wǎng)絡(luò)與以太網(wǎng)的互連互通,提高了安全監(jiān)控系統(tǒng)通信的靈活性和可靠性。
關(guān)鍵詞:CAN總線;數(shù)據(jù)交換;網(wǎng)關(guān);RT-Thread;STM32F107VC
引言
相對(duì)其他現(xiàn)場(chǎng)總線而言,CAN總線具有傳輸可靠、實(shí)時(shí)性高、非破壞總線仲裁等優(yōu)勢(shì),在煤礦領(lǐng)域得到廣泛應(yīng)用[1]。
CAN現(xiàn)場(chǎng)總線作為一種面向工業(yè)底層控制的通信網(wǎng)絡(luò),優(yōu)點(diǎn)雖多,但也有其局限性:首先CAN總線在波特率≤5 kbps的情況下,其最大傳輸距離為10 km,而且波特率越高,傳輸距離越短[2],顯然不能提供井下與地面數(shù)據(jù)傳輸時(shí)需要的帶寬和傳輸距離;其次,若使用以太網(wǎng)與地面進(jìn)行數(shù)據(jù)傳輸,則導(dǎo)致CAN總線不能直接與井下以太網(wǎng)進(jìn)行數(shù)據(jù)交互,無法實(shí)現(xiàn)遠(yuǎn)程信息共享;再次,它不易與上位機(jī)直接通信。因此若想實(shí)現(xiàn)兩種網(wǎng)絡(luò)互聯(lián)互通,需要外加轉(zhuǎn)換設(shè)備。
本文結(jié)合煤礦安全監(jiān)控系統(tǒng)的應(yīng)用要求,設(shè)計(jì)了一種基于RT-Thread實(shí)時(shí)操作系統(tǒng)的嵌入式CAN轉(zhuǎn)以太網(wǎng)網(wǎng)關(guān),能夠使兩網(wǎng)數(shù)據(jù)無縫融合。本網(wǎng)關(guān)采用透?jìng)髂J?,傳輸可靠、配置?jiǎn)單,具有斷網(wǎng)時(shí)數(shù)據(jù)存儲(chǔ)功能,可保證數(shù)據(jù)不丟失,適用于煤礦井下通信環(huán)境惡劣、網(wǎng)絡(luò)易破壞的工作環(huán)境。
1CAN轉(zhuǎn)以太網(wǎng)網(wǎng)關(guān)硬件設(shè)計(jì)
本網(wǎng)關(guān)主要由電源電路、主控單元、CAN總線收發(fā)電路、10/100M自適應(yīng)的以太網(wǎng)收發(fā)電路及存儲(chǔ)電路5部分組成。
1.1電源電路
網(wǎng)關(guān)采用DC 21 V本安型電源供電,先經(jīng)過一級(jí)緩啟動(dòng)電路,再經(jīng)過一個(gè)DC-DC降低模塊,把DC 21 V降為DC 3.3 V,供給主控單片機(jī)、CAN總線驅(qū)動(dòng)電路及10/100M自適應(yīng)的以太網(wǎng)收發(fā)器電路使用,其中緩啟動(dòng)電路大大降低了網(wǎng)關(guān)在上電啟動(dòng)時(shí)的沖擊電流,保證了網(wǎng)關(guān)穩(wěn)定、安全、可靠地啟動(dòng),電源電路框圖如圖1所示。
圖1 電源電路框圖
1.2主控單元
網(wǎng)關(guān)主控單元采用意法半導(dǎo)體的互聯(lián)型微控制器STM32F107VC作為主控制器,其具有ARM 32位的Cortex-M3內(nèi)核,最高工作頻率為72 MHz,片上資源極為豐富,具有5個(gè)USART接口和3個(gè)SPI端口,另外還具有2個(gè)CAN2.0B接口和1個(gè)10/100M以太網(wǎng)MAC,并且此以太網(wǎng)MAC支持MII和RMII接口[3]。
1.3CAN總線收發(fā)電路
由于微控制器STM32F107VC內(nèi)部已經(jīng)集成有2個(gè)支持CAN2.0B協(xié)議的CAN控制器,所以只需要在微控制器外圍加上CAN收發(fā)電路即可。
網(wǎng)關(guān)采用廣州致遠(yuǎn)電子的CTM8251AT作為CAN收發(fā)器,CTM8251AT是一款隔離收發(fā)器,隔離電壓為2 500 V,并且具有一定的抗電磁干擾功能,單網(wǎng)絡(luò)至少可連接110 個(gè)節(jié)點(diǎn),支持5 Kbps~1 Mbps的波特率,CAN收發(fā)器電路如圖2所示。
圖2 CAN收發(fā)器電路
1.410/100M自適應(yīng)以太網(wǎng)收發(fā)電路
使用TI公司的DP83848I作為以太網(wǎng)PHY控制器,DP83848I同時(shí)支持MII (Media Independent Interface) 介質(zhì)無關(guān)接口和RMII(Reduced Media Independent Interface),即簡(jiǎn)化的介質(zhì)無關(guān)接口,兩種接口均支持10M或100M的操作。
MII是指不用考慮傳輸媒介是銅軸、光纖還是電纜等,因?yàn)檫@些媒介處理的相關(guān)工作都由PHY或者M(jìn)AC芯片來完成。一個(gè)MII接口由14根數(shù)據(jù)線組成,總線時(shí)鐘為25 MHz,RMII接口是從MII簡(jiǎn)化而來,需要的數(shù)據(jù)線為MII接口的一半,只需要7根數(shù)據(jù)線即可,總線時(shí)鐘為50 MHz[4-5]。
在本網(wǎng)關(guān)中,DP83848I設(shè)置為RMII接口,50 MHz的總線時(shí)鐘由STM32F107VC的MCO引腳提供。
采用中山漢仁電子的HR601680作為網(wǎng)絡(luò)隔離變壓器,可起到增強(qiáng)信號(hào)、延長傳輸距離的作用,更重要的是可使芯片端與外部隔離,抗干擾能力大大增強(qiáng),起到了一定的保護(hù)作用。以太網(wǎng)收發(fā)電路如圖3所示。
圖3 以太網(wǎng)收發(fā)電路
1.5數(shù)據(jù)存儲(chǔ)電路
在實(shí)際使用中,要存儲(chǔ)設(shè)備的配置信息,如IP地址、DNS地址、CAN總線波特率等關(guān)鍵信息,以便下次啟動(dòng)時(shí)可直接加載,因此在本設(shè)備中加入了一片SPI Flash,此存儲(chǔ)芯片采用的是Winbond公司的W25Q16VSSI,內(nèi)置有16 Mb的存儲(chǔ)容量,通過SPI總線與STM32F107VC的SPI1接口通信,SPI Flash存儲(chǔ)電路如圖4所示。
一般情況下,以太網(wǎng)的通信速度是高于CAN的通信速度的,因此在將以太網(wǎng)數(shù)據(jù)轉(zhuǎn)換為CAN總線數(shù)據(jù)時(shí),要加一定的數(shù)據(jù)緩存,防止數(shù)據(jù)丟失,此功能由Microchip公司的23LC1024ISN來實(shí)現(xiàn),這是一片SPI SRAM,存儲(chǔ)容量為1 Mb,可存儲(chǔ)約1000余條CAN擴(kuò)展幀數(shù)據(jù)。STM32F107VC通過SPI2接口將數(shù)據(jù)存儲(chǔ)到23LC1024ISN中,SPI SRAM存儲(chǔ)電路如圖5所示。
圖4 SPI Flash存儲(chǔ)電路
圖5 SPI SRAM存儲(chǔ)電路
2網(wǎng)關(guān)軟件設(shè)計(jì)
由于網(wǎng)關(guān)對(duì)數(shù)據(jù)轉(zhuǎn)發(fā)的實(shí)時(shí)性要求很高,所以需要實(shí)時(shí)操作系統(tǒng)來完成數(shù)據(jù)轉(zhuǎn)發(fā)和任務(wù)調(diào)度,在本網(wǎng)關(guān)中,使用的是RT-Thread實(shí)時(shí)操作系統(tǒng),這是一款開源的、產(chǎn)品級(jí)的硬實(shí)時(shí)操作系統(tǒng),它具備非常優(yōu)異的實(shí)時(shí)性、穩(wěn)定性、可裁減性,當(dāng)進(jìn)行最小配置時(shí),內(nèi)核體積可以被3 KB ROM 和1 KB RAM 占用,它包含實(shí)時(shí)嵌入式操作系統(tǒng)相關(guān)的各個(gè)組件:實(shí)時(shí)操作系統(tǒng)內(nèi)核、TCP/IP協(xié)議棧、文件系統(tǒng)、libc接口、圖形界面等[6]。
RT-Thread與其他嵌入式實(shí)時(shí)操作系統(tǒng)相比,有著以下優(yōu)勢(shì)[7]:
① 可自由配置和裁減。諸多功能組件可以自由使能和失能,包括文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、設(shè)備外設(shè)等都可以根據(jù)需要自由配置。
此外,由于內(nèi)核對(duì)象機(jī)制的引入,內(nèi)核內(nèi)部各種對(duì)象組件可以自由裁減。包括各種進(jìn)程同步和通信方式,如互斥量、信號(hào)量、郵箱、消息隊(duì)列等都可以根據(jù)需要自由裁減。另外,還支持多種內(nèi)存管理方式,減少內(nèi)存的碎片化。
② 可移植性強(qiáng)。系統(tǒng)采用內(nèi)核與 BSP 分離的方式,其內(nèi)核采用標(biāo)準(zhǔn) C 語言編寫,具備優(yōu)秀的可移植性,適合于多種體系結(jié)構(gòu)和編譯器。抽象出的 BSP 層采用標(biāo)準(zhǔn) C 和匯編混合編寫,目前 RT-Thread 已經(jīng)支持STM32F107VC。
③ 可靠性高。內(nèi)核和用戶線程的調(diào)度、各線程間的通信等功能是內(nèi)核來完成的,某一個(gè)功能組件的崩潰不會(huì)影響到其他組件,很多時(shí)候內(nèi)核的崩潰是由于驅(qū)動(dòng)程序出錯(cuò)導(dǎo)致的,在RT-Thread 中,驅(qū)動(dòng)程序的出錯(cuò)不會(huì)導(dǎo)致內(nèi)核崩潰,因而具備了較高的可靠性。
2.2TCP/IP協(xié)議棧
在本應(yīng)用中,采用的是一種輕型TCP/IP協(xié)議棧——LwIP(Light-weight IP),LwIP TCP/IP實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM的占用,一般它只需要幾十KB的RAM和40 KB左右的ROM就可以運(yùn)行,這使LwIP協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。LwIP的特性如下:支持多網(wǎng)絡(luò)接口下的IP轉(zhuǎn)發(fā),支持ICMP協(xié)議,包括實(shí)驗(yàn)性擴(kuò)展的UDP(用戶數(shù)據(jù)報(bào)協(xié)議),包括阻塞控制、RTT估算、快速恢復(fù)和快速轉(zhuǎn)發(fā)的TCP(傳輸控制協(xié)議),提供專門的內(nèi)部回調(diào)接口(RAW API)用于提高應(yīng)用程序性能,并提供了可選擇的Berkeley接口API[8]。
RT-Thread實(shí)時(shí)操作系統(tǒng)采用了LwIP做為TCP/IP協(xié)議棧,同時(shí)根據(jù)小型設(shè)備的特點(diǎn)對(duì)LwIP進(jìn)行了再次優(yōu)化,使其資源占用體積進(jìn)一步縮小,RAM 的占用可縮小到5 KB左右。
在本網(wǎng)關(guān)中,傳輸層協(xié)議采用的是UDP傳輸方式,即用戶數(shù)據(jù)包協(xié)議,UDP 不是一種基于連接的通信方式,它不能保證發(fā)往目標(biāo)主機(jī)的數(shù)據(jù)包被正確接收,所以在對(duì)可靠性要求較高的場(chǎng)合需要通過上層的通信協(xié)議來保證數(shù)據(jù)正確。但是,因?yàn)閁DP 方式是一種較簡(jiǎn)單的通信方式,它不會(huì)增加過多的額外通信量,可以提供比 TCP 方式更高的通信速度,以保證數(shù)據(jù)包的實(shí)時(shí)性。事實(shí)上,在網(wǎng)絡(luò)環(huán)境比較簡(jiǎn)單,網(wǎng)絡(luò)通信負(fù)載不是太大的情況下,UDP 工作方式并不容易出錯(cuò)[9]。工作在這種方式下,設(shè)備的地位都是相等的,不存在服務(wù)器和客戶端。
2.3主要線程設(shè)計(jì)
圖6 系統(tǒng)初始化線程流程圖
為實(shí)現(xiàn)CAN總線與以太網(wǎng)之間的數(shù)據(jù)互通,主要設(shè)計(jì)了3個(gè)線程,分別是系統(tǒng)初始化線程、以太網(wǎng)發(fā)送線程和CAN發(fā)送線程。
① 系統(tǒng)初始化線程的主要功能為上電時(shí)初始化必要的外設(shè)、內(nèi)核組件,以及LwIP和Finsh Shell等系統(tǒng)組件,流程圖如圖6所示。
② 以太網(wǎng)發(fā)送線程的主要功能是從CAN總線接收到數(shù)據(jù)后,將數(shù)據(jù)整定為特定格式,并存放在環(huán)形緩存中,再去獲取可用的UDP Socket,若成功則用互斥鎖上鎖,再調(diào)用LwIP提供的API函數(shù)lwip_sendto()完成數(shù)據(jù)的發(fā)送并釋放這個(gè)互斥鎖。流程圖如圖7所示。
③ CAN發(fā)送線程的主要功能是從以太網(wǎng)接收數(shù)據(jù)后,把數(shù)據(jù)整定為一定格式并存儲(chǔ)到環(huán)形緩存中,然后去獲取CAN設(shè)備狀態(tài),若CAN設(shè)備空閑可用,則給CAN設(shè)備上鎖并啟動(dòng)發(fā)送,數(shù)據(jù)發(fā)送完成后釋放互斥鎖,以便CAN設(shè)備下次可用。具體流程圖如圖8所示。
圖7 以太網(wǎng)發(fā)送線程流程圖
圖8 CAN發(fā)送線程流程圖
結(jié)語
在設(shè)計(jì)CAN總線轉(zhuǎn)以太網(wǎng)網(wǎng)關(guān)過程中,為了防止數(shù)據(jù)丟失,使用了一片外部SRAM作為數(shù)據(jù)緩存,并采用環(huán)形存儲(chǔ)的方式提高了數(shù)據(jù)緩存的利用率。為加快數(shù)據(jù)的接收和發(fā)磅速度,減小CAN網(wǎng)絡(luò)和以太網(wǎng)數(shù)據(jù)接收與發(fā)送的時(shí)間差,使用了UDP數(shù)據(jù)傳輸模式,使數(shù)據(jù)延遲時(shí)間減到最小,并加入了一定的數(shù)據(jù)檢驗(yàn)功能,提高了數(shù)據(jù)的正確率。
通過本網(wǎng)關(guān)可使CAN總線與以太網(wǎng)兩網(wǎng)互連互通,且通信安全可靠,可應(yīng)用于煤礦安全監(jiān)控系統(tǒng)、多媒體調(diào)度通信、礦井人員管理系統(tǒng)甚至煤礦應(yīng)急救援系統(tǒng)中,提高了礦井?dāng)?shù)據(jù)通信的靈活性和可靠性。經(jīng)測(cè)試,在實(shí)際應(yīng)用中,本網(wǎng)關(guān)響應(yīng)速度快、誤碼率極低,完全可以滿足煤礦井下的通信要求。
參考文獻(xiàn)
[1] 朱小三.基于CAN總線的煤礦安全監(jiān)控系統(tǒng)的研究與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2007.
[2] 周霞,魏臻,胡曉健.基于CAN總線的煤礦安全監(jiān)控系統(tǒng)網(wǎng)絡(luò)通信設(shè)計(jì)[J].工礦自動(dòng)化,2005(3):39-40.
[3] 意法半導(dǎo)體(中國)投資有限公司.STM32 Reference Manual(RM0008)[EB/OL].(2010-01-10)[2015-12].http://www.stmicroelectronics.com.cn/web/cn/home.html.
[4] 于春雪.基于STM32F107的高速以太網(wǎng)接口設(shè)計(jì)與應(yīng)用[J].電聲技術(shù),2011(9):63-67.
[5] 吳俊杰,吳建輝.以太網(wǎng)MAC控制器的MII接口轉(zhuǎn)RMII接口的實(shí)現(xiàn)[J].電子器件,2008(2):712-715.
[6] 李云紅,田冀達(dá),陳航.RT-Thread操作系統(tǒng)的電池管理系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2015(7):14-17.
[7] 邱祎.嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2007.
[8] 胡亦萬.基于Cortex-M3的LwIP移植以及嵌入式WEB的應(yīng)用研究[D].南昌:南昌大學(xué),2013.
[9] 王坤,皮亦鳴.基于ARM Cortex-M3的嵌入式網(wǎng)絡(luò)播放系統(tǒng)[J].電子設(shè)計(jì)工程,2010(1):71-73.
李起偉(碩士),主要從事嵌入式系統(tǒng)與煤礦安全監(jiān)測(cè)監(jiān)控系統(tǒng)的研究工作。
Design of CAN-Ethernet Gateway Based on RT-Thread
Li Qiwei
(China Coal Research Institute,Beijing 100013,China)
Abstract:In order to solve the problem that CAN bus can not exchange data with Ethernet in the coal mine digital monitoring system,an embedded CAN-Ethernet gateway is designed which takes STM32F107VC as the control core and is based on RT-Thread real-time operating system.In the paper,the hardware and software design of the gataway are introduced.A large-capacity data memory is used to improve the stability and reliability of data transmission.The actual test results show that the gateway can implement the interconnection between CAN bus and Ethernet,and it enhances the communication’s flexibility and reliability of the safety monitoring system.
Key words:CAN bus;data transmission;gateway;RT-Thread;STM32F107VC
收稿日期:(責(zé)任編輯:楊迪娜2015-12-21)
中圖分類號(hào):TP271
文獻(xiàn)標(biāo)識(shí)碼:A