DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1894|回复: 0
打印 上一主题 下一主题

[待整理] W5100数据手册 Version 1.2.4 版本之:寄存器描述

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 23:58:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
4. 寄存器描述
          4.1 通用寄存器
          MR(模式寄存器) [R/W] [0x0000] [0x00]
          该寄存器用于软件复位、Ping阻止模式、PPPoE模式和间接总线接口。
         
           
          GWR(网关IP地址寄存器)[R/W] [0x0001 – 0x0004] [0x00]
          该寄存器设置默认的网关地址。
           例)网关地址为“192.168.0.1”,则
         
           
          SUBR (子网掩码寄存器) [R/W] [0x0005 – 0x0008] [0x00]
          此寄存器用来设置子网掩码值。
          例)子网掩码为“255.255.255.0”,则
         
           
          SHAR (本机物理地址寄存器) [R/W] [0x0009 – 0x000E] [0x00]
          该寄存器设计本机物理地址。
           例)本机物理地址为“00.08.DC.01.02.03”,则
         
           
          SIPR (本机IP地址寄存器) [R/W] [0x000F – 0x0012] [0x00]
          该寄存器设置本机IP地址。
           例)本机IP地址为“192.168.0.3”,则
         
          IR (中断寄存器) [R] [0x0015] [0x00]
          CPU 通过访问该寄存器获得产生中断的来源。
           任何中断都可以在中断寄存器(IMR)中被屏蔽。当任何一个未屏蔽的中断位为“1”,/INT的信号将保持低电平。只有当所有未屏蔽的中断位为0,/INT 才恢复高电平。
         
         
         
           
          IMR (中断屏蔽寄存器) [R/W] [0x0016] [0x00]
          中断屏蔽寄存器用于屏蔽中断源。每个中断屏蔽位对应中断寄存器(IR2)中的一个位。如果中断屏蔽位被置“1”时,在任何时候只要IR2对应的位置“1”,中断将会产生。而当IMR中屏蔽位被清零,即使对应的IR2中断位被置“1”也不会产生中断。
         
          RTR (重发时间寄存器) [R/W] [0x0017 – 0x0018] [0x07D0]
          此寄存器设置时间溢出的值,每一单位数值表示100us.初始值设为2000(0x07D0),等于200毫秒。
          例)设定400ms,应设置为4000(0x0FA0)
         
         
          当发出 CONNECT、DISCON、CLOSE、SEND、SEND_MAC 及SEND_KEEP 等命令而没有收到远程对端的响应、或响应延时,都会导致重发过程。
           
          RCR (重发计数寄存器) [R/W] [0x0019] [0x08]
          该寄存器内的数值设定可重发的次数。如果重发的次数超过设定值,则产生超时中断(相关的端口中断寄存器中的Sn_IR 超时位(TIMEOUT)置“1”)。
           
           RMSR(接收内存大小寄存器) [R/W] [0x001A] [0x55]
          此寄存器分配总共8K的RX存储空间到各指定端口。
         
           
          存储器大小根据S1,S0而定,如下表。
         
           
          在8K的范围内,根据由S1,S0的值确定内存大小,从端口 0开始。如果内存不够分配,该端口不被使用。初始值是0x55,并且4个端口s被分别分配了2K内存。
           例)当设置为0XAA时,每个端口分得4K的内存空间。
          但总共的内存大小是8KB。通常是分给端口 0 和端口 1。因此,端口 2 和3绝不被使用。
         
           
          TMSR(TX内存大小寄存器) [R/W] [0x001B] [0x55]
          该寄存器用来将 8K 的发送存储区分配给每个端口。发送存储区的设置方法与接收存储区的设置完全一样。初始化值为0x55,即每端口分别分配2KB 的空间。
          PATR (PPPoE模式下认证类型)[R] [0x001C-0x001D] [0x0000]
          当与PPPoE服务器连接时,此寄存器指示安全认证的方法。W5100支持两种安全认证类型:PAP和CHAP。
         
           
          PTIMER (PPP连接控制协议请求定时寄存器) [R/W] [0x0028] [0x28]
          该寄存器表示发出LCP Echo(响应请求)所需要的时间间隔。每1 单位大约25 毫秒。 例)设置PTIMER为200,200 * 25(ms) = 5000(ms) = 5秒。
           
          PMAGIC (PPP连接控制协议魔数寄存器) [R/W] [0x0029] [0x00]
          此寄存器用于在LCP握手时的魔数选项。参阅应用笔记“How to connect ADSL”。
           
           UIPR (无法到达IP地址寄存器) [R] [0x002A – 0x002D] [0x00]
          在UDP 数据传输时(参照5.2.2. UDP),如果目的IP 地址不存在,将会收到一个ICMP(地址无法到达)数据包。在这种情况下,无法到达的IP 地址及端口号将分别存储到UIPR 和UPORT 中。
           例)无法到达的IP地址“192.168.0.11”,则
         
           
          UPORT (无法到达端口号寄存器) [R] [0x002E – 0x002F] [0x0000]
          详情请参照UIPR 所阐述的内容。 例)无法到达端口号“5000(0x1388)”,
         
           
          4.2 端口寄存器
          Sn1_MR (端口n模式寄存器) [R/W] [0x0400, 0x0500, 0x0600, 0x0700] [0x00]2
          该寄存器设置相应端口的选项或协议类型。
         
         
           
          1n是端口数 (0, 1, 2, 3).
          2[读/写] [端口 0地址, 端口1地址, 端口2地址, 端口3地址] [复位值]
         
          Sn_CR (端口n命令寄存器) [R/W] [0x0401, 0x0501, 0x0601, 0x0701] [0x00]
           
          此寄存器是用于相应端口的初始化,关闭,建立连接,断开连接,数据传输以及命令接收。在W5100确认命令后,寄存器的值将自动清为0x00。
         
          Sn_IR (端口n中断寄存器) [R] [0x0402, 0x0502, 0x0602, 0x0702] [0x00]
         
          该寄存器指示建立和终止连接、接受数据、发送完成以及时间溢出等信息。寄存器中相应的位被置“1”后必须写入“1”才清0。
         
          Sn_SR (端口n状态寄存器) [R] [0x0403, 0x0503, 0x0603, 0x0703] [0x00]
           
          此寄存器指示端口n的状态数值,端口n主要的状态如下流程图所示。
         
         
         
           
          以下是端口状态改变时产生的状态
         
           
          Sn_PORT (端口n源端口号寄存器) [R/W] [0x0404–0x0405, 0x0504–0x0505, 0x0604–0x0605, 0x0704–0x0705] [0x00] 该寄存器在 TCP或 UDP模式下设定对应端口的端口号。这些端口号必须在进行 OPEN指令之前完成。 例)设置端口 0的端口号为5000(0x1388),配置如下。
         
           
          Sn_DHAR (端口n目的物理地址寄存器) [R/W] [0x0406–0x040B, 0x0506–0x050B, 0x0606–0x060B, 0x0706–0x070B] [0xFF] 该寄存器设置每个端口的目的物理地址。 例)设置端口 0 的目的物理地址=08.DC.00.01.02.10,配置如下。
         
           
          Sn_DIPR (端口n目标IP地址寄存器) [R/W] [0x040C–0x040F, 0x050C–0x050F, 0x060C–0x060F, 0x070C–0x070F] [0x00] 在 TCP模式,该寄存器设置端口的目的 IP地址。在主动模式(客户端模式),目的 IP地址必需设置后才能执行连接(CONNECT)命令。在被动模式时(服务器模式),W5100建立连接后,内部自动刷新目的 IP地址。 在 UDP模式,收到对端的 ARP响应后,该寄存器才确定为用户写入的值。没有收到对端的 ARP响应之前,该寄存器复位。 例)设置端口 0的目的IP地址=192.168.0.11,配置如下。
         
           
          Sn_DPORT (端口n目的端口寄存器) [R/W] [0x0410–0x0411, 0x0510–0x0511, 0x0610–0x0611, 0x0710–0x0711] [0x00] 在 TCP模式,该寄存器设置端口的目的端口号。在主动模式下(客户端模式),目的端口号必需设置后再执行连接(CONNECT)命令。在被动模式下(服务器模式),W5100建立连接后,内部自动刷新目的端口号。 在 UDP模式,收到对端的 ARP响应后,该寄存器才确定为用户写入的值。在没有收到对端的 ARP响应之前,该寄存器复位。 例)设置端口 0目的端口号=5000(0x1388),配置如下。
         
         
          Sn_MSS (端口n最大分片长度寄存器) [R/W] [0x0412-0x0413, 0x0512-0x0513, 0x0612-0x0613, 0x0712-0x0713] [0x0000] 此寄存器用于TCP协议的MSS(最大分片长度),当TCP是在被动模式下被启动,该寄存器会显示MSS的设置。 例)设置端口 0 MSS=1460(0x05B4),配置如下。
         
           
          Sn_PROTO (端口nIP协议寄存器) [R/W] [0x0414, 0x0514, 0x0614, 0x0714] [0x00]
           
          在 IP RAW模式下,IP协议寄存器用来设置 IP数据包头的协议字段(Protocol Field)的值。IANA预先注册了一些协议号可以使用。IANA网站可查出全部的 IP层协议代码。
          参考 IANA的在线文档(http://www.iana.org/assignments/protocol-numbers)。 例)网络协议报文协议(ICMP)协议号为0x01,网络分组管理协议(IGMP)协议号为0x02。
           
           Sn_TOS (端口nIP服务类型寄存器) [R/W] [0x0415,0x0515,0x0615,0x0715] [0x00] 此寄存器设置在IP头的TOS字段(服务器类型)。
           
          Sn_TTL (端口n IP 生存时间寄存器) [R/W] [0x0416,0x0516,0x0616,0x0716] [0x80] 该寄存器用来设置 IP数据包头中的生存期(TTL)字段的值。
           
           Sn_TX_FSR (端口n发送存储器剩余空间大小寄存器) [R] [0x0420-0x0421, 0x0520-0x0521, 0x0620-0x0621, 0x0720-0x0721] [0x0800]
           
          该寄存器指示用户可使用的发送数据空间的大小。在发送数据时,用户必需先检查剩余空间的大小,然后控制发送数据的字节数。检查该寄存器时,必需先读高字节(0x0420,0x0520,0x0620,0x0720),然后再读低字节(0x0421,0x0521,0x0621,0x0721)。 例)2048(0x0800)在S0_TX_FSR中,
           
         
           
          端口发送总空间的大小由发送存储器空间寄存器(TMSR)确定。在数据发送处理过程中,剩余空间的大小将因写入数据而减少,发送完成后自动增加。
          Sn_TX_RR (端口n发送存储器读指针寄存器) [R] [0x0422-0x0423, 0x0522-0x0523, 0x0622-0x0623, 0x0722-0x0723] [0x0000]
           
          该寄存器指示端口在发送过程完成后发送存储器的当前位置。当端口 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发送存储器写指针寄存器) [R/W] [0x0424-0x0425, 0x0524-0x0525, 0x0624-0x0625, 0x0724-0x0725] [0x0000] 该寄存器指示在向 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 (接收数据长度寄存器) [R] [0x0426-0x0427, 0x0526-0x0527, 0x0626-0x0627, 0x0726-0x0727] [0x0000]
           
          该寄存器指示端口接收数据缓冲区中接收数据的字节数。此值是由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接收缓冲区读指针寄存器) [R/W] [0x0428-0x0429, 0x0528-0x0529, 0x0628-0x0629, 0x0728-0x0729] [0x0000]
           
          该寄存器指示端口接收过程完成后的读地址信息。读取该寄存器时,必须先读高字节(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服务器模式中的接收部分)。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 07:37 , 耗时 0.115276 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表