陳聰,曲波
(蘇州大學 電子信息學院,蘇州 215021)
隨著Internet的發展和應用,越來越多的設備需要接入網絡以實現遠程控制或資源共享。以太網接口布線方便,通信帶寬較寬,可達100Mb/s甚至1000Mb/s。嵌入式系統由于具有體積小、價格低、專用性能高的優勢,被廣泛應用于各種電子設備和工業測試設備中。隨著嵌入式系統與網絡的日益緊密結合,在嵌入式系統中引入TCP/IP協議棧已成為嵌入式系統領域的重要研究方向。
本文在以太網接口實現基本數據傳輸的基礎上將其轉換成其他通用串行接口(如SPI、UART、CAN),更利于應用在廣泛的工業控制領域中。目前市面上的以太網控制芯片大多功耗高、功能復雜,不適合用在中低端的嵌入式系統中。之前Microchip推出的芯片ENC28J60的網絡接口速度只能達到10Mbps,其SRAM buffer也不大容易造成接收溢出,而ENC424J600速度可達100Mbps,功能將更加完善,并提供兩種接口給嵌入式開發者選擇,是一款很好的網絡接口芯片。STM32F103RET6是一款ARM處理器,它的功耗低、價格低廉、功能強大、具備豐富的串行接口,具有512KB的Flash,在一般的應用中可以不用外擴Flash,是中低端嵌入式開發系統的最佳選擇之一。將兩者結合不但能實現網絡通信,而且可以靈活轉換成其他串行接口,用途廣泛。
ENC424J600是Microchip公司推出的單獨可用的快速以太網控制器。其與MCU的連接方式可采用具有工業標準的串行總線SPI或靈活的并行接口。SPI接口數據速率可達14Mb/s、并行接口速率可達140Mb/s。ENC424J600滿足10base-TX全雙工、半雙工模式、100 base-TX全雙工、半雙工模式,4種模式均符合IEEE 802.3協議。芯片內置PHY物理層及MAC媒體訪問控制層。引擎具有 RSA、Diffie-Helman、AES、MD5、和SHA-1算法。芯片具有44引腳TQFP和QFN兩種封裝形式。該芯片另一個突出特點是具有24KB的SRAM Buffer,基本不需要外接SRAM。芯片SRAM Buffer的分配如圖1所示。

圖1 SRAM Buffer的分配
SRAM Buffer被分為兩個區域,一般將General Purpose Buffer設為發送區,RX FIFO Buffer設為接收區,通過指針ERXST區分兩個區域,通常將接收區設置較大以防止接收幀溢出。
ENC424J600網絡控制器外圍硬件電路設計需要注意的幾點有:ENC424J600的SPISEL引腳需要通過100 kΩ電阻上拉至電源,這樣系統上電時就能進入SPI模式,同時引出INT引腳作為接收中斷使用;每個電源引腳與地之間都應連接一個電容,為更好地防止干擾在設計時加了兩個電容,布線時使0.01μF電容更靠近電源引腳;RBIAS引腳需接一個12.4kΩ的電阻到地;另外RD+、RD-差分信號處的接法與一般的網絡控制器不同,它不是直接通過電阻接到電源上,需要特別注意。以太網接口則采用HR961160C,該插座集成以太網隔離變壓器、LED燈于一體,同時是貼片式的,節約PCB制板空間。在PCB布線時需要注意的是RD+、RD-和TD+、TD-兩對高頻差分線的走線應對稱并盡可能短。
ENC424J600外圍硬件電路及HANRUN以太網變壓器插座外圍電路圖如圖2、圖3所示。

圖2 ENC424J600外圍硬件電路

圖3 HANRUN以太網變壓器插座外圍電路

