LoginSignup
5
3

More than 3 years have passed since last update.

1500円ZYNQ基板で microSD から起動する

Last updated at Posted at 2021-02-27

はじめに

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 のソケットが実装されていませんでした。
ソケットが別添付されている物を購入しましたので、自分ではんだ付けします。

はんだ吸い取り線で、端子(パッド)のはんだを吸い取って、綺麗にしてから、ソケットをはんだ付けします。
フラックスクリーナ(うちはジッポーのオイル + 綿棒)で綺麗にしたら出来上がり。
5_SD_socket.jpg

NAND/microSD 起動切り替えスイッチの取り付け

ZYNQ のブートデバイスを切り替え式にするため、スイッチを取り付けます。
NC(非実装)になっている R2577 に、1KΩ プルアップを ON/OFF するスイッチを取り付けると、オンで microSD 起動、オフで NAND 起動になります。
1-1改.png

取り付けるスイッチは、SPST のものでよいです。
今回は手持ちの SPDT のものを使っています。

R2577 に 1KΩ 抵抗を取り付けて、配線を引き出します。
1_改.jpg

部品面にスイッチを取り付けます。
分かりやすいよう、基板に起動モードを書いておきました。
写真の位置だと、microSD から起動します。
2.jpg

リセットボタンの取り付け

ZYNQ のハードウェアリセットを行うため、リセットボタンを追加します。
リセットボタンは無くても使えますが、再起動時にいちいち電源のオン・オフをするのは、とても面倒です。
ZYNQ の開発では、リセットボタンが必須ですので、是非つけましょう。

リセットIC U65(SGM706-SYS8) の 1pin(MR = Manual Reset 端子)と GND をショートさせると、リセットを掛けられます。
3-1.png

U65 の 1pin と GND 間に小型タクトスイッチを取り付けました。
電源オンのままで起動モードを切り替えて、ボタンを押せばリブートできます。
3.jpg

写真で、基板外周のベタ部分は、ねじ穴をフレームと接続するために信号 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 に書き込みます。
8.png

microSD からブート

スイッチを切り替えて、microSD からブートするとこんな感じ。
5.png
root/root でログインできます。
6.png

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箇所です。
7.png

mmcblk0p1 は、windows から読み書きできるパーティションで、ZYNQ のブートファイル(boot.bin, boot.scr, u-boot.bin)があります。
mmcblk0p2 は、buildroot の linux 起動パーティションで、/ 以下の各ディレクトリがあります。

まとめ

EBAZ4205 で、microSD を使ってブートイメージの開発ができることがわかりました。
9.jpg

5
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3