0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

↑ 過去に、ESP32-WROOM、ESP32-WROVER、ESP32-S3-WROOM に対応したマルチ書き込みボードを作成しました。

最近になって、ネイティブUSBの機能を必要としない場合は、ESP32-C3 を使う場面が増えました。安価で、消費電力が少なく 使い勝手がいいと思っています。

そこで、今回は、ESP32-C3-WROOM-02 用の 書き込みボードを作成しました。

ESP32-C3-WROOM-02 は、1.5mmピッチということで、ユニバーサル基板やピンヘッダーの入手が課題です。(1.27mmピッチのものより入手性が悪い。)

◆ 今回使用した部材

◆ 回路図

データシートESP32-C3-WROOM-02 「Figure 9-1. Peripheral Schematics」の回路図を元に、書き込みに必要な部分だけを抜き出して、次の回路図としました。「RESET」「BOOT」スイッチは、手動ダウンロードする場合は必須です。

回路図.png

◆ ユニバーサル基板 配線図

半分に切って 40mm x 60mm とし、次に示す配線図としました。

ESP32-C3書き込みボード.png

◆ 完成

今回、抵抗とコンデンサに チップ部品を使い、主に裏面で配線しました。

IMG_7995.jpeg IMG_7996.jpeg IMG_7999.jpeg

今回はピンヘッダーとしては使わず ピンだけを使ったため、すべての端子を支えていません。ピン番号 1, 2, 7, 8, 9, 11, 12, 16, 18, の 9本だけで支えました。


今回の工作のために購入したのは、「1.5mmピッチ ユニバーサル基板」のみで、それ以外は 手持ちのパーツを使いました。

2022年12月に購入していた ESP32-C3-WROOM-02-N4 のストックが残り1個となった。当時の価格は310円。今買うと440円。それでもESP32の中でH2に次ぐ安さです。


◆ ボーレートについて

この書き込みボードで、ESP32-C3 の Micropython firmware を 921600bps で書き込もうとしたとき、次のエラーが発生。

$ esptool --chip esp32c3 --port /dev/cu.usbserial-53250003491 --baud 921600 write-flash 0 esp32c3-20230426-v1.20.0.bin
esptool v5.1.0
Connected to ESP32-C3 on /dev/cu.usbserial-53250003491:
Chip type:          ESP32-C3 (QFN32) (revision v0.4)
Features:           Wi-Fi, BT 5 (LE), Single Core, 160MHz
Crystal frequency:  40MHz
MAC:                a0:76:4e:b3:5b:70

Stub flasher running.
Changing baud rate to 921600...
Changed.


Hard resetting via RTS pin...
Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/__init__.py", line 1173, in _main
    main()
    ~~~~^^
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/__init__.py", line 1032, in main
    cli(args=args, esp=esp)
    ~~~^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/cli_util.py", line 229, in __call__
    return super().__call__(*args, **kwargs)
           ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/rich_click/rich_command.py", line 402, in __call__
    return super().__call__(*args, **kwargs)
           ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/click/core.py", line 1462, in __call__
    return self.main(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/rich_click/rich_command.py", line 216, in main
    rv = self.invoke(ctx)
  File "/opt/homebrew/lib/python3.13/site-packages/click/core.py", line 1850, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/click/core.py", line 1246, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/click/core.py", line 814, in invoke
    return callback(*args, **kwargs)
  File "/opt/homebrew/lib/python3.13/site-packages/click/decorators.py", line 34, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/__init__.py", line 688, in write_flash_cli
    attach_flash(ctx.obj["esp"], kwargs.pop("spi_connection", None))
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/cmds.py", line 1112, in attach_flash
    flash_id = esp.flash_id()
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/loader.py", line 1091, in flash_id
    self.cache["flash_id"] = self.run_spiflash_command(SPIFLASH_RDID, b"", 24)
                             ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/loader.py", line 1653, in run_spiflash_command
    old_spi_usr = self.read_reg(SPI_USR_REG)
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/loader.py", line 901, in read_reg
    return self.check_command(
           ~~~~~~~~~~~~~~~~~~^
        "read target memory", self.ESP_CMDS["READ_REG"], command, timeout=timeout
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/loader.py", line 565, in check_command
    val, data = self.command(op, data, chk, timeout=timeout)
                ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/loader.py", line 495, in command
    p = self.read()
  File "/opt/homebrew/lib/python3.13/site-packages/esptool/loader.py", line 431, in read
    return next(self._slip_reader)
StopIteration

A fatal error occurred: The chip stopped responding.

460800bpsなら問題なく書き込める。

どうやら、ESP32-C3-WROOM-02 の内部クロック(80MHz)から(分周して) 921600bpsという中途半端な高ビットレートを作り出すと 割り切れず誤差が大きいことが原因のようです(460800bpsも割り切れないが、誤差が小さい)。
綺麗に割り切れる、1.5Mbpsや 2Mbpsなら書き込めます。

1,466,928バイトの Micropython firmware の書き込み時間を(timeコマンドで)測定した結果を下表に示す。

bps 時間[秒]
460800 33.018 1
921600 エラー
1500000 26.286 0.796
2000000 24.639 0.746

ESP32-C3 に書き込むときは、2Mbpsを指定しましょう。約3割早い。


◆ 次回

ESP32-C3 は、直接USBからの書き込みもできます。これを使えば、ESPダウンローダや USBシリアル変換装置 が不要です(代わり、VBUSの5Vを3.3Vに変換するLDOと、手動ダウンロードさせる「RESET」「BOOT」スイッチが必要)。
次は、今回の ESP32-C3 書き込みボード に USBインターフェイスを追加します。


以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?