唐 琳,羅正華,黃建剛
(成都大學 電子信息工程學院,四川 成都 610106)
隨著技術的發展以及英特網的快速普及,TCP/IP 協議以其高速、高可靠性得到了更加廣泛的應用.在很多工業控制領域,傳統的串行通信方式由于其通信距離和通信速率的局限,也將逐漸被以太網所取代.本研究提出了一種將傳統的SPI 協議轉換成TCP/IP 協議的設計方式,硬件平臺以S3C2440處理器為核心,并給出詳細的設計和實現方式,測試結果證明,本設計在傳輸速率和可靠性上較傳統的串行通信模塊有較大改善.
本設計實現的是從SPI 協議到以太網TCP/IP協議的轉換,硬件平臺采用ARM + 交換芯片的架構,ARM9 內核的S3C2440 處理器內部集成了SPI接口和MII 接口,采用了高性能、高代碼密度的Thumb-2 指令集和緊耦合嵌套向量中斷控制器,具有高性能、低成本和低功耗等優點.此外,用戶不需要為實現2 個協議之間的轉換而增加額外的電路,這在很大程度上也降低了模塊開發調試的難度.SPI協議轉TCP/IP 協議的硬件框圖如圖1 所示.
圖1 中選用的千兆交換芯片是MARVEL 公司的88E6185,該芯片內部集成了10 路3 速SREDES接口,第8、9、10 號端口還可以配置為1000BASE-X直接驅動光模塊,其余7 路端口為了實現到以太網的連接,本設計將其連接到Marvel Alaska 10/100/1 000 Mbps 3 速以太網PHY 發送器,并將PHY 芯片88E1340 與DM9000 進行PHY-PHY 對接,中間用一個百兆變壓器進行隔離.88E1340 的后端連接到交換芯片的0 號端口上.對整個SPI 協議轉TCP/IP 協議的設計來說,S3C2440 的MII 接口既是傳送協議轉換數據的通道,也是對協議轉換以及交換芯片進行配置的通道[1-3].

圖1 協議轉換模塊硬件框圖
本設計的SPI 協議轉換成TCP/IP 協議的部分軟件在VxWorks 操作系統平臺下編寫,SPI 通信采用系統原有的驅動程序,用套接字的方式實現從SPI 協議到TCP/IP 協議的轉換.轉換需要完成的工作包括4 個部分:接收SPI 數據、發送SPI 數據、數據封包和以太網發送.這4 個部分的邏輯圖可以用2 個任務來完成,其關系如圖2 所示.
如圖2 所示,任務1 完成SPI 數據的接收、發送以及數據封包,實現的是從SPI 協議到TCP/IP 協議的轉換;任務2 完成的是一個相反的過程,網卡收到數據后把數據轉換成SPI 協議并在串口上打印出來.軟件設計的核心在于對數據的封包和解包處理,封包和解包過程位于2 個任務的中間部分,它完成的是SPI 協議和TCP/IP 協議之間的轉換.無論是從SPI 協議到TCP/IP 協議還是從TCP/IP 協議到SPI協議,數據的封包和解包都是必不可少的.

