WIZnet Developer Forum

WIZ550io initialization

hello
as now i work with w5100 modules and now its first time to use the WIZ550io with w5500

so i have some question as beginer

the initialization registers is the same or need to change the code (in datasheet is the same as i see )
(i wand for start to set my ip 192.168.2.50 and then ro ping from my pc the w5500 ip that i have set)

as now i have conect the module and this initialize to 192.168.1.2 and i can ping this ip!!!
then my microcontroller waits the RDY to HI and then runs the same initilzation code as the w5100 , but i cant set new ip
(192.168.2.50) in my case,

the registers is define as the 5100:

#define MR 0x0000 // Mode Register 0x0000

#define GAR 0x0001 // Gateway Address: 0x0001 to 0x0004
#define SUBR 0x0005 // Subnet mask Address: 0x0005 to 0x0008
#define SAR 0x0009 // Source Hardware Address (MAC): 0x0009 to 0x000E
#define SIPR 0x000F // Source IP Address: 0x000F to 0x0012

#define S0_DIPR 0x040C // server Address: 0x040C to 0x040F
#define S0_DPORT0 0x0410 // Socket 0: Destination Port: 0x0410 to 0x0411

#define RMSR 0x001A // RX Memory Size Register
#define TMSR 0x001B // TX Memory Size Register

and initialize as:

SPI_Write(MR,0x80); // MR = 0b10000000;
delay_ms(10);

SPI_Write(SIPR + 0,ip_addr[0]);
SPI_Write(SIPR + 1,ip_addr[1]);
SPI_Write(SIPR + 2,ip_addr[2]);
SPI_Write(SIPR + 3,ip_addr[3]);
delay_ms(10);

SPI_Write(GAR + 0,gtw_addr[0]);
SPI_Write(GAR + 1,gtw_addr[1]);
SPI_Write(GAR + 2,gtw_addr[2]);
SPI_Write(GAR + 3,gtw_addr[3]);
delay_ms(10);

SPI_Write(SAR + 0,mac_addr[0]);
SPI_Write(SAR + 1,mac_addr[1]);
SPI_Write(SAR + 2,mac_addr[2]);
SPI_Write(SAR + 3,mac_addr[3]);
SPI_Write(SAR + 4,mac_addr[4]);
SPI_Write(SAR + 5,mac_addr[5]);
delay_ms(01);

SPI_Write(SUBR + 0,sub_mask[0]);
SPI_Write(SUBR + 1,sub_mask[1]);
SPI_Write(SUBR + 2,sub_mask[2]);
SPI_Write(SUBR + 3,sub_mask[3]);
delay_ms(10);
// Setting the Wiznet W5100 RX and TX Memory Size (2KB),
SPI_Write(RMSR,NET_MEMALLOC);
SPI_Write(TMSR,NET_MEMALLOC);
delay_ms(10);

Hi,
you did not put the logical part of SPI_Read and SPI Write.
Although the two chips have more or less the same logic that differentiates them is precisely the SPI protocol.
I used VDM mode (SPI non-exclusive) and (in basic macro lang) a write is :

    Dim BlkOP As Byte = (Block <<3 ) Or %00000100   ' write and VDM
    Low(SCS_PIN) 
    SPI.WriteByte(WizAddr.byte1) ' high part
    SPI.WriteByte(WizAddr.byte0) ' low part
    SPI.WriteByte(BlkOP)    ' OP 
    SPI.WriteByte(pData)   ' data byte
    High(SCS_PIN)

… a read is :

    Dim BlkOP As Byte = (Block <<3 )  ' read and VDM
    Low(SCS_PIN)
    SPI.WriteByte(WizAddr.byte1) ' high part
    SPI.WriteByte(WizAddr.byte0) ' low part
    SPI.WriteByte(BlkOP)      ' OP 
    WizRead = SPI.ReadByte() ' read data byte
    High(SCS_PIN)

where :
Block = 0 for common registers
Block = GetBase(SocketNum) for socket registers and GetBase = (1 + 4 * SocketNum )

… and once you set the starting address and BlkOP you can write or read many bytes you want in a SCS_PIN cycle.
if it was already so…

  1. try reading VERSIONR ( 0x0039 ) that return the chip version ( and you can understand if you read correctly )
  2. try to set up a common register
  3. try to read it

This seems to me good tips to understand what is happening.

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.