---
title: "[W5500] 초기 확인"
url: "https://maker.wiznet.io/forum/13747"
markdown_url: "https://maker.wiznet.io/forum/13747/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "Joonbum"
created: "2020-03-18T10:33:28+09:00"
last_activity: "2020-03-23T05:44:46+09:00"
language: "ko"
views: 1343
replies: 1
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# [W5500] 초기 확인

## Question

Asked by Joonbum on 2020-03-18 in Ethernet Chips.

기존에 다른 MCU로 W5200이나 W550io를 사용한 적이 있어 이번에도 크게 어렵게 생각지 않고 시도했습니다.
이번에는 TI TMS320F28379D를 사용했습니다.
그런데 SPI 통신이 안 되는 것 같네요.
VERSIONR을 읽어봤는데 원하는 값 0x04가 오질 않습니다.
SPI Mode는 0, 속도는 8MHz 사용했습니다.

1. Chip initialize 없이 VERSIONR을 읽어도 값이 와야 정상인거죠?

```
// Chip initialize
if (ctlwizchip(CW_INIT_WIZCHIP, (void*) memsize) == -1) {
    while (1);
}
```

1. Library의 함수 대신 직접 코드를 사용했습니다.

```
wiz5500_crit_de();
wiz5500_spi_select();

//adr = (0x00000000 + (0x0039 << 8) + (0x00 << 3));
//adr |= ((0x00 << 2) | 0x00);

SPI_writeDataNonBlocking(SPIB_BASE, 0x0039);
SPI_writeDataNonBlocking(SPIB_BASE, 0x0000);
result = SPI_readDataBlockingNonFIFO(SPIB_BASE);
    
wiz5500_spi_deselect();
wiz5500_crit_en();
```

위와 같이 하였는데(TMS가 16bit SPI라 저렇게 했습니다. 8bit로 선언해도 값은 비정상적으로 나옵니다.)
문제가 있을까요?

1. SPI 문제일 때 어떻게 확인해봐야 될까요?

2. 헷갈리는 부분이 있는데
   wizchip_conf.c에 다음과 같이 선언되어 있고

```
_WIZCHIP  WIZCHIP =
{
    _WIZCHIP_IO_MODE_,
    (uint8_t*)_WIZCHIP_ID_ ,
    {
        wizchip_cris_enter,
        wizchip_cris_exit
    },
    {
        wizchip_cs_select,
        wizchip_cs_deselect
    },
    {
        {
            //M20150601 : Rename the function
            //wizchip_bus_readbyte,
            //wizchip_bus_writebyte
            wizchip_bus_readdata,
            wizchip_bus_writedata
        },
    }
};
```

wizchip_conf.h의 typedef struct __WIZCHIP를 보면

```
struct
{
    iodata_t  (*_read_data)   (uint32_t AddrSel);
    void      (*_write_data)  (uint32_t AddrSel, iodata_t wb);
}BUS;

struct
{
    uint8_t (*_read_byte)   (void);
    void    (*_write_byte)  (uint8_t wb);
    void    (*_read_burst)  (uint8_t* pBuf, uint16_t len);
    void    (*_write_burst) (uint8_t* pBuf, uint16_t len);
}SPI;
```

와 같이 되어 있습니다.
그런데 W5500은 SPI(VDM)을 사용하는 것으로 설정되어 있습니다.
이렇게 되도 문제가 없나요?

그리고

```
reg_wizchip_spi_cbfunc(wiz5500_spi_readbyte, wiz5500_spi_writebyte);
reg_wizchip_spiburst_cbfunc(wiz5500_spi_read, wiz5500_spi_write);
```

이 부분에서는 spi 함수를 선언해주는데 wizchip_conf.c의 선언과 안 맞게 되는건가요?

## Replies

### Reply 1 by becky, 2020-03-23

Initialize의 경우 Socket Buffer 사이즈를 설정하는것이기때문에, Initialize를 하지 않더라도 VESIONR을 read해오는 것이 맞습니다. wiz5500_crit_de() 가 ENTER 맞나요? 확인해보시기 바랍니다. 16bit SPI를 사용하더라도 데이터가 맞게 잘들어온다면 무관할 것 같으나, ioLibrary의 경우 8bit base로 작성되었기때문에 8bit로 사용하시길 추천드립니다. 너무 포괄적인 질문이라 답변을 드리기가 어렵습니다. Joonbum: 그런데 W5500은 SPI(VDM)을 사용하는 것으로 설정되어 있습니다. 이렇게 되도 문제가 없나요? burst일경우 burst 함수를 사용하고 아닐경우 byte 함수를 사용하게 되어있습니다. Joonbum: 이 부분에서는 spi 함수를 선언해주는데 wizchip_conf.c의 선언과 안 맞게 되는건가요? 우선 cbfunc 함수는 위의 코드에서 사용하기 위해 등록하는 것인데, 이부분 코드를 수정하셔서 무관합니다.

---

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