圖2 協議轉換軟件設計流程圖
首先,對ARM 芯片進行初始化,初始化包含5個部分:GPIO 初始化、DM9000 初始化、中斷初始化、SPI 初始化以及交換芯片的初始化.GPIO 的初始化確定設計中用到的I/O 端口的功能以及I/O 屬性.DM9000 的初始化設定了以太網的相關參數,包括以太網MAC 地址、板端IP 地址、以太網的連接形式(本設計采用TCP 連接方式)、子網掩碼及網關等參數.中斷初始化用于設定中斷向量、中斷優先級.SPI 初始化設定SPI 通信模式、比特率、奇偶校驗等.本設計中SPI 工作于DMA 方式下,采用模式0 進行通信,空閑狀態下時鐘電平為高,數據在下降沿采樣.交換芯片的初始化包括對交換芯片工作模式的配置以及對各路端口的配置[4-5].
初始化完成后,進入一個無限循環等待SPI 中斷來臨,當SPI 中斷發生時,執行SPI 中斷處理函數,并釋放計數信號量,打開看門狗定時器.當計數個數達到封包個數時,執行DM9000 發送函數,完成SPI 協議到TCP/IP 協議的轉換.
TCP/IP 協議到SPI 協議的轉換任務與SPI 協議到TCP/IP 協議的轉換任務過程相反.初始化完成后,執行該任務,當有數據到達網卡,觸發DM9000中斷,執行網卡中斷服務程序,完成對TCP 協議數據的解包,釋放計數信號量完成協議轉換,并把轉換后的結果在串口上打印出來.
在進行協議測試之前,首先必須保證測試工具是可靠的,在此基礎上,搭建以下的測試平臺對通道和協議轉換功能進行測試.測試平臺需要的模塊包括:協議轉換板,2 個;PC 機,2 臺;DB9 接頭的網線,2 根;USB 接口的串口線,2 根.
要完成協議轉換的測試需要進行2 次實驗,即封包測試與解包測試.本測試以SPI 串行數據為例,首先是上行方向對串行數據的匯聚;其次是下行方向2440 處理器對TCP/IP 報文的解析和數據的分發.
3.2.1 SPI 協議轉TCP/IP 協議的封包測試.
協議轉換的封包測試需要用PC 機的發包工具作為SPI 的數據源來構造一個SPI 數據包.為了方便測試,數據包的長度在程序中設置為16,數據內容為11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66,當2440 處理器收到由PC 機的抓包工具發送的16 位數據時就開始執行封包,并將收到的數據打印到串口超級終端上,網絡調試助手收到轉換后的TCP/IP 報文會自動去掉報文頭部,最終網絡調試助手上顯示的除了PC 機發送的16 位有效數據以外,還包括代表協議類型的6 個字節和代表有效數據長度的2 個字節.其中,協議類型以$開始,以* 結束.本設計實現的是SPI 的協議轉換,因此發送的是$SPII* ,代表TCP/IP 數據報文傳輸的是SPI 類型的數據,轉換結果如圖3 ~4 所示.
3.2.2 TCP/IP 協議轉SPI 協議的解包測試.
協議轉換的解包測試由網絡調試助手提供需要轉換的TCP/IP 報文,網絡調試助手配置為TCP 客戶端模式,協議轉換板上配置為TCP 服務器模式.在發送需要解析的報文之前,客戶端需要與服務器建立連接,連接建立后再按照規定的報文格式構造數據報文.與封包測試類似,數據報文的前6 個字節固定為協議類型,協議類型以$ 開始,以* 結束,此處發送的是$SPII* ,代表TCP/IP 數據報文,DM9000收到該報文后觸發中斷,執行解包函數,解析后的數據會再發送到SPI 口上,SPI 收到數據后依舊在串口超級中斷打印出來,測試結果如圖5 ~6 所示.

圖3 串口SPI 數據圖

圖4 封包后的數據報文圖
本設計實現了SPI 協議與TCP/IP 協議之間的轉換,本方法可以方便地將SPI 數據接入到以太網中,給以太網監控串行設備提供了較大的便利,也給現有串行設備的網絡化管理和故障監測、診斷工作帶了方便.測試結果表明,本設計方法在傳輸速率、可靠性、穩定性等方面具有一定的優勢.

圖5 解包前的數據報文圖

圖6 解包后的SPI 數據報文圖
[1]李鵬,馬游春,李錦明.基于FPGA 的多路數據采集模塊硬件設計[J].儀表技術與傳感器,2010,47(3):80-82.
[2]唐琳.網絡化嵌入式鐵路調度監聽系統的研究[D].成都:成都理工大學,2013.
[3]俞野秋,陳堅.Modbus 和Modbus-TCP 協議轉換研究[J].儀表技術,2013,42(1):28-31.
[4]張成俊,張李超,史玉升.以太網轉RS232 轉換器設計[J].儀表技術與傳感器,2013,50(6):35-36.
[5]白軍偉,孫建偉,楊海波,等.SIP 和RTSP 協議轉換模塊的設計與實現[J].計算機系統應用,2013,30(5):111-115.