IoT

ESP32+W5500 Iperf Test

이 문서는 ESP32와 W5500을 사용하여 Iperf Test를 통해 Ethernet 성능을 테스트 하는 문서이다.

사용 제품

개발환경

2020년 11월부터 ESP32 IDF github(https://github.com/espressif/esp-idf)에 W5500의 Mac raw 모드를 Ethernet Interface로 지원하기 시작했다.

espressif/esp-idf

만약 ESP IDF에서 지원하는 W5500 드라이버를 사용하기 위해서는 ESP-IDF 4.3 이상 버전을 설치해야한다.

현재(2021-04) 기준으로 windows 설치형으로 ESP32 IDF를 설치할 경우 4.2 TAG까지만 노출 되어 있는 것을 확인했다.

만약 4.3 이상의 TAG 가 없다면, master 버전으로 설치하면 4.3 이상 버전으로 설치할 수 있다.

연결

ESP32와 W5500은 SPI로 연결한다.

ESP32는 라우팅의 편의성을 제공하기 위해 GPIO matrix를 통해 I2C, SPI, UART bit-bang 을 지원한다.

그리고 각 peripheral 시그널을 IO_MUX를 통해 전용 핀을 사용할 수 있다.

SPI Master Driver - ESP32 - - ESP-IDF Programming Guide latest documentation

당연히 전용 핀을 사용하는 것이 조금 더 고속으로 동작할 수 있다.

만약 SPI를 GPIO matrix (bit-bang) 으로 사용한다면, 최대 SPI Clock 을 26.7MHz 이하로만 설정할 수 있다.

만약 이 이상의 Clock으로 설정하고 프로그램을 실행한다면, 아래와 같은 에러가 발생한다

E (390) spi_hal: spi_hal_cal_clock_conf(101): When work in full-duplex mode at frequency > 26.7MHz, device cannot read correct data.
Try to use IOMUX pins to increase the frequency limit, or use the half duplex mode.

이번 예제에서는 26.7MHz 이상도 테스트를 해보기 위해서 SPI3 설정으로 연결했다.

Iperf 테스트

Iperf 테스트는 ESP32 IDF 내에 Iperf 예제로 테스트 해보았다.

espressif/esp-idf

Iperf 테스트 결과

아래 결과는 Iperf를 사용한 테스트 결과이다.

결과를 보면 SPI Clock 24MHz 까지의 Bandwidth 의 증가를 확인해보았다. 이 이상 Clock을 올리더라도 Bandwidth의 유의미한 증가는 확인할 수 없었고, 오히려 케이블로 연결된 상태이기 때문에 SPI 통신이 불안정 한 것을 확인할 수 있었다.

  1. SPI Clock 8MHz (iperf 기준)
    • TCP
    • UDP
  2. SPI Clock 16MHz (iperf 기준)
    • TCP
    • UDP
  3. SPI Clock 24MHz (iperf 기준)
    • TCP
    • UDP
  4. SPI Clock 32MHz (iperf 기준)
    • TCP
    • UDP