新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機以太網控制芯片W7100A數據手冊(四)

        單片機以太網控制芯片W7100A數據手冊(四)

        作者: 時間:2016-11-26 來源:網絡 收藏

        昨天講解了如何通過異步收發以及看門狗定時器&TCP/IP內核,今天繼續給大家介紹TCP/IP內核的內容,以及功能描述。

        本文引用地址:http://www.104case.com/article/201611/322034.htm

        8.3.2SOCKET寄存器

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

        該寄存器配置SOCKET n的協議或其他選項.

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

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

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

        詳細信息請參考W5100應用筆記”How to use ADSL”。

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

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

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

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

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

        該寄存器提供SOCKET n的狀態。在對Sn_CR寄存器進行操作或數據包的收發過程中,SOCKET n 的狀態將發生改變。

        下表描述了SOCKET n的不同狀態

        下面是Sn_SR在改變過程中的臨時狀態。

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

        設置源端口號。

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

        端口號必須在OPEN命令之前設置。

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

        0xFE40040xFE4005
        0x130x88

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

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

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

        當使用W7100A的PPPoE時,不需要設置PPPoE服務器的物理地址。

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

        S0_DHAR在OPEN命令之前就設置為PPPoE服務器的物理地址。由S0_DAHAR設置的PPPoE服務器的物理地址在OPEN命令之后應用于PDHAR。PPPoE的配置信息屬于內部信息,即使在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]

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

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

        當SOCKET工作在TCP客戶端時,在運行CONNECT命令之前,它必須設置為TCP服務器的IP地址。而當工作在TCP服務器模式時,當成功建立連接以后,它內部自動設置為TCP客戶端的IP地址。

        在UDP或IPRAW模式,為了傳輸UDP或IPRAW數據包,在使用SEND或SEND_MAC命令之前,必須將目的端的IP地址設置到Sn_DIPR中。

        在PPPoE模式,S0_DIPR設置為已知的PPPoE服務器的IP地址。

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

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

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

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

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

        在TCP客戶端模式時,在運行CONNECT命令之前,必須先將Sn_DPORT設置為TCP服務器的偵聽端口。

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

        在PPPoE模式下,S0_DPORT設置為已知的PPP會話ID。PPP會話ID在OPEN命令之后應用于PSIDR。

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

        0xFE40100xFE4011
        0x130x88

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

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

        在IPRAW和MACRAW模式下,MTU不是由內部處理的,但是使用默認的MTU。因此當傳輸的數據比默認的MTU大,主機需要手動進行分段使其在默認的MTU范圍內。

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

        在TCP和UDP模式下,如果傳輸的數據字節數比MTU大,W7100會自動將數據分段在MTU范圍內。

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

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

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

        這是一個1字節的寄存器,用于設置IP層數據包中IP包頭的協議號字段。

        只有在IPRAW模式下有效,而在其它模式下都無效。Sn_PROTO必須在OPEN命令之前設置。當SOCKET n以IPRAW模式打開時,它發送和接收的是由Sn_PROTO設置的協議號的數據。Sn_PROTO的賦值范圍在0x00 ~ 0xFF之間。但W7100不支持TCP(0x06)和UDP(0x11)的協議號。協議號由IANA(互聯網編號分配機構)定義。詳細內容請參考在線信息:

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

        例:網絡控制信息協議(ICMP)的協議號為0x01,網絡分組管理協議的協議號為0x02。

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

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

        進行設置。

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

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

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

        請參考: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字節。復位后默認為2K字節。8個SOCKET的Sn_RXMEM_SIZE的總和為16K字節。


        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兴义市| 鹰潭市| 白河县| 徐州市| 托克托县| 普定县| 新晃| 姜堰市| 西充县| 福贡县| 措勤县| 阿拉尔市| 孝义市| 高唐县| 义马市| 博兴县| 同江市| 正镶白旗| 新乐市| 宁明县| 南雄市| 获嘉县| 香港 | 当涂县| 礼泉县| 邵阳县| 河西区| 光山县| 盐池县| 南昌县| 砚山县| 广丰县| 扶风县| 阳城县| 曲阜市| 嵩明县| 博湖县| 忻州市| 西乌珠穆沁旗| 日喀则市| 赤水市|