UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

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
ステータス アクティブ
種類 一般
デバイス
  • Zynq UltraScale+ MPSoC
このページをブックマークに追加