新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机以太网控制芯片W7100A数据手册(四)

单片机以太网控制芯片W7100A数据手册(四)

作者: 时间:2016-11-26 来源:网络 收藏

昨天讲解了如何通过异步收发以及看门狗定时器&TCP/IP内核,今天继续给大家介绍TCP/IP内核的内容,以及功能描述。

本文引用地址:https://www.eepw.com.cn/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 下一页

评论


技术专区

关闭
站长统计
×

英飞凌|直播中...
想了解下一代汽车电子EEA向中央计算+区域控制架构演进,及其如何推动域融合与软件定义汽车吗?快来和英飞凌一起在线讨论一下吧!参会赢好礼,速入>>