李合軍
(湖南環(huán)境生物職業(yè)技術(shù)學(xué)院,湖南 衡陽 421005)
隨著現(xiàn)代數(shù)據(jù)收集技術(shù)的不斷發(fā)展,更多的現(xiàn)場數(shù)據(jù)收集設(shè)備需要擴展功能,以實現(xiàn)數(shù)據(jù)傳輸和遠程操作的功能。以太網(wǎng)具有成本低、集成效果良好且傳輸距離遠的優(yōu)點,因此其應(yīng)用范圍較廣。以太網(wǎng)傳統(tǒng)解決方法是利用主控芯片連接物理層接口,在內(nèi)部編寫以太網(wǎng)協(xié)議,由于該方法開發(fā)耗時長、難度高、協(xié)議程序復(fù)雜且運行時缺乏穩(wěn)定性,因此導(dǎo)致其關(guān)注度逐年下降[1]。而利用嵌入式單片機AT89C51 配置寄存器、存儲器和端口等設(shè)備以及外線連接就可以實現(xiàn)以太網(wǎng)的數(shù)據(jù)傳輸功能,這種方法具有高集成性、開發(fā)難度低、易操作且運行較為穩(wěn)定等特點,已成為以太網(wǎng)數(shù)據(jù)傳輸?shù)淖罴逊桨竅2]?;谠摫尘埃撐臄M設(shè)計一種能夠利用FPGA 控制AT89C51,并以TCP/IP 為協(xié)議進行以太網(wǎng)高速數(shù)據(jù)傳輸?shù)南到y(tǒng),TCP/IP 協(xié)議棧處理通過AT89C51 來完成,實測傳輸速率高于90 Mbit/s,可以有效滿足現(xiàn)實應(yīng)用的部分需求。
該設(shè)計選用現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)控制嵌入式單片機AT89C51 實現(xiàn)以太網(wǎng)高速數(shù)據(jù)通信的功能,在接收上位機軟件命令后進行相應(yīng)操作,從而在不同網(wǎng)絡(luò)間創(chuàng)建連接。FPGA 內(nèi)有2 種I/O 接口,雖然有普通與高速之分,但是傳輸速率基本可穩(wěn)定到15 Gbit/s,傳輸穩(wěn)定性良好,因此將FPGA 作為主控芯片[3]。為了實現(xiàn)傳輸速率高于90 Mbit/s 的目標(biāo),AT89C51 采用16 位寬度數(shù)據(jù)模式,配置自動握手運行。16 位寬度數(shù)據(jù)位與I/O 相連,將接收數(shù)據(jù)儲存于Flash 中,一般使用雙備份能夠使數(shù)據(jù)更精確。為了使AT89C51 在數(shù)據(jù)傳輸時的高頻電壓抑制性能更高,可以隔開其產(chǎn)生的電壓信號[4]。該系統(tǒng)硬件設(shè)計并未采用常用的H81601S,而是選用貼片變壓器G82409S。該變壓器與選頻電路相通,可以使通帶信號通過,直接抑制阻帶信號,并且其阻帶電壓增益接近0。該系統(tǒng)硬件電路設(shè)計如圖1 所示。
圖1 INT 硬件電路設(shè)計
電源是系統(tǒng)的動力源,良好的電源管理既可以為系統(tǒng)提供穩(wěn)定的電壓,還可以延長系統(tǒng)的使用壽命。系統(tǒng)中數(shù)據(jù)收集、波形解調(diào)以及處理器工作電壓均為3.3 V,設(shè)計采用手機適配器5.0 V 為系統(tǒng)提供電源,如果開關(guān)電源輸出濾波電容較大,那么在啟動過程中因輸出電壓而無法在短時間內(nèi)上升,控制器判定為輸出短路故障。同時,通過G82409S 將5.0 V 轉(zhuǎn)換成3.3 V,在設(shè)計中設(shè)計多個儲能電容,可以有效濾除電壓紋波。
系統(tǒng)對外部信號收集的設(shè)計是基于FPGA 的,其采樣速率為10 Mbit/s,單電源12 bits,且具有單端和差分模擬的輸入方式。FPGA 提供了12 bits 的有效輸出位,輸出字節(jié)順序均是按照“高位→低位”的模式,支持串行外設(shè)接口(Serial Peripheral Interface,SPI)的輸出。FPGA 外部有多個引腳可以供用戶二次開發(fā)使用,部分引腳為數(shù)據(jù)輸出引腳,處理器通過控制接口收集外部各類信號。
為了將各類計算機設(shè)備連接在一起,相關(guān)機構(gòu)定義了一系列基于以太網(wǎng)的軟硬件協(xié)議標(biāo)準(zhǔn)。目前,常用的以太網(wǎng)接口協(xié)議包括TCP/IP 協(xié)議和UDP 協(xié)議。與TCP/IP 協(xié)議不同的是,UDP 協(xié)議具有更快的傳輸速率,但是其數(shù)據(jù)缺少挑戰(zhàn)握手驗證協(xié)議(Challenge Handshake Authentication Protocol,CHAP),因此無法較好地保證高速數(shù)據(jù)的穩(wěn)定性。而TCP/IP 協(xié)議能夠保持雙向傳輸,TCP 與IP 可以協(xié)同工作,在創(chuàng)建連接前可進行CHAP,從而使客戶端與服務(wù)器進行3 次確認(rèn)連接,在滿足數(shù)據(jù)高速傳輸?shù)幕A(chǔ)上保證了數(shù)據(jù)的穩(wěn)定性。
使用AT89C51 內(nèi)部端口物理層(Physical Layer,PHY),TEST_MODE 的引腳用于配置PHY 模式,在內(nèi)部PHY 運行中,將OP_MODE 的引腳接地,選擇自動握手模式。這樣AT89C51 是通過2 路差分信號(RXIP/RXIN 與TXOP/TXON)與變壓器相連,差分信號引腳需接50 Ω 的電阻與1 個0.1 μF 的電容,從而使抗阻匹配效果更良好[5]。為了消除導(dǎo)線抗阻不一致對信號產(chǎn)生的負(fù)面影響,差分信號的走線長度應(yīng)盡可能接近。接口信號見表1。
表1 接口信號
通過尋址控制FPGA 操控AT89C51,合理配置寄存器。AT89C51 控制時序包括復(fù)位時序和寄存器讀寫時序[6]。復(fù)位時序產(chǎn)生復(fù)位信號并控制復(fù)位邏輯,寄存器讀寫時序控制讀寫數(shù)據(jù)邏輯。復(fù)位信號和鎖相環(huán)的最小周期分別為2 μs 和50 μs。該系統(tǒng)軟件設(shè)計包括復(fù)位、初始化、端口連接、數(shù)據(jù)接收和發(fā)送等流程,具體如圖2 所示。
圖2 軟件工作流程
工作開始前,AT89C51 應(yīng)先進行電復(fù)位,此時復(fù)位信號的低電平須大約保持在2 μs,隨后將其轉(zhuǎn)變?yōu)楦唠娖剑齼?nèi)部鎖相環(huán)穩(wěn)定后(一般大約為15 ms)再進行初始化。在軟件的設(shè)計過程中,復(fù)位信號低電平時間為7 μs,通過對30 MHz 的時鐘進行計數(shù)來實現(xiàn),當(dāng)計數(shù)達到30×7 時,將復(fù)位信號轉(zhuǎn)變?yōu)楦唠娖?;隨后繼續(xù)計數(shù),當(dāng)計數(shù)達到30×18×102 時,滿足了等待18 ms 的要求;最后給出復(fù)位完成信號,開始啟動后續(xù)工作。
AT89C51 初始化是指根據(jù)寫時序要求將相應(yīng)參數(shù)寫入寄存器,其具體流程包括接口設(shè)置、信息設(shè)置和分配存儲器空間[7]:1)當(dāng)設(shè)置接口時,將模式寄存器(MR)的默認(rèn)值設(shè)置為0×b800(段地址),這樣能夠使AT89C51 處于16 位寬度的訪問模式中。中斷屏蔽寄存器(IMR)寫入0×FFFF(16 進制的FFFF),不對其采用屏蔽中斷。2)當(dāng)設(shè)置信息時,對超時寄存器(RTR)和計數(shù)寄存器(RCR)進行重傳,二者均采用默認(rèn)值,分別為0×07D0(地址寄存器)和0×008(波特率的寄存器),重傳超時時長為200 ms,次數(shù)為9 次。為了合理分配重傳時間和次數(shù),提高數(shù)據(jù)通信的可靠性,對超時寄存器(RTR)和計數(shù)寄存器(RCR)進行設(shè)置,傳輸超時流程具體如圖3 所示。3)當(dāng)分配存儲器空間時,AT89C51 存儲單元分別映射到發(fā)送存儲器(TX)和接收存儲器(RX)中,并將其存儲量定義為64 KB。
圖3 數(shù)據(jù)包傳輸超時流程
AT89C51 初始化完成后,可通過TCP、UDP 或IPPAW 等形式打開套接字(SOCKET)發(fā)送或接收數(shù)據(jù)。在該系統(tǒng)中,AT89C51在TCP 模式中工作,為了使通信狀態(tài)良好,應(yīng)初始化SOCKET,并在偵聽設(shè)置完成后等待創(chuàng)建連接[8]。分別對模式寄存器(MR)和端口寄存器(PORTR)設(shè)置偵聽端口號和通信協(xié)議,并在控制寄存器(CR)中寫入0×0001 命令,等待OPEN 命令執(zhí)行之后,如果狀態(tài)寄存器(SSR)變?yōu)镮NIT,那么此時初始化完成,隨后再向控制寄存器(CR)中寫入0×0002 命令,如果狀態(tài)寄存器(SSR)變?yōu)長ISTEN 函數(shù),那么此時偵聽完成,最后待SSR變?yōu)镋STABLISHED(服務(wù)端口變化),此時如果SSR 是預(yù)期值,那么就成功創(chuàng)建連接,可以進行有效數(shù)據(jù)通信。
完成AT89C51 初始化與端口連接后,便可進行數(shù)據(jù)接收或發(fā)送處理。當(dāng)檢測到RX(接收存儲器)中尚存在部分?jǐn)?shù)據(jù)時,AT89C51 開始進行數(shù)據(jù)接收工作,該階段可通過觀察排列位狀態(tài)判斷數(shù)據(jù)包中是否存在信息與數(shù)據(jù)。當(dāng)MR(模式寄存器)的排列位為0 時,數(shù)據(jù)包存在信息與數(shù)據(jù);當(dāng)MR(模式寄存器)的排列位為1 時,僅存在數(shù)據(jù)包而缺少信息。當(dāng)數(shù)據(jù)全部讀取之后,即刻執(zhí)行RECV 命令,由此AT89C51 的數(shù)據(jù)接收工作順利完成。經(jīng)多次試驗發(fā)現(xiàn),每次發(fā)送1 460 kB 數(shù)據(jù)時的傳輸速率最快,因此應(yīng)將數(shù)據(jù)包的大小設(shè)置為730 kB,并且每次發(fā)送2 包數(shù)據(jù)。數(shù)據(jù)發(fā)送前,應(yīng)對上次SEND 命令是否完成進行深度檢查,如果完成,就可以繼續(xù)發(fā)送,這樣可以確保數(shù)據(jù)發(fā)送的準(zhǔn)確性。AT89C51 數(shù)據(jù)的接收和發(fā)送流程如圖4所示。
圖4 數(shù)據(jù)接收與發(fā)送流程
在傳輸過程中有時會因網(wǎng)絡(luò)異常而出現(xiàn)傳輸中斷的情況,從而導(dǎo)致數(shù)據(jù)丟失。為了避免出現(xiàn)這種情況,特進行以太網(wǎng)斷網(wǎng)重連設(shè)計。添加E_LINK_D 信號,當(dāng)初始化結(jié)束后,如果為0,就可以繼續(xù)進行數(shù)據(jù)接收發(fā)送,如果異常(為1),就應(yīng)該重新進入初始化狀態(tài),等待E_Link_D 為0 后才可以進行下一步操作。此外,也可對Sn_Kpalvtr 進行配置,當(dāng)其大于0 時,AT89C51 每間隔5 s 就會發(fā)送數(shù)據(jù)包,此時將Sn_Kpalvtr 設(shè)置為10,即每10 s 發(fā)送1 次心跳包,這樣能夠快速檢查網(wǎng)絡(luò)連接是否存在異常情況。
該系統(tǒng)使用屏蔽雙絞線(Shielded Twisted Pair,STP),將其分別與測試臺和計算機相連。為了測試網(wǎng)絡(luò)的連通性,實現(xiàn)客戶端與服務(wù)器間的數(shù)據(jù)高速傳輸,通過PING 命令向目標(biāo)端發(fā)送ICMP 請求,判斷目標(biāo)端能否到達。在主機端CMD命令下輸入192.168.0.1 命令(主機IP地址為192.168.0.109),此時能夠看到主機端已經(jīng)收到應(yīng)答,證明目標(biāo)端IP 層以下實現(xiàn)連通。
連通性測試后,可以繼續(xù)進行通信測試。對丟幀率的檢測來說,系統(tǒng)采用TCP/IP 協(xié)議,通過上位機軟件向AT89C51 發(fā)送控制指令,并接受AT89C51 的回傳數(shù)據(jù),實現(xiàn)數(shù)據(jù)波形無失幀被解調(diào)的目標(biāo)。從上位機軟件與AT89C51的通信結(jié)果中可以看出,該系統(tǒng)數(shù)據(jù)傳輸穩(wěn)定性良好,結(jié)果完整,未發(fā)現(xiàn)顯著的丟幀現(xiàn)象。
綜上所述,該系統(tǒng)設(shè)計基于嵌入式單片機AT89C51 的以太網(wǎng)高速數(shù)據(jù)傳輸系統(tǒng),在TCP/IP 協(xié)議的輔助下使傳輸可靠性得到保障,傳輸速率普遍高于90 Mbit/s。經(jīng)驗證可知,該系統(tǒng)結(jié)構(gòu)簡單,運行穩(wěn)定,成本低廉,開發(fā)程度高,基本實現(xiàn)了以太網(wǎng)的數(shù)據(jù)傳輸功能,并且無需引入操作系統(tǒng)就可以使嵌入式單片機與網(wǎng)絡(luò)進行連接,實用性較強,能夠在現(xiàn)場數(shù)據(jù)收集設(shè)備的數(shù)據(jù)傳輸和遠程操作等領(lǐng)域應(yīng)用。