wiz850io pingtest 하는 법 답변 부탁드립니다..!

  1. wiz_NetInfo gWIZNETINFO ={ .mac = {0x00,0x02,0x29,0x66,0xA0,0X89},
    .ip = {192,168,1,175},
    .sn = {255,255,255,0},
    .gw = {192,168,1,1},
    .dns = {8,8,8,8},
    .dhcp = NETINFO_STATIC};
    이런식으로 모듈 네트워크 설정하기만 하면 ping test 할 수 있는게 맞나요?

  2. 명령 프롬프트 창에 ping 192.168.1.175 라고 쳐도 대상 호스트에 연결할 수 없다고 나오는데
    설정을 했는데 안되는건 랜선 연결에 문제가 있는건가요?

  3. 알기로는 pc - 공유기 - w5500 이더넷 모듈 이렇게 랜선 연결하면 된다는걸로 알고 있는데 맞는건가요?

WIZ850io에 사용되는 W5500내의 레지스터에 해당 정보가 해당 레지스터에 저장(SPI Read/Write)되는지 확인하셨나요?
SPI 가 정상동작하는지는 Version Register를 읽어보시거나, 작성했던 ip/sn/gw 등을 쓴 후 읽었을때 제대로 된 값이 읽힌다면, 기본 세팅은 된겁니다.
정상 세팅이 되었는데도 Ping 이 되지 않는다면,

  1. PC가 192.168.1.xx대역을 가지고 있는지 확인하셔야합니다.
    command 창에 ipconfig /all 로 입력하시면
    image
    다음과 같은 아이피 대역대가 출력됩니다.
    image
    이중에 192.168.1.xx 대역이 있어야합니다.

version register가 0x04로 읽히지 않는 걸 보니 spi 설정에 문제가 있는걸까요?

#ifndef _W5500SPI_H_
#define _W5500SPI_H_

#define	W5500_SPI			SPI2

#define W5500_RESET_PORT	GPIOB
#define W5500_RESET_PIN		GPIO_PIN_10

#define W5500_CS_PORT	GPIOB
#define W5500_CS_PIN		GPIO_PIN_12

#define W5500_INT_PORT	GPIOB
#define W5500_INT_PIN		GPIO_PIN_11

#define W5500_CLK_PORT	GPIOB
#define W5500_CLK_PIN		GPIO_PIN_13

#define W5500_MISO_PORT	GPIOB
#define W5500_MISO_PIN		GPIO_PIN_14

#define W5500_MOSI_PORT	GPIOB
#define W5500_MOSI_PIN		GPIO_PIN_15

#endif

이렇게 핀 정의 하고

void init_wiz850(void)
{
	GPIO_InitTypeDef    GPIO_InitStructure;
	SPI_InitTypeDef   SPI_InitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);    

//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(W5500_CLK_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(W5500_MOSI_PORT, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
	//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(W5500_MISO_PORT, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(W5500_CS_PORT, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(W5500_RESET_PORT, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	//GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(W5500_INT_PORT, &GPIO_InitStructure);

//	GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_SPI2);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
//	GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);

	// Set SPI interface
	SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
	SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
	SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
	SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
	SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
	SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
	SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2; // 50nSec 주기
	SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
	SPI_InitStructure.SPI_CRCPolynomial=7;

	SPI_Init(W5500_SPI,&SPI_InitStructure);
	SPI_Cmd(W5500_SPI,ENABLE);
		
	GPIO_SetBits(GPIOB, GPIO_Pin_12);
	GPIO_SetBits(GPIOB, GPIO_Pin_10);
}



void W5500WriteByte(unsigned char byte)
{
  while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(W5500_SPI, byte);
  while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_RXNE) == RESET);
  SPI_I2S_ReceiveData(W5500_SPI);
}
unsigned char W5500ReadByte(void)
{
  while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(W5500_SPI, 0xff);
  while (SPI_I2S_GetFlagStatus(W5500_SPI, SPI_I2S_FLAG_RXNE) == RESET);
  return SPI_I2S_ReceiveData(W5500_SPI);
}

void W5500Select(void)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}
void W5500DeSelect(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}


void W5500Initialze(void)
{
  unsigned char temp;
  unsigned char W5500FifoSize[2][8] = {{2,2,2,2,2,2,2,2,},{2,2,2,2,2,2,2,2}};
  W5500DeSelect();
/* spi function register */
  reg_wizchip_spi_cbfunc(W5500ReadByte, W5500WriteByte);
/* CS function register */
  reg_wizchip_cs_cbfunc(W5500Select, W5500DeSelect);

}


w5500 포팅 하면 spi 설정이 완료 된게 아닌가요…?

초보적 질문 반복 죄송합니다 도움 주시면 정말 감사하겠습니다…!

제가 보기에는 코드 상 별다른 문제점은 없어보입니다.

해당 핀에서 정확한 시그널이 나오는지 확인해봐야할것 같습니다.
Version Register를 Read하는 부분은 무한 루프를 걸어서,
CS/ MOSI/CLK 등 정확한 신호가 MCU에서 출력되고, MISO에서 Read부분 0x04가 출력되고있는지.
디버깅코드로 보기보다 시그널 을 직접 확인해보시길 바랍니다.

SCLK의 클럭이 33MHz이상일경우 동작 하지 않을수 있으니, SCLK 의 클럭도 확인해주세요.