唐 琳,羅正華,黃建剛
(成都大學(xué) 電子信息工程學(xué)院,四川 成都 610106)
隨著技術(shù)的發(fā)展以及英特網(wǎng)的快速普及,TCP/IP 協(xié)議以其高速、高可靠性得到了更加廣泛的應(yīng)用.在很多工業(yè)控制領(lǐng)域,傳統(tǒng)的串行通信方式由于其通信距離和通信速率的局限,也將逐漸被以太網(wǎng)所取代.本研究提出了一種將傳統(tǒng)的SPI 協(xié)議轉(zhuǎn)換成TCP/IP 協(xié)議的設(shè)計(jì)方式,硬件平臺以S3C2440處理器為核心,并給出詳細(xì)的設(shè)計(jì)和實(shí)現(xiàn)方式,測試結(jié)果證明,本設(shè)計(jì)在傳輸速率和可靠性上較傳統(tǒng)的串行通信模塊有較大改善.
本設(shè)計(jì)實(shí)現(xiàn)的是從SPI 協(xié)議到以太網(wǎng)TCP/IP協(xié)議的轉(zhuǎn)換,硬件平臺采用ARM + 交換芯片的架構(gòu),ARM9 內(nèi)核的S3C2440 處理器內(nèi)部集成了SPI接口和MII 接口,采用了高性能、高代碼密度的Thumb-2 指令集和緊耦合嵌套向量中斷控制器,具有高性能、低成本和低功耗等優(yōu)點(diǎn).此外,用戶不需要為實(shí)現(xiàn)2 個(gè)協(xié)議之間的轉(zhuǎn)換而增加額外的電路,這在很大程度上也降低了模塊開發(fā)調(diào)試的難度.SPI協(xié)議轉(zhuǎn)TCP/IP 協(xié)議的硬件框圖如圖1 所示.
圖1 中選用的千兆交換芯片是MARVEL 公司的88E6185,該芯片內(nèi)部集成了10 路3 速SREDES接口,第8、9、10 號端口還可以配置為1000BASE-X直接驅(qū)動光模塊,其余7 路端口為了實(shí)現(xiàn)到以太網(wǎng)的連接,本設(shè)計(jì)將其連接到Marvel Alaska 10/100/1 000 Mbps 3 速以太網(wǎng)PHY 發(fā)送器,并將PHY 芯片88E1340 與DM9000 進(jìn)行PHY-PHY 對接,中間用一個(gè)百兆變壓器進(jìn)行隔離.88E1340 的后端連接到交換芯片的0 號端口上.對整個(gè)SPI 協(xié)議轉(zhuǎn)TCP/IP 協(xié)議的設(shè)計(jì)來說,S3C2440 的MII 接口既是傳送協(xié)議轉(zhuǎn)換數(shù)據(jù)的通道,也是對協(xié)議轉(zhuǎn)換以及交換芯片進(jìn)行配置的通道[1-3].
圖1 協(xié)議轉(zhuǎn)換模塊硬件框圖
本設(shè)計(jì)的SPI 協(xié)議轉(zhuǎn)換成TCP/IP 協(xié)議的部分軟件在VxWorks 操作系統(tǒng)平臺下編寫,SPI 通信采用系統(tǒng)原有的驅(qū)動程序,用套接字的方式實(shí)現(xiàn)從SPI 協(xié)議到TCP/IP 協(xié)議的轉(zhuǎn)換.轉(zhuǎn)換需要完成的工作包括4 個(gè)部分:接收SPI 數(shù)據(jù)、發(fā)送SPI 數(shù)據(jù)、數(shù)據(jù)封包和以太網(wǎng)發(fā)送.這4 個(gè)部分的邏輯圖可以用2 個(gè)任務(wù)來完成,其關(guān)系如圖2 所示.
如圖2 所示,任務(wù)1 完成SPI 數(shù)據(jù)的接收、發(fā)送以及數(shù)據(jù)封包,實(shí)現(xiàn)的是從SPI 協(xié)議到TCP/IP 協(xié)議的轉(zhuǎn)換;任務(wù)2 完成的是一個(gè)相反的過程,網(wǎng)卡收到數(shù)據(jù)后把數(shù)據(jù)轉(zhuǎn)換成SPI 協(xié)議并在串口上打印出來.軟件設(shè)計(jì)的核心在于對數(shù)據(jù)的封包和解包處理,封包和解包過程位于2 個(gè)任務(wù)的中間部分,它完成的是SPI 協(xié)議和TCP/IP 協(xié)議之間的轉(zhuǎn)換.無論是從SPI 協(xié)議到TCP/IP 協(xié)議還是從TCP/IP 協(xié)議到SPI協(xié)議,數(shù)據(jù)的封包和解包都是必不可少的.
圖2 協(xié)議轉(zhuǎn)換軟件設(shè)計(jì)流程圖
首先,對ARM 芯片進(jìn)行初始化,初始化包含5個(gè)部分:GPIO 初始化、DM9000 初始化、中斷初始化、SPI 初始化以及交換芯片的初始化.GPIO 的初始化確定設(shè)計(jì)中用到的I/O 端口的功能以及I/O 屬性.DM9000 的初始化設(shè)定了以太網(wǎng)的相關(guān)參數(shù),包括以太網(wǎng)MAC 地址、板端IP 地址、以太網(wǎng)的連接形式(本設(shè)計(jì)采用TCP 連接方式)、子網(wǎng)掩碼及網(wǎng)關(guān)等參數(shù).中斷初始化用于設(shè)定中斷向量、中斷優(yōu)先級.SPI 初始化設(shè)定SPI 通信模式、比特率、奇偶校驗(yàn)等.本設(shè)計(jì)中SPI 工作于DMA 方式下,采用模式0 進(jìn)行通信,空閑狀態(tài)下時(shí)鐘電平為高,數(shù)據(jù)在下降沿采樣.交換芯片的初始化包括對交換芯片工作模式的配置以及對各路端口的配置[4-5].
初始化完成后,進(jìn)入一個(gè)無限循環(huán)等待SPI 中斷來臨,當(dāng)SPI 中斷發(fā)生時(shí),執(zhí)行SPI 中斷處理函數(shù),并釋放計(jì)數(shù)信號量,打開看門狗定時(shí)器.當(dāng)計(jì)數(shù)個(gè)數(shù)達(dá)到封包個(gè)數(shù)時(shí),執(zhí)行DM9000 發(fā)送函數(shù),完成SPI 協(xié)議到TCP/IP 協(xié)議的轉(zhuǎn)換.
TCP/IP 協(xié)議到SPI 協(xié)議的轉(zhuǎn)換任務(wù)與SPI 協(xié)議到TCP/IP 協(xié)議的轉(zhuǎn)換任務(wù)過程相反.初始化完成后,執(zhí)行該任務(wù),當(dāng)有數(shù)據(jù)到達(dá)網(wǎng)卡,觸發(fā)DM9000中斷,執(zhí)行網(wǎng)卡中斷服務(wù)程序,完成對TCP 協(xié)議數(shù)據(jù)的解包,釋放計(jì)數(shù)信號量完成協(xié)議轉(zhuǎn)換,并把轉(zhuǎn)換后的結(jié)果在串口上打印出來.
在進(jìn)行協(xié)議測試之前,首先必須保證測試工具是可靠的,在此基礎(chǔ)上,搭建以下的測試平臺對通道和協(xié)議轉(zhuǎn)換功能進(jìn)行測試.測試平臺需要的模塊包括:協(xié)議轉(zhuǎn)換板,2 個(gè);PC 機(jī),2 臺;DB9 接頭的網(wǎng)線,2 根;USB 接口的串口線,2 根.
要完成協(xié)議轉(zhuǎn)換的測試需要進(jìn)行2 次實(shí)驗(yàn),即封包測試與解包測試.本測試以SPI 串行數(shù)據(jù)為例,首先是上行方向?qū)Υ袛?shù)據(jù)的匯聚;其次是下行方向2440 處理器對TCP/IP 報(bào)文的解析和數(shù)據(jù)的分發(fā).
3.2.1 SPI 協(xié)議轉(zhuǎn)TCP/IP 協(xié)議的封包測試.
協(xié)議轉(zhuǎn)換的封包測試需要用PC 機(jī)的發(fā)包工具作為SPI 的數(shù)據(jù)源來構(gòu)造一個(gè)SPI 數(shù)據(jù)包.為了方便測試,數(shù)據(jù)包的長度在程序中設(shè)置為16,數(shù)據(jù)內(nèi)容為11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66,當(dāng)2440 處理器收到由PC 機(jī)的抓包工具發(fā)送的16 位數(shù)據(jù)時(shí)就開始執(zhí)行封包,并將收到的數(shù)據(jù)打印到串口超級終端上,網(wǎng)絡(luò)調(diào)試助手收到轉(zhuǎn)換后的TCP/IP 報(bào)文會自動去掉報(bào)文頭部,最終網(wǎng)絡(luò)調(diào)試助手上顯示的除了PC 機(jī)發(fā)送的16 位有效數(shù)據(jù)以外,還包括代表協(xié)議類型的6 個(gè)字節(jié)和代表有效數(shù)據(jù)長度的2 個(gè)字節(jié).其中,協(xié)議類型以$開始,以* 結(jié)束.本設(shè)計(jì)實(shí)現(xiàn)的是SPI 的協(xié)議轉(zhuǎn)換,因此發(fā)送的是$SPII* ,代表TCP/IP 數(shù)據(jù)報(bào)文傳輸?shù)氖荢PI 類型的數(shù)據(jù),轉(zhuǎn)換結(jié)果如圖3 ~4 所示.
3.2.2 TCP/IP 協(xié)議轉(zhuǎn)SPI 協(xié)議的解包測試.
協(xié)議轉(zhuǎn)換的解包測試由網(wǎng)絡(luò)調(diào)試助手提供需要轉(zhuǎn)換的TCP/IP 報(bào)文,網(wǎng)絡(luò)調(diào)試助手配置為TCP 客戶端模式,協(xié)議轉(zhuǎn)換板上配置為TCP 服務(wù)器模式.在發(fā)送需要解析的報(bào)文之前,客戶端需要與服務(wù)器建立連接,連接建立后再按照規(guī)定的報(bào)文格式構(gòu)造數(shù)據(jù)報(bào)文.與封包測試類似,數(shù)據(jù)報(bào)文的前6 個(gè)字節(jié)固定為協(xié)議類型,協(xié)議類型以$ 開始,以* 結(jié)束,此處發(fā)送的是$SPII* ,代表TCP/IP 數(shù)據(jù)報(bào)文,DM9000收到該報(bào)文后觸發(fā)中斷,執(zhí)行解包函數(shù),解析后的數(shù)據(jù)會再發(fā)送到SPI 口上,SPI 收到數(shù)據(jù)后依舊在串口超級中斷打印出來,測試結(jié)果如圖5 ~6 所示.
圖3 串口SPI 數(shù)據(jù)圖
圖4 封包后的數(shù)據(jù)報(bào)文圖
本設(shè)計(jì)實(shí)現(xiàn)了SPI 協(xié)議與TCP/IP 協(xié)議之間的轉(zhuǎn)換,本方法可以方便地將SPI 數(shù)據(jù)接入到以太網(wǎng)中,給以太網(wǎng)監(jiān)控串行設(shè)備提供了較大的便利,也給現(xiàn)有串行設(shè)備的網(wǎng)絡(luò)化管理和故障監(jiān)測、診斷工作帶了方便.測試結(jié)果表明,本設(shè)計(jì)方法在傳輸速率、可靠性、穩(wěn)定性等方面具有一定的優(yōu)勢.
圖5 解包前的數(shù)據(jù)報(bào)文圖
圖6 解包后的SPI 數(shù)據(jù)報(bào)文圖
[1]李鵬,馬游春,李錦明.基于FPGA 的多路數(shù)據(jù)采集模塊硬件設(shè)計(jì)[J].儀表技術(shù)與傳感器,2010,47(3):80-82.
[2]唐琳.網(wǎng)絡(luò)化嵌入式鐵路調(diào)度監(jiān)聽系統(tǒng)的研究[D].成都:成都理工大學(xué),2013.
[3]俞野秋,陳堅(jiān).Modbus 和Modbus-TCP 協(xié)議轉(zhuǎn)換研究[J].儀表技術(shù),2013,42(1):28-31.
[4]張成俊,張李超,史玉升.以太網(wǎng)轉(zhuǎn)RS232 轉(zhuǎn)換器設(shè)計(jì)[J].儀表技術(shù)與傳感器,2013,50(6):35-36.
[5]白軍偉,孫建偉,楊海波,等.SIP 和RTSP 協(xié)議轉(zhuǎn)換模塊的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,30(5):111-115.