I2Cのマスタモードの使い方


【マスタモードの使い方】

MSSPをマスタモードで使うときには、SSPCON1レジスタのSSPMビットを
セットします。これでマスターモードとなり、下記の処理が必要となります。

 ・Start Conditionの発行
 ・Repeated Start Conditionの発行
 ・アドレスとデータ送信のためのSSPBUFへのアクセス
 ・データ受信毎のACK発行
 ・Stop Conditionの発行
 ・データ受信のためのConfiguration

そしてこれを制御するために、下記のイベントが発生します。
 ・Start Condition発行終了
 ・Stop Condition発行終了
 ・データの送受信完了
 ・ACKの送信完了
 ・Repeated Start Conditionの発行完了

そしてマスタモードの時のMSSTの動作は下記ブロックのようになります。
まず(BRG)Boud Rate Generatorは指定された速度でのクロック信号を発生し、SCL
ラインに出力します。その出力は一定のシーケンスで制御されてピンに出力されます。
このBRGにセットするデータはSSPADDレジスタにあらかじめセットしておけば自動的に
BRGに転送されます。
アドレスや送信データをプログラムでSSPBUFにセットすると、あとは自動的にSSPSR
に転送され、クロックに従って順次データピンSDAに出力されます。
Start ConditionやStop Conditionはプログラムの指示に従って出力されます。
マルチマスターモードをサポートするために衝突検出回路が設けられており、衝突を
検出するとプログラムに通知し、衝突時のリトライ処理をすることができます。







【送信時の動作概要】

マスタモードで送信をするときは、すべてマスタ側のプログラムで制御することに
なります。その手順は下記のようになります。

(1) まずStart Conditionを発行するため、SSPCON2のSENをセットします。
(2) 発行が終了するとSSPIFがONとなり、割込みが発生します。
(3) 一定時間内にスレーブアドレスをSSPBUFに書き込み送信を開始します。
(4) 送信が完了すると割込みが発生するので、スレーブ側からACKが返送されて
  いることをSSOCON2のACKSTATが0となっていることで確認します。
(5) 次に送信データをSSPBUFにセットすれば送信が開始されます。
(6) 送信が完了すると割込みが発生するので、このときスレーブ側からACKが
  返送されているかをACSTATで確認します。
  このデータ送信をすべてのデータが完了するまで繰り返します。
(7) データ送信が完了したらStop Condition発行のためにSSPCON2のPENビット
  をセットします。
  または、次の送信を開始するために、RSENビットをセットしてRepeated Start
   Conditionを発行します。
(8) 正常にStop ConditionまたはRepeated Start Conditionの発行が完了すれば
  割込みが発生することで確認します。




【プログラム例】

全ページのスレーブに対応するマスタ側で、USARTでパソコンと接続して
コマンドの送受信を行います。I2Cで複数のスレーブを接続し、アドレスに
よって区別して送受信を行います。

パソコンからのコマンドにより下記の動作を行います。

@ w<アドレス>コマンド
 改行コードに続き、30Hから32文字を、<アドレス>で指定されたスレーブ
 に送信します
A r<アドレス>
 アドレスで指定されたスレーブに送信要求をしてデータを受信し、32個の
 文字を受信して、受信したデータをパソコンにUSARTで送信します。


下記が上記を実現したプログラム例です。

(a) 初期設定とメインループ
 メインループでは、パソコンからのコマンド待ちをしています。



(b) 送信処理部
 改行コード+32文字のデータを送信しています。



(c) 受信処理部
 受信した文字データをパソコンに送信しています。
終了は、マスタからSTOPシーケンスを発行することで行います。



下記がマスタのプログラムファイルです。ダウンロードしてお使い下さい。

★ I2Cマスタ側プログラム(i2cmaster4.asm)



  トップページへ