文獻標識碼: A
文章編號: 0258-7998(2013)09-0054-03
在諸多應用中[1]都需要對終端提供大量數(shù)據(jù)流[2]。使用數(shù)據(jù)傳輸系統(tǒng)進行傳輸能夠根據(jù)終端需求動態(tài)提供數(shù)據(jù),并且數(shù)據(jù)傳輸系統(tǒng)能夠針對不同終端的接口時序進行靈活調(diào)整[3]。本設計提出一種基于TCP/IP通信協(xié)議、使用以太網(wǎng)控制器芯片W5100與ARM內(nèi)核芯片實現(xiàn)的數(shù)據(jù)傳輸系統(tǒng)。本系統(tǒng)能夠?qū)C上的文件數(shù)據(jù)連續(xù)地傳輸給終端,并且針對終端接口的多樣性特點,能夠通過簡單的編程進行調(diào)整,以完成相同的數(shù)據(jù)傳輸功能。本文針對終端具有數(shù)據(jù)緩沖隊列FIFO的情況闡述本系統(tǒng)的硬件設計、接口時序以及軟件流程。對于不同終端,本系統(tǒng)只需經(jīng)過少量的軟件修改就可達到數(shù)據(jù)傳輸?shù)哪康亍?br/>
1 以太網(wǎng)控制器芯片W5100
以太網(wǎng)控制芯片W5100是WIZnet公司推出的一款單片網(wǎng)絡接口芯片[4]。W5100內(nèi)部集成了傳輸層、網(wǎng)絡層TCP/IP協(xié)議棧與數(shù)據(jù)鏈路層及介質(zhì)訪問子層MAC協(xié)議。這使得通過W5100進行以太網(wǎng)通信時,各層協(xié)議對設計者而言都是透明的。設計者不需要借助操作系統(tǒng),只需要通過W5100的地址線、數(shù)據(jù)線對其內(nèi)部寄存器進行簡單的讀寫訪問,就能靈活方便地控制W5100進行以太網(wǎng)通信。W5100還集成了物理層PHY并支持信號極性自適應,這使得在硬件設計中,只需要在W5100外部使用一個帶有網(wǎng)絡變壓器的RJ45座HR911103C,就可以實現(xiàn)其與PC通信。故本設計中選擇W5100實現(xiàn)以太網(wǎng)通信,既保證了接口簡單,又使得開發(fā)周期短。
本設計中,對W5100供給3.3 V與1.8 V兩種電源電壓。為了保證信號完整性,降低干擾,兩種電源電壓分別劃分為數(shù)字網(wǎng)絡與模擬網(wǎng)絡,網(wǎng)絡之間使用電感隔離;其地平面也分為數(shù)字地與模擬地,網(wǎng)絡之間使用鐵心磁珠隔離。W5100使用直接總線連接模式,其15 bit地址線與8 bit數(shù)據(jù)線與ARM芯片的通用I/O連接;W5100的控制線/CS、/WR、/RD、/RESET也直接與ARM芯片的通用I/O連接。由此實現(xiàn)ARM芯片對W5100的控制。W5100的SPI接口中的SEN、SCLK、MISO接固定電壓數(shù)字0 V,/SCS接固定電壓數(shù)字3.3 V,MISO保持懸空,由此屏蔽SPI接口。
2 ARM內(nèi)核芯片AT91SAM7SE
AT91SAM7SE是Atmel公司的一款基于ARM7內(nèi)核的處理器[5]。在本系統(tǒng)中,其作為MCU,完成對W5100一側(cè)的讀寫訪問,并完成對終端一側(cè)的數(shù)據(jù)轉(zhuǎn)發(fā)。AT91SAM7SE具有豐富的通用I/O管腳,能保證整個系統(tǒng)的靈活性。AT91SAM7SE使用 55.296 MHz作為主時鐘MCK、處理器時鐘PCK。
3 硬件設計與接口時序
3.1 硬件設計
W5100與AT91SAM7SE在硬件設計中采用直接總線連接模式,可以同時兼容間接總線連接模式。這樣設計是為了能夠在連續(xù)訪問發(fā)送存儲器、接收存儲器時工作于間接總線模式,使用W5100的地址自增功能;并且在非連續(xù)訪問時工作于直接總線模式,減少讀寫時序,以提高傳輸速率。
AT91SAM7SE與W5100之間的接口、AT91SAM7SE與終端之間的接口以及硬件設計的總體框圖如圖1所示。
3.2 AT91SAM7SE與W5100間接口時序
當AT91SAM7SE在/RESET線上輸出低電平2 ?滋s及以上時,W5100被復位,其公共寄存器、各端口寄存器都恢復初始值。本設計中/CS始終同步于/WR和/RD選中W5100。/WR、/RD與DATA[7:0]、ADDR[14:2]、ADDR[1:0]構(gòu)成讀寫時序,完成對W5100片內(nèi)寄存器、存儲器的訪問,/WR與/RD同時只能有一個有效。W5100可以工作于兩種總線模式下。
3.2.1 間接總線模式
當AT91SAM7SE連續(xù)訪問W5100發(fā)送存儲器、接收存儲器時,W5100工作在間接總線模式下,其地址線ADDR[14:2]穩(wěn)定輸出0。AT91SAM7SE首先在地址線ADDR[1:0]輸出01,選中W5100間接總線模式地址寄存器IDM_AR0;然后在數(shù)據(jù)線DATA[7:0]輸出需要訪問的W5100存儲器地址高7位AH,接著/WR與/CS輸出下降沿將AH寫入IDM_AR0;之后AT91SAM7SE再將需要訪問的W5100存儲器地址低8位AL以同樣方式寫入間接總線模式地址寄存器IDM_AR1;最后,通過/CS與/WR(或與/RD)連續(xù)輸出下降沿,連續(xù)訪問間接總線模式數(shù)據(jù)寄存器IDM_DR。間接總線模式地址寄存器IDM_AR0與IDM_AR1值的自增以及間接總線模式數(shù)據(jù)寄存器IDM_DR值的變化同步于/WR或/RD的下降沿。AT91S-
AM7SE在間接總線模式下連續(xù)訪問W5100的存儲器時序如圖2、圖3所示。
3.2.2 直接總線模式
當AT91SAM7SE訪問W5100模式寄存器、端口寄存器時,W5100工作在直接總線模式下,其15 bit地址線ADDR[14:0]直接選中各個寄存器。然后通過/CS與/WR(或與/RD)輸出下降沿實現(xiàn)訪問。
3.2.3 間接總線模式與直接總線模式對比
訪問單一存儲器時,使用間接總線模式需要3個總線時序,使用直接總線模式只需要一個總線時序。連續(xù)訪問存儲器時,使用地址自增功能,能夠使得訪問一個地址平均花費大約一個總線時序。雖然在間接總線模式下使用地址自增功能時,平均訪問一個地址仍然不會花費少于一個總線時序,但是在連續(xù)訪問時,AT91SAM7SE不需要在其通用I/O上準備每一個需要訪問的W5100的存儲器地址,在連續(xù)訪問開始后ADDR[1:0]的值是固定為11,因此平均花費在一個總線時序上的指令條數(shù)有所減少。所以當AT91SAM7SE配置為W5100工作模式、端口模式來讀取和更新端口信息時,使用直接總線模式以減少總線時序次數(shù);當AT91SAM7SE讀取、寫入TCP數(shù)據(jù)段數(shù)據(jù)時,使用間接總線模式以減少總線時序中的平均指令數(shù)。
3.3 AT91SAM7SE與終端間接口時序
AT91SAM7SE將從W5100接收存儲器中取回的TCP數(shù)據(jù)段數(shù)據(jù)先緩存在片內(nèi),再轉(zhuǎn)發(fā)給終端??紤]到本設計終端具有數(shù)據(jù)緩沖隊列FIFO,所以只使用RESET、CS、BLOCK、WR、DATA[31:0]信號線。當終端具有存儲器空間時,還需要使用ADDRESS信號線。根據(jù)終端接口的不同,可以對AT91SAM7SE編程,使其生成匹配的接口時序。由于選擇了ARM內(nèi)核的芯片作為MCU完成存儲轉(zhuǎn)發(fā)功能,所以能夠保證編程簡便,易于經(jīng)過少量修改而匹配各種終端的接口時序,使得代碼的重用性強。本設計中,RESET輸出高電平時清空FIFO;CS實現(xiàn)對終端的片選。當FIFO空時,BLOCK信號無效,指示AT91SAM7SE可以轉(zhuǎn)發(fā)數(shù)據(jù);當FIFO趨近于滿時,終端給出指示信號BLOCK,阻塞AT91SAM7SE,使其停止轉(zhuǎn)發(fā)數(shù)據(jù)。本設計中,AT91SAM7SE在WR的每一次上升沿將TCP數(shù)據(jù)段中的數(shù)據(jù)轉(zhuǎn)發(fā)到DATA[31:0]。由于AT91SAM7SE編程靈活,通用I/O管腳豐富,故可以重用于對各種終端進行數(shù)據(jù)傳輸。
4 軟件流程
在本設計中,AT91SAM7SE作為W5100的控制芯片,控制其工作在TCP/IP協(xié)議下,并作為服務器模式端SERVER。而客戶模式端CLIENT由PC機充當,PC運行Linux操作系統(tǒng),使用套接字Socket編程。由于PC通過本系統(tǒng)向終端傳輸大量數(shù)據(jù)流,這些數(shù)據(jù)不經(jīng)過路由,獨享信道,所以不會出現(xiàn)路由擁塞而導致分組被丟棄的情況。因此,本設計簡化了關于分組超時的檢測,使用AT91SAM7SE查詢W5100端口狀態(tài)寄存器Sn_SR及其他端口寄存器的方式來獲知通信所處的狀態(tài),并使用寫端口命令寄存器Sn_CR的方式來控制通信進程。圖4描述了PC通過本系統(tǒng)向終端傳輸數(shù)據(jù)的流程。
PC上的Socket程序非常簡單,只需要調(diào)用最基本的文件操作函數(shù)與Socket函數(shù)就能實現(xiàn)端口連接與文件傳輸。AT91SAM7SE上程序流程細節(jié)如下。
(1)上電,復位:AT91SAM7SE開始執(zhí)行程序。
(2)芯片初始化:配置AT91SAM7SE時鐘模塊、PIO模塊等。
(3)配置W5100:配置W5100的公共寄存器,設置IP地址、子網(wǎng)掩碼、MAC地址等。
(4)配置TCP端口:配置端口寄存器,使端口工作于TCP模式,設置端口號等。
(5)等待建立連接:寫端口命令寄存器,使端口處于等待PC發(fā)起連接的狀態(tài)。
(6)監(jiān)聽是否建立連接:輪詢端口狀態(tài)寄存器,循環(huán)等待端口與PC建立連接。
(7)監(jiān)聽是否接收到TCP數(shù)據(jù)段:輪詢端口接收數(shù)據(jù)長度寄存器,循環(huán)等待W5100從PC接收到TCP數(shù)據(jù)段。
(8)檢查是否為最末TCP數(shù)據(jù)段:查詢端口狀態(tài)寄存器,檢測當前狀態(tài),判斷其是否為最末TCP數(shù)據(jù)段。
(9)緩存TCP數(shù)據(jù)段中數(shù)據(jù):訪問接收數(shù)據(jù)長度寄存器、端口讀指針寄存器等,計算數(shù)據(jù)讀取位置等參數(shù),將接收到的TCP數(shù)據(jù)段數(shù)據(jù)以1 B為單位緩存在片上。
(10)轉(zhuǎn)發(fā)數(shù)據(jù):將緩存在AT91SAM7SE片上的數(shù)據(jù)以4 B為單位向終端FIFO轉(zhuǎn)發(fā)。
(11)斷開連接,關閉TCP端口:寫端口命令寄存器,使端口關閉,斷開與PC的連接。
其中步驟(9)需要訪問各寄存器,還需要通過間接總線模式數(shù)據(jù)寄存器連續(xù)訪問接收存儲器。本設計中采用直接總線模式和間接總線模式相配合的方式,完成對TCP數(shù)據(jù)段數(shù)據(jù)的讀取,步驟如下:
①在直接總線模式下訪問各寄存器。
②計算參數(shù),獲得TCP數(shù)據(jù)段數(shù)據(jù)在接收存儲器中的地址。
③切換至間接總線模式,開啟地址自增功能。
④連續(xù)讀取接收寄存器。
⑤切換回直接總線模式。
⑥訪問各寄存器,更新配置,繼續(xù)接收分組。
5 測試
測試中,通過PC向本系統(tǒng)傳輸文件,再使用FPGA模擬終端FIFO的接口時序,同時將本系統(tǒng)傳輸至終端的數(shù)據(jù)輸出到邏輯分析儀。對比邏輯分析儀采樣信號與原始文件數(shù)據(jù)可以得出結(jié)論,本系統(tǒng)能夠?qū)崿F(xiàn)數(shù)據(jù)的準確傳輸。邏輯分析儀采樣結(jié)果如圖5所示。表1記錄了傳輸不同大小文件所用的時間與平均傳輸速率。兼顧系統(tǒng)的靈活性與性能,MCU工作在55.296 MHz的情況下,平均傳輸速率能夠達到2.7 Mb/s。
本設計使用W5100與AT91SAM7SE實現(xiàn)了一種基于TCP/IP通信協(xié)議的數(shù)據(jù)傳輸系統(tǒng)。其硬件設計簡單,軟件編程靈活方便,可以適應不同的終端接口時序。整個系統(tǒng)具有集成度高、重用性強、適應性廣的特點。
參考文獻
[1] 蔣峰.W5100在遠程溫度采集系統(tǒng)中的應用[J].化工自動化及儀表,2011,38(2):214-217.
[2] 鄒依依,郭燦新,黃成軍,等.W5100在DSP遠程以太網(wǎng)數(shù)據(jù)通信系統(tǒng)中的應用[J].工業(yè)控制計算機,2008,21(8):20-21,23.
[3] 王炳義,劉爽,張偉,等.基于硬件協(xié)議棧W5100的圖像采集傳輸系統(tǒng)[J].電子技術(shù)應用,2009,35(3):92-93,96.
[4] WIZnet Co.,Inc.W5100 datasheet version 1.2.4[Z].2011.
[5] Atmel.AT91SAM ARM-based Flash MCU SAM7SE version 6222F[Z].2011.