ハードウエア

リセットとプログラム書き込み(ESP32)

Peripheral MCU で使用している ESP32の起動時の動作と、プログラム書き込みを説明します。

◀ この記事の前に: リセットとプログラム書き込み(Leafony)
▶ この記事の次に: 二つの Leafony Block

ESP32 のリセット

ESP32のリセットは ENピン( Pin.3 )を Lowします。

ENピンは、R71(10kΩ)を介して電源(+3.3V)に接続しています。電源の立ち上がりと同時に Hi になります。
C71(0.1uF)はリセットに必要な Low時間を確保するためのコンデンサです。( 最低必要時間:50ms 〜 100ms )

遅延リセット( オプション )

ESP32には電源 ON時にすぐにリセットスタートせずに、遅らせてリセットスタートする回路をプリント基板上に提供しています。電源 ON時に各回路が同時に ONになることにより電流が急激に増えることを抑えます。

タイマIC( LMC555 )を使用してリセット信号の立ち上がりを延ばす回路です。延ばす時間は R78 と C 78 で決めます。

ESP32の動作モード

ESP32は起動時に動作モードを選択できます。動作モードは以下の2種類です。GPIO0( Pin.25 )の電位により動作モードを選択します。

  • 通常動作モード: GPIO0 = High / 通常のプログラムの動作を行う。
  • プログラム書き込みモード: GPIO0 = Low / フラッシュモード、プログラムを書き込む。

ESP32の主要なモードは以下のとおりです。

  • Normal Boot(通常起動モード): ESP32に書き込まれたプログラムを実行する標準的なモード
  • Flash Mode(書き込みモード): ESP32に新しいプログラムを書き込む際に使用
  • UART Download Mode: UART経由でプログラムを書き込む特別なモード
  • OTA Update Mode(Over-The-Air更新モード): 
  • SD Card Boot Mode: SDカードからプログラムを実行するモード
  • Recovery Mode(リカバリーモード): SDカードからプログラムを実行するモード
  • Deep Sleep Mode(ディープスリープモード): 不正なファームウェアや起動失敗時に使用されるモード
  • Light Sleep Mode(ライトスリープモード): 一部の周辺機能を維持しつつ、電力消費を抑えるモード
  • Modem Sleep Mode: Wi-Fiを低消費電力モードで動作させる場合に使用

GPIOピンによるモード選択

起動時に特定の GPIOピンの状態に応じてモードが決まります。

モードGPIO0GPIO2GPIO15その他の条件
Normal BootHIGHDon’t careDon’t care通常起動
Flash ModeLOWHIGHDon’t care書き込みモード
Deep Sleepプログラム制御で選択
OTA Updateプログラム制御で選択

プログラムの書き込み

前項のリセットと動作モードを組み合わせることによりプログラムの書き込みができます。
開発環境とプログラムの書き込みはこちらをご覧ください。

手動で書き込む場合

IO0ピンを Lowにした状態でリセットすると UARTからプログラムが書きこめるようになります。
操作としては、SW1( EN = Reset ) と SW2( Boot )のスイッチを両方押して、SW1を離してから SW2 を離すことによりプログラム書き込みモードになります。その後に PC側でプログラム書き込み操作をします。

自動で書き込む場合

デバッグ中はプログラムを頻繁に書き込みます。毎回、手動で操作するのは煩雑です。

Arduino IDEなどの開発ツールには通信の制御線を使用して自動で動作モードの変更を行う機能を持たせたものがあります。この機能を使用することにより、自動的に動作モードの変更を行いプログラムの書き込みを行うことができます。

プリント基板上の実装( リセット回路 )

Peripheral MCU( ESP32 )はリセット回路を内蔵しています。
リセットは動作モードと関連しています。プログラム書き込みも動作モードのひとつです。そのため、リセット回路とプログラム書き込み回路は連携しています。

手動操作による押しボタンスイッチ SW1と SW2もこの回路に含まれます。

隣接している U7(部品未搭載)は電源 ON時に起動電流を低減するために、起動を遅延する回路です。( オプションです。)

USBシリアル変換モジュールの接続

プログラムの書き込みは外部に追加した USBシリアル変換モジュールを介してPCと接続します。

Arduino IDE などの開発ツールによっては、IDE( 開発ツール )からの操作により書き込みモードと通常起動モードを切り換えることができます。USBシリアル変換モジュールの RTSと DTRによりモード切換えをします。手動ブートリセット回路は押しボタンスイッチがありモードの選択をスイッチで行うこともできます。

接続コネクタ

シリアル変換モジュールとは以下のコネクタ CND1で接続します。コネクタは以下のとおりです。

  • CND1: 0010897120 / 2.54mm Pitch C-Grid Breakaway Header, Dual Row / Datasheet / Molex, LLC
Pin No.NameCategoryPort / PinSource
1+3.3V
2+3.3V
3RTSUART
4DTRUART
5RXD0UARTIO3Peripheral MCU
6TXD0UARTIO1Peripheral MCU
7JTAG-TDIJTAGIO12Peripheral MCU
8JTAG-TCKJTAGIO13Peripheral MCU
9JTAG-TMSJTAGIO14Peripheral MCU
10JTAG-TDOJTAGIO15Peripheral MCU
11GND
12GND
Technical Considerations  DTR と RTS
DTR、RTSは UART(シリアル通信)を使用したときに、データの受け渡しをスムースに行う制御のための信号線です。この信号線を流用して、動作モードの切り換えやリセットをおこないます。DTR、RTSの制御は開発ツール側の機能です。それに応えられるように Q1、Q2 で回路を構成しています。ここでは抵抗入りのトランジスタを使用してコンパクト( PCB面積と部品点数の削減 )にしています。
詳しい情報: ESP8266にDTRとRTSで自動書き込みをする: こちらに詳しい情報があります。 / プログラミングな日々
Technical Considerations  EN と Boot( IO0 )のプルアップ
ENにはプルアップ抵抗( R71 )が接続しています。Boot( IO0 )にもプルアップ抵抗が必要です。ESP32のGPIO0(IO0)は、起動時に動作モードを決定するためのピンとして使用されます。GPIO0の初期状態(リセット直後の状態)は通常、プルアップ(HIGH)されています。そのため外部にプルアップ抵抗はありません。
Design Considerations  USB用ドライバICをどこに置くか
本体ボードに USB用ドライバICを設置していません。
USBドライバ用ICを本体ボードに搭載すると、直接 USBケーブルを接続できるため便利ですが、USBドライバICを設置しなかった理由は以下のとおりです。
・PCB面積と部品点数の削減
・USBシリアル変換モジュールを自由に選択( PC側のドライバの対応 )
・Peripheral MCUは周辺回路の制御が主目的であまり変更がないこと
・JTAGを同時使用した場合、USBを2系統持つIC( FT2232など )を使用することを想定

プリント基板上の実装( プログラム書き込み用コネクタ )

ESP32のプログラム書き込み用のコネクタ CND1 はメインボードの右下にあります。

コネクタはピンヘッダの形状です。ブレッドボード・ジャンパー線( メス – オス )で接続することもできますし、レセプタと接続することもできます。

レセプタ: 2.54mm Pitch C-Grid / Datasheet / Molex, LLC

隣接して Leafony に搭載する STM32の SWDデバッグ用コネクタ CND2, CND3 があります。

USBシリアル変換モジュールと CND1を接続した例

コネクタ CND1の周辺

参考情報

参考になる情報は以下のとおりです。

このホームページ内

  • 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。

他のWebサイト

カテゴリー
最近の記事 おすすめ記事

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

TOP