------------------------------------------------------------------------------ SCSI Target Emulator RaSCSI (*^..^*) version 1.33 for Raspberry Pi Powered by XM6 TypeG Technology. Copyright (C) 2016-2018 GIMONS ------------------------------------------------------------------------------ □変換基板の必要性について SCSIはTTLレベルで5Vを220Ωと330Ωで分圧(パッシブターミネータの場合)する ことで各信号線に3V弱の電圧がかかった状態が定常状態(信号的にはネゲート)に なっています。 イニシエータ側もしくはターゲット側が信号をアサートする(=0V)にしようと すると両端のターミネータから合わせて5000÷220×2=45mAの電流が流れることに なります(X68000のSCSIコントローラであるMB89352のデータシートを見ればシンク 電流としてIol48mAとなっています)。 RPIのGPIOはこのような大きなシンク電流は吸収できません。電気的に安全な接続 を行うためには汎用ロジックIC等で変換基板を作る必要があります。汎用ロジック ICで48mAものシンク電流に耐えるのは74LS06とか07といったオープンコレクタで ハイパワータイプのものを使用します。 作者は74HC541×3,74HC126×1,74HC04×1で基本的なSCSIの方向制御を行い更に 74LS07×3を使ってバスをドライブする回路を組んでみたところ問題なく動作する ことを確認しました。 他にも74LS641の派生版である74LS641-1を使用すると回路はシンプルに構成できる でしょう。ノーマル品と違ってシンク電流が48mA対応なので74LS07を使用する必要 はありません。しかし入手性はそれほど良くありません。 □変換基板の回路図案 同じフォルダに回路図案を入れています。 ・target.png SCSIのターゲットモードを使用するための変換基板回路図です。基本機能である HDDやMOのエミュレーションを行うのであればこの回路図相当の物を作れば良い でしょう。使用するGPIOピンも最も少ない構成になります。 ピンアサインを変更しなければRaSCSIのstandardディレクトリに含まれる バイナリを使用することが可能です。 ・initiator.png SCSIのターゲットモードに加えイニシエータモードを使用するための変換基板 回路図です。基本機能に加えてRPIがイニシエータとなって物理HDDにコマンド を発行することが可能になります。モードの制御に追加で一つGPIOピンを消費 します。このイニシエータモードを使用したサンプルプログラムとしてrasdump を用意しました。実HDDやMOからイメージファイルにダンプすることができます。 オプションでリストア機能も使用できます。 ピンアサインのカスタマイズでPIN_INDに標準では7を設定してコンパイルする 必要があります。ピンアサインのカスタマイズを参照してください。 ・fullspec.png SCSIのターゲットモード、イニシエータモードに加えてSCSIの通信をモニター することができる変換基板回路図です。SCSIプロトコロルを解析する等の特殊 要件がある場合はこの回路が最適です。全ての74LS641-1の方向制御をRaSCSI から行いますのでGPIOピンを三つ余分に使用してしまいます。SCSIの開発に 興味があればこの回路を組んでみてはどうでしょうか。特徴としてGPIOピン を余分に使用する代わりに上のイニシエータモードが使用できる基板と比較 して74LS86が必要にならないため基板がシンプルになるという恩恵があります。 ピンアサインのカスタマイズで、PIN_TAD,PIN_IND,PIN_DTDにそれぞれ標準 では6,7,8を設定してコンパイルする必要があります。ピンアサインの カスタマイズを参照してください。 □既存のものを手に入れる方法 最近では主にTwitter界隈を通じてRaSCSI用の変換基板を作成していただいて いる方々がいらっしゃいます。 また秋葉原で委託販売されてます。 家電のKENCHAN 同人ハード(キット)のページ等です。 http://www.kadenken.com/shopbrand/ct76/" 現在のところ市販されているものとして ・BELさん開発のあいぼむ版 ・tomcatさん開発のGAMERnium版 があります。 □ピンアサインのカスタマイズ GPIOの信号制御論理やピンアサインはgpiobus.hとrascsidrv.cに定義があります。 定義が分かれているのはrascsidrv.cだけGPLなので敢えて分離しています。 御察し下さい。 カスタマイズ例としてgpiobus.hとrascsidrv.cに下記の二つの変換基板用定義例を 用意しました。配布物の中にはコンパイル済みバイナリも含まれています。 ・BELさん開発のあいぼむ版 ・tomcatさん開発のGAMERnium版 □カスタマイズ方法 ・RaSCSI起動時のメッセージです。 CONNECT_DESC ・信号制御モードを選択します。 SIGNAL_CONTROL_MODE 0:SCSI論理仕様 直結またはHPに公開した74LS641-1等を使用する変換基板 アーサート:0V ネゲート :オープンコレクタ出力(バスから切り離す) 1:負論理仕様(負論理->SCSI論理への変換基板を使用する場合) 現時点でこの仕様による変換基板は存在しません アーサート:0V -> (CONVERT) -> 0V ネゲート :3.3V -> (CONVERT) -> オープンコレクタ出力 2:正論理仕様(正論理->SCSI論理への変換基板を使用する場合) RaSCSI Adapter Rev.C @132sync等 アーサート:3.3V -> (CONVERT) -> 0V ネゲート :0V -> (CONVERT) -> オープンコレクタ出力 ・制御信号ピンアサイン PIN_ACT:SCSIコマンドを処理中の状態を示す信号のピン番号。 PIN_ENB:起動から終了の間の有効信号を示す信号のピン番号。 PIN_TAD:ターゲット信号(BSY,IO,CD,MSG,REG)の入出力方向を示す信号のピン番号。 PIN_IND:イニシーエータ信号(SEL,ATN,RST,ACK)の入出力方向を示す信号のピン番号。 PIN_DTD:データ信号(DT0...DT7,DP)の入出力方向を示す信号のピン番号。 ・制御信号出力論理 0V:FALSE 3.3V:TRUEで指定します。 ACT_ON:PIN_ACT信号の論理です。 ENB_ON:PIN_ENB信号の論理です。 TAD_IN:PIN_TAD入力方向時の論理です。 IND_IN:PIN_ENB入力方向時の論理です。 DTD_IN:PIN_ENB入力方向時の論理です。 ・SCSI信号ピンアサイン PIN_DT0〜PIN_SEL:それぞれSCSI信号のピン番号です。 □コンパイル方法 ・実行ファイル(rascsi,rasctl) gpiobus.hを修正 make clean make ・カーネルドライバ(rascsidrv.ko) @OS最新化(必要あれば) sudo apt-get update sudo apt-get upgrade sudo reboot Aカーネルヘッダー取得(必要あれば) sudo apt-get install raspberrypi-kernel-headers Bコンパイル cd kernelmodule rascsidrv.cの修正 make [EOF]