发送,接收共四个通道.
共四大类寄存器:控制寄存器、系统寄存器、指针寄存器、通道寄存器
一、控制寄存器:
1、通道控制寄存器C0_CR、C2_CR~C3_CR (Channel X_Control Reg)
C0_CR:
This register commands channel 0 to initialize, connect, close, transmit and receive data.
Sys_Init command is used to set the gateway, subnet mask, source IP and source H/W Address. The same command is used to close the socket in all channels.
Sock_Init, Connect, LIsten, Close, Send and Recv are used when initializing, establishing a connection, terminating a connection, sending and receiving data for Channel 0 Socket. Each corresponding bit is automatically cleared after executing the command.
Sock_Init command opens the corresponding Channel in TCP, UDP, RAW mode according to the protocol value as set at C0_SOPR.
MCU can initialize the internal setting value of the chip by using S/W Reset. (S/W==software)
Each bit in this register is automatically cleared after executing the command.
C1_CR:
Memory Test用来控制即可读又可写Tx Buffer、Rx Buffer。
Memory Test设为“1”时,不能进行正常的数据发送接收,可以即可读又可写Buffer
Memory Test设为“0”时,进行正常的数据发送接收,禁止即可读又可写Buffer
其他位与Channel 0定义的相同。
C2_CR、C3_CR只有中间6位,定义的与Channel 0 相同。
2、通道中断状态寄存器C0_ISR、C2_ISR~C3_ISR (Channel X_Interupt Status Reg)
3、中断寄存器IR (Interupt Reg)
C0、C1、C2、C3表示哪个通道发生了中断,MCU可以检验上边的ISR来确定各通道发生的是具体那种中断。
C0R、C1R、C2R、C3R表示通道0、1、2、3发生了data transmission。
4、中断屏蔽寄存器IMR(Interupt Mask Reg)
用来屏蔽上边对应的IR寄存器。置位“1”为允许中断。
W3100A 有3种不同的应用模式,分别为Direct BusI/F模式、Indirect Bus I/F模式和I2C Bus I/F。
5、Indirect模式选项寄存器IDM_OR(Indirect Mode_Option Reg)
6、Indirect模式地址寄存器IDM_AR0 / IDM_AR1
7、Indirect模式数据寄存器IDM_DR
二、系统寄存器:
1、网关地址寄存器GAR(Gateway Addr Reg)
2、子网掩码地址寄存器SMR(Subnet Mask Reg)
3、源硬件地址寄存器SHAR(Source Hardware Addr Reg)
4、源IP地址寄存器SIPR
5、初始重试时间值寄存器IRTR(Initial Retry Time-Value Reg)
6、重试计数器RCR(Retry Count Reg)
7、Rx存储空间大小寄存器RMSR(Rx data Memory Size Reg)
8、Tx存储空间大小寄存器TMSR(Tx data Memory Size Reg)
三、指针寄存器
1、MCU读取指针寄存器:由于每个指针寄存器包含4个八位组(字),而W3100A的I/F只用单字操作,因此,这里设置了shadow指针寄存器,MCU读取时,读取该shadow指针寄存器,并且在读到相应的指针寄存器之前要延时4个Tx_CLK时间。
2、MCU写指针寄存器:不需shadow寄存器和延时。
上图为指针寄存器表。
上图为shadow指针寄存器表。
(1).CX_RW_PR (Rx Write_Point Register)[R/W]
该寄存器显示了接收数据时数据在缓冲区的结尾点。该寄存器由W3100A内部管理,它随着收到数据的长度增大而增大。
MCU接收并处理对应通道的从RR_PR到RW_PR之间所指区域的数据。
(2).CX_RR_PR (Rx Read _PR)[R/W]
该寄存器显示了接收数据时数据在缓冲区的起始点。
MCU处理完接收到的数据后,MCU更新RR_PR使其作为处理过数据的指针,并且发布Recv Command.
(3).CX_TW_PR (Tx Write_PR)[R/W]
该寄存器显示了发送数据时将要发送数据的结尾点。
为了发送数据,MCU从TW_PR所指的点上写一段数据,写完后,TW_PR需要被更新。执行Send Command之后数据即发送。
(4).CX_TR_PR (Tx Read _PR)[R/W]
该寄存器显示了当Send Command发出时,数据将要被发送,指出了开始发送的起始点。该寄存器由W3100A内部操作。
(5).CX_TA_PR (Tx ACK _PR)[R/W]
该寄存器显示了即将发送的数据的起始点。
Driver用该寄存器和TW_PR来计算TX_BUFFER的空余空间。
四、通道寄存器(C0~C3都分别有,这里只列出一个channel的。具体C0还是Cx上datasheet中查)(1).SSR(Socket State Reg)[R]
标明了Socket状态。其值分别代表意义如下:
(2).SOPR(Socket Option and Protocal Reg)[R/W]
该寄存器设置了Socket 相应个通道的选项和协议。
(3).DIR(Destination IP Address Reg)[R/W]
目的IP地址。active mode时,写入它,passive mode时,由接收到的数据报得到,芯片内自动完成。
(4).DPR(Destination Port Reg)[R/W]
目的TCP端口地址。active mode时,写入它,passive mode时,由接收到的数据报得到,芯片内自动完成。
(5).SPR(Source Port Reg)[R/W]
用UDP或TCP时,设置的源端口值。该设置应该在Sock_init Command之前做好。
(6).IPR(IP Protocal Reg)[R/W]
当采用IP Layer RAW Mode 时,用来设置IP首部的协议字段。该设置应该在Sock_init Command之前做好。
(7).TOSR(TOS Reg)[R/W]
用来设置IP首部的TOS(Type of Service),该设置应该在Sock_init Command之前做好。
(8).MSSR(MSS Reg)[R/W]
用来设置TCP的MSS(Max Segment Size),或者显示Passive Mode下被激活的TCP被对方赋予的MSS。
寄存器顶层图:
一般模式下,Tx Buffer只能写,不能读;Rx Buffer只能读不能写。
只有在设置了memory test mode(C1_CR memory test bit)之后,才能既能读又能写,但memory test mode下不能进行数据收发。要想正常接收数据正常操作W3100A,必须关掉memory test mode。
系统初始化:
这四个寄存器需要预先设定:
GAR (Gateway Addr Reg)
SMR (Subnet Mask Reg)
SHAR (Source Hardware Addr Reg)——由厂商提供。
SIPR (Source IP Addr Reg)
设定完上面的寄存器后,W3100A可以通过执行sys_ini命令被激活,我们可以用PING命令来验证W3100A是否处于激活状态。
TCP初始化过程:
如果要采用TCP传输数据,相应通道的Cx_SOPR选项应该被设置成SOCK_STREAM(0x01)。当用sock_init激活该通道后,寄存器Cx_TW_PR、Cx_TR_PR、Cx_TA_PR都应该被赋予相同的初值。
TCP重传计时器的设置:
IRTR和RCR为负责重传计时器的两个寄存器。IRTR设置初试计时值,RCR设置重试次数。每次retry timer到时则进行重传,同时将retry timer复位为(原值*2)。重试次数满则timeout中断发生,同时不再尝试重传。
IRTR*100us=start timeout second
Total timeout value until give-up=(IRTR*100us)*(2RCR-1)
芯片内部默认值:IRTR为0x07D0
RCR为0x06
即默认值为初始retry timer为200ms,共重试6次,最终掉线时间为12600ms。
UDP协议的使用:
UDP是无连接的协议,因此制造的负载较小。
UDP的初始化:
为了使用UDP传输,应该在socket初始化之前将对应通道的Cx_SOPR中协议字段设置成SOCK_DGRAM(0x02)。与TCP不同,UDP的发送和接收不需建立一个连接。
文章评论(0条评论)
登录后参与讨论