aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

risc-v32imc(esp32c3)

 買おうか買うまいかと数ヶ月迷っていたが(別段それほど迷う事柄でもないのですが:)risc-v32imc(esp32c3)のスイッチサイエンス製のボードを入手:

ESPr® Developer C3(RISC-Vシングルコア)www.switch-science.com

esp32c3

 商品の説明をするにESPr(tm)Developer C3とはesp32c3miniモジュールを使ったrisc-v32imcコアのモジュール(勿論、支那製)をスイッチサイエンスさんが基板化してESPr(tm)というブランドで販売している物。私のような初心者が気をつけねばならない点はESPr(tm)はテンシリカコアのesp32s3とrisc-v32imcのesp32c3が存在する事で両者は全く異なるコアだから間違えないようにしたい。価格は性能相応でrisc-v32のesp32c3の方が安い。実はSeeed XIAO(esp32c3)も同じモジュールを搭載し、値段も安い(いっしょに買った)が強いてスイッチサイエンス品を買った理由は情報とサポートがある(かもしれない)と期待した(まあ、結局ベンダに聞くしか無いのだが)為、と言っておこう。

1.外観

 サイトの情報とリンクが全てだが、esp32c3モジュールのデータシートの本家へのリンクが掲示されてるのでそれを読むのだが・・・大雑把なマップしか記載されておらず、チップの詳細はそこからリンクがあるチップのデータシートを参照する事になる。これは一見、まともに(少なくともフリスケのi.MXのマニュアル並?に)記載されている様に見える。同社なりに進歩(ドキュメントに廻せる人材を確保する余裕が出来たのだろうか)している印象。で、外観写真をば:

ESPr(tm)Developer C3

いや、その大きさ以外の情報は無い、入手して手元で動かしてます的な証拠写真か。拡大写真(しつこい)↓

ESPr(tm)Developer C3

 同じモジュールを使っているから当然かもしれないがSeeed XIAO(esp32c3)の2割増しぐらいの大きさか。但しXIAO(esp32c3)は巨大な外部アンテナが添付されるので無線を使う方は一考の余地があるのかもしれない(割高だが)。

2.arduino ide の導入

 これは上記スイッチサイエンスさんのサイトに記載されている。以下引用

Arduino IDEを使った開発

Arduino IDEのメニューからファイル > 環境設定を選び、追加のボードマネージャのURLに次のURLを追加してください。

https://espressif.github.io/arduino-esp32/package_esp32_index.json

Arduino IDEのメニューからツール > ボード > ボードマネージャを選び、次のボードをインストールしてください。

esp32 by Espressif Systems

Arduino IDEのメニューからツール > ボード > ESP32C3 Dev Moduleを選んでください。

 arduino ide 1.8.19と2.2.1で試したがどちらも問題なく可能であったが、esp32系はpyserialを必要とするから pip pyserial 等で導入する必要がある。

2.1 arduino ide 1.8.19の画面

arduino ide 1.8.19 for esp32c3

3.python ide(Wing personal)

 上記スケッチはSerial経由でesp32c3自身のメモリを参照するスケッチでホスト側(CDC-ACMで接続)で表示するpython3プログラム(10年前に初めてtkinberで書いた物:)と連携して動かしてみる↓

tk_button3_p3.py

何と言うか昔懐かしのメモリダンプ書式でありました。右上のESC3: v0.2〜は接続したターゲットの機種情報(ESC3はesp32c3の略号:)でこれで16bit/32bitを判定している(画面下の ○16 ●32 がそれ)。アドレスは画面左上のAD のフィールドに入力する。

 前にも書いた気がするがWing personalなpython ide で動かした画面↓

Wing personal python ide

 Wing personal は無料のpython ideでPyCharmが重くて厳しかったので代わりに常用しているpython ideで画面中下に標準入出力を表示してくれるので今回の如きターゲットへのコマンド/レスポンスがモニタ出来て具合が良く、制御コードも表示してくれてるので有り難い。

4.risc-v32的な何か・・・

 以上でおしまいなのだが、arduino ideのおかげでほぼターゲット非依存で開発出来るのは従来の組み込み機器の常識を超えたarduino ideの偉大なる成果(誇張ではありません)で深く感謝しているのだが

 risc-v32的な何か・・・を感じたい

 と思い、久々にobjdumpでelfを逆アセンブルしてリストを眺めてみる(自己満足です:)。

4.1 arduinoソース(抜粋)

int led=0 ;

void setup() {
  asm("nop");
  Serial.begin(115200);
  pinMode(led, OUTPUT);
  unsigned char *p ;
}

 全く意味無いがインラインアセンブルで asm("nop"); を追記。で、lstファイル(抜粋)がこれ:

esp32c3(risc-v32imc) disassemble list(抜粋)

 risc-v32のisa全く詳しく無いが、何となくrisc-v風な命令で展開されている模様。19684行目にインラインアセンブルが記載されている(0x0001で正しい?)。古い人間なのでこうしてアセンブラ込みのリストを見ると納得する性癖は変わらない:)。因みに先のメモリダンプと上記逆アセンブルリストを突合するに:

esp32c3 memory dump

 little endianである事が分かる(0x42000040〜:)。因みにROM領域(0x0xxx xxxx)等は保護例外が発生する領域があるので注意したい。

5.まとめ

 ・esp32c3(risc-v32imc)モジュールでarduino ide 1.8.19/2.2.1で普通に開発出来る。

 ・Seeed XIAO(esp32c3)等esp32c3モジュールを使った物でも普通に動く(あたりまえ)

 ・折角開発元からデータシートが公開されているのだから、一読した方が良いと思う(risc-v32 isaはrisc-v本家参照)。

おしまい