1 引言 近年來,使用RS-485傳輸技術的PROFIBUS-DP/FMS現場總線網絡在工業自動化領域得到了廣泛的應用。這種網絡覆蓋范圍有限,傳輸速度不高,如果把它和覆蓋范圍廣、速度高的以太網連接起來,就叮以利用以太網的優勢實現遠程監控等功能。解決這兩種異質網絡互連問題的途徑之一是開發能夠在網間進行轉換的嵌入式網關。 而在現有的嵌入式網關中,一類是基于專用的網絡處理器,價格昂貴,可擴展性不強;另一類則是基于通用的微處理器.但往往還需要外接以太網物理層控制芯片,使得電路設計復雜,工作穩定性降低。針對這些不足,本文設計了一種基于ARM Cortex-M3微處理器和嵌入式實時操作系統μC/OS-II的單芯片嵌入式網關,在PROFIBUS-DP/FMS現場總線和以太網之間進行數據交換。 2 硬件設計 嵌入式網關以內核為ARM Cortex-M3的LM3S6916微處理器為核心搭建硬件平臺,其硬件結構框圖如圖1所示。 圖1 嵌入式網關硬件結構框圖 2.1 微處理器 微處理器是整個嵌入式網關的核心.在工業以太網中作為智能節點的主控制器。本文選用以ARM Cortex-M3為內核的LM3S6916微處理器.它是基于ARMy7-M架構的32位RSlC處理機。Cortex-M3是ARM最近專為低功耗、小尺寸、短中斷延時和優異的確定性而設計的一款內核。LM3S6916在CORTEX-M3的基礎上,還集成了256KB的FLASH和64KB的SRAM存儲器、睡眠模塊、正交編碼器、ADC、帶死區PWM、溫度傳感器、模擬比較器、UART、SSI、通用定時器,I2C、CCP等外設。除此之外,它還是第一款同時集成了10/100M以太網MAC和物理層控制器的ARM處理器。它以8位單片機的價格提供32位的計算性能,非常適合用于對成本敏感的工業應用。 2.2 存儲系統 LM3S6916內部集成的存儲器已經能夠滿足本應用的需要,因此不用在芯片外部擴展存儲器。Cortex-M3內核對4GB的可尋址存儲空間提供簡單和固定的存儲器映射,256KB的FLASH用作存儲異常/中斷向量表以及操作系統鏡像,系統復位后從中讀取指令執行,起始地址為0x00000000,64KB的SRAM作為程序運行空間和數據空間.啟動代碼將系統鏡像復制到SRAM后執行,起始地址為0x20000000。 2.3 串口 串行接口使用片內集成的UART接口,外接MAX1485芯片進行電平轉換,實現和RS-485現場總線網絡的連接。 2.4 以太網接口 芯片內部集成的全雙工10/100M以太網控制器遵循IEEE802.3規范,完全支持10BASE-T和100BASE-TX標準,支持對10BaseT拓撲結構的自動極性修正,允許2個診斷LED引腳編程輸出。 芯片外部只需外加一個1:1的隔離變壓器和RJ-45接口就可實現與以太網的連接。LM3S6916芯片的XTALPPHY和XTALNPHY引腳跨接一個25MHz的無源晶振,作為外部時鐘信號輸入。需要注意的是,MDIO引腳需要通過一個10KΩ的上拉電阻連接到+3.3V電源上,以使MAC子層的媒體無關管理接口(MII)正常工作。 此外,硬件部分還包括電源部分、復位電路等,在此不是重點,就不詳細介紹了。 3 軟件設計 嵌入式系統的軟件部分分為BootLoader、操作系統與網絡協議棧、應用程序三部分。 3.1 BootLoader的編寫 Bootloader是運行于操作系統之前的引導程序,主要任務是完成系統啟動之前必要的硬件初始化和操作系統加載。BootLoader代碼與微處理器芯片的內核結構、具體芯片和使用的操作系統等因素有關,比較復雜。為了簡化開發人員的工作,Luminary公司為它生產的LM3S系列微處理器提供了免費下載的外設驅動程序庫,包括了各種外設的驅動程序和通用的Bootloader,通常只需根據具體硬件進行很少的改動即可正常運行。在本例中,只需更改程序中定義的FLASH和SRAM的大小。 3.2 操作系統與網絡協議棧 本文所設計的嵌人式網關并沒有過多復雜的功能,亦不需要圖形化的用戶接口.硬件資源有限,有一定的實時性要求,因此我們選用μC/OS-II,它是一個可剪裁、源碼開放、結構小巧、搶先式的實時多任務內核,主要面向中小型嵌入式系統,具有執行效率高、占用空間小(10KB左右)、可移植性強、實時性能優良和可擴展性強等特點。 對μC/OS-II的移植有以下幾個步驟: (1)下載μC/OS-Ⅱ源代碼; (2)根據微處理器配置和編譯內核; (3)編寫相應的設備驅動程序; (4)下載、調試和執行內核,加載應用程序。 要接入以太網,還需要TCP/IP網絡協議棧的支持,為此我們選擇移植1wlP,它是瑞士計算機科學院(Swedish Institute of Computer Science)的Adam Dunkels等開發的一套用于嵌入式系統的開放源代碼TCP/IP協議棧。1wlP的含義是Light Weight(輕型)IP協議。IwIP可以移植到操作系統上。也可以在無操作系統的情況下獨立運行。1wIP TCP/IP實現的重點是在保持TCP協議主要功能的基礎上減少對RAM的占用,這使1wIP協議棧適合在低端嵌入式系統中使用。 對1wlP的移植與μC/OS-II的移植類似,在此不再贅述。 3.3 應用程序的實現 應用程序主要完成以太網接口和串行接口間的數據傳輸。此應用系統中有4個任務或稱為進程:以太網網接收進程、以太網發送進程、串口接收進程和串口發送進程。這4個線程可并發執行.因網絡速度與串口速度存在著差異,需設置相應的緩沖區來對收發數據進行緩沖。在此應用系統中設置兩個環形緩沖區,其中之一用于接收以太網數據,然后串口從此緩沖區中取出數據發送。另一緩沖區用于接收串口數據,然后以太網控制器取出此緩沖區中數據發送出去。我們利用Socket套接字編寫了一個簡單的客戶機/服務器模式的應用程序,實現現場總線和以太網上位機的通信。以太網上位機被設定為服務器.它運行了服務器端的應用程序。該程序主要用于監聽服務器端口、接受客戶端的連接請求、接受客戶端的信息、向客戶端發送信息等。嵌人式網關系統中運行的是客戶端程序,該程序主要是用于申請連接到服務器、將現場總線方發來的消息向服務器發送、處理服務器發來的信息、將這些信息發送給現場總線系統。主程序流程圖如圖2所示。 圖2 主程序流程圖 進程間需實現相互通信和同步,共用緩沖區既要互斥執行又要同步執行,其操作遵循生產者和消費者模型。進程問的互斥操作采用信號量來實現。線程間的同步通過設置兩個指針來實現,一個是讀指針,另一個是寫指針,寫指針指向隊頭,初始化為0,讀指針指向隊尾.初始化為bufsize-1。當寫數據時。比較讀寫指針是否相等,相I司則寫線程阻塞;不相等,則寫入數據,然后將寫指針加1。當讀數據時,讀指針加1,然后比較讀寫指針是否相等,相等則讀線程阻塞;不相等,則讀出數據。 4 結語 本文使用內核為ARM Cortex-M3的LM3S6916微處理器設計了一種單芯片的嵌入式網關。經實驗驗證,它可以實現PROFIBUS-DP/FMS現場總線網絡和以太網的互連。相比其它的設計方案,本文的方案具有高性能、低功耗、低成本、高穩定性、開發迅速等優點,因此具有廣闊的應用前景。 本文作者創新點:使用新型的ARM芯片設計了單芯片的嵌入式網關,實現了PROFIBUS—DP/FMS現場總線與以太網的互連。該網關簡單可靠、實用性強。 預計正式產品投入市場之后,每年能取得10萬元以上的經濟效益。 作者:任強,程新明,徐洞成,戴喻 來源:《微計算機信息》(嵌入式與SOC)2009年第2-2期 |