コンテンツにスキップ

パーティションテーブル

SiFli-SDKのpartition_tableビルドツールは、ボードのパーティション定義を読み込み、アプリケーションで使用するパーティションマクロを含むptab.hを生成します。パーティションテーブルでは、NOR Flash、NAND Flash、eMMC、SDカード、PSRAM、オンチップSRAMなど、対象メモリーのアドレス配置を定義します。

各ボードには既定の配置があり、そのボード向けにビルドされるアプリケーションはすべてその配置に従います。プロジェクト側で独自のパーティションテーブルを指定し、ボードの既定値を置き換えることもできます。

パーティションテーブルを有効にする

ミドルウェア設定で「すべてのメモリーレイアウトの管理にパーティションテーブルを使用(Use partition table to manage all memory layout)」を有効にします。また、プロジェクトのKconfig.projに次の設定が必要です。SiFli-SDKのサンプルには、この設定がすでに含まれています。

# APP-specific configuration.
config CUSTOM_MEM_MAP
    bool
    select custom_mem_map
    default y if !SOC_SIMULATOR

形式を選ぶ

SiFli-SDKは、3種類のパーティションテーブル形式に対応しています。既存のボードや製品でv1/v2を維持する必要がない限り、新規開発ではv3を使用してください。

表: SiFli-SDKのパーティションテーブル形式
形式 定義ファイル 主なモデル 新規プロジェクトでの使用
v1 ptab.json JSONのメモリー一覧、タグ、任意のftab、img、execメタデータ いいえ。既存プロジェクトの保守に限ります。
v2 ptab.json 名前付き・型付きのイメージ/実行パーティションを持つJSONのメモリー一覧 いいえ。既存ボードが依存している場合に維持します。
v3 ptab.yaml type、subtype、region、exec、生成マクロ、プロジェクトオーバーレイを使うYAMLパーティション はい。

ビルドシステムは最初にptab.yaml(v3)を検索し、見つからない場合はptab.json(v1/v2)を検索します。検索順は、ボードディレクトリ、チップディレクトリ、BSPルート、customer/boards/<board>/です。

v1:JSONタグとイメージメタデータ

v1はptab.json内のJSON配列で定義します。専用のバージョンフィールドはありませんが、先頭要素に任意で"version": "1"を含めることができます。

各メモリー項目では、次の情報を定義します。

  • mem:flash2やpsram1などのメモリー名。
  • base:メモリーの16進数ベースアドレスです。対象メモリーのマップに照らして値を確認してください。
  • regions:そのメモリー内のパーティション一覧。

各regionでは、オフセットと最大サイズをバイト単位でoffsetとmax_sizeに指定します。tagsの値からパーティションマクロが生成されます。たとえばFLASH_BOOT_LOADERを指定すると、FLASH_BOOT_LOADER_START_ADDR、FLASH_BOOT_LOADER_OFFSET、FLASH_BOOT_LOADER_SIZEが生成されます。開始アドレスは、メモリーのbaseにregionのoffsetを加えた値です。

表: v1の任意regionメタデータ
フィールド 用途
ftab Flash Tableのエントリーを記述します。
img 生成される書き込みスクリプトで使う、パーティション内イメージの名前です。複数のバイナリを出力するプロジェクトではproj_name:binary_nameを指定します。
exec 共有リンカースクリプトがコードアドレスを選択するための実行プログラム名です。
custom 生成されるptab.hに整数値のカスタムマクロを追加します。

PSRAMにはCBUSとSBUSの別々のアドレス空間があります。コードの実行アドレスにはCBUSパーティションにexecを指定します。コードのコピー元としてSBUSアドレスを使う場合は、SBUSパーティションのftabにxipアドレスを設定します。

v2:名前付き・型付きJSONパーティション

v2もptab.jsonを使いますが、ヘッダーで"version": "2"を宣言する必要があります。メモリーのフィールドはmem、base、regionsのままです。各regionではoffsetとmax_sizeを指定し、tagsとcustomも使用できます。さらに、regionのname、type、実行用パーティションの場合は任意のcoreを指定します。

表: v2のregionフィールドと型
フィールドまたは型 意味
name パーティション名です。プログラムイメージ名は、対応するプログラム名またはAddCustomImg名と一致させる必要があります。複数ファイルのプログラムではproj_name:1、proj_name:2のように指定できます。
core app_execパーティションを実行するコアです。hcpu、lcpu、acpuを指定します。
app_img プログラムイメージを格納するプライマリパーティションで、Flashツールによる書き込み対象です。
app_img2 更新用に通常はプライマリパーティションと組み合わせる、バックアップ用プログラムイメージパーティションです。
app_exec プログラムを実行するアドレス空間です。

