freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于dm9000a的tcp通信設(shè)計畢業(yè)論文-文庫吧資料

2025-06-24 15:28本頁面
  

【正文】 RP協(xié)議輸入處理過程。(4)收到ARP應(yīng)答后,使ARP進行請求——應(yīng)答交換的IP數(shù)據(jù)報現(xiàn)在就可以傳送了。發(fā)送ARP應(yīng)答包含IP地址及對應(yīng)的硬件地址,發(fā)送ARP請求的機器收到ARP應(yīng)答,就在ARP表和ARP cache中寫入目的主機IP地址到硬件地址的映射,以備將來之用。ARP請求數(shù)據(jù)幀中包含目的主機的IP地址,其意思是“如果你是這個IP地址的擁有者,請回答你的硬件地址”。如果找到了,ARP就把物理地址返回給提供IP地址的應(yīng)用。高速緩存中每一項的生存時間一般為20分鐘,起始時間從被創(chuàng)建時開始算起。2. ARP高速緩存以及工作分析ARP高效運行的關(guān)鍵是由于每個主機上都有一個ARP高速緩存。在軟件編程時,為了實現(xiàn)ARP協(xié)議,本設(shè)計定義了ARP的結(jié)構(gòu)體,如下:struct arp_entry { UINT8 state; UINT8 type; UINT8 retries; UINT8 ttl; UINT8 hwadr[MAXHWALEN]; UINT32 pradr; } 在這個結(jié)構(gòu)體中,定義了:狀態(tài)state包括ARP_FREE(空閑)、ARP_RESERVED(保留)、ARP_PENDING(等待回應(yīng))、ARP_RESOLVED(完成)幾種狀態(tài);類型type包括ARP_FIXED_IP(固定IP)、ARP_TEMP_IP(臨時IP);重發(fā)次數(shù)retries為5次;定義生存時間ttl為60秒;hwadr[MAXHWALEN]為物理地址、pradr為緩存表IP地址。對于一個ARP請求來說,除了目的端硬件地址外的所有其他的字段都有填充值。對于以太網(wǎng)上IP地址的ARP請求或應(yīng)答來說,它們的值分別為6和4。如本課題設(shè)計,在以太網(wǎng)上使用IP協(xié)議進行通信,則硬件類型字段應(yīng)為1,協(xié)議類型字段應(yīng)存儲0x0800。硬件類型字段表示硬件地址的類型,它存儲的是以太網(wǎng)的MAC幀,則值為1。形容詞hardware(硬件)和protocol(協(xié)議)用來描述ARP分組中的各個字段。以太網(wǎng)報頭中的目的地址為全1的特殊地址即廣播地址,電纜上的所有以太網(wǎng)接口都要接收廣播的數(shù)據(jù)幀。這是由于以太網(wǎng)設(shè)備并不識別32位的網(wǎng)絡(luò)地址,它是以48位的物理地址來傳輸以太網(wǎng)數(shù)據(jù)包的,因此IP驅(qū)動器必須把網(wǎng)絡(luò)目的地址轉(zhuǎn)換為物理目的地址。以上各種協(xié)議的處理過程將在后文詳細地描述。 當接收處理完數(shù)據(jù)以后。若是IP數(shù)據(jù)包,還要具體分析是哪種報文,因為ICMP、TCP報文都是用IP傳送的。 開 始 接收以太網(wǎng)數(shù)據(jù)是ARP包?是IP包?是ICMP包?是TCP包?YN調(diào)用ARP協(xié)議處理調(diào)用ICMP協(xié)議處理初始化設(shè)置結(jié)束調(diào)用TCP協(xié)議處理調(diào)用TCP應(yīng)用層偵聽事件處理YYYNNN 主程序流程圖 首先調(diào)用DM9000A驅(qū)動,獲取數(shù)據(jù),實現(xiàn)以太網(wǎng)的數(shù)據(jù)接收。初始化是編程實現(xiàn)設(shè)計的必要步驟,如圖所示以初始化設(shè)置為第一步,進入本課題的設(shè)計,它包括設(shè)置時鐘初始化、I/O初始化、存儲器CHCHE配置、使能CACHE及看門狗初始化、中斷初始化和網(wǎng)絡(luò)初始化。數(shù)據(jù)接收時,各層對數(shù)據(jù)進行解包,剝離出頭部信息,進行適當?shù)谋4?,然后將?shù)據(jù)傳遞到上一層處理。每層協(xié)議按照自己的方式進行數(shù)據(jù)的封裝和拆封。常見的應(yīng)用層協(xié)議有FTP文件傳輸協(xié)議、HTTP超文本傳輸協(xié)議、SMTP簡單郵件傳送協(xié)議、Telnet遠程登錄協(xié)議等[10]。傳輸層定義了兩個端到端的傳輸層協(xié)議:一個是TCP傳輸控制協(xié)議,它是一個面向連接的協(xié)議,允許從一臺機器發(fā)出的字節(jié)流無差錯的到達另一臺機器;另一個協(xié)議是UDP用戶數(shù)據(jù)報協(xié)議,它是一個不可靠的、不面向連接的傳輸協(xié)議,用于不需要TCP排序和流量控制的應(yīng)用中。網(wǎng)絡(luò)層還定義了ARP、RARP、ICMP等協(xié)議,以完成地址解析、傳遞網(wǎng)絡(luò)控制信息、提供差錯報告等功能。即確定是將數(shù)據(jù)鏈路層傳輸來的IP分組繼續(xù)傳給其他的網(wǎng)絡(luò)節(jié)點,還是直接傳給傳輸層;并對傳輸層發(fā)來的數(shù)據(jù)進行填充報頭、路徑選擇和發(fā)送。數(shù)據(jù)鏈路層的協(xié)議與網(wǎng)絡(luò)的具體實現(xiàn)有關(guān),通常包括網(wǎng)絡(luò)設(shè)備的驅(qū)動程序和對應(yīng)的網(wǎng)絡(luò)的接口卡,它們一起處理與傳輸媒介有關(guān)的物理接口細節(jié)。TCP/IP參考模型中的每一層都包含有一個或多個協(xié)議,而各個層次所包含的協(xié)議總和就構(gòu)成了TCP/IP協(xié)議棧[9]。在這四個層次中,每一層都有特定的功能,上一層直接利用下一層提供的服務(wù)來實現(xiàn)本層的功能,下一層又通過相鄰層之間的接口為上一層提供服務(wù)。TCP/IP協(xié)議代表了整個TCP/IP協(xié)議族,不僅包括TCP和IP兩個協(xié)議,還包括ARP、ICMP、UDP等多個協(xié)議,是Internet上最基本的網(wǎng)絡(luò)通信協(xié)議,是實現(xiàn)互聯(lián)網(wǎng)連接性和互操作性的關(guān)鍵。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。: 讀取接收數(shù)據(jù)包的地址讀取數(shù)據(jù)包第一個字節(jié) 接收有效數(shù)據(jù)開始 01H ?Y N 可接收的協(xié)議 類型?幀頭CRC校驗 正確?結(jié)束保存以太網(wǎng)協(xié)議頭讀取16位數(shù)據(jù)內(nèi)部接收數(shù)據(jù)緩存區(qū)Y N YN DM9000A的接收處理的流程圖4. DM9000A發(fā)送數(shù)據(jù)處理DM9000A發(fā)送處理具體實現(xiàn)函數(shù)為DM9000_SendFrame,首先由DM9000_outb()函數(shù)寫入數(shù)據(jù)命令,再由DM9000_outw()函數(shù)按照以太網(wǎng)協(xié)議的格式將16位數(shù)據(jù)寫入,發(fā)送到DM9000A的數(shù)據(jù)發(fā)送緩存區(qū)中,然后將數(shù)據(jù)長度等信息填充到DM9000A的相應(yīng)寄存器內(nèi),并寫入發(fā)送數(shù)據(jù)的長度,發(fā)送使能命令,DM9000A將緩存的數(shù)據(jù)和數(shù)據(jù)幀信息進行MAC組幀,并發(fā)送出去,并設(shè)置一個發(fā)送完成后的清除標志。所以,接收到的數(shù)據(jù)包的最小長度會是64字節(jié)。當接收的數(shù)據(jù)包長度小于60字節(jié)時,DM9000A會自動為不足的字節(jié)補上0,使其達到60字節(jié)。3. DM9000A接收數(shù)據(jù)處理 DM9000A接收以太網(wǎng)數(shù)據(jù)具體實現(xiàn)函數(shù)為DM9000_ReceiveFrame,首先要判斷數(shù)據(jù)幀的合法性,其具體過程是DM9000A從網(wǎng)絡(luò)中接到一個數(shù)據(jù)包后,會在數(shù)據(jù)包前面加上4個字節(jié),分別為[01H]、[status]、[LENL]、[LENH]。當在自己可接受的協(xié)議情況下,就使用在內(nèi)存中的可接納數(shù)據(jù)幀長度的內(nèi)存緩沖器,把NIC中的數(shù)據(jù)通過數(shù)據(jù)總線傳送到內(nèi)存,然后再交由上層的軟件作進一步的處理。驅(qū)動軟件則首先檢查MAC地址,從而判斷是否有自己應(yīng)當接收的數(shù)據(jù)報。 以太網(wǎng)幀結(jié)構(gòu)體定義如下: struct ethernet_frame { UINT8 destination[ETH_ADDRESS_LEN]; UINT8 source[ETH_ADDRESS_LEN]; UINT16 frame_size; UINT16 protocol; UINT16 buf_index; };2. 以太網(wǎng)的數(shù)據(jù)鏈路傳輸以太網(wǎng)基本上采用總線型的連接方式,在一條電纜上連接所有的計算機,當某臺計算機發(fā)送數(shù)據(jù)時,其信號可以傳輸給連接在電纜上的所有計算機。MAC幀在物理層傳輸時還須在幀前面插入8個字節(jié),它有兩段組成,第一個字段為7個字節(jié)的前同步碼,實現(xiàn)位同步。第四個是數(shù)據(jù)字段,其長度為46 ~1500字節(jié)之間。前兩個分別為6字節(jié)的目的端地址與發(fā)送端地址字段。本文將其賦值為0x80[7]。中斷屏蔽寄存器(IMR),Bit[0]表示1使能數(shù)據(jù)包接收中斷;Bit[1]表示1使能數(shù)據(jù)包傳輸終端;Bit[2]表示1使能接收溢出中斷;Bit[3]表示1使能接收溢出計數(shù)器溢出中斷;Bit[4]表示1使能傳輸“Underrun”中斷;Bit[5]表示1使能連接狀態(tài)改變中斷;Bit[7]表示1使能指針自動跳回。接收控制寄存器(RCR),Bit[0]表示接收使能;Bit[1]表示混雜模式(Promiscuous Mode);Bit[2]表示忽略不完整的數(shù)據(jù)包;Bit[3]表示忽略所有多點傳送;Bit[4]表示丟棄CRC校驗錯誤的數(shù)據(jù)包;Bit[5]表示丟棄長數(shù)據(jù)包,1為丟棄數(shù)據(jù)包長度超過1522字節(jié)的數(shù)據(jù)包;Bit[6]表示看門狗定時器禁止,1禁止,0使能。將其賦值為0x8。4到7位表示接收FIFO緩存溢出門限最高值;當接收SRAM空閑空間小于該門限值,則發(fā)送一個暫停時間(pause_time)為FFFFH的暫停包;若該值為0, 則無接收空閑空間,默認值為3H,即3K字節(jié)空閑空間,不要超過SRAM大小。對于溢出控制門限寄存器(FCTR), 將其賦值為0x38,它的0到3位表示接收FIFO緩存溢出門限最低值。它的4到7位表示背壓門限最高值,當接收SRAM空閑空間低于該門限值,則MAC將產(chǎn)生一個擁擠狀態(tài),默認值為3H,即3K字節(jié)空閑空間,不要超過SRAM(16KB)大小。 還用到了背壓門限寄存器(BPTR),它的0到3位表示擁擠狀態(tài)時間,默認為200us。 使用網(wǎng)絡(luò)狀態(tài)寄存器NSR清除各種狀態(tài)標志位,將其置為0x2C,賦值中斷狀態(tài)寄存器(ISR)為0x3f,來清除所有中斷標志位。本課題中將其設(shè)置為0x00。 設(shè)置發(fā)送控制寄存器(TCR),本課題中將其置為0x00。 網(wǎng)絡(luò)控制寄存器(NCR),設(shè)置網(wǎng)絡(luò)控制寄存器NCR的Bit[0](RST位)為1,進行軟件復(fù)位,設(shè)置網(wǎng)絡(luò)控制寄存器NCR,進行網(wǎng)絡(luò)工作模式設(shè)置。它的1到3位表示GPIO的1到3位的端口映射位,4到6位表示GPIO的4到6位的端口映射位。4到6位為GPIO的固定output不可寫,在本課題設(shè)計中,將其設(shè)置為0x01。0x01) != DM9000_IO_MODE) { return 1;} DM9000_iow(DM9000_NCR, 0x00); DM9000_iow(DM9000_TCR, 0x00); DM9000_iow(DM9000_SMCR,0x00); DM9000_iow(DM9000_NSR, 0x2C); DM9000_iow(DM9000_ISR, 0x3f); DM9000_iow(DM9000_BPTR,0x3f); DM9000_iow(DM9000_FCTR,0x38); DM9000_iow(DM9000_FCR, 0x29); for (i = 0,oft = DM9000_PAR;i 6;i++,oft++) DM9000_iow(oft,mac[i]); for (i = 0,oft = DM9000_MAR;i 8;i++,oft++) DM9000_iow(oft,0xff); DM9000_iow(DM9000_RCR,0x31); DM9000_iow(DM9000_IMR,17); ifdef ETHERNET_DEBUG DbgPrintf([DM9000 init is succed!]); end if } 對DM9000A的初始化,即填寫、設(shè)置DM9000A的控制寄存器,首先調(diào)用復(fù)位函數(shù),使GPIO默認0位為輸出以激活內(nèi)部PHY,寄存器NCR的第0位賦值為1,軟件復(fù)位清零,以便設(shè)置正常的工作模式。DM9000A內(nèi)部的16K字節(jié)SRAM被分成兩部分,一部分為發(fā)送(TX)緩沖區(qū),另一部分為接收(RX)緩沖區(qū),DM9000A的驅(qū)動程序主要由初始化函數(shù)、接收函數(shù)、發(fā)送函數(shù)和一些輔助函數(shù)組成[6]。5. DM9000A檢查PID與VID UINT32 DM9000_probe(void) { UINT32 id_val; id_val = DM9000_ior(DM9000_VIDL); id val|= DM9000_ior(DM9000_VIDH) 8; id val|= DM9000_ior(DM9000_PIDL) 16; id_val |= DM9000_ior(DM9000_PIDH) 24; if (id_val == DM9000_PIDVID) { ifdef ETHERNET_DEBUG DbgPrintf([DM9000_probe OK!]); endif return 1;} else { return 0;}}函數(shù)實現(xiàn)了DM9000檢查PID與VID,DM9000A默的PID是0x9000,VID是0x0A46。此程序首先是由INDEXPORT寫入需要讀取操作的寄存器地址,在由DATAPORT讀取寄存器內(nèi)的數(shù)據(jù)。 3. DM9000A寄存器讀數(shù)據(jù)__inline UINT8 DM9000_ior(UINT8 reg){ DM9000_outb(reg,DM9000_INDEX_PORT); return DM9000_inb(DM9000_DATA_PORT); } 使用如上函數(shù),實現(xiàn)DM9000A從寄存器中讀取數(shù)據(jù),首要對要訪問的寄存器正確尋址,再將DM9000A的數(shù)據(jù)端口和地址端口復(fù)用,通過CMD引腳來選擇端口。2. DM9000A軟件復(fù)位void DM9000_reset(void){ dlyus(20);DM9000_iow(DM9000_NCR, 0x03); dlyus(20); DM9000_iow(D
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1