[ESP32] [パーティションテーブル]

ESP32プロジェクトをコンパイルすると、ビルドは成功しましたが、ダウンロード中に次の問題が発生しました:

偉大な神の指示の後に、コンパイルされたbootloader.binが大きすぎることがわかりました:新しくコンパイルされたbootloader.bin 29K。デフォルトのダウンロードアドレスは次のとおりです。

0x1000:bootloader.bin
0x8000:partition-table.bin
0x10000:user.bin

0x8000-0x1000 = 0x7000 = 7 * 16 ^ 3 = 28672 <29K = 29000を計算します。
解決策:
idf.py menuconfig-> Bootloader config-> Bootloader log verbosity —>出力が
再コンパイルされず、bootloader.binのサイズが20Kに削減され、ダウンロードは成功します。


ESP32の下で学ぶこの機会に乗りパーティションテーブルを

ESP32では、ユーザーコードを構成および保存するために外部フラッシュが必要です。公式ウェブサイトESP32-WROVER-Bモジュールで使用されているGD25Q32Cを例にとります:32Mbit / 4MB、そのセクター構造は次のとおりです:

合計1024セクター、各セクター16 ^ 3 = 4096(4KB)、したがって合計4MB。

注:フラッシュに書き込む前に(0xFF)消去してから(0x00)ください。


パーティションテーブルの概要:

例として、partitions_two_ota_coredumpを例にとると、4MBフラッシュのパーティションは次のようになります。

各ESP32フラッシュには、複数のアプリケーションとさまざまなタイプのデータが含まれています。デフォルトでは、ESP32はフラッシュオフセットアドレス0x8000でパーティションテーブルをフラッシュし、その長さは0xC00です(最大95のパーティションテーブルエントリを保存できます)。テーブルのMD5チェックサムは、パーティションテーブルの整合性を確認するために使用されるパーティションテーブルデータの後にも保存されます。さらに、チップがセキュアブート機能を有効にしている場合、署名情報もパーティションテーブルの後に保存されます。

パーティションテーブルの各エントリには、名前(ラベル)、タイプ(アプリ、データなど)、サブタイプ、オフセットアドレス、サイズ、フラッシュ内のフラグが含まれます。

  • 名前フィールド:任意の名前を指定できますが、16文字を超えることはできません(切り捨てられた後の内容)。

  • タイプフィールド:アプリ(0)またはデータ(1)として指定できます。または0〜254(0x00〜0xFE)の数値を直接使用できます。0x00-0x3Fはesp-idfのコア機能用に予約されているため、使用しないでください。注:ブートローダーは、app(0)またはdata(1)以外のパーティションタイプを無視します。

  • サブタイプ:8ビット長、コンテンツは特定のタイプ(アプリまたはデータ)に関連しています:

    1> Typeがappの場合、SubTypeフィールドは、factory(0)、ota_0(0x10)…ota_15(0x1F)またはtest(0x20)として指定できます。デフォルトアプリのパーティション、ブートローダデフォルトの負荷アプリケーションとして工場(0);
    2> のタイプのデータは、サブタイプフィールドは、OTA指定することができる(0)、PHY(1 )、NVS(2) 又はnvs_keys(4)。ota(0)は、現在選択されているOTAアプリケーションの情報を格納するために使用されるOTAデータパーティションです。このパーティションのサイズは0x2000に設定する必要があります。phy(1)パーティションは、PHY初期化データを格納するために使用されます。これにより、ファームウェアで統合PHY初期化データを使用する代わりに、PHYを各デバイスに対して個別に構成できます。nvs(2)は、不揮発性ストレージ(NVS)API専用のパーティションです。nvs_keys(4)はNVSキーパーティションです。

  • オフセットフィールド:オフセットアドレスは、前のパーティションの直後から始まり、それが最初のパーティションの場合、パーティションテーブルの直後から始まります。アプリパーティションのオフセットアドレスは0x10000(64K)に合わせる必要があります。パーティションテーブルのパーティションの開始オフセットを許可する場合は、パーティションテーブル(CSVファイル)のすべてのパーティションのオフセットフィールドを空白のままにする必要があります。

  • サイズフィールド:パーティションのサイズデフォルトは0xが前に付いた16進数で、KまたはMの倍数をサポートします(それぞれ1024および1024 * 1024バイトを表します)。

  • フラグフィールド:現在、暗号化されたフラグのみがサポートされています。[フラグ]フィールドが暗号化に設定されていて、フラッシュ暗号化機能が有効になっている場合、パーティションは暗号化されます。Flagsフィールドが設定されているかどうかに関係なく、アプリパーティションは常に暗号化されます。


バイナリパーティションテーブルを生成する

使用PARTITION_TABLE / gen_esp32part.py csvファイルとバイナリファイル間の変換を実現するためのツール:

1> csvファイルを手動でバイナリファイルに変換します。

$ python gen_esp32part.py input_partitions.csv binary_partitions.bin

2>バイナリファイルをcsvファイルに手動で変換します。

$ python gen_esp32part.py binary_partitions.bin input_partitions.csv

MD5チェック

古いバージョンのブートローダーの一部は、MD5検証をサポートしていません。
無効なマジックナンバー0xebeb、次のことができます:それは、MD5チェックサムエラーが見つかった場合
。のmd5sumの1)gen_esp32part.py ---無効に
パーティションテーブルを生成するための> AN MD5チェックサム- - >パーティション表2)idf.py menuconfigの
補正MD5オフテスト。


パーティションテーブルのプログラミングと消去:

esptool.pyツールを使用して、パーティションテーブルをプログラムします。

$ idf.py partition_table-flash

注:

1)$ idf.py flashコマンドを使用すると、パーティションテーブルを含むすべてが書き込まれます。
2)パーティションテーブルを更新しても、以前にパーティションテーブルに従って保存されたデータは消去されません。このとき、$ idf.py erase_flashまたは$ esptool erase_flashコマンドを使用して、フラッシュのすべての内容を消去できます。

元の記事を30件公開 12 件を獲得 8261件を表示

おすすめ

転載: blog.csdn.net/syjie19900426/article/details/104055412