MCU選定と開発エコシステム

このページの目次

1つのデータ収集ノードには、4チャンネルの20 ksample/s、16ビットデータが必要で、100 msのバッファを保持し、シリアルまたは無線で送信する必要があります。「ADCがあり、Wi-Fiがあり、主周波数が十分高い」だけではチップを選定できません。ADCが精度とスループットを満たしているか、DMAが連続転送できるか、SRAMが十分か、ピンが同時に使用できるかが、タスクを遂行できるかどうかを決定します。

アプリケーションの動作サンプリング、制御、通信リソースとタイムリミットピン、メモリ、レイテンシ候補デバイス / モジュールデータシート + SDK + 実測最も厳しい制約の検証最悪負荷、低消費電力、リカバリパス選定は同時に成立する制約のセットであり、あるブランドに当てはまれば終わるものではないインターフェースが存在しても、ピンが同時にリマップ可能とは限りません。総SRAM量がDMA利用可能SRAM量を保証するわけではありません。主周波数が高いからといって、デッドラインが保証されるわけではありません。
解決すべき問題この記事のエントリポイント残すべき証拠
候補範囲をどこから狭めるか硬制約と製品ファミリ正確な品番、パッケージ、モジュールバリエーション
パフォーマンスとメモリは十分か連続収集の例データレート、バッファ容量、最悪処理時間
低消費電力をどう評価するか1つの完全な動作サイクルウェイクアップ、サンプリング、通信、スリープの予算
開発ボードのUSBでデバッグできるかビルド、フラッシュ書き込み、デバッグ回路図におけるUSBの行き先とデバッグリンク
プロトタイプを製品化するにはどうするかSDKと保守能力固定バージョン、リカバリ、アップグレード、エラータ対応

同時に満たさなければならない硬制約を先に列挙する

電源範囲、温度、インターフェース、アナログ性能、リアルタイムデッドライン、プログラム/データ容量、アップグレード方法を決定してから、価格、サイズ、開発のしやすさを検討します。あるチップにSPIコントローラが2つあっても、選択したパッケージが同時に必要な2組のピンを提供するとは限りません。ADC入力、クリスタル、デバッグポート、起動設定も同じピンを占有する可能性があります。

データシートは電気的保証とパッケージを担当し、リファレンスマニュアルはレジスタと周辺デバイスの動作方式を担当し、エラータはシリコンバージョンの制限を説明し、SDKドキュメントはソフトウェアサポートの境界を説明します。この4種類の資料は互いに代替できません。モジュールは内部GPIOを使用してFlash/PSRAMを占有する場合もあり、開発ボードはLED、USBブリッジ、または他のデバイスを接続している可能性があります。最終的に実際に使用可能なピンで照合する必要があります。

MCUは通常、オンチップメモリと周辺デバイスを中心に制御機能を提供します。MPUプラットフォームでは、外部メモリ、より複雑な起動プロセス、OSサポートが必要になることがよくあります。Linux、グラフィックス、または大規模アプリケーションが必要な場合は、システムレベルのソリューションを再評価する必要があります。STM32MPをSTM32 MCUのより高いクロックスピード版と単純化してはいけません。ST STM32MP1 製品とソフトウェアエコシステム

ファミリ早見表:候補形成用、固定の勝敗順位は付けない

ファミリ / プラットフォーム検討できる能力の方向性継続して照合しなければならない相違点
STM32 MCU汎用制御、アナログ、タイマ、低消費電力、無線などの異なるシリーズ同一ファミリでも、異なるコア、メモリ、周辺デバイス、ピン互換条件がある
ESP32 シリーズ無線と豊富なデジタル周辺デバイスを統合した異なるSoCすべてのモデルにWi-FiやBLEがあるわけではなく、USBとコアも異なる
Nordic nRF シリーズ低消費電力無線とそのソフトウェアスタックSoC、プロトコル機能、メモリ、アプリケーション/ネットワークコアの役割はモデルによって変化する
RP2040 / RP2350PIO、カスタムタイミング、Pico SDKメモリ構成、PIOリソース、コア選択は世代を超えて流用できない
AVR ATmega / ATtiny小型制御および特定の電圧/パッケージ要件動作電圧と周波数の組み合わせ、デバッグインターフェース、具体的な周辺デバイスはモデルによる

例えば、ESP32-S3はデュアルコア Xtensa LX7であり、シングルコアではありません。nRF52833はフルスピードUSBを搭載しており、「USBを削除したnRF52840」ではありません。これらの事実はチップの能力を記述するだけであり、開発ボードが機能を外部に出しているかどうかは回路図を読む必要があります。Espressif ESP32-S3、Nordic nRF52833

