單片機(jī)以太網(wǎng)控制芯片W7100A數(shù)據(jù)手冊(cè)(四)
昨天講解了如何通過(guò)異步收發(fā)以及看門狗定時(shí)器&TCP/IP內(nèi)核,今天繼續(xù)給大家介紹TCP/IP內(nèi)核的內(nèi)容,以及功能描述。
本文引用地址:http://butianyuan.cn/article/201611/322034.htm8.3.2
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的命令,諸如:打開(kāi)、連接、監(jiān)聽(tīng)、發(fā)送、接收等操作。當(dāng)W7100A 確認(rèn)該命令之后, Sn_CR寄存器自動(dòng)清零。即使Sn_CR清零,指令仍然在處理中。為了驗(yàn)證命令是否執(zhí)行完成,可以檢查Sn_IR寄存器或Sn_SR寄存器。
下面的命令只用于SOCKET 0且S0_MR(P3:P0) = S0_MR_PPPoE。
詳細(xì)信息請(qǐng)參考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)生一個(gè)中斷且中斷屏蔽器Sn_IMR對(duì)應(yīng)位為’1’,那么Sn_IR的中斷位將置’1’。為了清除Sn_IR位,主機(jī)需要向該位寫入’1’。當(dāng)Sn_IR所有位都清除,IR(n)將自動(dòng)清除。這時(shí)它將向MCU發(fā)出INT5信號(hào)(nINT5:TCPIP內(nèi)核中斷)。
Sn_IMR (SOCKET n中斷屏蔽寄存器)[R/W][0xFE402C + 0x100n][0xFF]
它配置SOCKET n的中斷類型,以指示給主機(jī)。端口的中斷屏蔽寄存器Sn_IMR與Sn_IR相對(duì)應(yīng)。如果SOCKET產(chǎn)生中斷,Sn_IR相對(duì)應(yīng)的位置’1’,如果Sn_IMR與Sn_IR相對(duì)應(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)。在對(duì)Sn_CR寄存器進(jìn)行操作或數(shù)據(jù)包的收發(fā)過(guò)程中,SOCKET n 的狀態(tài)將發(fā)生改變。
下表描述了SOCKET n的不同狀態(tài)
下面是Sn_SR在改變過(guò)程中的臨時(shí)狀態(tài)。
Sn_PORT(SOCKET n源端口號(hào))[R/W][(0xFE4004+0x100n)~(0xFE4005+0x100n)] [0x0000]
設(shè)置源端口號(hào)。
端口號(hào)只有SOCKET n工作在TCP、UDP模式下有效,在其它模式下無(wú)效。
端口號(hào)必須在OPEN命令之前設(shè)置。
例:設(shè)置SOCKET 0的端口號(hào)為5000(0x1388),配置如下:
0xFE4004 | 0xFE4005 |
0x13 | 0x88 |
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ù)器的物理地址,這個(gè)物理地址是已經(jīng)知道的。
在UDP或IPRAW模式使用SEND_MAC命令時(shí),需要將它設(shè)置為SOCKET n的目的物理地址。在TCP、UDP、IPRAW模式,使用CONNECT命令或SEND命令時(shí),Sn_DHAR是通過(guò)ARP過(guò)程獲得目的物理地址。在成功運(yùn)行CONNECT或SEND命令后,主機(jī)可以通過(guò)Sn_DHAR獲得目的物理地址。
當(dāng)使用W7100A的PPPoE時(shí),不需要設(shè)置PPPoE服務(wù)器的物理地址。
然而,即使不用W7100A的PPPoE處理,而是使用MACRAW模式,為了傳輸和接收PPPoE數(shù)據(jù)包,PPPoE服務(wù)器的物理地址(通過(guò)PPPoE過(guò)程獲得)、PPPoE服務(wù)器的IP地址、PPP會(huì)話的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,配置如下:
0xFE4006 | 0xFE4007 | 0xFE4008 | 0xFE4009 | 0xFE400A | 0xFE400B |
0x00 | 0x08 | 0xDC | 0x01 | 0x02 | 0x10 |
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模式下無(wú)效。
當(dāng)SOCKET工作在TCP客戶端時(shí),在運(yùn)行CONNECT命令之前,它必須設(shè)置為TCP服務(wù)器的IP地址。而當(dāng)工作在TCP服務(wù)器模式時(shí),當(dāng)成功建立連接以后,它內(nèi)部自動(dòng)設(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è)置如下:
0xFE400C | 0xFE400D | 0xFE400E | 0xFE400F |
192 (0xC0) | 168 (0xA8) | 0 (0x00) | 11 (0x0B) |
Sn_DPORT (SOCKET n目的端口號(hào)寄存器)[R/W][(0xFE4010 + 0x100n) – (0xFE4011 + 0x100n)][0x0000]
SOCKET n的目的端口號(hào)由Sn_DPORT設(shè)置。如果SOCKET 0工作在PPPoE模式,Sn_DPORT0設(shè)置為已知的會(huì)話ID。
只有在TCP、UDP和PPPoE模式下有效,其它模式下無(wú)效。
在TCP客戶端模式時(shí),在運(yùn)行CONNECT命令之前,必須先將Sn_DPORT設(shè)置為TCP服務(wù)器的偵聽(tīng)端口。
在UDP模式下,在SEND命令或SEND_MAC命令之前,需要先設(shè)置好UDP數(shù)據(jù)包的目的端口號(hào)Sn_DPORT。
在PPPoE模式下,S0_DPORT設(shè)置為已知的PPP會(huì)話ID。PPP會(huì)話ID在OPEN命令之后應(yīng)用于PSIDR。
例:設(shè)置SOCKET 0的目的端口號(hào)為5000(0x1388),配置如下:
0xFE4010 | 0xFE4011 |
0x13 | 0x88 |
Sn_MSSR(SOCKET n最大分段長(zhǎng)度寄存器)[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ī)需要手動(dòng)進(jìn)行分段使其在默認(rèn)的MTU范圍內(nèi)。
在SOCKET初始化過(guò)程中,復(fù)位值是0,但是MSSR會(huì)變成用戶設(shè)置值和默認(rèn)值之間較小的那個(gè)。如果沒(méi)有用戶設(shè)置值,MSSR則變成默認(rèn)值。
在TCP和UDP模式下,如果傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)比MTU大,W7100會(huì)自動(dòng)將數(shù)據(jù)分段在MTU范圍內(nèi)。
在TCP模式,MTU就是我們所知道的MSS。通過(guò)選擇主機(jī)寫入的值和對(duì)端的MSS,在TCP連接過(guò)程中MSS自動(dòng)選擇較小的值。
在UDP模式下,沒(méi)有TCP的連接過(guò)程,只使用主機(jī)寫入的值。當(dāng)與不同MTU的對(duì)端通信時(shí),W7100可以接收到ICMP(分段的MTU)數(shù)據(jù)包。當(dāng)IR(FMTU)=1時(shí),無(wú)法實(shí)現(xiàn)與對(duì)端的UDP通信。因此用戶必須關(guān)閉SOCKET,將Sn_MSSR設(shè)置為FMTU,然后再試著用OPEN命令打開(kāi)端口進(jìn)行通信。
Sn_PROTO (SOCKET n協(xié)議號(hào)寄存器)[R/W][0xFE4014 + 0x100n][0x00]
這是一個(gè)1字節(jié)的寄存器,用于設(shè)置IP層數(shù)據(jù)包中IP包頭的協(xié)議號(hào)字段。
只有在IPRAW模式下有效,而在其它模式下都無(wú)效。Sn_PROTO必須在OPEN命令之前設(shè)置。當(dāng)SOCKET n以IPRAW模式打開(kāi)時(shí),它發(fā)送和接收的是由Sn_PROTO設(shè)置的協(xié)議號(hào)的數(shù)據(jù)。Sn_PROTO的賦值范圍在0x00 ~ 0xFF之間。但W7100不支持TCP(0x06)和UDP(0x11)的協(xié)議號(hào)。協(xié)議號(hào)由IANA(互聯(lián)網(wǎng)編號(hào)分配機(jī)構(gòu))定義。詳細(xì)內(nèi)容請(qǐng)參考在線信息:
http://www.iana.org/assignments/protocol-numbers
例:網(wǎng)絡(luò)控制信息協(xié)議(ICMP)的協(xié)議號(hào)為0x01,網(wǎng)絡(luò)分組管理協(xié)議的協(xié)議號(hào)為0x02。
Sn_TOS(SOCKET n服務(wù)類型(TOS)寄存器)[R/W][0xFE4015 + 0x100n][0x00]
它設(shè)置服務(wù)類型(TOS),這是IP層數(shù)據(jù)包中IP包頭中的一個(gè)字段。必須在OPEN命令之前
進(jìn)行設(shè)置。
請(qǐng)參考: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è)置。
請(qǐng)參考:http://www.iana.org/assignments/ip-parameters
Sn_RXMEM_SIZE(SOCKET n接收存儲(chǔ)器大小寄存器) [R/W][0xFE401E + 0x100n][0x02]
它用于配置每一個(gè)SOCKET的RX存儲(chǔ)器的大小。每個(gè)SOCKET的RX存儲(chǔ)器大小可配置為1、2、4、8、16K字節(jié)。復(fù)位后默認(rèn)為2K字節(jié)。8個(gè)SOCKET的Sn_RXMEM_SIZE的總和為16K字節(jié)。
評(píng)論