PICマイコンのSSPモジュールを使用して「SPI通信」をする方法(マスタ側)を、ざっくりとまとめてみました。
SSPモジュールの設定(SPIマスタの場合)
データを送受信する前に、SSPモジュールの設定を行う必要があります。
設定する必要があるレジスタは、主に「SSPSTAT」「SSPCON」のふたつです。
設定する項目は「SMP」「CKE」「SSPEN」「CKP」「SSPM3~0」です。
- SMP → 入力データのサンプリングタイミング設定
- CKEとCKP → SPIモードの設定
- SSPEN → SSPモジュルの許可("1"とする)
- SSPM3~0 → SSPモジュルの動作モードとクロック設定
他にも、TRISレジスタによって、SPI通信に使用するピンの入出力方向を設定しておく必要があります。
マスタ側なので、
- SCK:出力
- SDO:出力
- SDI:入力
- CS:出力
とします。CSはSSPモジュルで操作されるものではなく、汎用出力として使用します。
(関連記事:PICマイコンでのSPI通信(SSP) SPIの"モード”設定のやり方)
(関連記事:SPI通信は「モード」に注意! SPI通信は4種類ある!)
データの送受信のやりかた(マスタ側)
PICの内蔵モジュールを使用して、SPI通信にて1byteを送受信する手順は以下の通りです。
SPIでデータ送受信する手順(マスタ側、1byte分)
- 「SSPBUF」に送信データを書き込む
→書き込むと、クロックが出力されて送受信が開始される - SSPIFが"1"となるまで待つ
- SSPIFが"1"となったら、SSPBUFから受信データを読み出す
- SSPIFをクリアする
Nバイト分、送受信したい場合には、これをN回繰り返します。
また、通信の開始と終わりには、CS(チップセレクト)を操作します。通信の開始時にCSを有効側にセットし、通信終了時にCSを無効側にセットします。CSは負論理であることが多いですが、正論理のICもあります。
全体としては、こんなイメージになります。CSは負論理、3byteのデータを送受信する場合です。
「1byte分」のブロックは、上記の「1byteを送受信する手順」を示します。
0 件のコメント:
コメントを投稿