rasp_mcp3208_ph4502c


mcp3208_rasp


改めてSPIについてを知る2までの記事でSPI通信の理解を深めている。

SPI通信はCPUを持ち、自身で演算を行うコンピュータ(以後マイコンとする)と


P1119586a

AD変換器の基準電圧とは何だろう?


AD変換器のようなモジュールがマイコンから電力の供給を得て、マイコンが生成するクロック(リズミカルなHIGHとLOWの切り替え)を受け、それに応じて値を返す通信で有ることがわかった。


SPI_three_slaves2

en:User:Cburnett - 投稿者自身による作品 このW3C-unspecified ベクター画像Inkscapeで作成されました ., CC 表示-継承 3.0, リンクによる


SPI通信では一つのマイコン(マスター)に対して、複数のスレーブを繋げる事が出来、各々のスレーブにはSSのピン同士を繋ぐ。

マスター側ではスレーブ分だけGPIOピンを確保しなければならない。

冒頭の図では、Raspberry Piがマスターになり、MCP3208(AD変換器)がスレーブとなる。


これらを踏まえて、SPI通信の詳細を見ていこう。




SPI_8-bit_circular_transfer

I, Cburnett, CC 表示-継承 3.0, リンクによる


SPI通信の大まかな流れ(8ビット)は、上の図のようにマスター(Master)からMOSI(マスターの時は出力で、スレーブの時は入力)を介して、スレーブ(Slave)にデータを送信する。

スレーブからはMISO(マスターの時は入力で、スレーブの時は出力)を介してマスターにデータを送信する。

この時の繋がりはシフトレジスタでリンクバッファーのようになっている。

改めてSPIについてを知る2

データ構造のキューとリングバッファを見る


互いの 0 の箇所はLSB(Least Significant Bit:最下位ビット)と呼ばれ、7 の箇所はMSB(Most Significant Bit ?:最上位ビット)と呼ぶ。


上の図ではマスター側でデータの読み込みを行う時は最初の8ビットは自身のデータである為、読み込みをスルーして、9ビット目から18ビット目まで読み込む。

※厳密には他に役割のあるビットが挿入されているので上記程単純にはならない。

※下記のリンクはRaspberry Piと12ビットのAD変換器とSPI通信を行うためのコードが記載されている。

https://gist.github.com/takakabe/c4fc67451f3908b500413fcac3fadffb


次にシフトレジスタがどのように発生しているか?やSSの意味は何か?に触れていきたいが、それは次回の記事で整理することにする。