こんにちは、
「DIMMスロットを備えた標準LX2160ARDBの場合、DDRレジスタは、TF-A BL2ステージ(ddr_init.c)によって処理される、インストールされているDIMMからSPDを読み取ることによって自動的に構成されます。」U-Bootではありません。LX2160ARDBでカスタムDIMMを使用する場合のみ、ATFソースを変更する必要があります。
私たちはRDBに付属のDIMMを使用しています。
SDカードからのブートのために、以下のコマンドを使用してbl2_sd.pblとfip.binというファイルを生成しました。
bl2_sd.pbl
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-gnu-
$ make PLAT=lx2160ardb bl2 BOOT_MODE=sd pbl RCW=../rcw/lx2160ardb_rev2/XGGFF_PP_HHHH_RR_19_5_2/rcw_2200_750_3200_19_5_2.bin
fip.bin
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-gnu-
$ make PLAT=lx2160ardb fip BOOT_MODE=sd BL33=u-boot/u-boot.bin
デフォルトの ddr_init.c を atf フォルダに生成し、ブート用に bl2_sd.pbl ファイルを SD カードの blk 8 に、fip.bin ファイルを blk 800 にロードしました。
ログは以下のとおりです。
=> qixis_reset sd
=> 注意: BL2: v2.4(リリース):LSDK-21.08-0-g340b20bcb
お知らせ:BL2:ビルド日時:2026年8月5日 11:29:23
注意:UDIMM 18ADF2G72AZ-3G2E1
注意:DDR PMUハードウェアバージョン-0x1210
エラー: ファームウェア33の読み込みに失敗しました。
エラー:ファームウェアの読み込みに失敗しました(エラーコード -2)
エラー: DDR PHYレジスタの計算に失敗しました。
PHYハンドシェイクタイムアウト、ddr_dsr2 = 0
エラー:トレーニングエラーを検出:0x100
エラー:エラー:タイムアウトD_INIT待っています。
エラー: DDRレジスタへの書き込みに失敗しました
エラー: DDRCプログラミングエラー
エラー: DDR初期化に失敗しました。
注意: platform_def.h で定義されている DRAM0 のサイズが間違っています。
エラー:BL2:画像ID 3(-2)の読み込みに失敗しました
認証失敗
DDR初期化のためにDDR関連のファームウェアファイルをロードしたり、bl2ソースに何らかの変更を加えたりする必要があるでしょうか?
どうぞご指導ください。
よろしくお願い申し上げます。
fip_ddr_all.bin:8つのDDR4 PHYトレーニングバイナリ全てを含みます:UDIMM 1D/2D IMEM+DMEMおよびRDIMM 1D/2D IMEM+DMEM
こんにちは、イーピンさん
ご指導ありがとうございます。DDR fipイメージをSDカードの0x4000番地に展開し、DDRの初期化が正常に完了しました。
LSDKには、 distro/build_lx2160ardb-rev2/tmp/deploy/images/lx2160ardb-rev2/ddr-phy/の下にfip_ddr_binとfip_ddr_all.binというデフォルトイメージがあります。これらをロードしてDDR初期化が行われることを確認しました。
両方の画像の違いと、なぜそれが必要なのか説明していただけますか?
カスタムボードを使う場合、DDRの初期化に同じイメージを使うことはできますか?
DDR PHYファームウェアイメージをSDカードに展開してください。
まず、以下の手順に従ってPHYファームウェアイメージを生成してください。
$ cd atf/tools/fiptool
$ git clone https://github.com/NXP/ddr-phy-binary.git
$ cd ddr-phy-binary/
$ git checkout LSDK-21.08 -b LSDK-21.08
$ cd ..
$ ./fiptoolcreate --ddr-immem-udimm-1d ddr-phy-binary/lx2160a/ddr4_pmu_train_imem.bin --ddr-immem-udimm-2d ddr-phy-binary/lx2160a/ddr4_2d_pmu_train_imem.bin --ddr-dmmem-udimm-1d ddr-phy-binary/lx2160a/ddr4_pmu_train_dmem.bin --ddr-dmmem-udimm-2d ddr-phy-binary/lx2160a/ddr4_2d_pmu_train_dmem.bin --ddr-immem-rdimm-1d ddr-phy-binary/lx2160a/ddr4_rdimm_pmu_train_imem.bin --ddr-immem-rdimm-2d ddr-phy-binary/lx2160a/ddr4_rdimm2d_pmu_train_imem.bin --ddr-dmmem-rdimm-1d ddr-phy-binary/lx2160a/ddr4_rdimm_pmu_train_dmem.bin --ddr-dmmem-rdimm-2d ddr-phy-binary/lx2160a/ddr4_rdimm2d_pmu_train_dmem.bin fip_ddr_all.bin
DDR fipイメージであるfip_ddr_all.binはatf/tools/fiptoolに生成されます。
fip_ddr_all.bin を SD カードの u-boot ディレクトリに配置してください。
=> tftp 82000000 fip_ddr_all.bin
=> mmc write 82000000 0x04000
ここで、blk_cntは、ファイルサイズに応じて書き込む必要があるSDカード内のブロック数を指します。例えば、
TFTPサーバーからファイルをロードし、転送されたバイト数が1077157(106fa5 hex)の場合、blk_cntが計算されます。
1077157/512 = 2103 (837 16進数)
この例では、mmc write コマンドは次のようになります。=> mmc write 82000000 0x04000 837
こんにちは、イーピンさん
説明ありがとうございます。
LSDK 21.08をインストールしましたが、atf、rcw、u-boot、ddr-phyフォルダは既に存在しますが、ソースコードが利用できません。そこで、すべてのソースをgitでクローンしました。
SDカードの完全なブートのために、以下のファイルをデプロイしました。
1. bl2_sd.pbl
2. fip.bin - 0x800
3.fip_ddr_all.bin - 0x4000
4. mc_lx2160a_10.40.0.itb - 0x5000
5. dpc-usxgmii.dtb- 0x7000
6. fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin- 0x8000
SDカード(64GB)に以下のようにパーティションを作成しました。
1. /dev/mmcblk0p1 - セクター 409600 からセクター 42352640
2. /dev/mmcblk0p2 - セクター 42352640 からセクター 121534463
そして、u-boot の bootargs コマンドを使用して、rootfs "fsl-image-networking-full-lx2160ardb-rev2-20260310091147.rootfs.tar.gz" を /dev/mmcblk0p1 パーティションにマウントします。
=> setenv bootcmd 'setenv bootargs root=/dev/mmcblk0p1 rw rootwait console=ttyAMA0,115200; mmc dev 0; mmc read 0x90000000 0x8000 0x14000; bootm 0x90000000'
これは正しいやり方でしょうか?もっと良い方法があれば教えてください。
また、LSDK では、カーネルと dtb 用の fitImage バイナリ ファイルを生成する方法、例えば distro/build_lx2160ardb-rev2/tmp/deploy/images/lx2160ardb-rev2/ ディレクトリにある fitImage のようなファイルを生成する方法、例えば fitImage--5.15.71+git0+95448dd0dc-r0-lx2160ardb-rev2-20260310070404.bin のようなファイルを生成する方法。
新しい質問については新しいスレッドでお答えいただけますか?
同僚は私の休暇のおかげで引き続きあなたをサポートします。
オーケーイーピン
サポートありがとうございます