ESP32 WROOM 32 電気設計と統合
はじめに
コネクテッド製品開発におけるよくあるパターン:開発ボード上では何週間もクリーンに動作していたプロトタイプが、カスタムPCBの最初のビルドで、Wi-Fiの断続的なドロップ、ランダムなリセット、またはファームウェアフラッシュ後に起動しないユニットを示すことがあります。モジュールは同じESP32 WROOM 32です。回路図は正しく見えます。障害は迅速に特定するには一貫性がありません。
これらの症状は通常、数少ない根本原因にたどることができます。モジュール付近のバルクコンデンサの不足、ストラップピンがフローティング状態のまま、またはグランドポアによってアンテナのキープアウトゾーンが侵害されたことです。これらのいずれもエキゾチックな障害ではありません。モジュールは外部から見るとシンプルに見えるため、業界全体で繰り返されます。金属シールドは、実際のレイアウトと電力要件を持つ完全なRFサブシステムを隠しています。
この記事では、ESP32 WROOM 32を工学的な主題として取り上げます。モジュールが実際に何を含んでいるか、設計上の制約がどこから来るか、そしてそれを囲む信頼性の高い製品をどのように構築するかについて説明します。
ESP32 WROOM 32とは何か、そして組み込み設計におけるその位置づけ
ESP32 WROOM 32は、自己完結型のシステムインパッケージです。ESP32 SoC、40MHzクリスタル、SPI NORフラッシュ、RFフィルタネットワーク、PCBトレースアンテナを金属シールド下にすべて搭載した、単一のスタンプモジュールです。この区別は製品エンジニアにとって重要です。ベアチップを配置しているわけではありません。定義された電気的境界を持つ、事前に認証されたRFモジュールを配置しています。
ESP32-DevKitCのような開発ボードは、キャリアPCB上にWROOM 32モジュールを搭載しています。モジュール自体が量産に入るコンポーネントです。この境界(モジュール対ボード対ベアSoC)を理解することで、エンジニアが内部でこれらの懸念に対処済みのモジュールにベアチップのレイアウトルールを適用するという、設計エラーのクラスを防ぐことができます。
Espressifは、WROOMファミリーの下でいくつかのバリアントをリリースしました。オリジナルのWROOM-32は古いPCBレイアウトを使用しています。WROOM-32Dは、同じピンフットプリントを維持しながら内部レイアウトを改訂しました。WROOM-32EはRFフロントエンドを更新し、新規設計で現在推奨されているバリアントです。WROOM-32Uは、PCBトレースアンテナをIPEXコネクタに置き換えて外部アンテナ使用を可能にしています。これらのバリアント間でのピン互換性は大部分維持されていますが、フラッシュICの調達とRFフィルタコンポーネントが異なります。これは量産部品の認定時に重要です。完全なピンテーブルと電気仕様については、 ESP32 WROOM 32の完全なデータシートとピンリファレンスを参照してください。
ESP32 WROOM 32 電気およびRF仕様:設計上の意思決定を推進するもの
CPU、メモリ、およびクロックアーキテクチャ
WROOM 32の中核となるESP32 SoCは、最大240MHzで2つのXtensa LX6コアを実行します。実際には、ほとんどのファームウェアはこれらのコアを機能で分割しています。コア0は、ESP-IDFのデフォルトスケジューラ割り当ての下でWi-FiおよびBluetoothスタックタスクを処理します。コア1は、センサーポーリング、ディスプレイ更新、プロトコル解析、または製品ロジックが必要とするものなどのアプリケーションレイヤーを実行します。この分割は自動ではありません。これは、明示的なタスクピン留めを必要とします。 xTaskCreatePinnedToCore()、無視すると、Wi-Fiスタックとアプリケーションが同じコアで競合することになります。
SRAMは合計520KBで、内部データRAMと命令RAM領域に分割されています。ROMには448KBのブートローダーとライブラリコードが格納されています。標準のWROOM 32の外部SPIフラッシュは4MBです。ESP-IDFのフルビルド、OTAパーティション、ファイルシステム、TLS証明書ストアを組み合わせると、エンジニアはしばしばその容量がどれほど早く満杯になるかを過小評価します。パーティションテーブルは早期に予算計上してください。ファームウェアがフィールドに出た後に再構成するのは困難です。
RTCドメインは、ディープスリープ中に8KBの低速メモリと8KBの高速メモリを保持します。ここに、スリープサイクルを生き残る必要がある状態(キャリブレーション値、シーケンスカウンター、接続認証情報)を保存します。これらをメインSRAMに保存すると、スリープエントリごとに失われます。NVSフラッシュに保存すると機能しますが、ウェイクアップレイテンシとフラッシュの摩耗が増加します。RTCメモリは、小さく頻繁にアクセスされる状態に最適です。
シングルコアモードでは、Wi-Fiスタックとアプリケーションがコア0で一緒に実行されます。これは単純なデモでは機能しますが、Wi-Fiドライバーによるスタックプリエンプションに耐えられないリアルタイムタスクの余地は残りません。
GPIOの機能、多重化、電気的限界
WROOM 32モジュールは、キャステレーションされたエッジに沿って38個のピンを公開しています。すべてが自由に利用できるわけではありません。GPIO 6から11は内部SPIフラッシュに接続されています。ファームウェアでこれらのピンに触れると、即座にフラッシュ破損またはハードフォールトが発生します。GPIO 34から39は入力専用です。内部プルアップも駆動能力もありません。ADC入力または外部割り込み線としてはうまく機能しますが、これらを出力として割り当てるのは、デバッグ時間を無駄にするサイレントフェイルです。
GPIOマトリクスはESP32の最も有用な機能の1つです。ほぼすべてのペリフェラル(UART、SPI、I2C、PWM)を、ほぼすべての利用可能なGPIOピンにルーティングできます。この柔軟性により、PCBルーティングが大幅に簡素化されます。ルーティングコストは実際には存在しますが、わずかです。マトリクスを通過する信号は、直接ペリフェラル接続と比較して、約1 AHBクロックサイクルのレイテンシが追加されます。ほとんどのアプリケーションでは、これは無関係です。ビットバンギングプロトコルなどの精密タイミングアプリケーションでは、これは重要です。
ロジックレベルは3.3Vです。産業用信号はしばしば5Vまたは24Vです。5V信号をESP32 GPIOに直接接続すると、初期は機能するように見えても、長期的にはSoCが損傷します。レベルシフターまたは抵抗分圧器が必要です。オープン-ドレイン出力と3.3Vプルアップの組み合わせは、バスマスターがラインを低く保持し、プルアップ電圧がターゲットデバイスと一致する限り、レベルシフトなしでI2Cなどのバスに機能します。
ストラップピンは、回路図レビュー時に専用のチェックリストを用意すべきです。起動時にGPIO 0がローだとダウンロードモードが選択されます。ダウンロードモード中はGPIO 2はローまたはフローティングである必要があります。GPIO 12はフラッシュ電圧を設定します。起動時にこれをハイにすると1.8Vフラッシュ動作が強制され、WROOM 32の3.3Vフラッシュと一致しないため、起動に失敗します。GPIO 15はSDIOスレーブタイミングを制御します。これらのピンは、チップがリセットを解除する前に正しい論理状態に到達する必要があり、外部回路が接続されている場合は、電源投入時の状態を分析する必要があります。回路図解析から物理検証に移行するエンジニアにとって、 ESP32 WROOM 32開発ボードのハードウェア概要 では、市販のキャリアボードでこれらの動作をどのようにテストできるかを説明しており、カスタムPCBレイアウトにコミットする前に検討できます。
RF性能、アンテナオプション、および規制認証
WROOM-32およびWROOM-32Dは、統合PCBトレースアンテナを使用しています。RF性能は、ホストPCBで、指定された除外領域(keep-out zone)が尊重されているかどうかに完全に依存します。WROOM-32Uは、トレースアンテナをIPEXコネクタに置き換えたものです。外部アンテナバリアントは、モジュールが金属筐体内に取り付けられる場合に役立ちますが、生産製品ではケーブル、コネクタ、および外部アンテナが追加の故障点となります。
Wi-Fiは802.11 b/g/nを使用して2.4 GHzで動作します。Bluetooth 4.2およびBLEは、ESP-IDFスタックの共存調停メカニズムを通じて同じ2.4 GHz無線を共有します。両方が同時にアクティブな場合、スタックはそれらの間で無線時間をスケジュールします。Wi-Fiの典型的な出力電力は約20 dBmです。1 Mbpsでの802.11bの受信感度は通常約-98 dBmです。工業用筐体で、筐体からの挿入損失が10~15 dBの場合でも、中程度の距離で実用的なリンクバジェットを提供します。厚い鋼鉄製の筐体は20~30 dBの減衰を追加する可能性があります。その場合、外部アンテナを備えたWROOM-32Uが実用的な選択肢となります。
事前認証は、ベアESP32チップではなくモジュールを使用する最も強力な理由の1つです。WROOM 32は、FCC、CE、およびIC認証を取得しています。モジュールを認証された構成で使用する製品(アンテナ除外領域が尊重され、RFパスに変更が加えられていないことを意味します)は、その認証を独自の規制申請の基礎として使用できます。これにより、RFテストの数ヶ月とテストラボの数千ドルの費用を節約できます。除外領域を侵害したり、再テストなしにRFスイッチを追加したりすると、このメリットは完全に無効になります。
内部モジュールアーキテクチャ:金属シールド内部のもの
SPIフラッシュ、クリスタル、フィルターネットワーク、RFフロントエンドのレイアウト
シールドの下には、WROOM 32は5つの機能ゾーンを含みます。ESP32 SoCダイ、メインクロック用の40MHzクリスタル、SPI NORフラッシュIC、パッシブRFフィルターネットワーク、PCBトレースアンテナです。SoCとフラッシュは、専用の内部SPIバスを介して通信します。そのバスは、モジュールの外部からはアクセスできません。クリスタルは、SoCのXTALピンに直接接続されます。RFフィルターは、SoCのRF出力とアンテナの間に配置され、インピーダンスマッチングと高調波抑制を行います。
金属シールドは2つの役割を果たします。ホストPCBのデジタル信号からの干渉を低減するためのRFシールドを提供します。また、アンテナの明確なグランドリファレンスプレーンを定義します。ホストPCBでは、モジュールの直下の領域には、ソリッドグランドプレーン銅と、ボードのメイングランドへの良好なビアステッチングが必要です。モジュールの下のグランドプレーンのギャップは、RFパフォーマンスと熱放散の両方を低下させます。
キープアウトゾーンは、アンテナ側でモジュールの境界を超えて拡張されます。ホストPCBのどのレイヤーにも、そのゾーン内に銅(トレース、ポア、またはパッド)が存在してはなりません。アンテナ側に近すぎるコンポーネントは、一貫して測定可能なRSSI低下(通常、ベンチテストで3~8dB)を生成し、実際の設置ではレンジの低下につながります。
WROOM-32DとWROOM-32Eは、同じ外部フットプリントとピン配置を共有します。WROOM-32Eは、改訂されたフィルターコンポーネントと異なるフラッシュICソースを備えた更新されたRFフロントエンドを使用しています。新規設計の場合、WROOM-32Eが現在の製造バリアントです。特定の生産ロットのコンポーネントを認定するエンジニアは、Espressifが生産ロット全体で複数のサプライヤーを使用しているため、フラッシュICの部品番号を確認する必要があります。バリアント間のフラッシュICソーシングとRFフィルターの変更に関するコンポーネントレベルの詳細については、以下を参照してください。 WROOM-32EボードのフラッシュICとRFフロントエンドの詳細
ESP32 WROOM 32をハードウェアデザインに統合する
電源設計とデカップリング要件