bootloader、main、dfu、ftabは予約済みの名前です。acpuなど、その他のプログラム名はユーザー定義イメージに使用できます。テーブルにftabパーティションとbootloaderパーティションの両方が定義されていない場合、ツールは既定の構成を生成します。利用する前に、生成されたptab.hを確認してください。

v3:YAMLパーティションとオーバーレイ

v3はptab.yamlを使う推奨形式です。従来のtagsモデルを明示的なtypeとsubtypeに置き換え、論理region名によってパーティションと物理メモリー構成を分離します。また、ビルド時にptab.h、ftab.bin、リンカースクリプト用断片を生成します。

表: v3のトップレベルフィールドとパーティションフィールド
スコープ フィールド 必須 意味
トップレベル version はい 3である必要があります。
トップレベル chip はい SF32LB525UC6などのチップ品番です。
トップレベル memory いいえ 外部ストレージの定義です。
トップレベル partitions はい パーティション一覧です。
パーティション name、type、region、offset、size はい 名前、種別、論理ストレージ領域、配置を指定します。offsetとsizeには0x形式の値、またはKB/MBサフィックス付きの値を指定できます。
パーティション subtype、exec、core、attrs いいえ 詳細種別、XiPを使わないコードの実行先、対象コア、カスタム属性を指定します。

外部memoryの各定義では、mpiまたはsdmmcインターフェース、nand、nor、sdのいずれかのtype、およびサイズを指定します。regionはこれらの外部メモリーに加え、hpsys_ramまたはlpsys_ramを参照できます。

各regionは、SBUSのストレージアドレスと、CPU実行またはXiPに使うCBUSアドレスに対応します。SDKはチップのSiliconSchemaデータからこのマッピングを読み込みます。FAL_PART_TABLEのデバイス名はexecではなく、パーティションのストレージregionに基づきます。mpi1~mpi5はNOR_FLASH1_DEV_NAME~NOR_FLASH5_DEV_NAMEに、sdmmc1とsdmmc2はそれぞれSDMMC1_DEV_NAMEとSDMMC2_DEV_NAMEに対応します。

表: v3のパーティション型とサブタイプ
型 サブタイプまたは用途 意味
ftab — Flash Tableパーティションです。
bootloader — ブートローダーパーティションです。
app factory 工場出荷用のメインアプリケーションです。CODE_START_ADDRとCODE_SIZEを生成します。
app dfu 独立したDFUアプリケーションです。
app ex リソースパーティションです。ビルドにより、ツールチェーン固有のリソースイメージ出力が生成されます。
data flashdb_kv FlashDB KVデータベースです。KVDB_*マクロを生成し、FAL_PART_TABLEに登録されます。
data filesystem、littlefs、fat、fatfs filesystemはFS_REGION_*マクロを生成し、FAL_PART_TABLEに登録されると説明されています。一方、同じドキュメントの別の箇所ではlittlefs、fat、fatfsもマクロを生成するサブタイプとして列挙され、現在は効果がないとも記載されています。これら3つの動作は対象SDKリリースで確認してください。また、同じマクロ説明ではサブタイプ名にflashdbを使っていますが、サブタイプ表とFALの規則ではflashdb_kvを使っています。対象SDKで確認せず、両者を別名として扱わないでください。
data ram、calibration、raw、int_res RAM、キャリブレーションデータ、アプリケーション管理のrawデータ、またはELFにリンクされセクション名で分割される内部リソースデータです。

v3が自動生成するFAL_PART_TABLEに含まれるのはdata/flashdb_kv、data/filesystem、およびサブタイプがexではないappパーティションのみです。ftab、bootloader、app/exと、littlefs、fat、fatfs、raw、ram、calibration、int_resなどその他のdataサブタイプは含まれません。生成エントリーでは各パーティションのnameが使われ、旧レイアウトの別名main、dfu_code、fs_rootは実際のパーティション名に変換されません。v3への移行時にFAL_PART_TABLEを手動定義しないでください。ボード側にcustom_mem_map.hがある場合は、再定義警告を避けるため削除してください。

ptab.hは各パーティションに<NAME>_START_ADDR、<NAME>_SIZE、<NAME>_OFFSETマクロを生成します。<NAME>はパーティション名を大文字にしたものです。regionのメモリー種別をSDKが認識できる場合は、<NAME>_MEM_TYPEも生成されます。app/factoryパーティションでは、execが指定されていればCODE_START_ADDRにそのアドレスを使い、指定がなければパーティションのCBUSアドレスを使います。

