新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)以太網(wǎng)控制芯片W7100A數(shù)據(jù)手冊(四)

單片機(jī)以太網(wǎng)控制芯片W7100A數(shù)據(jù)手冊(四)

作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏

昨天講解了如何通過異步收發(fā)以及看門狗定時(shí)器&TCP/IP內(nèi)核,今天繼續(xù)給大家介紹TCP/IP內(nèi)核的內(nèi)容,以及功能描述。

本文引用地址:http://m.butianyuan.cn/article/201611/322034.htm

8.3.2SOCKET寄存器

Sn_MR(SOCKET n模式寄存器)[R/W][0xFE4000 + 0x100n][0x0000]

該寄存器配置SOCKET n的協(xié)議或其他選項(xiàng).

Sn_CR (SOCKET n命令寄存器)[R/W][0xFE4001 + 0x100n][0x00]

該寄存器用于設(shè)置SOCKET n的命令,諸如:打開、連接、監(jiān)聽、發(fā)送、接收等操作。當(dāng)W7100A 確認(rèn)該命令之后, Sn_CR寄存器自動清零。即使Sn_CR清零,指令仍然在處理中。為了驗(yàn)證命令是否執(zhí)行完成,可以檢查Sn_IR寄存器或Sn_SR寄存器。

下面的命令只用于SOCKET 0且S0_MR(P3:P0) = S0_MR_PPPoE。

詳細(xì)信息請參考W5100應(yīng)用筆記”How to use ADSL”。

Sn_IR (SOCKET n中斷寄存器)[R/W][0xFE4002 + 0x100n][0x00]

Sn_IR寄存器提供SOCKET n的中斷類型信息(比如建立連接、中斷連接、收到數(shù)據(jù)、超時(shí)等)。當(dāng)產(chǎn)生一個中斷且中斷屏蔽器Sn_IMR對應(yīng)位為’1’,那么Sn_IR的中斷位將置’1’。為了清除Sn_IR位,主機(jī)需要向該位寫入’1’。當(dāng)Sn_IR所有位都清除,IR(n)將自動清除。這時(shí)它將向MCU發(fā)出INT5信號(nINT5:TCPIP內(nèi)核中斷)。

Sn_IMR (SOCKET n中斷屏蔽寄存器)[R/W][0xFE402C + 0x100n][0xFF]

它配置SOCKET n的中斷類型,以指示給主機(jī)。端口的中斷屏蔽寄存器Sn_IMR與Sn_IR相對應(yīng)。如果SOCKET產(chǎn)生中斷,Sn_IR相對應(yīng)的位置’1’,如果Sn_IMR與Sn_IR相對應(yīng)的位都置’1’,IR(n)置’1’。這時(shí)如果IMR(n)也置’1’,將產(chǎn)生中斷(‘/INT’引腳電平變低)

Sn_SR (SOCKET n狀態(tài)寄存器)[R][0xFE4003 + 0x100n][0x00]

該寄存器提供SOCKET n的狀態(tài)。在對Sn_CR寄存器進(jìn)行操作或數(shù)據(jù)包的收發(fā)過程中,SOCKET n 的狀態(tài)將發(fā)生改變。

下表描述了SOCKET n的不同狀態(tài)

下面是Sn_SR在改變過程中的臨時(shí)狀態(tài)。

Sn_PORT(SOCKET n源端口號)[R/W][(0xFE4004+0x100n)~(0xFE4005+0x100n)] [0x0000]

設(shè)置源端口號。

端口號只有SOCKET n工作在TCP、UDP模式下有效,在其它模式下無效。

端口號必須在OPEN命令之前設(shè)置。

例:設(shè)置SOCKET 0的端口號為5000(0x1388),配置如下:

0xFE40040xFE4005
0x130x88

Sn_DHAR (SOCKET n目的物理地址寄存器)[R/W][(0xFE4006 + 0x100n) – (0xFE400B + 0x100n)][FF.FF.FF.FF.FF.FF]

它設(shè)置、或被設(shè)置為SOCKET n的目的端物理地址。如果SOCKET 0用于PPPoE模式,S0_DHAR則設(shè)置為PPPoE服務(wù)器的物理地址,這個物理地址是已經(jīng)知道的。

