CDC-SPI

SPI (Serial Peripheral Interface Bus)は、デバイス間で同期式のシリアル通信を行うための規格です。デバイスはマスタースレーブ方式によるシフトクロック制御でデータ転送を行います。マスターからの8つのクロック送出によってスレーブと1バイトのデータが交換されます。 SPI バスはマイクロコントローラ、EEPROM、センサーなど多くのデバイスに用いられています。



SPI によるデータ交信

CDC-SPI はロースピードの CDC プロトコルを用いた、非インテリジェント型の COM-SPI ブリッジです。AVR マイコンは、バイトデータをホスト PC から USB 経由で受け取り、MOSI 信号線に出力します。また同時に、MISO 信号線のデータ入力を受信し、ホストへ戻します。

使い方

インストール方法は CDC-232 と同じですが、ボーレートは任意の値で構いません。バイナリのデータを PC のターミナルソフトやアプリケーションから仮想 COM ポート経由で送ります。

CDC-SPI にはスレーブ選択信号が2つ(ATtiny45 版は1つ)あります 。 /SS0 はホストからのブレーク送出で、/SS1 は DTR 信号で制御します。この2つをデコードすれば4つまでのスレーブデバイスを切り替えられます。



ATtiny45 へ実装した CDC-SPI

回路図

SPI 信号線の抵抗は、短絡保護用です。異なる電圧のスレーブに接続するときは、高めの値(3〜10Kオーム)にしてください。

ATtiny45 版ではスレーブ選択にリセットピンを使います。これにより ISP での再書き込みはできなくなります。



CDC-SPI for ATtiny45-20

ATtiny461 版と ATtiny2313 版ではクロック周波数を選択できます。



CDC-SPI for ATtiny2313-20

ATmega 版では4つの SPI モード(クロック極性と位相)を切り替えられます。詳細はデータシートを参照してください。



CDC-SPI for ATmega8/48/88-20

プログラム例

デバイスをシステムに組み込む前に、SPI プロトコルを試したいときがあります。このプログラムでは SPI のやり取りをテストできます。仮想 COM ポートを通して /SS 制御とデータの送受信を行うだけのものです。

これは EEPROM 93C46(AT93C46D)にアクセスする例です。



EEPROM (93C46) のテスト

C:\cdcspi.2010-02-06\spitest\release>spitest 13

        CDC-SPI Tester by Osamu Tamura

 com13 < ss0 0
 com13 < ss0 1
 com13 < 2 60		; EWEN
 com13 > FF FF
 com13 < ss0 0
 com13 < ss0 1
 com13 < 3 1 0		; READ $01
 com13 > FF FF FF	; = FF
 com13 < ss0 0
 com13 < ss0 1
 com13 < 2 81 73	; WRITE $01 <= 73
 com13 > FF FF FF
 com13 < ss0 0
 com13 < ss0 1
 com13 < 3 1 0		; READ $01
 com13 > FF FF 73	; = 73
 com13 < ss0 0
 com13 < ss0 1
 com13 < 3 81		; ERASE $01
 com13 > FF FF
 com13 < ss0 0
 com13 < ss0 1
 com13 < 3 1 0		; READ $01
 com13 > FF FF FF	; = FF
 com13 < ss0 0
 com13 < ss0 1
 com13 < 2 0		; EWDS
 com13 > FF FF
 com13 < ss0 0
 com13 < q		; quit


SPI を用いた身近な例として、AVR マイコンへのシリアル書き込みがあります。この SPI ブリッジを使えば AVR マイコンを簡単にプログラムできます。 このプログラム例では、SPI 書き込み可能な ATtiny/ATmega にプログラムを書き込めます(AT90*** には対応していません)。



ATmega8 へのダウンロード例

C:\cdcspi.2010-02-06\spiprog\release>spiprog -c13 -f8FFF spimega8.hex

        CDC-SPI AVR Programmer Ver. 0.5 by Osamu Tamura

        Signature:      1E-93-07  (Flash 8KB, Page 32words)
        LockBits:       FF
        FuseBits:       FF-8F-FF

        2226 bytes loaded.

        Device erased.
        Writing ................................... done.
        Verifying ................................... done.
        Writing FuseBits [8F-FF] ... done.

        2240 bytes programmed successfully.


CDC-SPI は、汎用の COM-SPI ブリッジです。AVR へのプログラムでは、1バイトの書き込みに往復で8バイトの USB データ転送を要します。書き込み用途のみを目的とされる方は、USBasp など他のプロジェクトを検討してください。

ソースコード、HEX ファイル、回路図やサンプルはダウンロードページに置いてあります。

テンプレートのpondt