NAND Flashに格納したアプリケーションをPSRAMにコピーする場合のように、その場でコードを実行できないときはexec: {region, offset}を使います。execを指定しない場合、生成されるコード開始アドレスにはパーティションのCBUSストレージアドレスが使われます。attrsを指定すると、ptab.hにカスタムマクロが追加されます。

既定値とプロジェクトオーバーレイ

該当するパーティションがない場合、v3はシステム既定値を導出します。SF32LB52では、HCPUの工場出荷用アプリケーションのストレージ領域からflash_tableとbootloaderを推定できます。また、NANDまたはSDMMCをブート用ストレージとして使う場合も、ドキュメントに記載された既定のデータパーティションが追加されます。SF32LB56とSF32LB58では、内部mpi5上のflash_tableとbootloaderを省略できます。既定のSiP PSRAMウィンドウと標準RAMパーティションも、プロジェクトでRAM配置を変更しない限り省略できます。

小規模なプロジェクト固有の変更には、ボードのptab.yaml全体をコピーするのではなく、ptab.overlay.yamlを使用します。パーティションの追加や既存パーティションの上書きができます。

partitions:
  - op: override
    name: fs_region
    size: 5MB

  - op: add
    name: log_region
    type: data
    subtype: raw
    region: mpi2
    offset: 0x00F00000
    size: 64KB

ボード固有のオーバーレイはチップ固有のオーバーレイより優先されます。変更できるのはパーティションだけで、memory、chip、versionの変更やパーティションの削除はできません。オーバーレイはボードレベルのv3 ptab.yamlにのみ適用でき、プロジェクトレベルの完全なptab.yamlまたはptab.jsonとは併用できません。ボードがv1/v2のptab.jsonを使い、完全なptab.yamlも選択されていない場合、ビルドは警告を出してオーバーレイを無視し、従来の非オーバーレイ経路で処理を続けます。この場合、ptab.effective.yamlは生成されません。オーバーレイが適用された場合は、確認用に最終結果がptab.effective.yamlに出力されます。

生成ファイルと検証

表: パーティションテーブルのビルド出力
出力 用途
ptab.h パーティションマクロを含む生成済みCヘッダーです。
ftab.bin ブートローダーが使用するFlash Tableのバイナリです。v3ではftabサブプロジェクトを使わず、Pythonから直接生成されます。
link_copy.lds/link_copy.sct GCCまたはKeil用に生成されるリンカースクリプトのコピーです。v3ではJinja2テンプレートを使います。
ptab.effective.yaml オーバーレイが有効な場合に生成される、適用後のv3テーブルです。

統合前に、v3のボードテーブルを検証します。

python tools/build/validate_ptab_v3.py customer/boards/<board>/ptab.yaml

バリデーターは、パーティション名の構文、型とサブタイプ、regionの有効性、パーティション領域の重なり、ブートローダーの一意性を確認します。ビルドで使用されたv3の有効な構成を確認するには、次を実行します。

sdk.py ptab-export --board=<board-name>
sdk.py ptab-export --board=<board-name> --output /tmp/ptab.effective.yaml
sdk.py ptab-export --strict

生成されたFlash Tableを確認する

ビルド後、ftab.binはビルドディレクトリに出力されます。SDK環境を初期化してから、現在のプロジェクト配下で最初に見つかったbuild_*/ftab.binを確認します。

source ./export.sh
sdk.py ftab-dump

Windows PowerShellでは./export.ps1で初期化します。ボードごとのビルドディレクトリが複数ある場合はパスを指定し、スクリプトから結果を利用するときはJSON出力を使います。

sdk.py ftab-dump --path build_<board_name>/ftab.bin
sdk.py ftab-dump --path build_<board_name>/ftab.bin --format json

テーブル表示には、パーティションエントリー、DFUと起動フローで使うイメージの説明、HCPU、LCPU、ブートローダー、ブートイメージそれぞれの実行中イメージを指すポインターが表示されます。

製品レビュー

  • ボードのテーブルを使うのか、プロジェクト固有の構成を使うのかを意図的に選択している。
  • 選択したv1、v2、v3の構文が、ビルドシステムが実際に検出するファイルと一致している。
  • 特にXiP以外のストレージやPSRAMについて、イメージの格納先と実行位置が正しい。
  • アプリケーション、バックアップ、DFU、ファイルシステム、キャリブレーション、アプリケーション管理データに十分な容量があり、領域が重複していない。
  • 生成されたptab.h、ftab.bin、およびv3オーバーレイを使う場合はptab.effective.yamlを確認している。
  • 通常の更新経路とは別に、復旧用の書き込み手順を記録している。

詳細は、SiFli-SDKの公式ドキュメント パーティションテーブル、v1、v2、v3 を参照してください。

最終更新: