はじめに
Cyclone® V SoC FPGA を使用して QSPI フラッシュメモリー(以後 QSPI)から ハード・プロセッサー・システム(以後 HPS)をブートする構成は実際によく用いられる構成です。この時、QSPI に対して誤ったデータを書き込んでしまった場合などに HPS Flash Programmer(quartus_hps)からアクセスができなくなってしまうケースがあります。
要因は様々ですが、対処法としていくつかご紹介いたします。
* HPS = ハード・プロセッサー・システムの略
1. HPS Flash Programmer のオプションを追加してみる
HPS Flash Programmer にはオプションがいくつか用意されています。まずは以下のオプションを追加して復帰可能かお試しください。
$ quartus_hps -c 1 --boot=16 -o EB -a 0x0 -s 0x40000
上記の通り boot のオプションが用意されておりアクセス前に Cold Reset を発行するなどの指定が可能になっています。以下、v18.1 におけるヘルプの記載です。
注記:
* バージョンによってオプション番号が違うことがあります。
* 基本的には最新版のツールをお使いいただくことを推奨しております。
また、インテル® FPGA ダウンロード・ケーブル II(旧 USB-Blaster II)には SoC デバイス向けにリセットピンが追加されています。このピンを HPS の nRST 信号に接続することが推奨されておりますので基板を作成される場合にはご注意願います。
参考: Intel® FPGA Download Cable II User Guide
Pin | Active Serial (AS) Mode | Passive Serial (PS) Mode | JTAG Mode | |||
Signal Name | Description | Signal Name | Description | Signal Name | Description | |
1 | DCLK | Configuration Clock | DCLK | Configuration Clock | TCK | Test Clock |
2 | GND | Signal ground | GND | Signal ground | GND | Signal ground |
3 | CONF_DONE | Configuration done | CONF_DONE | Configuration done | TDO | Test Data Output |
4 | VCC(TRGT) | Target power supply | VCC(TRGT) | Target power supply | VCC(TRGT) | Target power supply |
5 | nCONFIG | Configuration control | nCONFIG | Configuration control | TMS | Test Mode Select Input |
6 | nCE | Target chip enable | - | - | PROC_RST | Processor Reset |
7 | DATAOUT | Active serial data out | nSTATUS | Configuration Status | - | - |
8 | nCS | Serial configuration device chip select | nCS | Serial configuration device chip select | - | - |
9 | ASDI | Active serial data in | DATA0 | Passive serial data in | TDI | Test Data Input |
10 | GND | Signal ground | GND | Signal ground | GND | Signal ground |
Note: Use pin 6 for hard processor reset under JTAG mode.
Note: The following note below only applies to Intel® Arria® 10 and earlier SoC devices. PROC_RST is not used for Intel® Stratix® 10 SoC devices.
In JTAG mode, the PROC_RST pin can be used to trigger warm reset of the HPS block when prompted via the ARM DS-5 debugger. PROC_RST is an active low signal and not an open collector pin. As such, it is not recommended to connect PROC_RST to HPS_nRST directly. You should instead connect this pin to a secondary device such as the MAX V CPLD, and use the device to manage the reset network for HPS.
2. Arm® Development Studio 5 Intel® SoC FPGA Edition から
U-Boot を起動して QSPI の中身を消去
基板上で BSEL(Boot SEL)ピンが変更可能な場合、QSPI 以外を指定することで誤って書き込んでしまったデータでブートすることはなくなります。こうなると JTAG からのアクセスも可能なので Arm® Development Studio 5 Intel® SoC FPGA Edition(以後 DS-5)を使用して U-Boot を起動し U-Boot のコマンドにて QSPI の中身を消去することで元に戻すことが可能です。
DS-5 から U-Boot を起動する方法および U-Boot からの QSPI への書き込み方法については以下のページに記載があるので参照ください。
参考: 簡易デバックに最適!DS-5 で U-Boot を起動する方法
参考: HPS Flash Programmer より高速!U-Boot で QSPI に書き込む方法
U-Boot が起動したら sf コマンドを実行してみてください。Usage が表示されるので実施したい処理を選んで実行してください。
SOCFPGA_CYCLONE5 # sf
sf - SPI flash sub-system
Usage:
sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus
and chip select
sf read addr offset len - read `len' bytes starting at
`offset' to memory at `addr'
sf write addr offset len - write `len' bytes from memory
at `addr' to flash at `offset'
sf erase offset [+]len - erase `len' bytes from `offset'
`+len' round up `len' to block size
sf update addr offset len - erase and write `len' bytes from memory
at `addr' to flash at `offset'
SOCFPGA_CYCLONE5 #
Preloader 領域を削除する場合の例は以下となります。
sf probe
sf erase 0 40000
その他、DS-5 に関する各種テクニックは以下よりご確認いただけます。
3. USB-Blaster の TCK 周波数を変更してみる
JTAG の信号品質が問題で正常にアクセスできないケースもよく見受けられます。その場合には以下の記事を参考に TCK 周波数を変更してみてください。
16MHz に変更する場合には以下のようにコマンドを実行します。
$ jtagconfig --setparam 1 JtagClock 16M