2022.12.11
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第126回]



●PICUSBIO−03(75)SPIモード(7)スレーブモード

前回までSPIマスターモードについて書いてきました。
SPIにはスレーブモードもありますがData Sheetの説明がいまひとつわかりにくいために後回しにしてきました。
しかしこのままパスしてしまうわけにはいきませんでしょう。
マスターモードについては一通り終りましたので、このあたりで覚悟を決めてスレーブモードに取り掛かることにいたします。

下はスレーブモードの説明です。

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

スレーブモードではデータの送受信はSCK端子に外部からクロックが入力されたときに行なわれます。
(受信データの)最後のビットがラッチされるとSSPIFフラグビットがセットされます。
上記説明文のBefore enabling the module ... by the CKP bit of the SSPCON1 register.
のところはちょっとよくわかりません。
SPIスレーブモードを使用可能にする前にCLKラインの極性を(マスターの設定に)一致させる必要がある、と書いてあります。
それはその通りですけれど問題はその次です。
CLKラインはSCK端子を読めばわかる、って。
それじゃあ先にマスターの方がスタートしてることになりませんかねえ。
普通はシステムを考える段階でCLKラインの極性を合わせるのは当然のことと思いますけれど。

右側の説明です。
SS端子を使うことで同期スレーブモードになります。
それにはSSPCON1<3:0>=0100に設定しなければなりません。
SS端子がLのとき入出力が可能になりSDO端子が有功になります。
SS端子がHになるとSDO出力は行なわれなくなり、たとえデータ出力の途中でも出力はハイインピーダンスになります。
アプリケーションによっては外部にプルアップ/プルダウン抵抗が必要になるかもしれません。

Note1:SPIがSS端子を使うスレーブモードのとき(SSPCON1<3:0>=0100)にはSS端子をVddレベルにするとSPIモジュールがリセットされます。
Note2:SPIスレーブモードでCKE=1にするときはSSによる制御を有効にする必要があります(この説明は意味深です)。

SPIモジュールがリセットされるとき(シフトレジスタの)ビットカウンタは強制的に’0’にされます。
SS端子を強制的にHレベルにするかSSPCON1レジスタのSSPENビットをクリアすることでSPIモジュールをリセットできます。

FIGURE15−5(CKE=0)とFIGURE15−6(CKE=1)はCKEの設定によってSSによる制御が必要かそうでないかを示しています。

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

FIGURE15−6(CKE=1)ではSS制御はNot Optional(必須)と書かれています。
CKE=1のときにはSDOへのデータ出力は最初のクロックの入力前に開始しなければなりません。
スレーブモードでは送信データはSCKが入力される前にSSPBUFに書いておきなさいということでしょうか。
そうしたとしてもSDOからはクロックが入力されなければ出力されないはず。
FIGURE15−6ではSDOから最初のデータビットを送出するためにSS入力が使われるということを示しているようです。
そのように読み取れるのですが。
これはやっぱりプログラムを作って確認してみなければいけないようです。

PIC−USBIO using BASIC[第126回]
2022.12.11upload

前へ
次へ
ホームページトップへ戻る