APM32E103-KIT #22 - WIZnet W5500 (확장보드)
APM32E103-KIT #22 - WIZnet W5500 (확장보드)
0
Project description
이제 확장보드에서도 마지막인 WIZnet의 W5500 보드 구현을 추가하였습니다. SPI 통신으로 쉽게 이더넷 통신을 가능하게 하는 모듈입니다. 핀연결은 아래와 같이 되어 있습니다.

![]()
SPI 제어를 위해서 하드웨어 리스트에 추가했습니다.

![]()
WIZnet 라이브러리 코드는 이전에 만들어서 사용했던 것에서 W5500 부분을 추가했습니다.

![]()
w5500.c 안에는 일부 포팅해야 하는 함수가 있습니다. SPI 를 통해서 레지스터를 읽고 쓰는 함수를 하드웨어에 맞게 수정합니다.


![]()
초기화 함수를 만들어서 WIZnet 보드를 리셋하고 SPI 초기화를 진행합니다.


위즈넷 초기화 함수도 수정을 해야 합니다. w5500Init() 함수를 추가해서 초기화 하고 이후에는 위즈넷 라이브러리 초기화를 합니다.

![]()
DHCP와 시간을 얻어오기 위해서 SNTP도 초기화를 진행합니다.

![]()
ap.c에서 위즈넷 기능을 확인 수행하는 함수를 호출해야 합니다.

![]()
위즈넷 업데이트 함수에서는 필요한 서비스에 대한 처리 함수를 차례대로 실행합니다.

![]()
OLED에 네트웍 링크 상태와 연결되었을때 시간을 받아와서 날짜와 시간을 표시하게 됩니다. 그리고 버튼을 누르면 IP 정보를 표시합니다.
void updateLCD(void) { if (lcdDrawAvailable()) { lcdClearBuffer(black); if (wiznetIsLink() == false) { lcdPrintf(0, 8, white, "Not Connected"); } else { if (wiznetIsGetIP() == true) { if (buttonGetPressed(_DEF_BUTTON1)) { wiznet_info_t net_info; wiznetGetInfo(&net_info); lcdPrintf(0, 0, white, "IP %d.%d.%d.%d", net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]); lcdPrintf(0, 16, white, "DHCP : %s\n", wiznetIsGetIP() ? "True":"False"); } else { rtc_time_t rtc_time; rtc_date_t rtc_date; const char *week_str[] = {"일", "월", "화", "수", "목", "금", "토"}; rtcGetTime(&rtc_time); rtcGetDate(&rtc_date); lcdPrintf(0, 0, white, "%02d-%02d-%02d (%s)", rtc_date.year, rtc_date.month, rtc_date.day, week_str[rtc_date.week]); lcdPrintf(0, 16, white, "%02d:%02d:%02d", rtc_time.hours, rtc_time.minutes, rtc_time.seconds); } } else { lcdPrintf(0, 8, white, "Getting_IP.."); } } lcdRequestDraw(); } }
네트웍 연결 후 ping으로 일단 확인해 봅니다.

![]()
소스코드는 깃허브에 업데이트 하였습니다.
https://github.com/chcbaram/apm32e103-kit/tree/main/firmware/exam/EX-15-WIZnet-W5500
이제 확장보드에 있는 모든 모듈도 기능 확인은 완료 하였습니다.
모든 기능을 활성화 했을때 FLASH는 160KB 정도 사용되었습니다. 그래도 기존 코드들이 있어서 생각보다 빠르게 기능 구현을 진행 할 수 있었습니다.


