📰この記事はプロモーションを含みます
⏰この記事は約 14 分で読めます
こんにちは、JLです。
今回は、Raspberry Pi Picoを使用したPlayStation用つよつよメモリーカード「PicoMemcard+」をつくってみたお話です。
PicoMemcardって何?
PicoMemcard は、dangiu氏が中心となってGithubでオープンソースで開発が進められている、PlayStation用のメモリーカード(をRaspberry Pi Picoでエミュレートしたもの)です。
Raspberry Pi PicoもしくはRP2040-Zeroを使用して安価に組み立てることができ、USBでPCに接続することで、メモリーカードのセーブデータをインポート/エクスポート(バックアップ)することができます。
そして、PicoMemcard+は、MicroSDモジュールを使用することで、複数の機能を使うことができます。
一番大きな機能が、「コントローラで特定のボタンを押すと、複数の仮想メモリーカードを切り替える機能」ですね。
今回は、RP2040-Zeroを使用し、さらに、メモリーカード端子とMicroSDモジュールを合わせた基板を作成して、シンプルで強いPicoMemcard+を作ってみます。
Raspberry Pi Pico?RP2040-Zero?
Raspberry Pi Pico/RP2040-Zeroは、1000円以下で購入することができる、電子工作などに特化した小型の開発基板です。
従来のRaspberry Piとは異って、LinuxOSをインストールする事などは出来ません。
センサーなどを使用して計測する物を作ったり、埋め込み型として電子工作で使用するような感じを想定されていますね。
簡単に言うと、Raspberry Pi版のArduinoのような感じです。
RP2040-ZeroはWaveshareが開発・販売している、Raspberry Pi Picoをさらに小型にしたものです。
安さに驚き…😳
回路作成
MicroSD SPI モジュールの仕様と、PicoMemcardのGithubの接続図などを確認して、KiCadで回路を作っていきます。
実機に刺して、メモリーカードとして機能しなければいけないので、PlayStation本体と干渉しないようにサイズなどを測りながら作成しました。
仕様的に、基板の厚みは通常の1.6mmではなく1.0mmとなります。こちらは発注の時に忘れずに設定をします。
PCBを発注
いつもお世話になっている、JLCPCBさんに発注します。
↑のリンクからの新規登録限定で54ドルのクーポンが貰えます。
また、TwitterでJLCPCB日本(@JLCPCB_Japan)をフォローしてDMを送ると、さらに$10のクーポンも貰えます。日本担当のスタッフもいるので、安心できますね。
今回は、SMT Assemblyを使用して、microSDカードスロットなどの表面実装部品を、予め工場のほうで実装してもらいました。
PCBアセンブリ~
注文方法はいつも通り、ガーバーデータをアップロードして、基板の厚みや色などの細かい設定をしたら、「PCB Assembly」の横のスイッチをオンにします。
そうすると設定が表示されるので、各種設定していきます。
それぞれの設定ですが下記のような感じです。
▶Economic
・片面のみ実装可能
・複数のユーザの注文をまとめて作っているので低コスト(セットアップ費用:$8)
・最小基板寸法 10x10mm
▶Standard
・片面もしくは両面実装可能
・お値段高め(セットアップ費用:$25)
・Vカットでパネル化できる
・数量などに制限がない
・最小基板寸法 70x70mm
・PCBデザイン上にエッジレールが必要
部品実装面を選択します。
▶Top Side : 表面
▶Bottom Side : 裏面
▶Both Side : 両面(PCBA TypeがStandardのみ)
実装してもらう数量です。
2枚工場で実装してもらい、3枚は基板だけ…といった指定ができます。
機械で部品実装を処理するため、基板の位置合わせなどに使用する穴を2ヵ所設定します。
▶Added by JLCPCB : JLCPCBにおまかせ
▶Added by Customer : 自分で設定
PCBA注文後にJLCPCBのエンジニアさんが、部品配置の向きや極性などの修正を行ってくれます。
Yesを選択した場合、部品配置を確認するメールが届きます。
今回はそれぞれ、Economic、Top Side、5枚、Added by JLCPCB、確認はNo、で進めていきます。
リストのデータをアップロード
次に、Add BOM Fileから、部品データリスト(.csv)をアップロード、Add CPL Fileから、部品配置ファイル(.csv)をアップロードします。
部品リストに使用するパーツIDは、JLCPCB SMT Parts Libraryであらかじめ選定しておくとスムーズです。
それぞれKiCadから出力することができます。
Please help to select the correct usage description for your product. で、この基板がどういうものかを大まかに選択します。部品を実装してもらうので、ほぼ基板が「動作する完成品に近しい物」になり、通関のために製品説明をする必要があるためです。
今回は、Reserch\Education\DIY\Entertainment から Video/TV Game Player HS Code 950450を選択しました。
部品確認
アップロードが終わると、Select Partsで部品が間違いなく選択できているかが表示されます。
もし在庫がなかったりした場合、この画面で表示されるので、代替の部品をチョイスしたり、該当部品を実装しないで進めるといった選択ができます。
プレビュー
次に進むと、なんと、3Dで表面実装部品をプレビューすることができます。
部品の向きが誤っていないかなどを確認でき、間違っていたら部品を選択して回転することも可能です。
ちょっと前までは無かったので、最近実装された感じですね。とても分かりやすくて便利です。
諸々問題がなければ Save To Cartを押して注文に進んでいけます。
PCB製造に3日ぐらい、表面実装の処理も3日ほど、合計で1週間程度で発送されます。
PCB到着!
というわけで、注文した基板は、海を渡って無事到着しました。
今回発注したPCBの実物はこんな感じです。
KiCadやJLCPCBのサイト上で3Dプレビューしたのと大差なく、問題ない出来です。
きちんとPlayStation用のメモリーカード端子もあります。
RP2040-Zeroの準備
これがRP2040-Zeroです。切手サイズに収まっている小さなRaspberry Pi Picoです。
こちらに、PicoMemcard+をインストールしていきます。
まずは、GitHubのReleasesページにある、PicoMemcard+RP2040-Zero用UF2ファイル(PicoMemcard+RP2040-Zero.uf2)をダウンロードします。
次に、RP2040-ZeroのBOOTボタンを押しながら、USB Type-CケーブルでPCに接続します。
すると、RPI-RP2という名前の127MBほどのUSBメモリのような状態で認識します。
こちらに先ほどダウンロードしたPicoMemcard+RP2040-Zero.uf2をドラッグ&ドロップします。
すると、ファイルのコピーが終わった瞬間にRP2040-Zeroが自動的に再起動されます。
これでRP2040-Zeroの準備は完了です。すごい簡単😍
届いた基板にはんだ付け
基板にRP2040-Zeroをはんだ付けします。
専用にパターンを作成しておいたので、こちらにはんだ付けしていきます。
無事に完成しました。
トラブル発生💦
空のmicroSDカードを挿して、Playstationに接続してみるとRP2040-Zeroのステータスランプが「赤く点滅」しました。
この場合、「SDカードの読み取りに失敗」という意味を指します。
何か基板設計をミスッてしまったか、電圧が足りていないのか…
など細かく調べていきましたが原因が不明…
今回は失敗か…と思いつつ原因を探していました。
原因判明🎉
とりあえず、原因を探すために、サンプルデータをメモリーカードにいれて、どこが問題になっているかなど、チェックしていきます。
「docs/images/SampleMemoryCard/」にサンプルデータを用意してくれていますので、メモリーカードイメージである「MEMCARD.MCR」を、PicoMemcard+用に「0.MCR」にリネームしてmicroSDカードに入れ、Playstationに接続してみました。
すると、RP2040-Zeroのステータスランプが「緑に点灯」しました。
⁉
これは、正常に同期されている状態です。
ちゃんと読んでみると、インストール手順・5の、「メモリカードイメージをPicoMemcardにアップロード」を完全に見逃していました。
どうやら、「0.MCR」をあらかじめ準備してあげる必要があったようです。
というわけで、今度は「docs/images/EmptyMemoryCard/」の空のメモリーカードイメージ「MEMCARD.MCR」を「0.MCR」にリネームして、microSDカードに入れてみたところ、無事、空のメモリーカードとして認識させることができました🙌🏻
説明は流し読みせずにちゃんと読むのが大事ですね…💦
実際にセーブしてPCで読んでみる
実際にPlaystationでセーブをして、そのデータをPCで読んでみます。
問題なくゲーム上でもメモリーカードとして認識しています。
セーブも問題なく完了しました。
PCでの確認は、PicoMemcard+をPCにUSB Type-Cで接続して、メモリーカード編集ソフト「MemcardRex」で見てみます。
File > Open から直接ドライブを開いて、0.MCRを開いてみると…
先ほどセーブしたデータを、問題なく読み込みすることができました!
PicoMemcard+のすごい機能
さて、PicoMemcard+には便利な仮想メモリーカード機能があります。
コントローラの特定の組み合わせでボタンを押すだけで、メモリーカードを複数切り替えることができるといったものです。
メモリーカードのデータは128KBなので、8GBのSDカードだとしたら、約62000枚分のメモリーカードを切り替えて使用することができます。
まぁ、そこまで切り替えると、もはや管理できなくなりそうですが…😥
新しいメモリーカードイメージの作成や切り替えは、下記の組み合わせのボタンを押すだけで簡単に切り替えることができます。
新しい空のメモリカードイメージを作成し、それに切り替えてくれます。
SDカードの中には連番で 0.MCR、1.MCR、2.MCR … といった感じで増えていきます。
連番で存在しているメモリーカードイメージを
0.MCR→1.MCR→2.MCR…といった順で切り替えます
連番で存在しているメモリーカードイメージを
3.MCR→2.MCR→1.MCR…といった順で切り替えます
コントローラで切り替えできるので、抜き差しやメモリーカードを触る等の動作が不要なのはとても便利ですね☺
難点は「今どの番号のメモリーカードイメージを見てるかわからない」といったところでしょうか…。
仮想メモリーカードの枚数が増えるほど発生しますね…。
実機で通常メモリーカードからコピー
さてさて、実機で使えるということは、通常のメモリーカードからセーブデータをPicoMemcard+にコピーすることで、PCにバックアップすることができます。
昔遊んだ懐かしのセーブデータが家に眠っていそう…🧐
バックアップしたセーブデータを、エミュレータで読み込んだりすることも出来るため、昔まだクリアしていなかったゲームを、持ち運びができる携帯型のエミュレータ機で遊ぶ!みたいなことができちゃいますね。
もちろん、エミュレータで遊んだ続きを実機で遊ぶという事もできます。
◻ ◻ ◻
というわけで、今回は、Raspberry Pi Picoを使用したPlayStation用つよつよメモリーカード「PicoMemcard+」をつくってみたお話でした。
PicoMemcard+の仕様も簡単で、Raspberry Pi Picoの安さにも驚きつつ楽しく構築することができました。
Githubで開発しているプロジェクトメンバーには頭が上がりません。
気になる方は是非、PicoMemcard+のページ👆を見てみてください!
それではまた次回、機会がございましたら、お読みいただければ幸いです~