---
title: "WIZ810SMJ Start 기본 동작"
url: "https://maker.wiznet.io/forum/14142"
markdown_url: "https://maker.wiznet.io/forum/14142/md"
type: "Forum topic"
category: "Ethernet Chips"
author: "Member 11149"
created: "2021-02-05T02:07:38+09:00"
last_activity: "2021-02-05T06:24:08+09:00"
language: "en"
views: 948
replies: 2
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# WIZ810SMJ Start 기본 동작

## Question

Asked by Member 11149 on 2021-02-05 in Ethernet Chips.

WIZ810SMJ 로 기본동작을 구현 하고 있습니다.
Example code 를 봤지만 제가 사용하던 코드에 내용을 맞추기가 힘들어 일단 기본기능을 구현해 보고 있습니다.

여기 내용을 참고 해서 일단 Ping 과 telnet 연결 부분만 확인하려고 합니다.

![](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/0/05cf6628149a61ab4874ed91da8a02c63626c1e6.png) [Carmine Noviello - A blog about programming and electronics – 28 Aug 15](https://www.carminenoviello.com/2015/08/28/adding-ethernet-connectivity-stm32-nucleo/)

![](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/1/17d828727e35cf88ede2c2fbfbf3e9b1036f7c26.jpeg)

### [Adding ethernet connectivity to a STM32-Nucleo - Carmine Noviello - A blog...](https://www.carminenoviello.com/2015/08/28/adding-ethernet-connectivity-stm32-nucleo/)

One drawback of the Nucleo ecosystem is the lack of a version with ethernet connectivity or a dedica

spi_rb 함수에서 printf 를 찍으면 0x10 이 계속 나오고 있습니다.
아직 Ping 과 telnet 모두 동작을 안하고 있습니다.
아시는 분 답변좀 부탁 드리겠습니다. 감사합니다.

`
void cs_sel() {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //CS LOW
}

```
void cs_desel() {
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //CS HIGH
}
 
uint8_t spi_rb(void) {
	uint8_t rbuf;
	HAL_SPI_Receive(&hspi1, &rbuf, 1, 0xFFFFFFFF);
	//TRACE("%d",rbuf);
	return rbuf;
}

void spi_wb(uint16_t b) {
	HAL_SPI_Transmit(&hspi1, &b, 2, 0xFFFFFFFF);
}

int main(void)
{
..............................................................................

    reg_wizchip_cs_cbfunc(cs_sel, cs_desel);
    reg_wizchip_spi_cbfunc(spi_rb, spi_wb);

  wizchip_init(bufSize, bufSize);
  
  wiz_NetInfo netInfo = { 
  .mac 	= {0x00, 0x08, 0xdc, 0xab, 0xcd, 0xef},	/* Mac address */
  .ip 	= {192, 168, 2, 192},					/* IP address */
  .sn 	= {255, 255, 255, 0},					/* Subnet mask */
  .gw 	= {192, 168, 2, 1}                                  /* Gateway address */
  };					

  wizchip_setnetinfo(&netInfo);
  wizchip_getnetinfo(&netInfo);

reconnect:
  /* Open socket 0 as TCP_SOCKET with port 5000 */
  if((retVal = socket(0, Sn_MR_TCP, 5000, 0)) == 0) {
	  /* Put socket in LISTEN mode. This means we are creating a TCP server */
	  if((retVal = listen(0)) == SOCK_OK) {
		  /* While socket is in LISTEN mode we wait for a remote connection */
		  while(sockStatus = getSn_SR(0) == SOCK_LISTEN)
			  HAL_Delay(100);
		  /* OK. Got a remote peer. Let's send a message to it */
		  while(1) {
			  /* If connection is ESTABLISHED with remote peer */
			  if(sockStatus = getSn_SR(0) == SOCK_ESTABLISHED) {
				  uint8_t remoteIP[4];
				  uint16_t remotePort;
				  /* Retrieving remote peer IP and port number */
				  getsockopt(0, SO_DESTIP, remoteIP);
				  getsockopt(0, SO_DESTPORT, (uint8_t*)&remotePort);
				  TRACE("ip %d %d %d %d port %d\r\n", remoteIP[0], remoteIP[1], remoteIP[2], remoteIP[3], remotePort);
				  /* Let's send a welcome message and closing socket */


				  if(retVal = send(0, GREETING_MSG, strlen(GREETING_MSG)) == (int16_t)strlen(GREETING_MSG))
					  TRACE("OK\r\n");
				  else { /* Ops: something went wrong during data transfer */
					  TRACE("fail\r\n");
				  }
				  break;
			  }
			  else { 
/* Something went wrong with remote peer, maybe the connection was closed unexpectedly */
				  TRACE("fail2\r\n");
				  break;
			  }
		  }

	  } else /* Ops: socket not in LISTEN mode. Something went wrong */
		  TRACE("Listen Err\r\n");
  } else { 
/* Can't open the socket. This means something is wrong with W5100 configuration: maybe SPI issue? */
	  TRACE("Socket open err\r\n");
  }

  /* We close the socket and start a connection again */
  disconnect(0);
  close(0);
  goto reconnect;
..............................................................................
}

static void MX_SPI1_Init(void)
{
  
  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/

  hspi1.Instance               = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
  hspi1.Init.Direction         = SPI_DIRECTION_2LINES;
  hspi1.Init.CLKPhase          = SPI_PHASE_2EDGE;
  hspi1.Init.CLKPolarity       = SPI_POLARITY_HIGH;
  hspi1.Init.DataSize          = SPI_DATASIZE_8BIT;
  hspi1.Init.FirstBit          = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode            = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation    = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial     = 7;
  hspi1.Init.CRCLength         = SPI_CRC_LENGTH_8BIT;
  hspi1.Init.NSS               = SPI_NSS_SOFT;
  //hspi1.Init.NSS               =   SPI_NSS_HARD_OUTPUT;
  //hspi1.Init.NSSPMode          = SPI_NSS_PULSE_ENABLE;
  hspi1.Init.NSSPMode          = SPI_NSS_PULSE_DISABLE;

  
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}
```

## Replies

### Reply 1 by Member 11149, 2021-02-05

wizchip_setnetinfo(&netInfo); 실행시 scope shot 입니다.

아마도 mac, ip 세팅시 spi writting 을 수행 하는것 같습니다.
첫 CS 구간에서 9byte 가 나가는데 맞나요? OPCODE(1byte) + ADDESS(2byte) + MAC(byte) 로 총 9byte 일 것 같은데…

[![1](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/3/33b66d772122a410783e4c1d075790d4db1e7cae.png) 1989×528 147 KB](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/3/33b66d772122a410783e4c1d075790d4db1e7cae.png)

해당 확대 이미지는 앞에 1-2byte 를 확인 하였습니다.

[![2](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/1/132505d8c6da977b0bc8eef3db2eb2ecae37e234.png) 2991×511 111 KB](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/1/132505d8c6da977b0bc8eef3db2eb2ecae37e234.png)

그리고 다음 3-4 byte 입니다.

[![3](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/2/22f5b6460d9ef55f88228d90f860ac5bd66c834b.png) 3990×500 106 KB](https://maker.wiznet.io/forum_uploads/wiznet/original/2X/2/22f5b6460d9ef55f88228d90f860ac5bd66c834b.png)

해당 scope 가 정상적으로 통신 하고 있는지 답변 드립니다.

### Reply 2 by Member 11149, 2021-02-05

해결됬습니다. 현재 ping 과 telnet 모두 접속 됩니다.
그런데 좀 이상한게 W5100S 는 Address 가 2byte 라고 해서 callback write 함수를 아래와 같이 사용하면 안됩니다.
void spi_wb(uint16_t b) {
HAL_SPI_Transmit(&hspi1, &b, 2, 0xFFFFFFFF);
}
아래와 같이 size 1 로 보내야 합니다.
void spi_wb(uint16_t b) {
HAL_SPI_Transmit(&hspi1, &b, 1, 0xFFFFFFFF);
}
저가를 size 1 로 변경하니 되네요. 명확히 답변 부탁 드립니다.

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);

---

Source: https://maker.wiznet.io/forum/14142
