WIZnet Developer Forum

W5500 spi 설정 관련 문의

stm32f4xx제품을 사용해서 w5500 spi 통신으로 설정하려고합니다.
mcu에서 w5500으로 spi로 write하려는 데이터는 제대로 전송되는지 오실로스코프로 확인하였는데
read할 때 데이터가 [0x00,0x80,0x80,0x80] 이런식으로만 읽어오고 제대로 데이터가 read 되지 않습니다.
칩에 제대로 설정이 안되서 그런건지 spi쪽 문제때문인지 설정이 제대로 안되네요

void Set_network(void)
{

uint8_t i;

setSHAR(ethset.mac);
setSUBR(ethset.sn);
setGAR(ethset.gw);
setSIPR(ethset.ip);

setRTR(6000);
setRCR(3);

getSIPR(tmp_array);
getSUBR(tmp_array);
getGAR(tmp_array);
}

void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len)
{
uint8_t spi_data[3];
uint16_t i;

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

AddrSel |= (W5500_SPI_WRITE | W5500_SPI_VDM_OP);

if(!WIZCHIP.IF.SPI._write_burst) // byte operation
{
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
for(i = 0; i < len; i++)
WIZCHIP.IF.SPI._write_byte(pBuf[i]);
}
else // burst operation
{
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
WIZCHIP.IF.SPI._write_burst(spi_data, 3);
WIZCHIP.IF.SPI._write_burst(pBuf, len);
}

	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

}

void WIZCHIP_READ_BUF (uint32_t AddrSel, uint8_t* pBuf, uint16_t len)
{
uint8_t spi_data[3];
uint16_t i;

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

AddrSel |= (W5500_SPI_READ | W5500_SPI_VDM_OP);

if(!WIZCHIP.IF.SPI._read_burst || !WIZCHIP.IF.SPI._write_burst) // byte operation
{
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x00FF0000) >> 16);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x0000FF00) >> 8);
WIZCHIP.IF.SPI._write_byte((AddrSel & 0x000000FF) >> 0);
for(i = 0; i < len; i++)
pBuf[i] = WIZCHIP.IF.SPI._read_byte();
}
else // burst operation
{
spi_data[0] = (AddrSel & 0x00FF0000) >> 16;
spi_data[1] = (AddrSel & 0x0000FF00) >> 8;
spi_data[2] = (AddrSel & 0x000000FF) >> 0;
WIZCHIP.IF.SPI._write_burst(spi_data, 3);
WIZCHIP.IF.SPI._read_burst(pBuf, len);
}

	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

}

안녕하세요 :slight_smile:

SPI 속도가 너무 빠를경우 데이터가 제대로 읽히지 않을 수 있습니다.

W5500 Datasheet SPI timing 부분을 참조하시면 SCK Clock Frequency Max값이 80 / 33.3 이라고 나와있는데요.

33.3에 달린 주석을 보면

Theoretical Guaranteed Speed Even though theoretical design speed is 80MHz, the signal in the high speed may be distorted because
of the circuit crosstalk and the length of the signal line. The minimum guaranteed speed of the SCLK is 33.3 MHz which was tested and measured with the stable waveform. Please refer to the SPI Application Note which shows the WIZnet test environment and results.

위와 같이 나와있습니다. 이론상 80MHz까지 동작하지만 안정적인 동작은 33.3MHz까지 보장한다고 합니다.

SPI Master의 Clcok 속도를 33.3MHz 언더로 동작시켜보길 권장드립니다.

감사합니다.

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