圖4 網絡轉串行通信接口的系統結構框圖
網絡轉串行通信接口的系統結構框圖如圖4所示。STM32F103RET6通過SPI1串行通信接口、一個GPIO引腳作為中斷引腳與網絡控制器相連,系統再引出SPI2、CAN總線通信接口的引腳。將UART1串行接口作為控制臺供調試使用。STM32F103RET6具有串口ISP下載功能,將BOOT0接高電平,BOOT1接低電平即可進入ISP下載模式。該系統可以通過跳線選擇ISP下載功能。
軟件的設計主要是移植LwIP協議棧,添加各串行通信接口的初始化程序,編寫網絡控制器底層驅動,編寫上層應用程序。
網絡控制器底層驅動初始化程序放在low_level_init函數中,整個過程為:初始化SPI1接口,對網絡控制器進行系統復位;設置發送、接收緩沖區指針;初始化PHY層為100Mbase全雙工模式,使能接收中斷。網絡控制器底層發送程序放在low_level_output函數中,整個過程為:將以太網包拷貝至SRAM buffer,設置發送起始地址;發送幀長,置高TXRTS位使能發送,直到TXRTS被硬件清零才能進行第二次發送。網絡控制器接收程序放在low_level_input函數中,當接收中斷發生時系統通過上層應用程序調用low_level_input函數。該函數主要內容為:讀取PKTIF位以確定是否有以太網幀等待接收;設置接收指針地址,讀取該幀的前8個字節,其中前兩個字節為下一幀接收地址,第3、4個字節為這一幀的長度,申請當前幀長的緩沖區,將接收數據讀入緩沖區,置高PKTDEC為下一幀接收做準備。
LwIP協議棧可以在無操作系統的軟件平臺下移植,LwIP實現的重點是在保持TCP/IP協議主要功能的基礎上減少對RAM的占用,因此它也適合在中低端的嵌入式系統中應用。LwIP主要是完成IP層和TCP/UDP數據傳輸層的任務,它與底層網絡控制器的接口主要體現在ethernetif.c函數中。在以太網幀的接收過程中以太網數據包通過底層接收程序傳至IP層,IP層判斷是TCP數據包還是UDP數據包,送至相應數據傳輸層處理,數據傳輸層再將收到的數據傳至用戶應用程序。在以太網幀的發送過程中,用戶程序選擇是通過UDP還是TCP發送數據包,將數據包送至相應的傳輸層,再傳至IP層,IP層再將數據傳至底層,發送程序將數據發送出去。
系統軟件流程如圖5所示。

圖5 系統軟件流程
軟件主要完成初始化、等待接收以太網幀、通過串行接口將數據幀發送出去的任務。初始化包括創建netif網絡接口、SPI1接口、網絡控制器的PHY層、MAC層,使能接收中斷、初始化TCP服務器端。初始化完成后,等待上位機軟件TCP的客戶端與底層軟件的TCP服務器端建立連接。連接建立后整個系統就循環等待接收TCP客戶端發送的以太網數據幀,當有以太網數據幀到達時,產生接收中斷,接收到的數據幀從PHY層傳到MAC層,再傳到IP層,最終傳到TCP層進行數據接收處理。應用程序收到處理過的以太網數據幀,處理相應的數據,根據數據傳遞的信息通過SPI2或CAN總線串行通信接口將信息發送出去,以實現相應的控制功能。
TCP/UDP上位機采用周立功公司的UDP/TCP調試工具,上位機作為TCP客戶端與系統服務器端建立連接,系統循環等待接收以太網數據包,收到數據包后通過TCP協議傳輸出去。在程序中設定系統服務器的IP為192.168.1.99,子網掩碼為255.255.255.0,默認網關為192.168.1.254,TCP端口為3838,上位機 TCP發送接收數據包如圖6所示。

圖6 TCP發送接收數據包
文中介紹了利用ENC424J600網絡控制器和LwIP協議棧實現以太網通信的過程,該系統不但體積小巧而且速度快、穩定可靠,具有良好的應用前景。
此系統目前已應用于網絡轉SPI通信來控制繼電器板卡的測試設備中。該繼電器測試設備稱為MATRIXRELAY(即矩陣繼電器),每塊繼電器板卡上有46行×8列個繼電器,共有5塊繼電器板卡,即46×8×5個繼電器,通過打通該設備上的某一行或多行上的某兩點來對待測產品進行相應的測試。測試員通過電腦上的上位機指定需要打開的繼電器序號,向該系統發一幀網絡數據,這幀數據包括需要打開的繼電器屬于哪塊板卡、哪一行、哪一列等信息。通過該系統的處理,將數據轉為SPI串行數據,再通過一系列移位寄存器的移位來控制相應繼電器的打開從而達到測試產品某兩端的目的。該測試設備在實際的運行中非常穩定可靠。
[1]Microchip Technology Inc.ENC424J600/ENC624J600Data Sheet[EB/OL].[2011-10].http://cn.alldatasheet.com/datasheet-pdf/pdf/328640/MICROCHIP/ENC424J600.html.
[2]劉海霞,李仁旺.ENC28J60在嵌入式系統接口上的設計與實現[J].微計算機信息,2008(24):1-2.
[3]陳雪梅.基于ENC28J60的嵌入式以太網/CAN網關設計[J].現代電子技術,2009(6):293-295.
[4]查普爾,蒂特爾.TCP/IP協議原理與應用[M].3版.北京:清華大學出版社,2009.
[5]徐宇杰.TCP/IP協議深入分析[M].北京:清華大學出版社,2009.