iEthernet W5200数据手册(版本1.2.4)之:寄存器说明
协议号码已在IANA(互联网地址编码分配机构)里定义。如想阅读细节,请参考在线文檔
Uhttp://www.iana.org/assignments/protocol-numbersU.
例) Internet Control Message Protocol (ICMP - 互联网控制信息协议) = 0x01, Internet Group Management Protocol (互联网组群管理协议) = 0x02
Sn_TOS (Socket n-th IP服务类型寄存器) [R/W] [0x4015+0x0n00] [0x00]
该寄存器设置在IP层里IP header的TOS(Type of Service - 服务类型) 字段。它应在执行OPEN命令之前设置。请参考Uhttp://www.iana.org/assignments/ip-parametersU.
Sn_TTL (Socket n-th IP生存时间寄存器) [R/W] [0x4016+0x0n00] [0x80]
该寄存器设置在IP层里IP header的TTL(Time-To-Live - 生存时间) 字段。它应在执行OPEN命令之前设置。请参考Uhttp://www.iana.org/assignments/ip-parametersU.
Sn_RXMEM_SIZE (Socket n-th 接收內存大小寄存器) [R/W] [0x401E+0x0n00] [0x02]
该寄存器为每个SOCKET配置接收内存的大小。每个SOCKET的接收内存大小是可以配置为 1、2、4、8和16K字节。 当每次系统复位(Reset)时,它将被分配为2K字节。 而每个SOCKET的Sn_RXMEM_SIZE的总和(Sn_RXMEM_SIZESUM) 应是16KB。
Sn_TXMEM_SIZE (Socket n-th 传输内存大小寄存器) [R/W] [0x401E+0x0n00] [0x02]
该寄存器为每个SOCKET配置传输内存的大小。每个SOCKET的传输内存大小是可以配置为 1、2、4、8和16K字节。 当每次系统复位(Reset)时,它将被分配为2K字节。 而每个SOCKET的Sn_TXMEM_SIZE的总和(Sn_TXMEM_SIZESUM) 应是16KB。
Sn_TX_FSR (Socket n-th 传输空间大小寄存[R][0x4020+0x0n00-0x4021+0x0n00]
[0x0800]
该寄存器提供Socket n-th传输内存的可用大小空间(可供传输数据的字节大小)。请留意,主机不能编写大于Sn_TX_FSR的数据。因此,在发送数据之前,切记检查 Sn_TX_FSR。如果你的数据大小小于或等于 Sn_TX_FSR时,在复制数据后,可执行SEND或SEND_MAC命令来传输数据。
在TCP模式下,当W5200通过DATA/ACK机制确认已成功发送了某SIZE的data,那么FSR寄存器将自动增加SIZE大小的空间。 在其他模式下,当 Sn_IR(SENDOK)是‘1’ 时,Sn_TX_FSR会自动增加已传输的数据大小。
当检查该寄存器时,用户应先阅读高字节(0x4020,0x4120,0x4220,0x4320,0x4420,0x4520,0x4620,0x4720),然后阅读低字节(0x4021,0x4121,0x4221,0x4321,0x4421,0x4521,0x4621,0x4721) 才会得到正确的数值。
例) 如2048(0x0800) 在S0_TX_FSR时,
Sn_TX_RD (Socket n-th 传输读指针寄存器)[R][0x4022+0x0n00-0x4023+0x0n00]
[0x0000]
该寄存器显示传输内存里最后一个传输的地址。它可使用Socket n-th的命令寄存器中的SEND命令,把数据从目前 的Sn_TX_RD传输到Sn_TX_WR,并在传送完成后自动更新。
因此,在传输完成后,Sn_TX_RD和Sn_TX_WR将具有相同的数值。 当检查该寄存器时,用户应先阅读高字节(0x4022, 0x4122, 0x4222, 0x4322, 0x4422,
0x4522,0x4622, 0x4722),然后阅读低字节 (0x4023, 0x4123, 0x4223, 0x4323, 0x4423, 0x4523, 0x4623, 0x4723)才会得到正确的数值。
Sn_TX_WR (Socket n-th 传输写指针寄器)[R/W][0x4024+0x0n00-0x4025+0x0n00]
[0x0000] 该寄存器提供位置的信息用作编写传输数据。
当检查该寄存器时,用户应先阅读高字节(0x4024,0x4124, 0x4224, 0x4324, 0x4424, 0x4524, 0x4624, 0x4724),然后阅读低字节(0x4025, 0x4125, 0x4225, 0x4325, 0x4425, 0x4525, 0x4625, 0x4725) 才会得到正确的数值。
注意:此寄存器的数值会在成功执行SEND命令到Sn_CR后被改变。
例) 如2048(0x0800) 在S0_TX_WR时,
图 8 物理地址的计算
但这读取的数值本身并不是物理地址。因此,物理地址的计算方法如下。
1. Socket n-th传输基址地址(此后会称为gSn_TX_BASE) 和Socket n-th传输掩码地址(此后会称为gSn_TX_MASK)将会以TMSR数值计算。如有需要,请参考psedo的初始化代码。
2. 将Sn_TX_WR和gSn_TX_MASK进行位与运算(bitwise-AND operation),将得到的结果赋予Socket的传输内存中的偏移地址(此后会称为 get_offset)。
3. 把get_offset和gSn_TX_BASE的数值相加起来,然后将结果赋予物理地址(此后会称为get_start_address)。
现在,编写一个任何大小的传输数据到get_start_address。 (*如在编写的时候超过了Socket传输内存的上界,在这种情况下,先把传输数据编写到上界和把物理地址
- iEthernet W5200数据手册(版本1.2.4)之:引脚分配(09-18)
- iEthernet W5200数据手册(版本1.2.4)之:外部接口(09-18)
- iEthernet W5200数据手册(版本1.2.4)之:电器规格(09-18)
- 高性能32位移位寄存器单元的设计(06-14)
- STM32F之RTC(07-05)
- W5500 数据手册 Version 1.0 之:寄存器和内存构成(09-18)