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 章を参照してください。

重要: フラッシュの完全な名前、コンフィギュレーション モード、電圧を提示してください。コンフィギュレーションが標準のものでない場合は (マルチプレクサ、レベル シフターなど)、ボード回路図も提供してください。

 

 


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 チェーンの詳細を知らせてください (チェーン内のデバイス数、ZynqM の数、カスケードされた、または独立した JTAG の ZynqM の数、チェーンのレベル シフターなど)XSCT エラーはすべてレポートしてください。


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

FSBL および CSU ブート ROM に関連した既知の問題については、(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 または QSPI からのブートを推奨)。

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) にあるフローに従ってファイルをダウンロードし、xsct/xsdb を使用して u-boot elf を実行します。 

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 (Flash Translation Layer: フラッシュ変換レイヤー) のないフラッシュ チップです。 

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) を 0x100000 で DDR にダウンロードします。

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 サイズ)」を確認できます。 

「available LEB size」が十分な大きさであることを確認します (通常は 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 を接続し、もう 1 度マウントできます。

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
日付 11/15/2017
ステータス アクティブ
種類 一般
デバイス