RP2040には8つのPIOステートマシンがあります。PIOは限られた命令、クロック、FIFO、ピンリソースを使用して多くのカスタムインターフェースを実現できますが、任意のレートや任意の物理層プロトコルをシミュレートすることはできません。RP2350は別の世代の製品であり、異なるコアとリソース構成を持っています。RP2040のパラメータをPicoプラットフォーム全体のパラメータとして扱うことはできません。RP2040 仕様、RP2350 データシート

同様に、「5V給電をサポートする」からといって、任意の給電状態ですべてのピンが5Vを受け入れられるわけではありません。ADCの分解能は有効精度とは等しくありません。価格と消費電力を比較するときは、調達条件、処理内容、測定範囲を揃えます。

連続収集:まずバイトと時間を明確にする

冒頭の4チャンネル収集で、各サンプルが16ビット保存される場合、データレートは 4 × 20000 × 2 = 160000 B/s です。100 msを保持するには 16000 B 必要で、ダブルバッファリングには 32000 B 必要です。これにはプロトコルスタック、スタック、キュー、静的変数、ランタイム一時領域は含まれていません。元のADCが12ビットでも、DMAが16ビットで保存する場合、実際のメモリ使用量を1.5バイトで推算することはできません。

例:予算項目計算結果
原始トラフィック4 チャンネル × 20 ksample/s × 2 B160 kB/s
2つの100 msバッファ160000 × 0.1 × 232000 B、つまり 31.25 KiB
UART 8N1で原始データのみ送信160000 × 10 bit少なくとも 1.6 Mbaud、プロトコルオーバーヘッドなし
1チャンネルあたりのサンプル間隔1 / 2000050 μs
80 MHzでのグループごとの周期予算80 MHz × 50 μs4000 サイクル、他のタスク用に余裕を残す必要がある

DMAはサンプルごとのCPUオーバーヘッドを削減できますが、メモリとバスの能力を超えるデータレートを実現することはできません。ターゲットSRAMが対応するDMAでアクセス可能か、バッファの整列、キャッシュがある場合の一貫性維持を確認する必要があります。「総計256 KiB SRAM」だからといって、256 KiBすべてが任意のDMAに適しているとは保証されません。

平均CPU使用率が低くても、リアルタイム性が保証されるわけではありません。無線スタック、割り込みマスク、Flash消去、バス競合、またはより優先度の高いタスクが、最大ブロッキング時間を引き起こす可能性があります。最大許容応答遅延を使用してクリティカルパスをチェックし、ハードウェアトリガ、DMA、独立した周辺デバイス、またはタスク分離が必要かどうかを判断します。1つのADCマルチプレクサで複数のチャンネルを共用する場合は、総変換率とチャンネル間の時間差も照合する必要があり、同時サンプリングをデフォルトにしてはいけません。

平均書込みが速くてもバッファがあふれる理由は?

既定100 msで16 kBをちょうど満たす。停止を長くすると曲線は容量で止まるが損失が増える。容量内の曲線だから無損失とは限らない。収集継続のため復帰後の正味排出は240 kB/s。

図を準備しています
平均書込みが速くてもバッファがあふれる理由は?

停止中も収集は続き、その面積をバッファで保持する。復帰後の高速書込みで既に失ったデータは戻らない。

Flash予算にはアップグレードとデータパーティションを含める必要がある

アプリケーションイメージが700 KiB、各スロットに完全なイメージを1つずつ配置し、Bootloaderが64 KiB、設定とメタデータが64 KiBであると仮定すると、合計1528 KiBになります。2 MiBストレージには520 KiBしか残りませんが、実際には消去ブロックの整列、イメージヘッダー、署名、切り替えポリシー、保留領域の制約の影響を受けます。「プログラムは1 MiB未満なので、1 MiB Flashで十分」という主張は、このアップグレードソリューションでは成立しません。

外部XIP FlashやPSRAMも、オンチップストレージの透過的な拡張ではありません。キャッシュミス、消去中の命令フェッチ制限、DMA到達性、停電時の動作はプラットフォームごとに確認する必要があります。リアルタイム割り込みを内部RAMに配置する必要があるかどうか、アップグレード時にどのコードが実行可能かをアーキテクチャ段階で決定する必要があります。

低消費電力は1つの完全なサイクルで比較する

1秒ごとにサンプリングして送信し、アクティブフェーズで10 mAが10 ms継続し、残りの990 msが5 μAであると仮定すると、平均電流は約 104.95 μA です。220 mAhのバッテリーで単純に除算すると、約2096時間になります。これは理想的な予算であり、容量の変化、自己放電、レギュレータの損失、または実際の無線再送は含まれていません。

したがって、データシートに記載されている最深スリープの数μAだけで、BLE接続時の消費電力も数μAであると主張することはできません。クリスタル起動、センサーウォームアップ、接続維持、ブロードキャスト/再送、ストレージ書き込みを追加する必要があります。開発ボードの電源LED、デバッガ、USBブリッジがMCU自体のスリープ電流を上回る可能性もあります。測定境界は基板全体の入力または特定の電源パスまで明確にし、選択したスリープモードが必要なウェイクアップソースを保持していることを検証する必要があります。

