文張斌,陳志華
(暨南大學(xué) 信息技術(shù)研究所,廣東 廣州 510075)
目前,設(shè)備網(wǎng)絡(luò)化已經(jīng)成為業(yè)內(nèi)所達(dá)成共識(shí)的、必然的趨勢(shì),隨著硬件接入網(wǎng)絡(luò)被廣泛重視,大量高端的硬件板基本上都具備自帶的網(wǎng)口功能,很多成熟的開(kāi)發(fā)板都已具備了網(wǎng)口功能。然而,DSP6713B沒(méi)有自帶的以太網(wǎng)功能,所以需要擴(kuò)展網(wǎng)口來(lái)實(shí)現(xiàn)以太網(wǎng)的連接。現(xiàn)在被廣泛用作網(wǎng)口擴(kuò)展的芯片有DM9000,RTL8019等,相關(guān)資料也非常多。該設(shè)計(jì)為了解決DSP6713B沒(méi)有自帶網(wǎng)口的問(wèn)題,結(jié)合DM9000廣泛使用于網(wǎng)口擴(kuò)展的情況,提出一種采用DM9000網(wǎng)口驅(qū)動(dòng)芯片作為網(wǎng)口的底層硬件來(lái)實(shí)現(xiàn)TCP/IP物理層的方案,并且使用LWIP協(xié)議作為網(wǎng)口通信協(xié)議,最終實(shí)現(xiàn)了DSP網(wǎng)口功能擴(kuò)展[1-2]。
DM9000是一款完全集成并符合成本效益單芯片快速以太網(wǎng)MAC控制器與一般處理接口,1個(gè)10/100 M自適應(yīng)的PHY和4 K DWORD值的SRAM。
DM9000支持8位、16位和32位接口訪問(wèn)內(nèi)部存儲(chǔ)器,以支持不同的處理器。DM9000物理協(xié)議層接口完全支持使用10 Mbit/s下3類、4類、5類非屏蔽雙絞線和100 Mbit/s下5類非屏蔽雙絞線。這是完全符合IEEE 802.3u規(guī)格。它的自動(dòng)協(xié)調(diào)功能將自動(dòng)完成配置以最大限度地適合其線路帶寬。
DM9000與DSP連接如圖1所示。DM9000需要控制的主要引腳有:IOR、IOW、AEN、CMD(SA2)、INT、RST,數(shù)據(jù)線SD0~SD15(此處數(shù)據(jù)以16位傳輸)和地址線SA4~SA9。IOR和IOW分別為讀寫(xiě)引腳,低電平可以讀寫(xiě);AEN為DM9000選通引腳,此處只用到1個(gè)DM9000芯片,直接將AEN管腳接低電平,DM9000工作的默認(rèn)基地址為0x300,按照默認(rèn)地址選擇,將SA9與SA8接高電平,SA7~SA4接低電平,從而直接選通了DM9000芯片;CMD為命令/數(shù)據(jù)切換引腳,低電平時(shí)讀寫(xiě)命令操作,高電平時(shí)讀寫(xiě)數(shù)據(jù)操作,將CMD與DSP的EA2地址線連接;INT為中斷信號(hào)輸出引腳,與DSP的INT5中斷信號(hào)線連接,低電平時(shí)有中斷信號(hào);IOR為讀命令控制線,與DSP的AOE讀命令控制線連接;IOW為寫(xiě)命令控制線,與DSP的AWE寫(xiě)命令控制線連接;RST為復(fù)位信號(hào)引腳,與DSP的GP[0]管腳連接;SD0~SD15數(shù)據(jù)線與DSP的數(shù)據(jù)線ED0~ED15連接。
首先,將DM9000控制讀寫(xiě)命令基地址ADDR_BASE在DSP地址空間映射為0xB0000300,由于DSP的EA2地址管腳控制CMD,所以DM9000控制讀寫(xiě)數(shù)據(jù)基址DA?TA_BASE在DSP地址空間映射為0xB0000302。確定了DM9000控制讀寫(xiě)數(shù)據(jù)和命令的基址之后,接下來(lái)就是編寫(xiě)DM9000的驅(qū)動(dòng)程序,有2個(gè)函數(shù)需要完成,讀寄存器數(shù)據(jù)函數(shù)REG_read(uint8 reg)和寫(xiě)寄存器函數(shù)REG_write(uint8 reg,uint16 writedata),其中reg為相對(duì)于ADDR_BASE的偏移量,要寫(xiě)入ADDR_BASE地址中去,writedata是寄存器要寫(xiě)入的數(shù)據(jù),要寫(xiě)入DATA_BASE數(shù)據(jù)基址中去。
DM9000初始化第一步就是要使DM9000的硬件初始化,DSP的GP[0]控制DM9000的RST,RST低電平可以使硬件復(fù)位,要求保持RST低電平時(shí)間大于20 μs。第二步,DM9000還需要2次軟復(fù)位,往DM9000的NCR寄存器寫(xiě)入要求值即可實(shí)現(xiàn)DM9000軟復(fù)位。第三步,設(shè)置DM9000收發(fā)模式和開(kāi)中斷,最后設(shè)置DM9000的MAC地址,從而整個(gè)DM9000的初始化完成,進(jìn)行收發(fā)數(shù)據(jù)。
DM9000是發(fā)送和接收數(shù)據(jù)的底層硬件,因此,要實(shí)現(xiàn)數(shù)據(jù)與網(wǎng)絡(luò)接口的傳輸,就必須實(shí)現(xiàn)發(fā)送和接收函數(shù)的編寫(xiě),而發(fā)送和接收函數(shù)也是底層硬件與上層應(yīng)用程序的接口。
1.4.1 發(fā)送函數(shù)sendpacket()流程圖
DM9000發(fā)送函數(shù)流程圖如圖2所示。
1.4.2 接收函數(shù)recepacket()流程圖
DM9000從網(wǎng)絡(luò)中接到1個(gè)數(shù)據(jù)包后,會(huì)在數(shù)據(jù)包前面加上4個(gè)字節(jié),分別為“01H”(同MRCMDX的值)、“status”(同RSR寄存器的值)、“LENL”(數(shù)據(jù)包長(zhǎng)度低8位)、“LENH”(數(shù)據(jù)包長(zhǎng)度高8位)。整個(gè)接收過(guò)程如圖3所示。
圖2 DM9000發(fā)送函數(shù)流程圖
圖3 DM9000接收函數(shù)流程圖
LWIP協(xié)議是1個(gè)開(kāi)源的TCP/IP協(xié)議,它把整個(gè)TCP/IP協(xié)議封裝好,并且提供用戶移植需要的操作系統(tǒng)模擬層接口和用戶使用LWIP協(xié)議的API接口,該協(xié)議代碼占用內(nèi)存空間小,提供明確的操作系統(tǒng)模擬層移植說(shuō)明,已經(jīng)被廣泛運(yùn)用,且該協(xié)議支持不帶操作系統(tǒng)直接使用,大大降低了移植難度。
LWIP協(xié)議移植必須完成底層操作系統(tǒng)模擬層與底層硬件的接口,這樣才能讓LWIP協(xié)議真正運(yùn)行起來(lái)。然而要完成LWIP協(xié)議模擬層與硬件的通信,就必須實(shí)現(xiàn)4個(gè)重要函數(shù):網(wǎng)口芯片的初始化函數(shù),數(shù)據(jù)接收函數(shù),發(fā)送函數(shù)和網(wǎng)口中斷函數(shù)。
該設(shè)計(jì)使用DM9000作為網(wǎng)口芯片,上文已經(jīng)詳細(xì)介紹了DM9000網(wǎng)口芯片的初始化、發(fā)送和接收函數(shù)的實(shí)現(xiàn)。需要把發(fā)送函數(shù)sendpacket()和接收函數(shù)進(jìn)行部分改動(dòng)recepacket()。首先,對(duì)于發(fā)送函數(shù),LWIP中的發(fā)送數(shù)據(jù)存放在pbuf*p的p->payload中,所以發(fā)送的數(shù)據(jù)就是p->payload,而且發(fā)送數(shù)據(jù)p->payload是已經(jīng)封裝好的MAC幀,然后把生成的MAC幀發(fā)送出去;對(duì)于接收函數(shù),也是先把接收到得數(shù)據(jù)存放在p->payload,然后LWIP會(huì)自動(dòng)處理這些數(shù)據(jù)。
初始化函數(shù)ethernetinit()。首先,需要初始化LWIP,然后初始化DM9000芯片。LWIP初始化需要netif->state數(shù)據(jù)狀態(tài),netif->name以太網(wǎng)名,netif->output輸出函數(shù),netif->linkoutput連接函數(shù)。
網(wǎng)口中斷函數(shù)需要處理的有發(fā)送中斷處理、接收中斷處理和出錯(cuò)處理,一般出錯(cuò)的時(shí)候直接丟包不做處理,發(fā)送時(shí)調(diào)用發(fā)送函數(shù),接收時(shí)調(diào)用接收函數(shù)。
ARP分組格式圖如圖4所示。
ARP協(xié)議是地址解析協(xié)議,主要是通過(guò)目標(biāo)IP查詢得到目標(biāo)MAC地址的協(xié)議。首先,已知目標(biāo)IP,然后向網(wǎng)絡(luò)發(fā)送1個(gè)ARP分組報(bào)文,如果目標(biāo)IP收到報(bào)文,則發(fā)送1個(gè)ARP回文,從回文中便可得到目標(biāo)IP的MAC地址。
現(xiàn)在直接把ARP請(qǐng)求報(bào)文放在1個(gè)數(shù)組中,然后調(diào)用sendpacket()發(fā)送函數(shù),直接把ARP報(bào)文發(fā)送出去,然后等待ARP回文,收到回文就會(huì)調(diào)用中斷函數(shù),并把接收到的ARP回報(bào)存放在0x20001000地址開(kāi)始的地址空間。仿真結(jié)果如圖5所示。仿真結(jié)果顯示,回文中的目標(biāo)IP地址192.168.1.25,對(duì)應(yīng)的MAC地址為0x00,0x14,0x97,0xf0,0x07,0x24,該回文是從 MAC 地址為 0x6c,0xf0,0x49,0x92,0xb4,0x32,對(duì) 應(yīng) IP 地 址 為192.168.1.26,整個(gè)ARP地址解析過(guò)程說(shuō)明DM9000芯片初始化正確,接收和發(fā)送函數(shù)也能夠正常工作。
整個(gè)系統(tǒng)設(shè)計(jì)流程圖如圖6所示。首先,DSP6713B初始化,DSP的初始化主要是完成PLL時(shí)鐘,EMIF外部存儲(chǔ)器接口初始化和中斷初始化,PLL時(shí)鐘為DSP內(nèi)核和外部存儲(chǔ)器接口提供工作時(shí)鐘,EMIF外部存儲(chǔ)器接口的初始化主要是設(shè)定外部存儲(chǔ)器的類型、工作模式和讀寫(xiě)時(shí)序;其次,DM9000初始化,主要是設(shè)置DM9000的復(fù)位,工作模式和中斷的初始化;LWIP的初始化,主要是初始化LWIP的操作系統(tǒng)模擬層接口,實(shí)現(xiàn)LWIP與底層硬件的通信。整個(gè)系統(tǒng)的初始化完成。
建立1個(gè)TCP連接用來(lái)測(cè)試系統(tǒng)設(shè)計(jì)的效果。首先設(shè)置好本機(jī)的MAC地址,MAC地址在DM9000上面有標(biāo)明,這個(gè)是DM9000的固定MAC地址,不能自己更改;然后設(shè)置IP地址,網(wǎng)關(guān)和子網(wǎng)掩碼,這幾個(gè)參數(shù)應(yīng)依據(jù)使用的局域網(wǎng)設(shè)置;開(kāi)啟1個(gè)TCP通道,綁定到本地端口60023,端口號(hào)就代表著1個(gè)TCP線程,然后偵聽(tīng)TCP連接,與DSP建立TCP連接后,PC機(jī)向DSP發(fā)送字符串“LWIP”,如果PBUF的payload中成功接收該字符串,則DSP向PC機(jī)發(fā)送字符串“TCP TEST IS OK”。實(shí)驗(yàn)仿真結(jié)果如圖7和圖8所示。
DSP硬件板作為服務(wù)器,服務(wù)器IP地址為192.168.1.25,服務(wù)器端口為60023,PC機(jī)作為客戶端,打開(kāi)網(wǎng)絡(luò)調(diào)試助手,如圖8設(shè)置,然后單擊連接,就能夠把PC機(jī)和DSP硬件板連接上,往發(fā)送區(qū)填入發(fā)送數(shù)據(jù)LWIP(16進(jìn)制為0x5049574c)。從圖7可以看到LWIP數(shù)據(jù)存儲(chǔ)PBUF中的payload已經(jīng)接收到了0x5049574c,在確定接收數(shù)據(jù)為0x5049574c后,DSP向PC發(fā)送字符串“TCP TEST IS OK”,在圖8網(wǎng)絡(luò)調(diào)試助手的接收區(qū)可以看到顯示接收到來(lái)自IP地址192.168.1.25的數(shù)據(jù)“TCP TEST IS OK”,TCP通信測(cè)試成功,表示DSP網(wǎng)口擴(kuò)展成功[3-4]。
針對(duì)DSP6713B沒(méi)有自帶網(wǎng)口功能,提出了基于DM9000網(wǎng)口擴(kuò)展芯片擴(kuò)展網(wǎng)口的方法。該設(shè)計(jì)詳細(xì)地分析了DM9000初始化過(guò)程,指出DM9000發(fā)送和接收函數(shù)需要解決的問(wèn)題和實(shí)現(xiàn)的具體過(guò)程,并且把DM9000網(wǎng)口芯片作為L(zhǎng)WIP網(wǎng)口通信協(xié)議的驅(qū)動(dòng)底層,實(shí)現(xiàn)了LWIP協(xié)議操作系統(tǒng)模擬層接口并最終實(shí)現(xiàn)LWIP協(xié)議的移植。采用TCP通信測(cè)試整個(gè)系統(tǒng)的功能,并最終實(shí)現(xiàn)了DSP與PC機(jī)的TCP通信,整個(gè)設(shè)計(jì)穩(wěn)定、可靠,能夠有效地運(yùn)用在現(xiàn)實(shí)的網(wǎng)口功能上,具有很好的市場(chǎng)前景。
[1]張翠,鄧志良.LWIP協(xié)議棧在μC/OS-II上的移植和應(yīng)用[J].微計(jì)算機(jī)信息,2010,26(3):84-86.
[2]李國(guó)輝,范科峰.基于ARM+DM9000的TCP/IP協(xié)議棧的移植與實(shí)現(xiàn)[J].電子科技,2008,21(6):66-69.
[3]袁安富,夏生鳳.基于ARM和Linux的DM9000網(wǎng)絡(luò)接口設(shè)計(jì)及驅(qū)動(dòng)實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2011,33(2):27-31.
[4]胡俐蕊.基于LWIP的μC/OS-II網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)方法[J].計(jì)算機(jī)應(yīng)用與軟件,2010,19(1):145-148.