AR# 69765

Zynq UltraScale+ MPSoC: NAND プログラム/ブート チェックリスト

説明

Zynq UltraScale+ MPSoC で NAND プログラミングおよびブートのデバッグを実行する際に必要な項目、作業、注意事項が、ここにまとめられています。

UBIFS のヒントも一部このアンサーに含まれています。

ソリューション

サービス リクエストを開く前に、次の必要な情報をすべて用意しておきます。

必須情報はイタリックで表示されています。

 

1) NAND フラッシュおよびコンフィギュレーションはザイリンクスでサポートされていますか。

 

サポート カテゴリ (Supported、known to work、Unverified、Incompatible) を判断するには、(Xilinx Answer 65463) を参照してください。

注記: NAND 要件は、(UG1085) の第 25 章を参照してください。

2019.1 以前の Linux カーネルでは、Micron NAND フラッシュ メモリで、8 ビットのオンダイ ECC がサポートされていません。

次のコメントは、https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2018.3/drivers/mtd/nand/nand_micron.c にあります。


           /*
            * Some Micron NANDs have an on-die ECC of 4/512, some other
            * 8/512.We only support the former.
            */

Linux カーネル 2019.1 以降では、Micron NAND フラッシュ メモリで、8 ビットのオンダイ ECC がサポートされています。

次のコメントは、https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2019.1/drivers/mtd/nand/raw/nand_micron.c にあります。


           /*
            * We only support on-die ECC of 4/512 or 8/512
            */

Linux カーネルでは、オンダイ ECC をディスエーブルにできない MICRON_ON_DIE_MANDATORY NAND フラッシュ メモリはサポートされていません。

