昨日解说了怎么经过异步收发以及看门狗定时器&TCP/IP内核,今日持续给咱们介绍TCP/IP内核的内容,以及功用描绘。
8.3.2
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),装备如下:
0xFE4004 | 0xFE4005 |
0x13 | 0x88 |
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,装备如下:
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]
它设置、或被设置为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,设置如下:
0xFE400C | 0xFE400D | 0xFE400E | 0xFE400F |
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),装备如下:
0xFE4010 | 0xFE4011 |
0x13 | 0x88 |
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
例:网络操控信息协议(%&&&&&%MP)的协议号为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字节。