■ MCRW プレイステーション用メモリーカードを読み書き ■

【警告】
 本頁では回路図・プログラム等も公開していますが、各人の環境での動作を保証する ものではありません。 自分なりに応用し、トラブっても自力で解決してください。
何が起きても私は責任を取れません。あくまでも 自己責任で お願いします。
 また、この注意は、同様の注意を明示していない他のページでの保証、及びサポート 義務の発生 を意味するものでもありません。


MCRW は MC1(プレイステーション用メモリーカード)を 読み書きするツールです( Memory Card Reader/Writer )。  Windowsアプリの名称は MCRWwin.EXE です。
カメレオンUSBの応用第二弾として、MC2RW の次に作り始めました。 本当は NVM を移植したかったのですが、 プログラムが EZ-USBに入りきらないだろうと思っていました。

MC2RW のソフトをベースに、カメレオンUSB(CPLD部も活用して の意味)を使った  ハードシリアル版 を作った後、メモリーカードの読み取り速度を比較する ために EZ-USBだけで構築可能な(CPLD不要の)ソフトシリアル版 を作りました※1

ハード版は CPLDを使っている分、ソフト版の 2倍は速いだろうと期待していたのですが、 実際にはハード版、ソフト版でたいした速度差が出ない※2 ことが分かり、 ショックで実験段階のまま投げ出してしまいました。

約1年後の2006年11月11日に PS3が発売され、メモリーカードアダプタ が登場したのですが、 これを使った MC1読み書き実験に成功したので、カメレオンUSB版と共用・速度比較する ことを前提として、MCRWwin.EXE を作りました。 MCRWwin

※1
私はオプティマイズさんの MINI EZ-USB は持っておらず、カメレオンUSBの CPLDに 2端子間で 信号をスルーする回路を作って検証したので、真の意味での EZ-USB単体での実験はやっていません。

※2
メモリーカードのデータ通信は、メモリーカード から受信確認用の /ACK信号が返されるの を待ってから次の 8bit通信を始める手順です。 この /ACK信号の待ち時間が結構あるために、ソフトシリアル版の遅さが吸収されてしまい 差が出にくくなっています。通信クロック周波数が低い(PS本体は 250kHz)のも大きいです。

特徴
本ツールは MC1(プレイステーション用メモリーカード 15ブロック)とポケットステーション に対応します。MC2の読み書きには対応していません。その代わり、MC2RW と違って プレイステーション本体は不要です。

MC1の読み書きの手順については説明しません。
藤田さんの作られた 藤田資料 で既にまとめられていますので そちらを参照してください。  "藤田資料" "メモリーカード" でググれば(検索すれば)見つかります。


■ハード製作編

カメレオンUSBと MC1 を接続する I/Fを作ります。
私は MC2RW で作ったものを使っています(アダプタソケットと I/F基板に 分かれているのを CN3 常時接続で使用)。
以下は、MCRW専用で作る場合を想定したものです。

●I/F基板の製作
回路図

ハードシリアル版

C-USB MCRW I/F基板回路図 ハードシリアル版
カメレオンUSBの CN1に取り付ける回路です。
前述の理由により、実際には作っていません

この回路図は MC1の読み書き専用で作る場合のものです。

ソフトシリアル版

EZ-USB MCRW I/F基板回路図 ソフトシリアル版
EZ-USB用の回路です。
これも実際には作っていません
図中に書いてありますが、33Ωは保険で入れているだけで、 無くても動くと思います。 (あくまで自己責任〜)

ソフトシリアル版では EZ-USB(オプティマイズ製品なら MINI EZ-USB(2131版 2135版両方))、 カメレオンUSB のどれでも同じ FWが使えるように、PORTC の bit3-0 (PC0〜PC3)だけを 使用しています。

カメレオンUSBの PC0〜PC3 は CPLDに接続されているのでそれを スルーする専用の回路を書き込んで使います(I/F回路は ハードシリアル版 を作ります)。
もっとも、速度差が少ないとはいえ、実験するのでもない限りカメレオンUSB ではハードシリアル版 の FW を使うべきです。

メモリーカードの差込み口については自作もできるようです。 私は、PS2用マルチタップを分解して使ったので詳しくありません。
自作する場合は他のメモカ読み書きツール工作のページを参考にしてください。

回路図作成には 水魚堂の BSch3V を使用させてもらいました。


■ソフト制作編

CPLD内の論理回路
ハードシリアル版 for カメレオンUSB
MC2RW 用と同じものです、終わり。

