Greaseweazle互換基板を作る!ファームを書いて3.5’FDを読んだ
この記事について
前々回は、Greaseweazle互換基板を実装、FDDケーブルを接続するところまで書きました。
今回は、その続きです。
前回は「夏至どら」だったので、Greaseweazleとはまったく関係ありません(笑)
自作したGreaseweazle互換基板にファームウェアを書き込み、3.5インチFDDを接続して、実際にFDを読めるところまで試してみました。
まずは、この基板がちゃんとGreaseweazleとして動くかどうかの確認です。

🎀 前回は光っただけ。今回はちゃんと読みにいくよ
Greaseweazleデバイス
これ以降、この基板を 「Greaseweazleデバイス」 と呼ぶことにします。
GreaseweazleのWikiなどでも、そういう言い方をしているようなので、それに合わせます。
Greaseweazle自体の詳しい説明は、ここではあまりしません。
そのあたりは、
Greaseweazle Wiki
を見てもらうのが早いと思います。
この記事では、自作したGreaseweazleデバイスにファームウェアを書いて、
実際に3.5インチFDが読めるところまでを作業ログとして書いていきます。
🎀 ここで全部説明しはじめると、また別の記事になっちゃうやつ
Greaseweazleのファームウェア
前回のブログでは、Power LEDが点灯するところまで確認しました。

なので、まずは電源周りに大きな問題はなさそう、というところまでは分かっていました。
ただ、この時点ではまだ、ただの自作基板です。
Greaseweazleデバイスとして使うには、当然ながらファームウェアを書き込む必要があります。
一般的なGreaseweazleデバイスは、通常プリフラッシュ済みだと思います。
でも今回は自作基板なので、初回の書き込みから自分でやります。
今回、V4系をベースにした理由のひとつは、USB DFUで書き込めることでした。
SWD治具なしでUSBだけで再フラッシュできるのは、将来、少数配布を考えたときにも便利です。
ただし、一度ファームウェアを書き込んでしまえば、Greaseweazleのソフトからアップデートできます。
なので、毎回DFUに入れる必要があるわけではありません。
🎀 最初の1回だけ、ちょっと特別な儀式みたいな感じだね
ファームウェアを書く
このGreaseweazleデバイスで使用しているMCUはAT32F403という ARM Cortex-M4系です。
そして、ARTERY Technology(雅特力科技)という、中華系のMCUメーカーのチップです。
この基板を作るまでは、存在を全く知りませんでした。
なので、どうやって書き込みをするのかもわからなかったのですが、
ちゃんとツールが用意されていました。
結果的に、かなりあっさりファームウェアを書き込めました。
こういう初回書き込みは、もっと何か引っかかるかなと思っていたんですが、今回はそこまでハマりませんでした。
ちょっと身構えていたので、逆に拍子抜けです。
ここでは、どういう操作でファームウェアを書いたのかを備忘録を兼ねて書いてみました。
HEXファイル
まずは、Greaseweazle のファームウェアを GitHubから入手しました。
この記事を書いている時点ではv1.6が最新でした。
書込みツール
AT32のメーカーであるArteryのサイトから、ISP_Programmerをダウンロードしました。
Artery 公式 [Development Tools] のページ
左のメニューから、[Program and Debug] を選んで、
[ISP Programmer In-System-Programming tool supporting AT32 MCU] から、
[ISP Programmer 05_ISP V2.0.23] をダウンロードしました。
このなかに、USBのドライバと書込みツールが入っています。
ドライバのインストール
先に、ArteryのISP_Programmer用のUSBドライバーをインストールしました。
zipを展開した中にある、
Artery_DFU_DriverInstall / Artery_DFU_DriverInstall.exe
を実行して、[Install Driver] を選択するとドライバがインストールされました。

ただ、インストールされたかどうかちょっとわかりにくいですね。
DFUモード
このツールでファームウェアを書き込むためには、MCUをDFUモードにする必要があります。
Greaseweazleデバイスは、基板上のDFUピンと3.3Vピンをジャンパーでショートすると、PowerONでDFUモードに入るようになっているので、
これをショートしておきました。

そして、その状態でPCとUSBで接続しました。
書込み
Artery ISP Programmer_V2.0.23 / ArteryISPProgrammer.exe を実行します。

Port type を [USB DFU] にします。
ここで、MCUが認識されていないと、一覧に表示されません。
まずは、MCUがDFUモードで認識されていたので、ひとまずUSBとMCUは今のところ問題なさそうです。
ここは、ちょっと安心しました。
[Next] → [Next] と進めます。


