トップページ > dsPIC入門 > dsPICでSPI通信(1)

SPIとは?

SPIの基礎知識

SPIは“Serial Peripheral Interface”(シリアル・ペリフェラル・インターフェース:周辺機器接続用シリアル通信) の略で、主に同一基板上の部品と通信するために用いられる通信方法です。UARTのように距離が離れている装置間では 用いられませんが、同期式なので高速にデータ転送することができます。 (「同期式」については、シリアル通信についての項参照です) SPIを利用するのは、マイコンにつなぐ何らかの モジュールがSPI接続だったから・・・という場合が多いのかもしれません。

おなじ同期式シリアルのI2Cと異なる点は、信号線が送信用と受信用で別になっているところです。 I2Cは“送受信共通の信号線+クロック信号線”の2本でしたが、SPIは“送信用信号線+受信用信号線+クロック信号線” の3本となっています。また、SPIで1対1の通信ではなく複数の相手と通信する場合は、相手デバイスを選択する 信号線(チップ・イネーブル信号というか・・・)を追加することになります。マスターとスレーブの関係も含めて、 以下で詳しく見ていきます。

SPI通信の回路構成:1マスター、1スレーブの場合

例として、2つのdsPICをSPIでつなぐ場合を考えます。dsPICには1つ、もしくは2つのSPIモジュールが入っています。 SPIモジュールは、自動でクロック生成、データ送受信を行ってくれるので SPIの通信規格を意識せずにプログラムを書くことができます。SPIのデータ受信用ピンには、“SDI1”という 名前がついていて、SPIのデータ送信用ピンには“SDO1”という名前がついています。そして、クロック 信号ピンは“SCK1”です。2チャンネル分のSPIモジュールが入っているdsPICには、“SDI2”、“SDO2”、“SCK2”… という名前のピンもあり、2チャンネル側の通信にはこれらのピンを使用します。

上の図では、単純に2つのdsPIC間でSPI通信をするので、SDI1とSDO1を互い違いに接続して、SCK1はそのまま接続しています。 SPI通信用のピンは、dsPIC内の他の機能に用いるピンと重なってしまっていることが多く、SPIを使用するときは 同じピンに割りふられている機能は使えません。(30F4012の場合、I/OやI2Cなどがダブっています)

dsPICに内蔵されているSPIモジュールの中身はシフトレジスタのようなものです。クロック線のクロックに合わせて 送信側からシリアルデータが順次出されていき、受信側ではそれをパラレルデータとしてdsPIC内部バスへ出力します。
よって、信号伝送のタイミングはクロックを出す側が決めることになります。このクロックを決める側がマスターです。 クロックを受信してそのタイミングに従いデータを送受信する側がスレーブです。

クロック信号はお互いが動作する周波数内で設定する必要があります。また、マイコンと何らかの外部モジュールを 接続する場合はマイコンがマスタとなりますが、その場合は外部モジュールのデータシートなどを見てクロック周波数を 設定するようにします。

SPI通信の回路構成:1マスター、複数スレーブの場合

1つのマスターに対して、複数のスレーブを接続することができます。この場合は、マスターと通信する相手を特定する ためにもう一本信号線が必要になります。dsPICには“/SS”というピンがあり、これがSPI通信をする・しないを決定 します。“/”は負論理を表します。よって、/SSピンが“L”レベルの時にそのスレーブは有効となります。 マスター側は、選択する相手の数だけの汎用ポートをあらかじめ用意しておき、それぞれのスレーブへつなぎます。

I2Cではデータを転送する前にスレーブのアドレスを送信していたため、このような回路構成にはなりませんでした。 ・・・が、SPIのこの回路構成のほうが確実というか、デバッグはラクです。

また、“/SS”ピンの有効・無効はプログラムで指定できるので、別に/SSピンを使わなくても汎用ポートを使って プログラムから手動で読み取る手も考えられます。モジュールの設定がゴチャゴチャして嫌な場合は、/SSピンを無理に 使わなくても良いと思います。。。




戻る   次へ