次のコメントは、https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2019.2.01/drivers/mtd/nand/raw/nand_micron.c にあります。


           /*
            * Try to detect if the NAND support on-die ECC.To do this, we enable
            * the feature, and read back if it has been enabled as expected.We
            * also check if it can be disabled, because some Micron NANDs do not
            * allow disabling the on-die ECC and we don't support such NANDs for
            * now.

重要: フラッシュ メモリの完全な名前、コンフィギュレーション モード、電圧を提示してください。

コンフィギュレーションが「標準」でない場合は (マルチプレクサー、レベル シフターなど)、ボード回路図も提出してください。

 


2) 信号はメモリ デバイスに正しく接続されていますか。

ボードが (UG583) の NAND の手順に従っている必要があります。

NAND からブートするには、MIO10 を NAND デバイスの ready/busy 0 に接続する必要があります。

 

NAND パーツの回路図を提供してください。どんなワードが読み込まれているかを確認するため、ボード上のデータ信号を監視してください。

 


3) Zynq はプロダクション シリコンですか。

XSCT を使用して次の情報を読み出します。

  • 0xFFCA0040 から IDCODE
  • 0xFFCA0044 から PS_VERSION

重要: IDCODE および PS_VERSION を必ず知らせてください。


4) JTAG チェーンは正しく動作していますか。

CPU に接続するには XMD を使用してください。

関連アンサーはこちらです。

(Xilinx Answer 67740) を追加XSDB (またはその他の JTAG) のユーザーは JTAG チェーンへの PL TAP リンクを有効にするために 5 TCK サイクルの間 TMS 信号を High に保持する必要がある
(Xilinx Answer 67818) を追加JTAG/SD ブート モードでの 2016.3 PMU ファームウェアの読み込みおよびサンプルの実行

 

重要: JTAG チェーンの詳細を知らせてください (チェーン内のデバイス数、ZynqMP の数、カスケードまたは独立した JTAG の ZynqMP の数、チェーンのレベル シフターなど)。XSCT エラーがあれば報告してください。


5) ブートのどの段階で Zynq はエラーになっていますか。bootROM ですか。それとも FSBL ですか。

FSBL および CSU bootROM の既知の問題は、(Xilinx Answer 65467) を参照してください。

これを確認するには、FSBL デバッグ情報が出力されるように設定して、イメージをプログラムします。

このためには、xfsbl_debug.h に次の内容を含めます。

#define FSBL_DEBUG_DETAILED

ブート中に UART に何か表示された場合は、

その出力内容を提供してください。FSBL はユーザー アプリケーションで、SDK を使用して簡単にデバッグできます。サービス リクエストを開く前に簡単な問題調査を行ってみてください。

ブート中、何も UART に出力されない場合は、UART のボーレートをまず確認してください。

ブートエラーの後の INIT_B、PS_ERROR_OUT、CSU_BR_ERROR および BOOT_MODE_POR レジスタのステータスを知らせてください。

このレジスタ ダンプを確認するには、添付の Tcl スクリプト (boot_registers_log_revX_Y.tcl) を使用するのが簡単です。

ブート イメージが正しくプログラムされていない場合は、手順 5 に進んでください。


6) SDK および Vivado でプログラムができなくなっていますか。

 

  • Vivado および SDK フラッシュ プログラマでは、フラッシュのプログラムに mini U-Boot が使用されます。u-boot で NAND の読み出し/書き込みはサポートされてきましたが、Vivado/SDK 2017.2 以前のバージョンではそのサポートがアップデートされていません。

    Vivado/SDK 2017.3 では、mini u-boot イメージがアップデートされる予定です。Vivado/SDK 2017.3 およびそれ以降のバージョンを使用して、NAND フラッシュをプログラムしてください。

  • デバッグ目的で、デバッグ環境変数 XIL_CSE_ZYNQ_DISPLAY_UBOOT_MESSAGES を 1 に設定できます。
    詳細は、(Xilinx Answer 59272) を参照してください。

使用しているツールのバージョンを知らせてください。プログラムを実行するのに使用したツールと同じバージョンでイメージが構築されていることを確認してください。

プログラミング用に使用されているブート モードの設定を提示してください (JTAG からのブートを推奨)。

XIL_CSE_ZYNQ_DISPLAY_UBOOT_MESSAGES 変数を使用して得られたログを提出してください。



7) U-Boot を使用すると機能しますか。

U-boot に関する既知の問題は、(Xilinx Answer 65467) を参照してください。

u-boot の ELF を生成するには、PetaLinux を使用できます。PetaLinux ではデフォルトで ZCU102 defconfig が使用されます。NAND はそのコンフィギュレーションではイネーブルになっていません。

「CONFIG_CMD_NAND=y」および「CONFIG_NAND_ARASAN=y」を設定する必要があります。

このためには、次のコマンドを実行して u-boot menuconfig を実行します。

petalinux-config -c u-boot

この 2 つのパラメーターは、次のメニューから確認できます。

[Command line interface] → [Device access commands] → [nand] および [Device Drivers] → [NAND Device Support] → [Configure Arasan Nand]

また、http://www.wiki.xilinx.com/Build+U-Boot#Zynq にある手順に従って、オープンソース フローを使用して、U-Boot の ELF を生成することもできます。

選択した defconfig ファイルで「CONFIG_CMD_NAND=y」および「CONFIG_NAND_ARASAN=y」を設定する必要があります。

(UG1209) のフローに従って U-Boot ELF をダウンロードし、xsct/xsdb で実行します。

NAND フラッシュをテストするには、次のコマンドを使用します。

nand info
nand erase 0 1000000
mw.b 1000000 a8 1000000
nand write 1000000 0 1000000
nand read 2000000 0 1000000
cmp.b 1000000 2000000 1000000

読み出されたデータが書き込まれたデータと同じであれば、NAND の読み出し/書き込みには問題がありません。

プログラムのログ ファイルを提供してください。使用した U-Boot のバージョンを指定してください。

u-boot が機能している場合は、xsct/xsdb および u-boot nand の書き込みコマンドを実行して、必要な BOOT.bin を使用して NAND フラッシュをプログラムします。



8) ボード デザインは、プログラミングに使用される NAND 周波数をサポートしていますか。

NAND クロック周波数を確認するため、レジスタ設定および計算を提出してください。


9. ザイリンクスのスタンドアロンのサンプルは機能していますか。

NAND の例は SDK インストール ディレクトリ \data\embeddedsw\XilinxProcessorIPLib\drivers\nandpsu_v1_x\examples にあります。

どこでサンプルがエラーになっているかを理解するため、デバッグがある程度必要になります (SDK デバッガーを使用するか、デバッグ結果を追加するなど)。

 

ザイリンクスのスタンドアロンのサンプルで検出されたエラーのタイプを報告してください。

 


NAND フラッシュの UBIFS サポート

UBI は、MTD ロー フラッシュ デバイスに上乗せするアービトレーション レイヤーです。

ロー フラッシュは、通常のペン ドライブのメモリ カードまたは SSD ではなく、FTL (フラッシュ変換レイヤー) がないフラッシュ チップであることを念頭に置いてください。

UBI は UBIFS ファイルシステムのサポート レイヤーとして普通は使用されます。

UBI のようなサポート レイヤーを使用せず、直接 MTD デバイスで機能する JJFS2 を継承しています。

U-BOOT:

2017.2 の u-boot では、オンダイの ECC のある NAND フラッシュ メモリに UBIFS がサポートされます。オンダイの ECC なしの NAND フラッシュの場合は、u-boot 2018.1 で UBIFS はサポートされる予定です。

UBIFS を u-boot で使用するには、u-boot コンフィギュレーションで UBI コマンドをイネーブルにする必要があります。このためには、u-boot コンフィギュレーションを開くために次のコマンドを実行します。

petalinux-config -c u-boot

[Command Line interface] → [Enable UBI - Unsorted block images commands] をクリックして、UBI コマンドをイネーブルにします。[Device Drivers] → [UBI support] で UBI を検証することもできます。

u-boot でコンフィギュレーションした UBIFS を使用すると、参照が抜けていることを知らせるリンク エラーが発生し、PetaLinux 2017.2 で u-boot をコンパイルできなくなります。

(Xilinx Answer 69757) 「PetaLinux 2017.2 - UBI コマンド ラインを有効にした後リンク エラーにより PetaLinux で U-Boot をコンパイルできない」を参照してください。

ホストで UBIFS イメージを作成する手順は次のとおりです。

  1. gen_fs_s.shubinize_s.cfgdevtable.txttargetroot.zip をダウンロードして、ターゲットのルートを抽出します。
  2. gen_fs_s.sh スクリプトを使用して、ホストで UBI イメージを生成します。それを ./gen_fs_s.sh として実行します。
  3. これで現在のディレクトリに UBI イメージが作成されます。rootfs_nand_s.ubi はあらかじめビルドされていて、すぐに使用できる状態です。

 

ubifs をフォーマット、コピー、マウントする u-boot コマンドは次のとおりです。

setenv partition "nand0,3"
setenv mtdids "nand0=nand0.0"
setenv mtdparts "mtdparts=nand0.0:896k(boot),128k(env),7m(kernel),8m(rootfs)"

注記: 次の手順を実行する前に、作成したイメージ (rootfs_nand_s.ubi) を DDR の 0x100000 にダウンロードしておいてください。

nand erase 800000 800000
nand write 100000 800000 800000
ubi part rootfs
ubifsmount ubi0:myubifs

各手順については、uboot_ubifs.log を参照してください。

ubifs が機能しているかどうかを確認するには、ubifs のファイルを u-boot のメモリに読み込み、ソース ファイルと比較します。


Linux:


2017.2 の PetaLinux では、デバイス ツリーで NAND パーティションのノードが正しく生成できません。Linux では petalinux-config menuconfig で定義されているパーティションは認識されません。

回避策については、次のアンサーを参照してください。

(Xilinx Answer 69759) 2017.2 - デバイス ツリー ジェネレーターによって NAND パーティション ノードが Arasan NAND テンプレートに従って生成されない

  • UBI のイネーブル方法

Linux コンフィギュレーション メニューで [Device Drivers] → [Memory Technology Devices (MTD)] → [UBI - Unsorted block images] をクリックし、[Enable UBI] をオンにします。

  • UBIFS のイネーブル方法

UBIFS は UBI の上で機能するので、まず UBI をイネーブルにする必要があります。

次に、Linux コンフィギュレーション メニューで [File systems] → [Miscellaneous filesystems] をクリックし、[UBIFS file system support] をオンにします。

 

UBIFS コマンドのイネーブル方法

PetaLinux ROOTFS コンフィギュレーション メニューから [Filesystem Packages] → [base] → [mtd-utils] をクリックし、[mtd-utils-ubifs] をオンにします。

PetaLinux 2017.2 では、オンダイ ECC または HW-ECC のみの NAND フラッシュ メモリで UBIFS がサポートされます。

次のデモでは、mtd0 に UBIFS を作成するコマンドを紹介します。ほかのパーティションにも接続できます。

ubiattach コマンドで「total LEB size (合計 LEB サイズ)」および「available LEB size (使用可能な LEB サイズ)」を確認できます。

使用可能な LEB サイズが 100 MB 以上の大きさであることを確認します。

十分でなければ、パーティション サイズを増やします。

ZynqMP> ubiformat /dev/mtd0 -e 0 -y
ZynqMP> ubiattach -p /dev/mtd0
ZynqMP> ubimkvol -N data -m /dev/ubi0
ZynqMP> mount -t ubifs ubi0:data /mnt

これらのコマンドで、UBIFS が mtd0 に作成されました。ファイルをコピーしてそれに移動すると、フラッシュ上にそのファイルが保存されます。

電源サイクルを終えたら、ubiattach コマンドを使用して UBIFS を接続し、もう一度マウントできます。

ZynqMP> cp /bin/* /mnt

board power off
board power on

ZynqMP> ubiattach -p /dev/mtd0
ZynqMP> mount -t ubifs ubi0:data /mnt
ZynqMP> ls /mnt

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
boot_registers_log_rev1_0.tcl 1 KB TCL
gen_fs_s.sh 495 Bytes SH
rootfs_nand_s.ubi 1 MB UBI
ubinize_s.cfg 140 Bytes CFG
devtable.txt 634 Bytes TXT
targetroot.zip 1014 Bytes ZIP
uboot_ubifs.log 12 KB LOG
AR# 69765
日付 07/27/2020
ステータス アクティブ
種類 一般
デバイス