[Add] で、書き込むHEXファイルを指定します。
Greaseweazle の GitHubからダウンロードしたファームウェアには、
F1/F7/V4 用それぞれのファイルが入っていますが、
ここでは、V4 用の greaseweazle-firmware-at32f4-1.6.hex を指定します。
その他の設定はデフォルトのままにしました。

[Next]を押すと、Access protection に関する警告ダイアログが出ました。

内容だけ見ると、ちょっと怖いですよね。
「security of the downloaded code is not guaranteed」とか言われると、いきなり不安になります。
ただ、今回は自分でGreaseweazleのHEXファイルを書き込む作業なので、そのまま[OK]で進めました。

書込みが始まって、数秒で終了しました。
これで、ひとまずファームウェアの初回書き込みは完了です。
あと、DFUピンと3.3Vピンのジャンパーは、書き込み後に外します。
ここを付けたままだと、通常起動にならないので。
思っていたより、かなり普通に終わりました。
いや、普通に終わるのが一番いいんですけどね。
🎀 認識された瞬間に、ちょっと勝った気分になるやつ
ソフトを動かす
ファームが書けたので、次はGreaseweazleのホストソフトを動かしてみます。
ここでちゃんと認識されれば、ようやく「Greaseweazleデバイスになった」と言ってよさそうです。
まずは、GitHubから、Greaseweazleのソフト(ホストツール)をダウンロードしました。
執筆時点では、v1.23が最新でした。
なお、Windows 11を使用しました。(macOS/Linuxは試していません)
USBの接続
GreaseweazleデバイスをUSBで接続すると、Windows 10/11では usbser.sys で自動認識されます。
今回の環境でも、GreaseweazleデバイスはCOMポートとして認識されました。
この時点で、書き込まれたファームウェアが動作してるっぽいことが分かってちょっとほっとしました。
アプリの操作
GreaseweazleのWindows版ホストソフトは、zipを展開してターミナルから実行する形です。
アプリは、ターミナルから gw.exe の引数にコマンドとパラメーターを指定して使います。
まずは info コマンドを試しました。
info コマンドを実行すると、ちゃんとGreaseweazleデバイスとして認識されました。
PS D:\gw_1.23> ./gw info Host Tools: 1.23 Device: Port: COM7 Model: Greaseweazle V4.1 MCU: AT32F403A, 216MHz, 224kB SRAM Firmware: 1.6 Serial: GW053C11222847000007E0A413 USB: Full Speed (12 Mbit/s), 128kB Buffer
この時点で、かなり嬉しいです。
前回はPower LEDが点いただけでしたが、今回はPC側からGreaseweazleデバイスとして見えています。
この差は大きいです。
gw.exe から認識されると、急にそれっぽくなります。
🎀 “ちゃんとGreaseweazleです”って返ってくると、ちょっとニヤけるね
FD を読んでみる
ここで、やっとFDを読んでみようと思います。
まずは、3.5インチです。
Greaseweazle は、基本的に PC/AT のFDDを基準にしてるようなので、
手元にある PC/AT用の3.5インチのFDDで動作させてみることにしました。
今回使用したFDDは SONY MPF920 です。
結構ポピュラーなドライブのようです。
そして、読み込むFDは、手元にあったWindows 98の起動用ディスクにしました。
このFDは、事前にUSB接続FDDで読めることを確認しておきました。
なので、少なくともFDそのものが完全に読めない状態ではない、という前提です。
FDDを接続
Greaseweazleデバイスに、3.5インチFDDを接続します。

