#はじめに
1500円 ZYNQ 基板(EBAZ4205)で、microSD から起動できるようにします。
標準搭載の NAND 起動と、microSD 起動を、スイッチで切り替えられます。
リセットボタンの追加で、電源を入れたままスイッチを切り替えて、NAND / microSD どちらでも、即再起動が可能になります。
(2021.4.22 更新)
「NAND/microSD 起動切り替えスイッチの取り付け」の回路図と写真を更新しました。
SW で R2577 をショートして VCC 直結だと、microSD 起動したときに NAND が認識されませんでした。
SW で 1KΩ プルアップを ON/OFF に変更して、microSD 起動時に NAND の認識/書換ができるようにしました。
#microSDソケットのはんだ付け
購入した EBAZ4205 は、後期コストダウン版のため、microSD のソケットが実装されていませんでした。
ソケットが別添付されている物を購入しましたので、自分ではんだ付けします。
はんだ吸い取り線で、端子(パッド)のはんだを吸い取って、綺麗にしてから、ソケットをはんだ付けします。
フラックスクリーナ(うちはジッポーのオイル + 綿棒)で綺麗にしたら出来上がり。
#NAND/microSD 起動切り替えスイッチの取り付け
ZYNQ のブートデバイスを切り替え式にするため、スイッチを取り付けます。
NC(非実装)になっている R2577 に、1KΩ プルアップを ON/OFF するスイッチを取り付けると、オンで microSD 起動、オフで NAND 起動になります。
取り付けるスイッチは、SPST のものでよいです。
今回は手持ちの SPDT のものを使っています。
R2577 に 1KΩ 抵抗を取り付けて、配線を引き出します。
部品面にスイッチを取り付けます。
分かりやすいよう、基板に起動モードを書いておきました。
写真の位置だと、microSD から起動します。
#リセットボタンの取り付け
ZYNQ のハードウェアリセットを行うため、リセットボタンを追加します。
リセットボタンは無くても使えますが、再起動時にいちいち電源のオン・オフをするのは、とても面倒です。
ZYNQ の開発では、リセットボタンが必須ですので、是非つけましょう。
リセットIC U65(SGM706-SYS8) の 1pin(MR = Manual Reset 端子)と GND をショートさせると、リセットを掛けられます。
U65 の 1pin と GND 間に小型タクトスイッチを取り付けました。
電源オンのままで起動モードを切り替えて、ボタンを押せばリブートできます。
写真で、基板外周のベタ部分は、ねじ穴をフレームと接続するために信号 GND とは高インピーダンス接続になっていて、GND になりません。
Y3 のガード部分が通常の GND ですので、そこに接続しています。
リセット信号は、ZYNQ の PS_POR_B と、Ether PHY の RESET.N 端子に接続されています。
リセットボタンを押すと、強制リセットがかかります。
ZYNQ がハングアップしたり、microSD のイメージを書き換えて再起動したりするとき、ポチっと押すだけでよいので、とても捗ります。
#microSD 起動テスト用のブートイメージ
野良リソース検索の結果、こちらでテスト用のブートイメージが紹介されていました。
https://embed-me.com/ebaz4205-recycle-cheap-crypto-miner-part-1/
Buildroot image
https://drive.google.com/file/d/16wQKpiYsH0gQ7KmnnYMrmFdCxwkF3WS4/view?usp=sharing
RasPi でもおなじみ、Win32 Disk Imager で microSD に書き込みます。
#microSD からブート
スイッチを切り替えて、microSD からブートするとこんな感じ。
root/root でログインできます。
LAN(eth0)は認識されません。
PHY に供給する 25 MHz の振動子+周辺部品が実装されていない後期コストダウン版 EBAZ4205 では、PS から 25MHz を出力する必要があります。
そのように構築されていない事が原因のようです。
紹介ページの後ろの方に、boot.bin を置き換えれば eth0 が認識されると記述があります。
試したところ eth0 は確かに認識されるのですが、PS から 25 MHz が出力されず、やはり LAN は使えませんでした。
#microSD の見え方
/dev/mmcblk0
/dev/mmcblk0p1
/dev/mmcblk0p2
の3つが microSD のデバイスです。
mount /dev/mmcblk0p2 /mnt/
とすると、microSD のパーティション2 が /mnt にマウントされます。
buildroot ~ # mount /dev/mmcblk0p2 /mnt/
buildroot ~ # cd /mnt
buildroot /mnt # ls
bin dev lib linuxrc media opt root sbin tmp var
boot etc lib32 lost+found mnt proc run sys usr
buildroot /mnt #
/dev/mmcblk0p1 は、fat ファイルシステムが buildroot イメージに含まれていないため、マウントできないようです。
buildroot ブートイメージでは、PS に i2c とか spi の機能も含まれていません。
RasPi 的に使える汎用ブートイメージを作って、PS から PL を都度ダウンロードする形にするのが理想です。
ここから先はガチの petalinux 開発が必要になりますので、後日の課題にします。
(私自身、petalinux の環境構築はやったことが無いので、ゼロからのスタート)
なお、FPGAプログラミング大全 Xilinx 編(第2版)の Appendix II-3 では、ベアメタル?で SD カード起動する方法が解説されています。
#microSD を読んでみる
上で作成した microSD を挿したまま、起動元を NAND に切り替えて再起動します。
元の EBAZ4205 マイニング用 linux が起動しますが、microSD を自動でマウントしてくれ、読み書きできます。
マウント先は、
/run/media/mmcblk0p1
/run/media/mmcblk0p2
の2箇所です。
mmcblk0p1 は、windows から読み書きできるパーティションで、ZYNQ のブートファイル(boot.bin, boot.scr, u-boot.bin)があります。
mmcblk0p2 は、buildroot の linux 起動パーティションで、/ 以下の各ディレクトリがあります。