W5100数据手册 Version 1.2.4 版本之:寄存器描述
4. 寄存器描述4.1 通用寄存器
MR(模式寄存器)
该寄存器用于软件复位、Ping阻止模式、PPPoE模式和间接总线接口。
GWR(网关IP地址寄存器)
该寄存器设置默认的网关地址。
例)网关地址为“192.168.0.1”,则
SUBR (子网掩码寄存器)
此寄存器用来设置子网掩码值。
例)子网掩码为“255.255.255.0”,则
SHAR (本机物理地址寄存器)
该寄存器设计本机物理地址。
例)本机物理地址为“00.08.DC.01.02.03”,则
SIPR (本机IP地址寄存器)
该寄存器设置本机IP地址。
例)本机IP地址为“192.168.0.3”,则
IR (中断寄存器)
CPU 通过访问该寄存器获得产生中断的来源。
任何中断都可以在中断寄存器(IMR)中被屏蔽。当任何一个未屏蔽的中断位为“1”,/INT的信号将保持低电平。只有当所有未屏蔽的中断位为0,/INT 才恢复高电平。
IMR (中断屏蔽寄存器)
中断屏蔽寄存器用于屏蔽中断源。每个中断屏蔽位对应中断寄存器(IR2)中的一个位。如果中断屏蔽位被置“1”时,在任何时候只要IR2对应的位置“1”,中断将会产生。而当IMR中屏蔽位被清零,即使对应的IR2中断位被置“1”也不会产生中断。
RTR (重发时间寄存器)
此寄存器设置时间溢出的值,每一单位数值表示100us.初始值设为2000(0x07D0),等于200毫秒。
例)设定400ms,应设置为4000(0x0FA0)
当发出 CONNECT、DISCON、CLOSE、SEND、SEND_MAC 及SEND_KEEP 等命令而没有收到远程对端的响应、或响应延时,都会导致重发过程。
RCR (重发计数寄存器)
该寄存器内的数值设定可重发的次数。如果重发的次数超过设定值,则产生超时中断(相关的端口中断寄存器中的Sn_IR 超时位(TIMEOUT)置“1”)。
RMSR(接收内存大小寄存器)
此寄存器分配总共8K的RX存储空间到各指定端口。
存储器大小根据S1,S0而定,如下表。
在8K的范围内,根据由S1,S0的值确定内存大小,从端口 0开始。如果内存不够分配,该端口不被使用。初始值是0x55,并且4个端口s被分别分配了2K内存。
例)当设置为0XAA时,每个端口分得4K的内存空间。
但总共的内存大小是8KB。通常是分给端口 0 和端口 1。因此,端口 2 和3绝不被使用。
TMSR(TX内存大小寄存器)
该寄存器用来将 8K 的发送存储区分配给每个端口。发送存储区的设置方法与接收存储区的设置完全一样。初始化值为0x55,即每端口分别分配2KB 的空间。
PATR (PPPoE模式下认证类型)
当与PPPoE服务器连接时,此寄存器指示安全认证的方法。W5100支持两种安全认证类型:PAP和CHAP。
PTIMER (PPP连接控制协议请求定时寄存器)
该寄存器表示发出LCP Echo(响应请求)所需要的时间间隔。每1 单位大约25 毫秒。 例)设置PTIMER为200,200 * 25(ms) = 5000(ms) = 5秒。
PMAGIC (PPP连接控制协议魔数寄存器)
此寄存器用于在LCP握手时的魔数选项。参阅应用笔记“How to connect ADSL”。
UIPR (无法到达IP地址寄存器)
在UDP 数据传输时(参照5.2.2. UDP),如果目的IP 地址不存在,将会收到一个ICMP(地址无法到达)数据包。在这种情况下,无法到达的IP 地址及端口号将分别存储到UIPR 和UPORT 中。
例)无法到达的IP地址“192.168.0.11”,则
UPORT (无法到达端口号寄存器)
详情请参照UIPR 所阐述的内容。 例)无法到达端口号“5000(0x1388)”,
4.2 端口寄存器
Sn1_MR (端口n模式寄存器) 2
该寄存器设置相应端口的选项或协议类型。
1n是端口数 (0, 1, 2, 3).
2[读/写] [端口 0地址, 端口1地址, 端口2地址, 端口3地址] [复位值]
Sn_CR (端口n命令寄存器)
此寄存器是用于相应端口的初始化,关闭,建立连接,断开连接,数据传输以及命令接收。在W5100确认命令后,寄存器的值将自动清为0x00。
Sn_IR (端口n中断寄存器)
该寄存器指示建立和终止连接、接受数据、发送完成以及时间溢出等信息。寄存器中相应的位被置“1”后必须写入“1”才清0。
Sn_SR (端口n状态寄存器)
此寄存器指示端口n的状态数值,端口n主要的状态如下流程图所示。
以下是端口状态改变时产生的状态
Sn_PORT (端口n源端口号寄存器) 该寄存器在 TCP或 UDP模式下设定对应端口的端口号。这些端口号必须在进行 OPEN指令之前完成。 例)设置端口 0的端口号为5000(0x1388),配置如下。
Sn_DHAR (端口n目的物理地址寄存器) 该寄存器设置每个端口的目的物理地址。 例)设置端口 0 的目的物理地址=08.DC.00.01.02.10,配置如下。
Sn_DIPR (端口n目标IP地址寄存器) 在 TCP模式,该寄存器设置端口的目的 IP地址。在主动模式(客户端模式),目的 IP地址必需设置后才能执行连接(CONNECT)命令。在被动模式时(服务器模式),W5100建立连接后,内部自动刷新目的 IP地址。 在 UDP模式,收到对端的 ARP响应后,该寄存器才确定为用户写入的值。没有收到对端的 ARP响应之前,该寄存器复位。 例)设置端口 0的目的IP地址=192.168.0.11,配置如下。
Sn_DPORT (端口n目的端口寄存器) 在 TCP模式,该寄存器设置端口的目的端口号。在主动模式下(客户端模式),目的端口号必需设置后再执行连接(CONNECT)命令。在被动模式下(服务器模式),W5100建立连接后,内部自动刷新目的端口号。 在 UDP模式,收到对端的 ARP响应后,该寄存器才确定为用户写入的值。在没有收到对端的 ARP响应之前,该寄存器复位。 例)设置端口 0目的端口号=5000(0x1388),配置如下。
Sn_MSS (端口n最大分片长度寄存器) 此寄存器用于TCP协议的MSS(最大分片长度),当TCP是在被动模式下被启动,该寄存器会显示MSS的设置。 例)设置端口 0 MSS=1460(0x05B4),配置如下。
Sn_PROTO (端口nIP协议寄存器)
在 IP RAW模式下,IP协议寄存器用来设置 IP数据包头的协议字段(Protocol Field)的值。IANA预先注册了一些协议号可以使用。IANA网站可查出全部的 IP层协议代码。
参考 IANA的在线文档(http://www.iana.org/assignments/protocol-numbers)。 例)网络协议报文协议(ICMP)协议号为0x01,网络分组管理协议(IGMP)协议号为0x02。
Sn_TOS (端口nIP服务类型寄存器) 此寄存器设置在IP头的TOS字段(服务器类型)。
Sn_TTL (端口n IP 生存时间寄存器) 该寄存器用来设置 IP数据包头中的生存期(TTL)字段的值。
Sn_TX_FSR (端口n发送存储器剩余空间大小寄存器)
该寄存器指示用户可使用的发送数据空间的大小。在发送数据时,用户必需先检查剩余空间的大小,然后控制发送数据的字节数。检查该寄存器时,必需先读高字节(0x0420,0x0520,0x0620,0x0720),然后再读低字节(0x0421,0x0521,0x0621,0x0721)。 例)2048(0x0800)在S0_TX_FSR中,
端口发送总空间的大小由发送存储器空间寄存器(TMSR)确定。在数据发送处理过程中,剩余空间的大小将因写入数据而减少,发送完成后自动增加。
Sn_TX_RR (端口n发送存储器读指针寄存器)
该寄存器指示端口在发送过程完成后发送存储器的当前位置。当端口 n的命令寄存器收到 SEND命令,从当前 Sn_TX_RR到 Sn_TX_WR的数据将发送出去,发送完成后,Sn_TX_RR的值自动改变。因此发送完成后,Sn_TX_RR的值与 Sn_TX_WR的值相等。用户读取该寄存器时,必须先读高字节(0x0422,0x0522,0x0622,0x0722),然后再读低字节(0x0423,0x0523,0x0623,0x0723)。
Sn_TX_WR (端口n发送存储器写指针寄存器) 该寄存器指示在向 TX存储器写入数据时的地址。用户读取该寄存器时,必须先读高字节(0x0424,0x0524,0x0624,0x0724),然后再读低字节(0x0425,0x0525,0x0625,0x0725)。 注:此寄存器的值在成功执行发送命令到Sn_CR后会改变。 例)2048(0x0800)在S0_TX_WR中,
从该寄存器读出的地址值不是实际访问的物理地址,实际访问的物理地址计算如下:
1. 端口 n发送存储器基地址(以后将称其为gSn_TX_BASE)和端口 n发送存储器屏蔽地址(以后将称其为gSn_TX_MASK)在TMSR值上进行计算。更多信息请参阅初始化的psedo代码。
2. 两个值的按位与操作中,Sn_TX_WR和gSn_TX_MASK给出了端口的发送存储器的范围偏移地址(之后称其为get_offset)。
3. get_offset 和 gSn_TX_BASE相加在一起得出物理地址(之后称其为get_start_address)。
现在可以将需要传送的数据写入到get_start_address。(* 有一种情况需要注意,写入数据时可能会超过端口n的TX存储器的上界。这时将数据写入上边界地址并且更改物理地址为gSn_TX_BASE ,接着写入其余的传输数据。) 之后,确保Sn_TX_WR的值与表示写入数据的大小相同。最后向Sn_CR (端口n命令寄存器)给发送指令。 如果有详细需要请参阅TCP服务器模式下的传输部分的psedo代码。
计算实际地址
Sn_RX_RSR (接收数据长度寄存器)
该寄存器指示端口接收数据缓冲区中接收数据的字节数。此值是由Sn_RX_RD 和 Sn_RX_WR内部计算出来的,对端口 n的命令寄存器(Sn_CR)写入RECV命令且接收远程的数据时,它将自动改变。当读取此寄存器时,用户应先读取高位(0x0426,0x0526,0x0626,0x0726)再读取地位(0x0427,0x0527,0x0627,0x0727)以便得到正确的值。
例)端口0的S0_RX_RSR值为2048(0x0800),则
该寄存器的最大值由 RMSR确定。
Sn_RX_RD (端口 n接收缓冲区读指针寄存器)
该寄存器指示端口接收过程完成后的读地址信息。读取该寄存器时,必须先读高字节(0x0428,0x0528,0x0628,0x0728),然后再读低字节(0x0429,0x0529,0x0629,0x0729)。 注:在成功执行接收命令到Sn_CR后,此寄存器值将会改变。
例)如端口 0的 S0_RX_RR值为 2048(0x0800),则
但这个值不是实际要读取的物理地址。实际的物理地址需要由下面的关系计算得出:
1. 端口 n接收基地址(之后称其为gSn_RX_BASE)和端口 n接收屏蔽地址(之后称其为gSn_RX_MASK)是在RMSR值上计算的。如需更多信息请参阅初始化pseudo代码。
2. 两个值的按位与操作中,Sn_RX_RD 和 gSn_RX_MASK给出了端口的发送存储器范围的偏移地址(之后称其为get_offset)。
3. get_offset 和 gSn_RX_BASE相加在一起得出物理地址(之后称其为get_start_address)。
现在可以根据物理地址(get_start_address)读取数据。(在读数据过程中,如果物理地址到达该端口设定的高限地址,此时,先读取高限地址的数据,然后将物理地址改为基地址 gSn_RX_BASE,并从基地址继续读取剩余的数据)。
读完所有的数据后,将 Sn_RX_RR的值加上读取的数据长度,然后写入到 Sn_RX_RR,最后向端口 n的指令寄存器(Sn_CR)写入 RECV命令。(详细内容请参照 TCP服务器模式中的接收部分)。
页:
[1]