スパイス  組み込み制御装置の受注製作

自社標準仕様の製作
平成27年12月 19日

 汎用の高速シリアル通信機能(28)  SPI仕様の検討(4)

    Asciiモードの廃止
 SPI通信の相手としてSPIスレーブ仕様のマイコンを想定した通信仕様がAsciiモードです。
特定の文字を終端文字として定義し、送受信する文字数を特に受信側が知らなくても正しく受信できるように工夫したものです
(送信側は送信段階では送信する文字数を認識出来ます)。
Asciiモードと読んでいる理由は、データ中に特定の文字を含めることが出来ない用途では、通信データを可読性のあるアスキー文字に限定するか、エスケープ文字を使用して特殊なフォーマットを使うかのいずれかになるためです。どちらにしても送信する文字数はBinaryモードよりも増えることになります。

しかし、マスタの受信(スレーブからの送信)では、この仕様でも上手くいかない問題が見つかったので、この方法は採用できませんでした。
残りはマスタが送信でスレーブが受信のケースです。このケースでも受信側のスレーブで受信の終了(=マスタ送信の終了)を端的に認識することが出来れば、Asciiモードを使用する必要性が無くなります。文字数の削減は即通信時間の削減になりますので非常に魅力的です。

 で何か方法はないかとボンヤリと考えていた所、ありました。
SPIのCS信号を使用します。この信号は通信の開始前にアクティブ化(Lowレベル)され、通信が終了した後にネガティブ化(Highレベル)されます。
従って、この信号の立ち上がりを検出できるなら、受信の完了を即時に知ることが出来ます。信号の立ち上がり変化を認識して割り込みを起こせば良い。
CS信号はSPI通信が複数基板に分かれた場合でも、必ず受信側の基板内で作られます。このため基板間での通信線の増加はありません。スレーブ側CPUにSPIのCS信号から直接割り込みを発生する機能か、信号の立ち上がりで外部割込みを受け付ける機能があれば良い。

 幸いPIC32には外部割込みピンがあり、最小の28ピンパッケージでも1本だけ外部入力が使えます。
この外部割込みとSPIを組み合わせることでスレーブ側SPI機能を実現します。

 このCS信号による割り込みはマスタとスレーブの同期を取るのにも使えます。何らかの理由でマスタとスレーブの送受信の同期が狂った場合、マスタはCS信号をアクティブ化し、1バイトも送受信することなくネガティブ化します。これを検出したスレーブは、通信動作を初期化して送受信動作を最初から始めます。
 この仕様で気をつけることは。CS信号を切り替えるときにヒゲ状のパルスが出ないようにする必要があります。
具体的には、CS信号の作成にデコード回路を使用しているのなら、ある値(CS選択)から別の値に切り替えるとき、一旦全ての選択信号をOFFする値に選択信号を設定した後で次の選択信号の値に変更します。


 このように通信するモードをBinaryモードと区別するためにCPUモードと呼ぶことにします。



目次へ  前へ  次へ