在UDP或IPRAW模式使用SEND_MAC命令時(shí),需要將它設(shè)置為SOCKET n的目的物理地址。在TCP、UDP、IPRAW模式,使用CONNECT命令或SEND命令時(shí),Sn_DHAR是通過ARP過程獲得目的物理地址。在成功運(yùn)行CONNECT或SEND命令后,主機(jī)可以通過Sn_DHAR獲得目的物理地址。

當(dāng)使用W7100A的PPPoE時(shí),不需要設(shè)置PPPoE服務(wù)器的物理地址。

然而,即使不用W7100A的PPPoE處理,而是使用MACRAW模式,為了傳輸和接收PPPoE數(shù)據(jù)包,PPPoE服務(wù)器的物理地址(通過PPPoE過程獲得)、PPPoE服務(wù)器的IP地址、PPP會話的ID值都需要設(shè)置,MR(PPPoE)也需要設(shè)置為’1’。

S0_DHAR在OPEN命令之前就設(shè)置為PPPoE服務(wù)器的物理地址。由S0_DAHAR設(shè)置的PPPoE服務(wù)器的物理地址在OPEN命令之后應(yīng)用于PDHAR。PPPoE的配置信息屬于內(nèi)部信息,即使在CLOSE命令之后仍然有效。

例:SOCKET 0的目的端的物理地址為:00.08.DC.01.02.10,配置如下:

0xFE40060xFE40070xFE40080xFE40090xFE400A0xFE400B
0x000x080xDC0x010x020x10

Sn_DIPR (SOCKET n目的IP地址寄存器)[R/W][(0xFE400C + 0x100n) – (0xFE400F + 0x100n)][00.00.00.00]

它設(shè)置、或被設(shè)置為SOCKET n的目的IP地址。如果SOCKET 0用于PPPoE模式,S0_DIPR0將設(shè)置為已知的PPPoE服務(wù)器的IP地址。

只有在TCP、UDP、IPRAW或PPPoE模式下有效,在MACRAW模式下無效。

當(dāng)SOCKET工作在TCP客戶端時(shí),在運(yùn)行CONNECT命令之前,它必須設(shè)置為TCP服務(wù)器的IP地址。而當(dāng)工作在TCP服務(wù)器模式時(shí),當(dāng)成功建立連接以后,它內(nèi)部自動設(shè)置為TCP客戶端的IP地址。

在UDP或IPRAW模式,為了傳輸U(kuò)DP或IPRAW數(shù)據(jù)包,在使用SEND或SEND_MAC命令之前,必須將目的端的IP地址設(shè)置到Sn_DIPR中。

在PPPoE模式,S0_DIPR設(shè)置為已知的PPPoE服務(wù)器的IP地址。

例:SOCKET 0的目的端的IP地址為:192.168.0.11,設(shè)置如下:

0xFE400C0xFE400D0xFE400E0xFE400F
192 (0xC0)168 (0xA8)0 (0x00)11 (0x0B)

Sn_DPORT (SOCKET n目的端口號寄存器)[R/W][(0xFE4010 + 0x100n) – (0xFE4011 + 0x100n)][0x0000]

SOCKET n的目的端口號由Sn_DPORT設(shè)置。如果SOCKET 0工作在PPPoE模式,Sn_DPORT0設(shè)置為已知的會話ID。

只有在TCP、UDP和PPPoE模式下有效,其它模式下無效。

在TCP客戶端模式時(shí),在運(yùn)行CONNECT命令之前,必須先將Sn_DPORT設(shè)置為TCP服務(wù)器的偵聽端口。

在UDP模式下,在SEND命令或SEND_MAC命令之前,需要先設(shè)置好UDP數(shù)據(jù)包的目的端口號Sn_DPORT。

在PPPoE模式下,S0_DPORT設(shè)置為已知的PPP會話ID。PPP會話ID在OPEN命令之后應(yīng)用于PSIDR。

例:設(shè)置SOCKET 0的目的端口號為5000(0x1388),配置如下:

0xFE40100xFE4011
0x130x88

Sn_MSSR(SOCKET n最大分段長度寄存器)[R/W][(0xFE4012 + 0x100n) – (0xFE4013 + 0x100n)][0x0000]

