文張斌,陳志華
(暨南大學 信息技術研究所,廣東 廣州 510075)
目前,設備網絡化已經成為業(yè)內所達成共識的、必然的趨勢,隨著硬件接入網絡被廣泛重視,大量高端的硬件板基本上都具備自帶的網口功能,很多成熟的開發(fā)板都已具備了網口功能。然而,DSP6713B沒有自帶的以太網功能,所以需要擴展網口來實現以太網的連接。現在被廣泛用作網口擴展的芯片有DM9000,RTL8019等,相關資料也非常多。該設計為了解決DSP6713B沒有自帶網口的問題,結合DM9000廣泛使用于網口擴展的情況,提出一種采用DM9000網口驅動芯片作為網口的底層硬件來實現TCP/IP物理層的方案,并且使用LWIP協議作為網口通信協議,最終實現了DSP網口功能擴展[1-2]。
DM9000是一款完全集成并符合成本效益單芯片快速以太網MAC控制器與一般處理接口,1個10/100 M自適應的PHY和4 K DWORD值的SRAM。
DM9000支持8位、16位和32位接口訪問內部存儲器,以支持不同的處理器。DM9000物理協議層接口完全支持使用10 Mbit/s下3類、4類、5類非屏蔽雙絞線和100 Mbit/s下5類非屏蔽雙絞線。這是完全符合IEEE 802.3u規(guī)格。它的自動協調功能將自動完成配置以最大限度地適合其線路帶寬。
DM9000與DSP連接如圖1所示。DM9000需要控制的主要引腳有:IOR、IOW、AEN、CMD(SA2)、INT、RST,數據線SD0~SD15(此處數據以16位傳輸)和地址線SA4~SA9。IOR和IOW分別為讀寫引腳,低電平可以讀寫;AEN為DM9000選通引腳,此處只用到1個DM9000芯片,直接將AEN管腳接低電平,DM9000工作的默認基地址為0x300,按照默認地址選擇,將SA9與SA8接高電平,SA7~SA4接低電平,從而直接選通了DM9000芯片;CMD為命令/數據切換引腳,低電平時讀寫命令操作,高電平時讀寫數據操作,將CMD與DSP的EA2地址線連接;INT為中斷信號輸出引腳,與DSP的INT5中斷信號線連接,低電平時有中斷信號;IOR為讀命令控制線,與DSP的AOE讀命令控制線連接;IOW為寫命令控制線,與DSP的AWE寫命令控制線連接;RST為復位信號引腳,與DSP的GP[0]管腳連接;SD0~SD15數據線與DSP的數據線ED0~ED15連接。

首先,將DM9000控制讀寫命令基地址ADDR_BASE在DSP地址空間映射為0xB0000300,由于DSP的EA2地址管腳控制CMD,所以DM9000控制讀寫數據基址DA?TA_BASE在DSP地址空間映射為0xB0000302。確定了DM9000控制讀寫數據和命令的基址之后,接下來就是編寫DM9000的驅動程序,有2個函數需要完成,讀寄存器數據函數REG_read(uint8 reg)和寫寄存器函數REG_write(uint8 reg,uint16 writedata),其中reg為相對于ADDR_BASE的偏移量,要寫入ADDR_BASE地址中去,writedata是寄存器要寫入的數據,要寫入DATA_BASE數據基址中去。
DM9000初始化第一步就是要使DM9000的硬件初始化,DSP的GP[0]控制DM9000的RST,RST低電平可以使硬件復位,要求保持RST低電平時間大于20 μs。第二步,DM9000還需要2次軟復位,往DM9000的NCR寄存器寫入要求值即可實現DM9000軟復位。第三步,設置DM9000收發(fā)模式和開中斷,最后設置DM9000的MAC地址,從而整個DM9000的初始化完成,進行收發(fā)數據。
DM9000是發(fā)送和接收數據的底層硬件,因此,要實現數據與網絡接口的傳輸,就必須實現發(fā)送和接收函數的編寫,而發(fā)送和接收函數也是底層硬件與上層應用程序的接口。
1.4.1 發(fā)送函數sendpacket()流程圖
DM9000發(fā)送函數流程圖如圖2所示。
1.4.2 接收函數recepacket()流程圖
DM9000從網絡中接到1個數據包后,會在數據包前面加上4個字節(jié),分別為“01H”(同MRCMDX的值)、“status”(同RSR寄存器的值)、“LENL”(數據包長度低8位)、“LENH”(數據包長度高8位)。整個接收過程如圖3所示。

圖2 DM9000發(fā)送函數流程圖

