Body MCU で使用している STM32の起動時の動作と、プログラム書き込みを説明します。
◀ この記事の前に: Peripheral MCU / ESP32 のピン配置
▶ この記事の次に: リセットとプログラム書き込み(Leafony)
STM32 のリセット
Body MCU は MCU Leafとして STM32を搭載しています。リセットは STM32の仕様、Leafony の仕様に基づきます。
ENピンは、R71(10kΩ)を介して電源(+3.3V)に接続しています。電源の立ち上がりと同時に Hi になります。
C71(0.1uF)はリセットに必要な Low時間を確保するためのコンデンサです。( 最低必要時間:50ms 〜 100ms )
ESP32の動作モード
ESP32は起動時に動作モードを選択できます。動作モードは以下の2種類です。GPIO0( Pin.25 )の電位により動作モードを選択します。
- 通常動作モード: GPIO0 = High / 通常のプログラムの動作を行う。
- プログラム書き込みモード: GPIO0 = Low / フラッシュモード、プログラムを書き込む。
プログラムの書き込み
前項のリセットと動作モードを組み合わせることによりプログラムの書き込みができます。
手動で書き込む場合
IO0ピンを Lowにした状態でリセットすると UARTからプログラムが書きこめるようになります。
操作としては、SW1( EN = Reset ) と SW2( Boot )のスイッチを両方押して、SW1を離してから SW2 を離すことによりプログラム書き込みモードになります。その後に PC側でプログラム書き込み操作をします。
自動で書き込む場合
デバッグ中はプログラムを頻繁に書き込みます。毎回、手動で操作するのは煩雑です。
Arduino IDEなどの開発ツールには通信の制御線を使用して自動で動作モードの変更を行う機能を持たせたものがあります。この機能を使用することにより、自動的に動作モードの変更を行いプログラムの書き込みを行うことができます。
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面積と部品点数の削減
・Peripheral MCUは周辺回路の制御が主目的であまり変更がないこと
・JTAGを同時使用した場合、USBを2系統持つIC( FT2232など )を使用することを想定
参考情報
他のサイトで参考になる情報は以下のとおりです。
このホームページ内
- 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。
他のWebサイト
- SN74LVC1G3157 SPDT アナログスイッチ Datasheet