カテゴリー
ESP8266+ESP32+RISC-V

RSIC-Vを搭載した 最新 ESP32-C3 のベンチマーク評価

Espressifの最新Wi-Fi搭載マイコンESP32-C3のパフォーマンスを測ってみました。

ESP32-C3

Wi-FiとBluetoothを内蔵した最新ESP32マイコンESP32-C3には、低コストなRISC-Vプロセッサが搭載されています。本稿では、ベンチマーク評価を行い、従来のTensilica Xtensaプロセッサを搭載したESP32やESP8266とのパフォーマンス比較結果について紹介します。

搭載プロセッサ

比較に使用した各ESPマイコンに搭載されているMPUの概要を以下に示します。ESP32-C3は、シングルコアで、FPUなし、最大周波数160MHzの点で、プロセッサとしては、ESP8266に近い仕様です(RAMは2.5倍に増量。)

マイコンBitMPUコアFPU周波数RAM
ESP32-C332RISC-V1160 MHz400 KB
ESP826632Tensilica Xtensa LX1061160 MHz160 KB
ESP3232Tensilica Xtensa LX62240 MHz520 KB

機能面では、GPIOは22チャンネル※、ADC(12ビット)が6チャンネル、Bluetooth(LE)が5.0対応、AES-128/256, RSA暗号化アクセラレータ搭載など、ESP32に迫る仕様となっています。

※(2021/7/3追記)最近のマイコンの中では少ない方です。パラレル接続のLCDを使用する場合は、8ビットまたは16ビットで接続する必要があります(ビット数が少ないと表示速度が低下する)。

使用したハードウェア

ESP32-C3チップを開発したEspressif System純正の開発ボードESP32-C3-DevKitM-1を使用しました。写真右側にある通信モジュールは ESP32-C3-MINI-1 というモデルで、内部にESP32-C3チップやフラッシュメモリが実装されています。他にも、ESP-WROOM-02と同じ形状のESP32-C3-WROOM-02の開発が進めれられいます。なお、入手したハードウェアは、電波法に関わる工事設計認証が取得できていないので、電波を送信することは出来ません。

ESP32-C3チップを開発したEspressif System純正の開発ボードESP32-C3-DevKitM-1

搭載されているチップの情報は「Chip is unknown ESP32-C3 (revision 3)」、チップIDは「no Chip ID」と表示されました。モジュール内に内蔵されているフラッシュメモリのサイズは4MBでした。

$ ./esptool.py chip_id
 esptool.py v3.2-dev
 Found 1 serial ports
 Serial port /dev/ttyS2
 Detecting chip type… ESP32-C3
 Chip is unknown ESP32-C3 (revision 3)
 Features: Wi-Fi
 Crystal is 40MHz
 MAC: 7c:df:a1:xx:xx:xx
 Warning: ESP32-C3 has no Chip ID. Reading MAC instead.

 $ ./esptool.py flash_id
 Manufacturer: 20
 Device: 4016
 Detected flash size: 4MB

パフォーマンス測定の方法

測定には、ChrisMicro氏が公開しているArduino 用ベンチマークテストソフトArduino Benchmark All Platforms を使用しました。測定回数やウォッチドック・タイマの設定を追加したソースコードを下記に公開しました。

ソースコード(Arduino用):
https://bokunimo.net/git/esp32c3/tree/master/benchmark

なお、執筆時点では、通常(リリース版)のESP32のArduino IDE用 ボードマネージャesp32 by Espressif Systemsでは、ESP32-C3に対応していません。本稿では、開発途上版のバージョン2.0.0-alpha 1を使用しました。

開発版ボードマネージャは、下記のGitHub上のJSONファイルを使用します。ただし、執筆時点ではESP32-C3に対応していない古いesptool 3.0.0がインストールされ、動作しませんでしたので、esptool 3.2-devに変更してESP32-C3に書き込みました。

ボードマネージャ設定:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

最新のインストール方法は、下記のリンク先の情報をご覧ください。

GitHub - espressif/arduino-esp32: Arduino core for the ESP32
https://github.com/espressif/arduino-esp32

(2021/06/27時点の情報)
ESP32-S2 and ESP32-C3 Support
If you want to test ESP32-S2 and/or ESP32-C3 through the board manager, please use the development release link: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json and install the latest 2.0.0 version.

比較結果

結論としては、ESP8266に近い値でした。浮動小数点数演算器(FPU)を搭載していない点で、ESP32よりも劣ります。
6/30追記:FPUを使わない整数演算(Dhrystone)についてはESP32に近い値でした(ほぼクロックの差)。

ESP32-C3ESP8266ESP32
Whetstone (M WIPS)11.5613.68323.62
Dhrystone (DMIPS)172.3596.26250.82
4th order float IIR (Meg/s)0.0820.1264.267
digitalWrite (Meg/s)2.862.147.88
analogRead (kilo/s)20.6912.2615.88

Whetstone

演算能力(浮動小数点数)を比較するときによく用いられる方式での比較です。単位はM WIPSで、高いほど速いことを示します。ESP32と比べて、大差で劣っていることが分かります。

演算能力を比較するときによく用いられるWhetstone方式での比較。高いほど高速。ESP32と比べて、大差で劣っている

Dhrystone (6/30追加)

整数演算も確認してみました。こうみると、ややESP32に近いです。

ESP32 : 250.82 DMIPS
ESP32C3 : 172.35 DMIPS
ESP8266 : 96.26 DMIPS

浮動小点数演算器(FPU)を使わない整数演算の能力では、ESP32に近い値となった

GPIO (digitalWrite/analogRead)

汎用マイコンでよく使われるGPIO制御についてのパフォーマンス比較です。デジタル出力(Arduino命令digitalWrite)とアナログ入力(analogRead)を測定しました。
演算能力ほどの差は無く、アナログ入力については、ややESP32を上回りました。
汎用マイコンとしての能力については、何ら問題は無いでしょう。

汎用マイコンでよく使われるGPIO制御についてのパフォーマンス比較。演算能力ほどの差は無く、汎用マイコンとしての能力に問題は無さそうだ

結論

ESP32-C3はESP32シリーズではありますが、プロセッサのパフォーマンスとしては、ESP8266の後継のような位置づけであることが分かりました。とはいえ、RAMの容量拡大や、GPIOは22チャンネル(ESP8266は17)、ADCが12ビット(同10)・6チャンネル(同1)、Bluetooth搭載(同なし)、暗号化アクセラレータ搭載(同なし)など、ESP32に迫る充実ぶりで、機能面に不足は感じないでしょう。

なお、本稿で説明した測定結果は、特定のチップを使用し、特定の条件条件下での1サンプルでの値です。個体差、今後のバージョンアップ、測定条件などで変化する場合があります。

関連記事

ESP8266+ESP32 アーカイブ – ボクにもわかる電子工作のブログ (bokunimo.net)

by bokunimo.net

「RSIC-Vを搭載した 最新 ESP32-C3 のベンチマーク評価」への2件の返信

コメントは受け付けていません。

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es