圖3 DM9000接收函數流程圖
LWIP協議是1個開源的TCP/IP協議,它把整個TCP/IP協議封裝好,并且提供用戶移植需要的操作系統模擬層接口和用戶使用LWIP協議的API接口,該協議代碼占用內存空間小,提供明確的操作系統模擬層移植說明,已經被廣泛運用,且該協議支持不帶操作系統直接使用,大大降低了移植難度。
LWIP協議移植必須完成底層操作系統模擬層與底層硬件的接口,這樣才能讓LWIP協議真正運行起來。然而要完成LWIP協議模擬層與硬件的通信,就必須實現4個重要函數:網口芯片的初始化函數,數據接收函數,發(fā)送函數和網口中斷函數。
該設計使用DM9000作為網口芯片,上文已經詳細介紹了DM9000網口芯片的初始化、發(fā)送和接收函數的實現。需要把發(fā)送函數sendpacket()和接收函數進行部分改動recepacket()。首先,對于發(fā)送函數,LWIP中的發(fā)送數據存放在pbuf*p的p->payload中,所以發(fā)送的數據就是p->payload,而且發(fā)送數據p->payload是已經封裝好的MAC幀,然后把生成的MAC幀發(fā)送出去;對于接收函數,也是先把接收到得數據存放在p->payload,然后LWIP會自動處理這些數據。
初始化函數ethernetinit()。首先,需要初始化LWIP,然后初始化DM9000芯片。LWIP初始化需要netif->state數據狀態(tài),netif->name以太網名,netif->output輸出函數,netif->linkoutput連接函數。
網口中斷函數需要處理的有發(fā)送中斷處理、接收中斷處理和出錯處理,一般出錯的時候直接丟包不做處理,發(fā)送時調用發(fā)送函數,接收時調用接收函數。
ARP分組格式圖如圖4所示。

ARP協議是地址解析協議,主要是通過目標IP查詢得到目標MAC地址的協議。首先,已知目標IP,然后向網絡發(fā)送1個ARP分組報文,如果目標IP收到報文,則發(fā)送1個ARP回文,從回文中便可得到目標IP的MAC地址。
現在直接把ARP請求報文放在1個數組中,然后調用sendpacket()發(fā)送函數,直接把ARP報文發(fā)送出去,然后等待ARP回文,收到回文就會調用中斷函數,并把接收到的ARP回報存放在0x20001000地址開始的地址空間。仿真結果如圖5所示。仿真結果顯示,回文中的目標IP地址192.168.1.25,對應的MAC地址為0x00,0x14,0x97,0xf0,0x07,0x24,該回文是從 MAC 地址為 0x6c,0xf0,0x49,0x92,0xb4,0x32,對 應 IP 地 址 為192.168.1.26,整個ARP地址解析過程說明DM9000芯片初始化正確,接收和發(fā)送函數也能夠正常工作。

整個系統設計流程圖如圖6所示。首先,DSP6713B初始化,DSP的初始化主要是完成PLL時鐘,EMIF外部存儲器接口初始化和中斷初始化,PLL時鐘為DSP內核和外部存儲器接口提供工作時鐘,EMIF外部存儲器接口的初始化主要是設定外部存儲器的類型、工作模式和讀寫時序;其次,DM9000初始化,主要是設置DM9000的復位,工作模式和中斷的初始化;LWIP的初始化,主要是初始化LWIP的操作系統模擬層接口,實現LWIP與底層硬件的通信。整個系統的初始化完成。

建立1個TCP連接用來測試系統設計的效果。首先設置好本機的MAC地址,MAC地址在DM9000上面有標明,這個是DM9000的固定MAC地址,不能自己更改;然后設置IP地址,網關和子網掩碼,這幾個參數應依據使用的局域網設置;開啟1個TCP通道,綁定到本地端口60023,端口號就代表著1個TCP線程,然后偵聽TCP連接,與DSP建立TCP連接后,PC機向DSP發(fā)送字符串“LWIP”,如果PBUF的payload中成功接收該字符串,則DSP向PC機發(fā)送字符串“TCP TEST IS OK”。實驗仿真結果如圖7和圖8所示。


DSP硬件板作為服務器,服務器IP地址為192.168.1.25,服務器端口為60023,PC機作為客戶端,打開網絡調試助手,如圖8設置,然后單擊連接,就能夠把PC機和DSP硬件板連接上,往發(fā)送區(qū)填入發(fā)送數據LWIP(16進制為0x5049574c)。從圖7可以看到LWIP數據存儲PBUF中的payload已經接收到了0x5049574c,在確定接收數據為0x5049574c后,DSP向PC發(fā)送字符串“TCP TEST IS OK”,在圖8網絡調試助手的接收區(qū)可以看到顯示接收到來自IP地址192.168.1.25的數據“TCP TEST IS OK”,TCP通信測試成功,表示DSP網口擴展成功[3-4]。
針對DSP6713B沒有自帶網口功能,提出了基于DM9000網口擴展芯片擴展網口的方法。該設計詳細地分析了DM9000初始化過程,指出DM9000發(fā)送和接收函數需要解決的問題和實現的具體過程,并且把DM9000網口芯片作為LWIP網口通信協議的驅動底層,實現了LWIP協議操作系統模擬層接口并最終實現LWIP協議的移植。采用TCP通信測試整個系統的功能,并最終實現了DSP與PC機的TCP通信,整個設計穩(wěn)定、可靠,能夠有效地運用在現實的網口功能上,具有很好的市場前景。
[1]張翠,鄧志良.LWIP協議棧在μC/OS-II上的移植和應用[J].微計算機信息,2010,26(3):84-86.
[2]李國輝,范科峰.基于ARM+DM9000的TCP/IP協議棧的移植與實現[J].電子科技,2008,21(6):66-69.
[3]袁安富,夏生鳳.基于ARM和Linux的DM9000網絡接口設計及驅動實現[J].計算機工程與科學,2011,33(2):27-31.
[4]胡俐蕊.基于LWIP的μC/OS-II網絡應用程序設計方法[J].計算機應用與軟件,2010,19(1):145-148.