------------------------------------------------------------------------------ SCSI Target Emulator RaSCSI for Raspberry Pi Powered by XM6 TypeG Technology. Copyright (C) 2016-2020 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ディレクトリに含まれる バイナリを使用することが可能です。 ・fullspec.png SCSIのターゲットモード、イニシエータモードを利用できる変換基板回路図です。 全ての74LS641-1の方向制御をRaSCSIから行いますのでGPIOピンを三つ余分に使用 してしまいます。 ピンアサインのカスタマイズで、PIN_TAD,PIN_IND,PIN_DTDにそれぞれ標準 では6,7,8を設定してコンパイルする必要があります。ピンアサインの カスタマイズを参照してください。 □既存のものを手に入れる方法 最近では主にTwitter界隈を通じてRaSCSI用の変換基板を作成していただいて いる方々がいらっしゃいます。直ぐに見つかると思いますのでここでの紹介 は省略します。時期は未定ですが公式版の有償頒布を計画しています。 □ピンアサインのカスタマイズ GPIOの信号制御論理やピンアサインはgpiobus.hに定義があります。 カスタマイズ例としてgpiobus.hに下記の二つの変換基板用定義例を用意しました。 配布物の中にはコンパイル済みバイナリも含まれています。 ・あいぼむ版 ・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 [EOF]