« 電圧保護クリップ回路に放電抵抗は不要 | トップページ | 真贋判定装置子基板の設計再開 »

2022.11.24

ZYNQMPのBoot.binでXFSBL_ERROR_ADDRESSが出る原因

2日前からZynqMPのBoot.binを作っていて、

XFSBL_ERROR_ADDRESS: FFFC0000
Partition 3 Load Failed, 0x2E

というエラーで止まってしまって困っていました。

Xfsbl_error_address

ZynqMPのBoot.binを作る際にセカンドステージのブートローダであるU-bootを組み込んだり、テスト用であればペリフェラルテストやメモリテストを組み込んだBoot.binを作ることになると思います。

このとき、メモリテストやU-bootなどの少し大きなものを組み込むと、前述のXFSBL_ERROR_ADDRESS: FFFC0000が出て止まってしまします。

今日はこの原因を究明しました。

まず、Partition 3 Load Failed, 0x2Eの「2E」というのはXFSBL_ERROR_ADDRESSの意味なので、U-Bootが読み込まれるアドレスが異常だと言っているのです。

デフォルトのFSBLではXFSBL_OCMというマクロが定義されていて、BOOT.BINに含まれたアプリのロードアドレスがOCMの範囲(0xFFFEA000~0xFFFFFFFF)外だと、XFSBL_ERROR_ADDRESSを出すからです。

一方、Trenz社が作ったboot.binを起動してみると、0x8000000にu-boot.elfを読み込んでいるようです。

Trenzboot

0x8000000はDDR4 SDRAMの範囲なので、OCMを外れていてもDDRメモリにロードするのはOKなのでしょう。

それでは、どこでU-bootをFFFC0000にロードしようとする不届きな設定があるのかというと、U-bootを作るときにひな形にしたxilinx_zynqmp_mini_defconfig でした。

この中に

CONFIG_SYS_TEXT_BASE=0xFFFC0000

と書かれているからこのアドレスにロードしようとしてクラッシュします。

これを

CONFIG_SYS_TEXT_BASE=0x8000000

にすればロードできて起動できるようになります。

 

Ubootlaunched

そうしたら今度はSDカードがどうのというエラーを出してきます。

Nosd

一つ問題を解決すると次から次へと問題が出てきますね。

それがLinux構築の楽しみでもありますが。

|

« 電圧保護クリップ回路に放電抵抗は不要 | トップページ | 真贋判定装置子基板の設計再開 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 電圧保護クリップ回路に放電抵抗は不要 | トップページ | 真贋判定装置子基板の設計再開 »