---
title: "네트워크 초기화시 오류 문제"
url: "https://maker.wiznet.io/forum/14521"
markdown_url: "https://maker.wiznet.io/forum/14521/md"
type: "Forum topic"
category: "IO Modules"
author: "pjh951225"
created: "2022-04-11T07:19:24+09:00"
last_activity: "2022-04-13T01:09:32+09:00"
language: "en"
views: 577
replies: 0
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# 네트워크 초기화시 오류 문제

## Question

Asked by pjh951225 on 2022-04-11 in IO Modules.

안녕하세요! 지난번에 답변 감사 드립니다.
wiz550io와 TMS320F28335를 이용해 개발 진행 중에 있습니다.
MCU와 spi 4개의 선과 reset을 연결하였습니다.

다음과 같이 GPIO초기화와 SPI초기화를 진행했고
void InitSpiaGpio_1()
{
EALLOW;

```
GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;   // Enable pull-up on GPIO54 (SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;   // Enable pull-up on GPIO55 (SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;   // Enable pull-up on GPIO56 (SPICLKA)
GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;   // Enable pull-up on GPIO57 (SPISTEA)
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;   // Enable pull-up on GPIO57 (SPISTEA)


GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // Asynch input GPIO16 (SPISIMOA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // Asynch input GPIO17 (SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // Asynch input GPIO18 (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // Asynch input GPIO19 (SPISTEA)


GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1; // Configure GPIO54 as SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1; // Configure GPIO55 as SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1; // Configure GPIO56 as SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0; // Configure GPIO57 as SPISTEA

GpioCtrlRegs.GPBDIR.bit.GPIO57 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
 //GpioCtrlRegs.GPBDIR.bit.GPIO56 = 0;

EDIS;
```

}
void spi_init()
{
SpiaRegs.SPICCR.bit.SPISWRESET=0; // SPI 소프트웨어 리셋

```
SpiaRegs.SPICCR.bit.SPICHAR = 15;		// SPI 송수신 Charcter-length 설정 : 16bit
SpiaRegs.SPICCR.bit.SPILBK = 1;			// SPI 루프백 테스트 모드 Enable
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;	// SPI Master/Slave 설정 : Master 모드
SpiaRegs.SPICTL.bit.TALK = 1; 			// SPI Master/Slave 통신 Enable
SpiaRegs.SPIBRR = 4;					// SPI 통신속도 설정: 37.5MHz/(SPIBRR+1) = 1.5MHz

SpiaRegs.SPICCR.bit.SPISWRESET=1;		// SPI 소프트웨어 리셋 해제
```

}

그리고 reset 및 call back 함수를 등록했습니다.
WIZChip_HW_Reset();
reg_wizchip_cs_cbfunc(W5500_select,W5500_Deselect);
reg_wizchip_spi_cbfunc(W5500_RB,W5500_WB);

void W5500_select(void)
{

```
GpioDataRegs.GPBDAT.bit.GPIO57 = 0;
```

}

void W5500_Deselect(void)
{
GpioDataRegs.GPBDAT.bit.GPIO57 = 1;

}

void WIZChip_HW_Reset(void)
{

```
GpioDataRegs.GPADAT.bit.GPIO0 = 0;
delay_loop_1();
GpioDataRegs.GPADAT.bit.GPIO0 = 1;
delay_loop_1();
delay_loop_1();
```

}
void delay_loop_1()
{
long i;
for (i = 0; i &lt; 1000000; i++) {}
}

void W5500_WB(Uint8 Data)
{ TxData=Data;
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG);
SpiaRegs.SPITXBUF = TxData;
}
Uint8 W5500_RB(void)
{
while(!(SpiaRegs.SPISTS.bit.INT_FLAG));
RxData = SpiaRegs.SPIRXBUF;
return RxData;
}

그 다음 위즈넷에서 제공하는 네트워크 초기화 함수를 이용하여 코드를 작성 하였습니다.
ctlnetwork(CN_SET_NETINFO, (void*)&WIZNETINFO);
ctlnetwork(CN_GET_NETINFO, (void*)&getINFO);

**코드상 ctlnetwork(CN_SET_NETINFO, (void*)&WIZNETINFO); 를 시작하게 되면 easyDSP에서 디버깅이 끊어지는 현상이 발생하게 됩니다.**
void network_init(void)
{

```
Uint8 tmpstr[5];
ctlnetwork(CN_SET_NETINFO, (void*)&gWIZNETINFO);
ctlnetwork(CN_GET_NETINFO, (void*)&gWIZNETINFO);

// Display Network Information
ctlwizchip(CW_GET_ID,(void*)tmpstr);
printf("\r\n=== %s NET CONF ===\r\n",(char*)tmpstr);
printf("MAC: %02bX:%02bX:%02bX:%02bX:%02bX:%02bX\r\n",gWIZNETINFO.mac[0],gWIZNETINFO.mac[1],gWIZNETINFO.mac[2],
      gWIZNETINFO.mac[3],gWIZNETINFO.mac[4],gWIZNETINFO.mac[5]);
printf("SIP: %bu.%bu.%bu.%bu\r\n", gWIZNETINFO.ip[0],gWIZNETINFO.ip[1],gWIZNETINFO.ip[2],gWIZNETINFO.ip[3]);
printf("GAR: %bu.%bu.%bu.%bu\r\n", gWIZNETINFO.gw[0],gWIZNETINFO.gw[1],gWIZNETINFO.gw[2],gWIZNETINFO.gw[3]);
printf("SUB: %bu.%bu.%bu.%bu\r\n", gWIZNETINFO.sn[0],gWIZNETINFO.sn[1],gWIZNETINFO.sn[2],gWIZNETINFO.sn[3]);
printf("DNS: %bu.%bu.%bu.%bu\r\n", gWIZNETINFO.dns[0],gWIZNETINFO.dns[1],gWIZNETINFO.dns[2],gWIZNETINFO.dns[3]);
printf("======================\r\n");
```

}
위즈넷 사이트에서 참고한 void network_init(void)를 이용하여 네트워크를 초기화를 해도 동일한 현상이 발생합니다.

LED를 이용해 코드가 어디까지 동작을 하는지 확인했습니다.
WIZChip_HW_Reset();
reg_wizchip_cs_cbfunc(W5500_select,W5500_Deselect);
reg_wizchip_spi_cbfunc(W5500_RB,W5500_WB);
led_2();
ctlnetwork(CN_SET_NETINFO, (void*)&WIZNETINFO);
led_1();
ctlnetwork(CN_GET_NETINFO, (void*)&getINFO);
예를 들면 LED_2에 해당하는 LED는 켜지지만 , LED_1에 해당하는 LED는 꺼져있습니다. 그리고 easyDSP와 디버깅이 끊어지게 됩니다.

**왜 네트워크 초기화 함수에 들어가면 디버깅이 끊어지게 되는 것일까요?**

제가 현재 생각하고 있는 오류가 발생하는 원인은 초기 SPI설정이 잘못되어 Wiz550io의 네트워크 초기화를 시키지 못하고 있거나 TMS320F28335와 Wiznet에서 제공하는 iolibrary와의 호환문제가 있는 등의 이유로 추측 중에 있습니다. 네트워크는 고정IP를 사용 중 이여서 직접 네트워크 정보를 입력했습니다.

---

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