WROOM 32は3.0 Vから3.6 Vで動作します。公称ターゲットは3.3 Vです。Wi-Fi送信バースト中、瞬間的な電流引き込みは短時間(通常はバーストあたり1 ms未満)で500 mAに達することがありますが、ビーコン間隔でバーストが繰り返されます。500 mAの定常状態を処理できても過渡応答が悪い電源は、これらのバースト中に電圧降下します。その電圧降下は、クリーンな電源障害ではなく、間欠的なWi-Fi切断または予期しないリセットとして現れます。
モジュールの近くにあるバルクコンデンサがこれを処理します。一般的なアプローチは、モジュールのVCCピンの近くに100 µF電解コンデンサと10 µFセラミックコンデンサを配置し、さらに各VCCピンに個別に100 nFセラミックコンデンサを追加することです。電解コンデンサはエネルギー貯蔵を処理します。セラミックコンデンサは高周波過渡応答を処理します。セラミックコンデンサをスキップしてバルクコンデンサのみに依存すると、電源レールに高周波ノイズが残ります。
バッテリー駆動製品の場合、LDOレギュレータは実装が簡単ですが、熱として電力を浪費します。スイッチングレギュレータはより効率的ですが、スイッチングノイズを発生させ、RF電源から離しておくために慎重なPCBレイアウトが必要です。効率があまり重要ではなく、基板面積が利用可能な mains-powered HMI製品では、十分なドロップアウトマージンを持つ高品質のLDOが、リスクの低い選択肢であることがよくあります。ENピンはモジュールの電源状態を制御します。ENを低く駆動すると、モジュールはリセット状態に保持されます。ENピンはフローティングさせてはなりません。外部制御が不要な場合は、10 kΩ抵抗を介してハイに接続してください。
ツールチェーンのセットアップ、フラッシュプログラミング、および最初のファームウェアブート
ESP-IDFは、本番ファームウェアに適したフレームワークです。Arduinoはプロトタイピングには高速ですが、パーティション管理、タスクのピン留め、および電源管理を抽象化しすぎて、後で問題を引き起こす方法で実装されています。通常、意思決定のポイントは次のようになります。製品がOTAアップデート、デュアルパーティションの安全性、または精密な電源管理を必要とする場合は、ファームウェアの最初の行からESP-IDFで開始してください。
UART0経由でWROOM 32をプログラミングするには、モジュールをダウンロードモードにする必要があります。リセット中にGPIO 0を低く保持する必要があります。標準の自動リセット回路は、USB-UARTブリッジ(CP2102およびCH340が一般的な選択肢)のDTRおよびRTSラインを、2つのトランジスタまたは専用リセットICを介して使用します。回路はENを低く引き下げ、次にGPIO 0を低く保持しながら解放し、次にGPIO 0を解放します。タイミングが重要です。チップがGPIO 0をサンプリングする前に完全にリセットされるのに十分な時間、ENは低く維持される必要があります。典型的な最小ENロー時間は約100 msです。
プロジェクト開始時のパーティションテーブルの計画は、面倒な手戻りを防ぎます。最小限のOTA対応パーティションテーブルには、2つのOTAアプリパーティション、1つのOTAデータパーティション、およびNVSパーティションが必要です。例示的なレイアウト:
# Illustrative partition table — not a literal production config
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
ota_0, app, ota_0, 0x10000, 0x180000,
ota_1, app, ota_1, 0x190000, 0x180000,
フラッシュ後、 idf.py monitor ブートログが表示されます。最初のブートが成功すると、IDFバージョン、チップリビジョン、フラッシュサイズ、およびアプリパーティションのエントリポイントが出力されます。ブートループ(繰り返しリセットメッセージ)は、通常、ストラppingピンの問題、パーティションテーブルの不一致、または初回実行時のファームウェアパニックが原因です。ブートログのリセット理由コードは、どのアウトウォッチドッグまたは例外がリセットをトリガーしたかを特定します。
JTAGデバッグインターフェイスと起動時の障害分離