但し、本ページからダウンロードできるものは MC1用通信クロックを 500kHz/250kHz に 下げています(MC2は 12MHzのまま変わらず)。
つまり、MC2RW の方に入っている usbmc20GF.jed を使うと少しだけ速くなります。
生成ファイル:usbmc20G.jed

ソフトシリアル版 for カメレオンUSB
単に、ハードシリアル版と同じ信号を CN1の同じピンに割り当てるだけの バススルー回路です。実験用途以外にはあまり意味がありません。
生成ファイル:usbmcbus.jed

ソフトシリアル版 for EZ-USB単体
カメレオンUSB ではなく、EZ-USB単体(MINI EZ-USBなど)で使うなら そもそも CPLDが無いので存在しません。

尚、ソフトシリアル版は メモリーカードの出す /ACK を見ません。 /ACK は 2〜3us 幅のパルスなので EZ-USBの速度でソフトでポーリングすると 検知漏れを起こすからです。
割り込みを使えばいいのですが、面倒なのと、実際、ソフトシリアル版は 大部分の通信で、8bit通信の後処理・次の通信の前処理処理中に /ACKが返って来る ので、性能改善には繋がりません(むしろ毎回割り込み処理する分遅くなるでしょう)。

EZ-USBの FW
ハードシリアル・ソフトシリアル版 ともに MCRWwin で使えるように DLL化しました。
EZ-USBに読み込ませる FWは DLLの中に入っています。

読み取り速度を稼ぐために、ホストPCからの読み取り要求は 8セクタ単位で連続読み出しして キャッシングします(USB1.1 のアクセスは 1ms単位のフレームに縛られるので)。 ここでいう 1セクタ は 128Byteです(MC1の最小アクセス単位)。

MC2RW と同じく Keil開発環境(評価版)を使用して主要部分はアセンブラ記述です。
ハードシリアル版 ファイル:MCRWdll_CH.DLL
ソフトシリアル版 ファイル:MCRWdll_CS.DLL

 カメレオンUSBに usbmcbus.jed を書き込んだ場合も MCRWdll_CS.DLL を使用します。

ソフトシリアル版では /ACK 信号を監視していません。適当に(いいかげん の意味ではない) 時間待ちしていますが、ある程度速度向上も狙ったので開発に使ったメモリーカードで うまくいっているだけで、他のメモリーカードではタイミング的にエラーが起きる可能性が あります。
 その場合は MCRWwin.ini でパラメータを調整します。

ホスト(windows)プログラム
PS3 メモリーカードアダプタ用に作った MCRWwin.EXE を使います。
カメレオンUSB/EZ-USB 用の公開に合わせて Ver1.10 にバージョンアップしました。


■使い方

MCRWwin.EXE 本体の ダウンロード及び使い方は こちらから(MCRWwin メインページ)
カメレオンUSB/EZ-USB版での注意点
使用するDLL

使用する I/F と DLL の組み合わせを間違えないでください。
カメレオンUSB は、その先の CPLDにどんな回路が入っているか調べようがない (人間が管理する必要がある)ので、DLL と CPLD回路の組あわせも間違えないでください。 EZ-USB と CPLDの出力信号が衝突してあまりよろしくない状態になります (最悪の場合、故障します)。

間違った組み合わせなら恐らく、イメージファイルモード になりますが、 成功したなら、どの DLLを使っているかは起動した後で HIS をクリック すれば I/F種別を表示してくれます。

起動方法
カメレオンUSB/EZ-USB の仕組み上、最初の1回だけは メモリーカードを 刺さないで起動してください
FW を書き込むためです(その前だとメモリーカードへの信号が予期せぬ状態に なっている恐れがあります)。

また、PC-A(windows98SE)の機種では FWを書き込んだ後に、メモリーカードを 認識できませんでした。一度 MCRWwin を終了して、再度実行すれば次からは正常に使えます。

ダウンロード(MCRWwin 本体以外)
・CPLD/DLLセット cusbmc1rw10b.LZH  ダウンロードは ここから (約113KB)
ハードシリアル版(カメレオンUSB) <ch>ディレクトリ内
usbmc20G.jed MC1用通信速度 500/250kHz版
MCRWdll_CH.DLL
MCRWwin.ini 使用DLL を MCRWdll_CH.DLL に書き換えてあります

ソフトシリアル版(カメレオンUSB) <cs>ディレクトリ内
usbmcbus.jed
MCRWdll_CS.DLL
MCRWwin.ini 使用DLL を MCRWdll_CS.DLL に書き換えてあります

ソフトシリアル版(EZ-USB) <ez>ディレクトリ内
MCRWdll_CS.DLL
MCRWwin.ini 使用DLL を MCRWdll_CS.DLL に書き換えてあります
 但し、ソフトシリアル版(カメレオンUSB) と完全に同内容です。

