본문 바로가기

ESPRESSIF/ESP32-C3

ESP32-C3 SSM EVM - 성능 측정

ESP32-C3는 기존 ESP32 시리즈(240Mhz)와 달리 160Mhz 32-bit RISC-V core 를 탑제하고 있다. 성능보다는 가격과 소비전력에 장점을 두고 있지 않을까..

 

아무튼 기존 ESP32 Arduino 코드의 성능과 비교해서 ESP32-C3 의 성능 테스트를 해 두면 좋을것 같다.

 

우선 CPU Frequency를 160Mhz 로 설정해서 GPIO 코글 테스트를 해 보자

 

 

Arduino에서 제공하는 GPIO 제어 함수로 테스트 해 보면

#define LED_PIN1    3

void setup() {
  pinMode(LED_PIN1, OUTPUT);
}

void loop() {
  digitalWrite(3, 0);
  digitalWrite(3, 1);
}

 

 

2.3us로 상당히 느리다.

 


ESP32-C3 GPIO 제어 레지스터에 직접 출력하면 120ns 정도로 출력된다. 레지스터 제어 구조는 ESP32와 조금 다른것 같다. RISC-V 코어라 그런듯..

#define LED_PIN1    3
void setup() {
  pinMode(LED_PIN1, OUTPUT);
}
void loop() {
  //digitalWrite(3, 0);
  //digitalWrite(3, 1);
  
  GPIO.out_w1ts.out_w1ts = (1 << LED_PIN1);
  GPIO.out_w1tc.out_w1tc = (1 << LED_PIN1);
}

 

ESP32의 60ns보다 두배 정도 느리고 ESP8266의 72ns 보다 조금 빠를 수준인것 같다.

 

루프 수행 주기는 2us로 측정이 된다. 통일한 코드로 ESP-IDF SDK 환경에서 GPIO 테스트 결과와 비교해 보면 120ns로 5배 정도 느려진다.

 


시리얼 포트를 추가 하면 6.7us로 더 느려진다.

#define LED_PIN1    3

void setup() {

  pinMode(LED_PIN1, OUTPUT);

  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println("ESP32-C3 GPIO Test");  
}

void loop() {
  GPIO.out_w1ts.out_w1ts = (1 << LED_PIN1);
  GPIO.out_w1tc.out_w1tc = (1 << LED_PIN1);
}

 

GPIO 수행 속도가 MCU전체 성능은 아니지만 조금은 아쉬운 성능인것 같다. 좀더 자세한 성능 지표는 ESP32-C3 Dhrystone, Whetstone, IIR Benchmark 성능스트 참고

 

 

반응형