原创 TCP学习笔记之W3100A寄存器整理【原创】

2008-4-2 11:47 2693 7 7 分类: 通信

发送,接收共四个通道.


共四大类寄存器:控制寄存器、系统寄存器、指针寄存器、通道寄存器


 


一、控制寄存器:


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_CRC3_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.
54fdef5c-70b0-4d91-85d5-6c2089619fb3.JPG
点击看大图
(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的空余空间。
03592ca0-754f-4f44-a4be-919025759fdb.JPG
点击看大图

四、通道寄存器(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。

寄存器顶层图:
a3eb99a8-9892-4dc9-a382-5c8cb67ef6f1.JPG
点击看大图
    一般模式下,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条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条