エレファイン

SPIモード



SPIモードでは、USB-ISSは、マスターのみでスレーブにすることはできません。スレーブデバイスに対し、SCKでクロック信号を供給します。
USB-ISSは、常にPCより送信されたバイト数と同じバイト数を返信します。
フォーマットは、シンプルです。

送信 SPI コマンド (0x61) 0x01 0x41
受信 ACK (0xFF) or NACK (0x00) 0xnn 0xnn
全てのバイトを1回のシーケンスでUSB-ISSに送信してください。各バイト間に間が空くとUSB-ISSの内部コマンド同期ループが初期化され、無視されてしまいます。
コマンドを含め、最大フレーム長は、63バイトです。

ここでは、Microchip社のSPI SRAM 23K256をSPIモードで使用した例を示します。
23K256は、5Vでは動作しないので、USB-ISSの電圧切り替えショートピンを外して、3.3V動作にしなければならないことに注意してください。

電源を入れると23K256は、デフォルトでバイトモードになっています。
ここでは、任意のバイト数を1フレームで読み出し・書き込みができるように変更します。ステータスレジスターに書き込むためのコマンドは、下記のとおりです。
送信 SPI コマンド (0x61) 0x01 0x41
受信 ACK (0xFF) or NACK (0x00) 0xnn 0xnn
3バイトのコマンドです。0x01は、23K256の「ステータスレジスター書き込み」コマンドです。0x41が新たにステータスレジスターへ書き込む値で、23K256のシーケンシャルモードにしてホールドを無効にします。
それに対して、USB-ISSより同じバイト数の返信があります。上記では、1バイト目のみが有用な情報で、あとの0xnnは無視してもいいです。

次にSRAMへ4バイトのデータを書き込みます。
送信 SPI command (0x61) 0x02 0x00 0x00 0x12 0x34 0x56 0x78
受信 ACK (0xFF) or NACK (0x00) 0xnn 0xnn 0xnn 0xnn 0xnn 0xnn 0xnn
この場合、SPIコマンドに続いて、23K256の書き込みコマンド0x02を初めに送ります。次にSRAMのアドレスを上位・下位の順で2バイトを送ります。その後、書き込むデータとして、0x12、0x34、0x56、0x78を送ります。

読み出しは下記のとおりです。
送信 SPI command (0x61) 0x03 0x00 0x00 0xnn 0xnn 0xnn 0xnn
受信 ACK (0xFF) or NACK (0x00) 0xnn 0xnn 0xnn 0x12 0x34 0x56 0x78
23K256の読み出しコマンド0x03に続いて、SRAMのアドレスを上位・下位の順で2バイトを送ります。その後、読み出すのと同じバイト数の任意のデータ(0x00等)も送らなければなりません。