w5500 처음 써보는데, 초기화부터 막히네요...


#1

라이브러리가 계속 바뀌니, 예제코드 받아봐도 사용법이 상당히 다른경우가 있네요.

며칠전에 https://github.com/Wiznet/ioLibrary_Driver 에서 라이브러리를 받았습니다.

W5500과 MCU가 SPI로 연결되어 있습니다.
SCK, MOSI, MISO, SCSn, RSTn
제눈엔 wizchip_conf.c 에서 세팅을 잡아줘야 하는걸로 보이는데요.

질문1.
178번째 줄을 보면 아래 구조체가 있습니다.

_WIZCHIP WIZCHIP =
{
WIZCHIP_IO_MODE,
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_spi_readbyte,
//wizchip_spi_writebyte
};

기본값이 이렇게 되어있는데요, spi 부분이 주석처리 되어있고
버스 부분이 활성화가 되어 있습니다.
이것을 그냥 놔두고 쓰면 되나요?

질문2.
SPI DMA 기능을 써서 데이터를 한번에 왕창 보내고 왕창 받으려고 합니다.
wizchip_conf.c 코드를 보면 146번째 줄에
void wizchip_spi_readburst(uint8_t* pBuf, uint16_t len) {}
라고 함수가 보이는데요, 여기에 DMA 코드를 넣으면 되는건가요?

질문3.
main.c 에서 socket.h 를 include 한 이후에
w5500 으로 데이터를 주고 받으려면, int main 문 안에 어떤 코드들을 넣어야 하는지 궁금합니다.
인터넷에서 굴러다니는 예제를 보면

/// wiznet 5500 reset
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
sys_tick_cnt = 100;
while(sys_tick_cnt);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
///

wizchip_struct_init();
wizchip_sw_reset();

/* WIZCHIP SOCKET Buffer initialize */
if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1)
{
	printf("WIZCHIP Initialized fail.\r\n");
	while(1);
}

/* PHY link status check */
do
{
	if(ctlwizchip(CW_GET_PHYLINK, (void*)&tmp) == -1)
	  	printf("Unknown PHY Link stauts.\r\n");
}while(tmp == PHY_LINK_OFF);

/* Network initialization */
network_init();

이렇게 선언하고 끝인데, 최신버전의 라이브러리에서도 이렇게 쓰면 되는건가요?


#2


->질문 1,2는 위의 링크에 가셔서 보시면됩니다.

질문 3.
PHY링크를 확인한 후 넘어갔다면, 저희가 제공하는 라이브러리 안에 있는 함수를 사용하시면 됩니다.
예를 들어 Version Register(0x0039)를 읽고 싶다면.

                   ret = getVERSIONR();

넣어주면 ret에 W5500의 버전값인 0x04 값이 출력됩니다.