接続に使うのは、IDCケーブルと電源ケーブルです。
IDCケーブルは、千石電商で買ったケーブルですが、
電源ケーブルは自作です。
前回の記事でもケーブルの話を書きましたが、
なぜか、ちょうどいい感じのFDD用電源ケーブルが見つからなかったので、
AliExpressでパーツを買って、圧着して作りました。
あるようで、ない。
読み込み
FDDにWindows 98の起動用ディスクを挿入します。
そしてREADコマンドで読んでみます。
Greaseweazleでは、様々なパラメーターのプロファイルが準備されています。
DOS/Windows系での3.5インチFDの標準的なフォーマットは HD 1.44MB なので、
そのプロファイルの ibm.1440 を指定しました。
それと、出力ファイル名の拡張子で保存形式が変わるようです。
今回はDOS/Windows系の標準的な1.44MB FDなので、普通に .img にしました。
PS D:\gw_1.23> ./gw read --format=ibm.1440 FloppyDisk_Win98.img --drive=A
ちょっと、ドキドキします。
FDDが “カチャ”っと音がして、モーターが回り始めて、コッコッ…とシークしながら読み込む音がします。
そして、アクセスに合わせて基板上の Act.LED が点滅します。
Reading c=0-79:h=0-1 revs=2 Format ibm.1440 T0.0: IBM MFM (18/18 sectors) from Raw Flux (158358 flux in 400.37ms) T0.1: IBM MFM (18/18 sectors) from Raw Flux (182264 flux in 400.38ms) : T79.1: IBM MFM (18/18 sectors) from Raw Flux (153670 flux in 400.41ms) Cyl-> 0 1 2 3 4 5 6 7 H. S: 01234567890123456789012345678901234567890123456789012345678901234567890123456789 0. 0: ................................................................................ : 1.17: ................................................................................ Found 2880 sectors of 2880 (100%)
読み込みは、あっさり成功しました。
正直、もう少し何か起きるかなと思っていました。
でも、普通に読めてしまいました。
ちょっと拍子抜けです。
でも、もちろん嬉しいです。
毎回、作った基板が動作するとちょっとだけ感動します。
ここで読めなかったら、基板なのか、FDDなのか、ケーブルなのか、FDなのか、ファームなのか、どこから疑えばいいのか面倒なことになります。
まずは素直に読めたので、かなり安心しました。
ただ、ここで読んだのは、標準的な1.44MBのDOS/Windows系FDです。
他の形式のFDについては、まだここでは扱っていません。
🎀 トラブル記事にならなくてよかったような、ちょっと物足りないような
ファイルを見る
FDが読めたので、次はできたIMGファイルの中身を見てみます。
ここで少し悩みました。
読み込んだファイルは、どうすればいいんだろう、と。
ろらたんに相談したところ、
🎀 WindowsのFDなら、7-Zipで見られるよ!
とのことでした。
幸い、7-ZipはPCにインストール済みだったので、
できたIMGファイルをそのまま 7-Zip で開きました。
すると、中のフォルダやファイルが見えました。
おお。
さらに、テキストファイルを取り出して、エディタで読めるところまで確認しました。
🎀 IMGの中身が見えた瞬間、ちゃんとFDを吸い出せた感じがするね
まずは動作確認できた
つまり、現時点で、
- FDをGreaseweazleで読み込んでIMG化する。
- IMGファイルを7-Zipで開く。
- 中身を確認する。
- ファイルを取り出す。
ここまでできています。
まずは標準的な1.44MBのDOS/Windows系FDが読めたので、メイン基板はGreaseweazleデバイスとしてちゃんと動いていると言ってよさそうです。
もちろん、これだけなら、わざわざGreaseweazleを使う必要はないんですけどね。
USB接続FDDでも読めるFDなので。
これが最終的な目的ではありませんが、
まずは、自作したGreaseweazleデバイスがちゃんと動くこと
の確認ができた感じです。
なので、他のFDが同じように読めるかどうかは、まだ別の話です。
このあたりが、次回につながっていきます。
🎀 ここまでは“普通に読めた”だけなんだよね
次回へ
今回は、自作したGreaseweazleデバイスにファームウェアを書き込み、3.5インチFDDを接続して、実際にFDを読むところまで確認できました。
ここまでは、かなり順調でした。
でも、このあと他のFDを試してみると、全部が同じように読めるわけではありませんでした。
3.5インチFDにも、いろいろあるようです。
次回は、読めないFDや300rpm/360rpm、DENS信号、MPF920のジャンパーの話へ進む予定です。
🎀 3.5インチFD、思ったより一枚岩じゃなかったね。FD沼にハマりそう。
📪 お問い合わせなど
技術的なご相談やご質問などありましたら、
📩お問い合わせフォーム
または、
📮info@shachi-lab.com までお気軽にどうぞ。
🎀 この記事についての質問やコメントがあれば、お問い合わせから送ってね
🔗 関連リンク
しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:
- 🌐しゃちらぼ公式サイト
- 🐦 X(旧Twitter):@shachi_lab
- 📗 Qiita:@shachi-lab
- 🐙 GitHub:@shachi-lab
- 📸 Instagram:@shachi_lab
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬



コメント