基于 DSP 的網(wǎng)絡通信程序設(shè)計
摘要:通過分析網(wǎng)卡基本通信過程控制和數(shù)字信號處理器(dsp)對網(wǎng)卡直接編程方法,成功設(shè)計基于dsp的網(wǎng)絡通信程序,從而最終實現(xiàn)dsp系統(tǒng)數(shù)字化和網(wǎng)絡化的融合。 關(guān)鍵詞:dsp 網(wǎng)絡通信程序 通信協(xié)議 網(wǎng)卡dsp芯片是專門為實現(xiàn)各種數(shù)字信號處理算法而設(shè)計的、具有特殊結(jié)構(gòu)的微處理器,其卓越的性能、不斷上升的性價比、日漸完善的開發(fā)方式使它的應用越來越廣泛。將計算機網(wǎng)絡技術(shù)引入以dsp為核心的嵌入式系統(tǒng),使其成為數(shù)字化、網(wǎng)絡化相結(jié)合,集通信、計算機和視聽功能于一體的電子產(chǎn)品,必須大大提升dsp系統(tǒng)的應用價值和市場前景。將dsp技術(shù)與網(wǎng)絡技術(shù)相結(jié)合,必須解決兩個關(guān)鍵問題:一是實現(xiàn)dsp與網(wǎng)卡的硬件接口技術(shù),二是基于dsp的網(wǎng)絡通信程序設(shè)計。dsp與網(wǎng)卡的硬件接口技術(shù)參考文獻[1]有比較詳盡的論述,以下主要討論基于dsp的網(wǎng)絡通信程序設(shè)計。1 通信協(xié)議的制定協(xié)議是用來管理通信的法規(guī),是網(wǎng)絡系統(tǒng)功能實現(xiàn)的基礎(chǔ)。由于dsp可以實現(xiàn)對網(wǎng)卡的直接操作,對應于osi網(wǎng)絡模型,網(wǎng)卡包含了物理層和數(shù)據(jù)鏈路層的全部內(nèi)容,因此,規(guī)定了數(shù)據(jù)鏈路層上數(shù)據(jù)幀封裝格式,就可以為基于dsp的局域網(wǎng)絡中任意站點之間的通信提供具體規(guī)范。因為以太網(wǎng)是當今最受歡迎的局域網(wǎng)之一,在以太網(wǎng)中,網(wǎng)卡用于實現(xiàn)802.3規(guī)程,其典型代表是novell公司的ne2000和3com公司的3c503等網(wǎng)卡,所以研究工作中的具體試驗平臺是以dsp為核心構(gòu)成的以太局域網(wǎng),主要用于語音的實時通信,所使用的網(wǎng)卡為novell公司的ne2000網(wǎng)卡。ne2000網(wǎng)卡的基本組成請見參考文獻[2],其核心器件是網(wǎng)絡接口控制器(nic)dp8390。該器件有三部分功能:第一是ieee802.3mac(媒體訪問控制)子層協(xié)議邏輯,實現(xiàn)數(shù)據(jù)幀的封裝和解封,csma/ca(帶碰撞檢測功能的載波偵聽多址接入)協(xié)議以及crc校驗等功能;第二是寄存器堆,用戶對ne2000網(wǎng)卡通信過程的控制主要通過對這些寄存器堆中各種命令寄存器編程實現(xiàn);第三是對網(wǎng)卡上緩沖ram的讀寫控制邏輯。dp8390發(fā)送和接收采用標準的ieee802.3幀格式。ieee802.3參考了以太網(wǎng)的協(xié)議和技術(shù)規(guī)范,但對數(shù)據(jù)包的基本結(jié)構(gòu)進行了修改,主要是類型字段變成了長度字段。所以,以dsp為核心的局域網(wǎng)內(nèi)通信數(shù)據(jù)包基本格式如圖1所示。dsp讀出數(shù)據(jù)包和打包從目的地址開始。目的地址用來指明一個數(shù)據(jù)幀在網(wǎng)絡中被傳送的目的節(jié)點地址。ne2000支持3種目的地址:單地址、組地址及廣播地址。單地址表示只有1個節(jié)點可以接收該幀信息;組地址表示最多可以有64個字節(jié)接收同一幀信息;而廣播地址則表示它可以被同一網(wǎng)絡中的所有節(jié)接收。源地址是發(fā)送幀節(jié)點的物理地址,它只能是單地址。目的地址和源地址指網(wǎng)卡的硬件地址,又稱物理地址。在源地址之后的2個字節(jié)表示該幀的數(shù)據(jù)長度,只表示數(shù)據(jù)部分的長度,由用戶自己填入。數(shù)據(jù)字段由46~1500字節(jié)組成。大于1500字節(jié)的數(shù)據(jù)應分為多個幀來發(fā)送;小于46字節(jié)時,必須填充至46字節(jié)。原因有兩個:一是保證從目的地址字段到幀校驗字段長度為64字節(jié)的最短幀長,以便區(qū)分信道中的有效幀和無用信息;二是為了防止一個站發(fā)送短幀時,在第一個比特尚未到達總線的最遠端時就完成幀發(fā)送,因而在可能發(fā)生碰撞時檢測不到?jīng)_突信號。ne2000對接收到的從目的地址字段后小于64字節(jié)的幀均認為是“碎片”,并予以刪除。在數(shù)據(jù)字段,根據(jù)系統(tǒng)的具體功能要求,用戶可以預留出若干個字節(jié)以規(guī)定相應的協(xié)議,以便通信雙方依據(jù)這些字節(jié)中包含的信息實現(xiàn)不同的功能。2 基于dsp的網(wǎng)絡通信程序設(shè)計如果基于網(wǎng)絡操作系統(tǒng),用戶可以利用一些軟件對網(wǎng)絡操作系統(tǒng)的支持,很容易地編寫出優(yōu)秀的網(wǎng)絡通信程序,但這些程序必須依附于網(wǎng)絡操作系統(tǒng)。而在dsp環(huán)境下,必須深入了解網(wǎng)絡接口控制器(nic)的工作原理[2],通過對網(wǎng)絡直接編程,實現(xiàn)局域網(wǎng)內(nèi)任意站點之間的通信而完全拋開網(wǎng)絡操作系統(tǒng)。dsp對網(wǎng)卡的通信過程控制就是dsp對dp8390中各種寄存器進行編程控制,完成數(shù)據(jù)分組的正確發(fā)送和接收。dp8390的所有內(nèi)部寄存器都是8位,映像到4個頁面。每個頁面有16個可供讀寫的寄存器地址(ra=00h~0fh)。頁面的選擇由命令寄存器ca控制。第0頁寄存器用于收發(fā)過程,第1頁寄存器主要用于dp8390的初始化,第2頁寄存器則用于環(huán)路診斷。dsp對寄存器的操作是將寄存器作為dsp的端口設(shè)備,其實際物理端口地址(ppa)為網(wǎng)卡基本i/o端口地