---
title: "S0 as server and S1 as client realization problem"
url: "https://maker.wiznet.io/forum/13207"
markdown_url: "https://maker.wiznet.io/forum/13207/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "kko"
created: "2019-02-13T05:38:50+09:00"
last_activity: "2019-02-16T09:18:14+09:00"
language: "en"
views: 448
replies: 2
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# S0 as server and S1 as client realization problem

## Question

Asked by kko on 2019-02-13 in Ethernet Chips.

There is no problem with S0 and server. All works as expected!
But S1 as client won’t work. This code:

```
unsigned char dst_addr[] = {192,168,0,107};
unsigned char dst_port[] = {99,99};

SPI_Write(S1_MR,MR_TCP);
//random sending port
SPI_Write(S1_PORT,0x12);
SPI_Write(S1_PORT + 1,0x12);

SPI_Write(S1_CR, CR_CONNECT);

SPI_Write(S1_DIPR + 0,dst_addr[0]);
SPI_Write(S1_DIPR + 1,dst_addr[1]);
SPI_Write(S1_DIPR + 2,dst_addr[2]);
SPI_Write(S1_DIPR + 3,dst_addr[3]);
_delay_ms(1);

SPI_Write(S1_DPORT + 0,dst_port[0]);
SPI_Write(S1_DPORT + 1,dst_port[1]);
_delay_ms(1);
SPI_Write(S1_CR, CR_OPEN);
If (SPI_Read(S1_SR) == SOCK_ESTABLISHED) {
 ///////
}
```

When i checked DIPR and DPORT they are not always have correct data. After mcu reset they may have 0 or correct data.
What am I doing wrong?

## Replies

### Reply 1 by juvf, 2019-02-13

Не правильный код. вот как нужно

```
    unsigned char dst_addr[] = {192,168,0,107};
    unsigned char dst_port[] = {99,99};

    SPI_Write(S1_MR,MR_TCP);
    //random sending port
    SPI_Write(S1_PORT,0x12);
    SPI_Write(S1_PORT + 1,0x12);
START:
    SPI_Write(S1_CR, CR_OPEN);
wait();
if(S1_SR != SOCK_INIT) 
{
SPI_Write(S1_CR, CR_CLOSE);
goto START;
}
    SPI_Write(S1_DIPR + 0,dst_addr[0]);
    SPI_Write(S1_DIPR + 1,dst_addr[1]);
    SPI_Write(S1_DIPR + 2,dst_addr[2]);
    SPI_Write(S1_DIPR + 3,dst_addr[3]);
       SPI_Write(S1_DPORT + 0,dst_port[0]);
    SPI_Write(S1_DPORT + 1,dst_port[1]);
    _delay_ms(1);
    SPI_Write(S1_CR, CR_CONNECT);
wait();
    If (SPI_Read(S1_SR) == SOCK_ESTABLISHED) {
     ///////
    }
```

см даташит

```
START:
/* sets TCP mode */
Sn_MR = 0x01;
/* sets source port number */
Sn_PORT = source_port;
/* sets OPEN command */
Sn_CR = OPEN;
if (Sn_SR != SOCK_INIT) Sn_CR = CLOSE; goto START;
/* Write the value of server_ip, server_port to the Socket n Destination IP Address
Register(Sn_DIPR), Socket n Destination Port Register(Sn_DPORT). */
Sn_DIPR = server_ip;
Sn_DPORT = server_port;
Sn_CR = CONNECT;
If (Sn_SR == SOCK_ESTABLISHED) goto ESTABLISHED stage;
```

### Reply 2 by kko, 2019-02-13

Спасибо! Всроде сейчас с регистрами адреса удаленного и портом все нормально… прописываются!

---

Source: https://maker.wiznet.io/forum/13207
