WIZnet Developer Forum

[W5500] 초기 확인

기존에 다른 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의 선언과 안 맞게 되는건가요?

  1. Initialize의 경우 Socket Buffer 사이즈를 설정하는것이기때문에, Initialize를 하지 않더라도 VESIONR을 read해오는 것이 맞습니다.

  2. wiz5500_crit_de() 가 ENTER 맞나요? 확인해보시기 바랍니다.
    16bit SPI를 사용하더라도 데이터가 맞게 잘들어온다면 무관할 것 같으나, ioLibrary의 경우 8bit base로 작성되었기때문에 8bit로 사용하시길 추천드립니다.

  3. 너무 포괄적인 질문이라 답변을 드리기가 어렵습니다.

burst일경우 burst 함수를 사용하고 아닐경우 byte 함수를 사용하게 되어있습니다.

우선 cbfunc 함수는
image
위의 코드에서 사용하기 위해 등록하는 것인데, 이부분 코드를 수정하셔서 무관합니다.

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