WROOM 32のJTAGは、GPIO 12(TDI)、GPIO 13(TCK)、GPIO 14(TMS)、GPIO 15(TDO)を使用します。これらの4つのピンは、前述のストラppingピンと重なります。GPIO 12およびGPIO 15はブート動作に影響します。標準的な回避策は、それらのピンが電源投入時に正しいストラpping状態になるようにすることです(JTAGプローブがその時点でそれらを駆動していない場合、そうなります)。または、ブート完了後にのみJTAGプローブを接続するか、リセット中に出力をハイインピーダンス状態にするプローブを使用します。
ESP32ターゲット構成のOpenOCDは、JTAGインターフェイスを介してオンチップデバッグモジュールに接続します。GDBはローカルソケット経由でOpenOCDにアタッチします。そこから、ブレークポイントの設定、レジスタの検査、メモリの読み取り、および両方のコアのコードのステップ実行を個別に行うことができます。UART出力がない(最初のログメッセージの前に完全にハングする)起動障害の場合、JTAGは実行がどこで停止したかを判断する唯一の方法であることがよくあります。
ULP(超低電力)コプロセッサは、メインコアがディープスリープ状態の間実行される、個別のシンプルなプロセッサです。GPIOの状態を読み取ったり、基本的なADC読み取りを実行したり、しきい値を超えたときにメインコアをウェイクアップしたりできます。このモードでの電流消費は、通常、数十マイクロアンペアの範囲です。数秒ごとにセンサーをサンプリングし、値がしきい値を超えた場合にのみウェイクアップする必要がある製品では、ULPにより、個別の低電力MCUが不要になります。より複雑なセンサー処理や浮動小数点演算を必要とするタスクには、ULPは適切なツールではありません。代わりにメインコアをウェイクアップしてください。ディスプレイ駆動のHMI製品を構築するエンジニアは、以下も確認してください。 ESP32 WROOM 32へのディスプレイの接続 ディスプレイ統合に固有のSPIおよびI2C GPIO割り当てについて。
WROOM 32ベース製品の製造と信頼性エンジニアリング
PCBレイアウトルール、アンテナキープアウト、EMC準拠