它設(shè)置SOCKET n的最大傳輸單元(MTU),或指示MTU已經(jīng)設(shè)置。它支持TCP或UDP模式。當(dāng)使用PPPoE(MR(PPPoE)=1),TCP或UDP的最大傳輸單元(MTU)是由PPPoE的MTU范圍確定的。

在IPRAW和MACRAW模式下,MTU不是由內(nèi)部處理的,但是使用默認(rèn)的MTU。因此當(dāng)傳輸?shù)臄?shù)據(jù)比默認(rèn)的MTU大,主機(jī)需要手動進(jìn)行分段使其在默認(rèn)的MTU范圍內(nèi)。

在SOCKET初始化過程中,復(fù)位值是0,但是MSSR會變成用戶設(shè)置值和默認(rèn)值之間較小的那個。如果沒有用戶設(shè)置值,MSSR則變成默認(rèn)值。

在TCP和UDP模式下,如果傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)比MTU大,W7100會自動將數(shù)據(jù)分段在MTU范圍內(nèi)。

在TCP模式,MTU就是我們所知道的MSS。通過選擇主機(jī)寫入的值和對端的MSS,在TCP連接過程中MSS自動選擇較小的值。

在UDP模式下,沒有TCP的連接過程,只使用主機(jī)寫入的值。當(dāng)與不同MTU的對端通信時(shí),W7100可以接收到ICMP(分段的MTU)數(shù)據(jù)包。當(dāng)IR(FMTU)=1時(shí),無法實(shí)現(xiàn)與對端的UDP通信。因此用戶必須關(guān)閉SOCKET,將Sn_MSSR設(shè)置為FMTU,然后再試著用OPEN命令打開端口進(jìn)行通信。

Sn_PROTO (SOCKET n協(xié)議號寄存器)[R/W][0xFE4014 + 0x100n][0x00]

這是一個1字節(jié)的寄存器,用于設(shè)置IP層數(shù)據(jù)包中IP包頭的協(xié)議號字段。

只有在IPRAW模式下有效,而在其它模式下都無效。Sn_PROTO必須在OPEN命令之前設(shè)置。當(dāng)SOCKET n以IPRAW模式打開時(shí),它發(fā)送和接收的是由Sn_PROTO設(shè)置的協(xié)議號的數(shù)據(jù)。Sn_PROTO的賦值范圍在0x00 ~ 0xFF之間。但W7100不支持TCP(0x06)和UDP(0x11)的協(xié)議號。協(xié)議號由IANA(互聯(lián)網(wǎng)編號分配機(jī)構(gòu))定義。詳細(xì)內(nèi)容請參考在線信息:

http://www.iana.org/assignments/protocol-numbers

例:網(wǎng)絡(luò)控制信息協(xié)議(ICMP)的協(xié)議號為0x01,網(wǎng)絡(luò)分組管理協(xié)議的協(xié)議號為0x02。

Sn_TOS(SOCKET n服務(wù)類型(TOS)寄存器)[R/W][0xFE4015 + 0x100n][0x00]

它設(shè)置服務(wù)類型(TOS),這是IP層數(shù)據(jù)包中IP包頭中的一個字段。必須在OPEN命令之前

進(jìn)行設(shè)置。

請參考:http://www.iana.org/assignments/ip-parameters.

Sn_TTL(SOCKET n生存時(shí)間(TTL)寄存器)[R/W][0xFE4016 + 0x100n][0x80]

它設(shè)置IP層數(shù)據(jù)包中IP包頭中的生存時(shí)間(TTL)字段。必須在OPEN命令之前進(jìn)行設(shè)置。

請參考:http://www.iana.org/assignments/ip-parameters

Sn_RXMEM_SIZE(SOCKET n接收存儲器大小寄存器) [R/W][0xFE401E + 0x100n][0x02]

它用于配置每一個SOCKET的RX存儲器的大小。每個SOCKET的RX存儲器大小可配置為1、2、4、8、16K字節(jié)。復(fù)位后默認(rèn)為2K字節(jié)。8個SOCKET的Sn_RXMEM_SIZE的總和為16K字節(jié)。


上一頁 1 2 3 下一頁

評論


技術(shù)專區(qū)

關(guān)閉