기존에 다른 MCU로 W5200이나 W550io를 사용한 적이 있어 이번에도 크게 어렵게 생각지 않고 시도했습니다.
이번에는 TI TMS320F28379D를 사용했습니다.
그런데 SPI 통신이 안 되는 것 같네요.
VERSIONR을 읽어봤는데 원하는 값 0x04가 오질 않습니다.
SPI Mode는 0, 속도는 8MHz 사용했습니다.
- Chip initialize 없이 VERSIONR을 읽어도 값이 와야 정상인거죠?
// Chip initialize
if (ctlwizchip(CW_INIT_WIZCHIP, (void*) memsize) == -1) {
while (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로 선언해도 값은 비정상적으로 나옵니다.)
문제가 있을까요?
-
SPI 문제일 때 어떻게 확인해봐야 될까요?
-
헷갈리는 부분이 있는데
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의 선언과 안 맞게 되는건가요?