Espressifのハードウェア設計ガイドラインでは、WROOM 32のアンテナ側にキープアウトゾーンが指定されています。正確な寸法は公式設計ガイドに記載されていますが、原則として、そのゾーン内のPCBレイヤーには銅箔を配置しません。これは、グラウンドポア、信号トレース、ビア、パッドのいずれも含まないことを意味します。内層のキープアウトゾーンに侵入するグラウンドポアは、高密度基板レイアウトでよく見られるエラーです。トップレイヤービューでは見えず、注意深いデザインルールチェックまたはRF性能テストでのみ検出されます。
キャステレーションエッジはんだ付けには、ペーストステンシル開口部への注意が必要です。WROOM 32のキャステレーションパッドはハーフビアです。ペースト開口部はパッドを覆い、はんだがビア壁を吸い上げるように基板端にわずかに広がる必要があります。ペースト不足は、目視検査には合格しても振動で破損するコールドジョイントを引き起こします。リフロープロファイルは、標準的な鉛フリーSAC305ガイドラインに従い、ピーク温度は約245°Cにします。キャステレーション接合部のビア充填は、リフロー後のアングルカメラまたはX線による検査で確認します。
モジュールの下にあるグラウンドプレーンの連続性は、RFと熱の両方の目的を果たします。モジュールの金属シールドは、キャステレーションエッジパッドを介してグラウンドに接続されます。モジュールの下にある、途切れのないソリッドなグラウンドプレーンは、シールドに低インピーダンスの戻りパスを提供し、RF性能に直接影響します。また、持続的なWi-Fiアクティビティ中にSoCによって生成される熱のための熱パスも提供します。モジュールの下のグラウンドプレーンをスロット化したり、信号トレースをルーティングしたりすると、両方の性能が低下します。
OTAアップデートアーキテクチャ、フラッシュ摩耗、および長期フィールド信頼性
デュアルOTAパーティションスキームは、フィールドでファームウェアアップデートを受信するあらゆる製品にとって、最低限必要なアプローチです。ブートローダーはアクティブなパーティションを実行します。OTAアップデートは非アクティブなパーティションに書き込まれます。新しいファームウェアが正常に起動し、 esp_ota_mark_app_valid_cancel_rollback() を呼び出した後にのみ、ブートローダーは新しいパーティションに恒久的に切り替わります。それ以前に新しいファームウェアがクラッシュした場合、次回の起動時には以前の動作中のファームウェアに戻ります。このロールバックメカニズムがないと、糟糕なOTAアップデートはデバイスをブリックします。
SPI NORフラッシュのフラッシュ耐久性は、通常、セクターあたり100,000回の消去サイクルで評価されます。OTAアップデート中にのみ書き込まれるファームウェアパーティションの場合、これは実質的に無制限です。懸念されるのはNVS、つまり設定データ、キャリブレーション値、接続資格情報に使用される不揮発性ストレージパーティションです。ファームウェアがセンサーの読み取りごと、またはネットワークイベントごとにNVSに書き込む場合、摩耗は急速に蓄積します。ESP-IDFのNVSライブラリにはNVSパーティション全体でのウェアレベリングが含まれていますが、ウェアレベリングアルゴリズムが機能する余地を与えるにはパーティションが十分に大きい必要があります。16〜32 KBのNVSパーティションが一般的な最小値です。値が実際に変更された場合にのみNVSに書き込み、読み取りサイクルごとに書き込まないことが、摩耗を削減するための最も効果的な単一の対策です。
ESP-IDFでは3つのウォッチドッグレイヤーが利用可能です。タスクウォッチドッグは、登録された各タスクが設定されたタイムアウト内にウォッチドッグにフィードしていることを監視します。割り込みウォッチドッグは、割り込みサービスルーチンが長すぎるとRTOSスケジューラを枯渇させることを検出します。RTCウォッチドッグは、メインコアが完全にハングしている場合でもトリガーされるハードウェアレベルのリセットを提供します。無人デプロイメント、つまり生産ラインで連続稼働するパネル、リモートキャビネットに取り付けられたゲートウェイでは、すべて3つを有効にし、アプリケーションの予想されるタスクタイミングに合わせたタイムアウトで設定する必要があります。ファームウェアハングから数秒以内に回復するデバイスは、物理的な電源サイクルを必要とするデバイスよりもはるかに望ましいです。
信頼性の高い接続製品をスケジュール通りに提供するには、パーティションテーブルの計画からOTAロールバックテスト、ウォッチドッグ設定まで、すべての段階でプロセス規律が必要です。STONE HMIエンジニアリングチームはIEC 61508に準拠したプラクティスに従っています。そのような構造化されたアプローチは、製品がフィールドに出て数週間後にのみ表面化する、終盤の障害のリスクを低減します。
この記事の冒頭で説明した間欠的な障害、つまりWi-Fiのドロップ、ランダムなリセット、最初のカスタムPCBでのブート障害は、ESP32 WROOM 32製品開発における一貫したパターンです。これらは、電源の一時的な応答が対処され、リセット中のストラッピングピンが正しい論理状態であることが確認され、アンテナのキープアウトゾーンがあらゆるPCBレイヤーで強制されると、ほぼ常に解決します。これらは難しい問題ではありません。予測可能なものです。これらの3つの領域をカバーする体系的な起動チェックリストは、ファームウェアのデバッグが必要になる前に、最初のサンプル障害の大部分を検出します。モジュール自体は能力があり、よく文書化されています。作業は、最初の回路図リビジョンからその制約を正しく適用することにあります。