jed ファイルは 先に cusbwr.EXE などでカメレオンUSBに書き込んでおく 必要があります。
DLLと iniファイルを MCRWwin.EXE と同じディレクトリに置いてください。
iniファイルの設定方法は MCRWwin.ini を見てください。

・ソース(参考) cusbmc1rw10S.LZH  ダウンロードは ここから (約39KB)
カメレオンUSB用の FW、CPLD回路用も含めてコンパイル方法については一切説明しません (ツールのバージョンやインストール先で大きく変わるため)
また、出来上がった jed/DLL は手動でファイル名を公開版の名前に変更しています。
都合により MCRWwin.EXE のソースは入っていません。

FWについては mc1rwas.a51 の先頭にある SOFT_SERIAL の値でハード・シリアルを 切り替えるようになっています。 DLLのソースもマクロを使って切り替えています(それぞれ専用の makefileを用意)。
FW内容を C言語のソースに変換する必要があることにも注意。

MC2RW 用を改造して作ったので、一部不適当なコードが残っている可能性があります (DLLからは使わないので問題が表面化してない)。

性能比較
フル読み出し(128KB)にかかる時間を測定
MCRWwin が自分で時間測定して表示する数値を信用して載せています。

    使用PC PC-A
    I/F DLL種類追加条件初期MC1後期MC1ポケステ
    メモリーカードアダプタなし(250kHz)12.3s11.3s11.3s
    ハードシリアル版
    カメレオンUSB
    250kHz8.2s8.3s7.9s
    500kHz6.2s6.2s5.9s
    750kHz5.7s5.4s5.2s
    ソフトシリアル版
    (カメレオンUSB)
    250kHz w7=179.8s
    250kHz w7=10エラー9.1s
    600kHz w7=177.3s
    600kHz w7=10エラー6.7s

    使用PC PC-B
    I/F DLL種類追加条件初期MC1後期MC1ポケステ
    メモリーカードアダプタなし(250kHz)11.3s11.3s10.3s
    ハードシリアル版
    カメレオンUSB
    250kHz8.1s8.1s7.7s
    500kHz6.2s6.2s5.8s
    750kHz5.5s5.3s5.0s
    ソフトシリアル版
    (カメレオンUSB)
    250kHz w7=179.7s
    250kHz w7=10エラー8.9s
    600kHz w7=177.3s
    600kHz w7=10エラー6.6s


    追加条件とは、メモリーカードとの通信クロック周波数です
    (CPLD回路ファイル/iniファイル で変更)。
    ソフトシリアル版の w7 は iniファイル内の TYPE03-W7 パラメータです。

     PCによる違いは MC2RW 程には変わってない、というかほとんど誤差ですが、他のPC環境では どうなるかは分かりません。 MC2相手と違って、あまりに読み出しに時間がかかるので USB規格のフレームのしばりがあまり効かないようです。
    それでもメモリーカードアダプタより高速に処理できています(同じ 250kHzで比較しても)。

書き込み速度について
MC1への書き込みについては高速化する努力は一切していません。
十分 waitをかけてあります。

    フル書き込み(128KB)
    にかかる時間
    通信クロックPC-APC-B
    250kHz46s42s
    500kHz43s39s
 使用するI/F (DLL)の違いはほとんど出ませんでした。


■その他の情報

開発・テスト環境
PC
PC-A SOTEC M350V(PenIII 500MHz RAM128MB Windows98SE USB1.1対応)
PC-B Gateway GT4012j(AMD 64 X2 3800+ RAM 1GB WindowsXP Home SP2 USB2.0まで対応)

CPLD開発ツール

XILINX WebPACK2.1WP6.x 、ISE WebPACK8.1.03i
EZ-USB FW開発ツール
Keil μVision2 V2.10(評価版)
C/C++コンパイラ
Borland C++ 5.5.1(無償版)
MC1
SCPH-1020 04-04 3-962-888-01 1995年購入 初期MC1 とはこれを指します
SCPH-1020 09-02 3-962-888-31 2000年購入 後期MC1 とはこれを指します
 後期MC1のケースは アダプタソケット加工に使ったので、中の基板を初期MC1のケースに はめて使います(IC位置変更のせいでフタはできない)
ポケステ
SCPH-4000 1999年購入 クリスタル


最後に
 ポケステへの対応なんて、やるんじゃなかった〜!


開発履歴
2005年11月
MC2Fの次に着手〜遅いので中断

2007年1月
CPLD回路をバージョンアップ
ポケットステーション対応実験
MCRWwin.EXE 用 DLL作成
以上。