ビルド、フラッシュ書き込み、デバッグは「USBサポート」としてまとめない

ソースコード / 設定SDK・ボード・リンク設定コンパイルとリンクELF、map、イメージターゲットストレージBoot ROM / Bootloaderフラッシュ書き込みデバッグセッションシンボル・GDB・サーバプローブ / チップ内蔵USB-JTAGビルド、フラッシュ書き込み、デバッグは接続されているが異なる3つの能力であるUSB-UARTやUF2ドラッグアンドドロップはダウンロードを担当できるが、ブレイクポイント、ステップ実行、レジスタ、メモリデバッグを自動的に提供するわけではない。

コンパイラはソースコードをオブジェクトファイルに変換し、リンカは起動ファイル、ライブラリ、メモリレイアウトを組み合わせてELFとマップファイルを生成します。ELF内のアドレスとデバッグシンボルは実行状態の特定に使用され、ダウンロードイメージはBoot ROM、Bootloader、またはデバッグプローブによってターゲットストレージに書き込まれます。Bootloaderは起動と可能なアップグレードプロセスを担当しますが、ブレイクポイントデバッガそのものではありません。

USB-UARTは通常、シリアルポートとダウンロードチャネルを提供します。UF2ドラッグアンドドロップはイメージ転送の体験を提供しますが、ステップ実行デバッグを自動的に意味するものではありません。ESP32-S3のUSB Serial/JTAGは固定機能ハードウェアであり、シリアルコンソールおよびデバッグに使用できますが、汎用USB OTG周辺デバイスの用途とは異なります。具体的な開発ボードのソケットはUSBブリッジまたはチップネイティブUSBに接続されている可能性があり、ボード図を確認する必要があります。ESP-IDF USB Serial/JTAG ドキュメント

開発ボードを選択する際は、次の点を個別に確認する必要があります。復元可能なダウンロードエントリ、利用可能なプローブ/デバッグインターフェース、リセットと起動ピン、ターゲット電圧の適応、およびクリティカルな周辺デバイスが外部に出されているかどうか。チップが某种ROMダウンロード方式をサポートしていても、任意のボードが既存のインターフェースからそのモードに入れるとは限りません。

ソフトウェアエコシステムが再現性と保守性を決定する

Arduinoはフレームワークとツールエコシステムであり、AVRに限定されません。より高いレベルのAPIを使用しても、レジスタの学習を妨げるものではありません。HAL/LL、メーカーSDK、Zephyrなどのソリューションの違いは、ドライバ抽象化、スケジューリング、ボードレベルの設定、保守方法にあり、「あるブランドはプロトタイプ専用で、別のブランドのみが製品に適している」と概括することはできません。

例えば、ZephyrはDevicetreeを使用してハードウェア構造と接続を記述し、Kconfigを使用してソフトウェア機能を選択します。チップがサポートしているからといって、自作ボードのボードレベル移植が完了したわけではなく、すべての周辺デバイスドライバ機能が揃っているわけでもありません。Zephyr ボード移植ガイド

最小限の再現可能なプロジェクトには、正確なチップ/ボードバージョン、SDKとコンパイラバージョン、設定、リンクレイアウト、ビルドコマンドを保存し、mapファイルを保持する必要があります。クリティカルなドライバのサポート状態とエラータ対応を確認し、アップグレード時には停電リカバリとイメージ検証を考慮し、デバッグロックとセキュリティ設定には権限のある保守パスを保持する必要があります。これらの作業は、その後のバージョンの安定した納品に直接影響します。

学習ルートは、同じ小さなシステムを中心に段階的に展開できます。まず公式例を使用してGPIOとログを完了し、次にタイマトリガによるサンプリングとバッファ転送を追加し、最後に低消費電力、エラーリカバリ、アップグレードを検証します。マニュアルを参照して1つの完全な周辺デバイスパスを追跡する方が、「上級者向け」としてブランドを次々と切り替えるよりも、移植可能な理解を構築するのに役立ちます。

リソース予算の再計算

from math import isclose
rate = 4*20000*2
assert rate == 160000
assert rate*0.1*2 == 32000
assert rate*10 == 1600000
assert 80_000_000/20000 == 4000
used_kib = 700*2+64+64
assert used_kib == 1528
assert 2048-used_kib == 520
average_ma = (10*10+0.005*990)/1000
assert isclose(average_ma, 0.10495)
assert 2096 < 220/average_ma < 2097
print('トラフィック、バッファ、周期、アップグレードパーティション、平均電流予算が通過')

この記事で検証したのは仮定された要件の予算であり、具体的なMCUのパフォーマンスや消費電力を測定したものではなく、例を購買結論として扱ったものではありません。

続けて読む