2012/04/30

SPIのマスター受信

FM3基板とは関係ないが、ちょっと思い出したので書いておこう。
SPIでマスターが受信するときのことだ。

 

SPIは、マスターがクロックを出す。
送信も受信もだ。

自分が送信するときは、送信レジスタに値を書き込むと、SPI処理部がクロックを出しながら送信してくれる。
それはいい。

では受信。
受信は、マスターがクロックを出すとスレーブがデータを送ってくる。
何も考えなければ、クロック送信→受信レジスタを読む、という処理でよさそうだ。
しかし、私の知っている範囲では「クロック送信」というレジスタはない。
じゃあ受信レジスタだけ読めばいいかというと、もちろんそんなことしてもデータは入っていない。

どうしたらいい?

答は簡単で「ダミーデータを送信する」だ。
最初に書いたが、送信レジスタに値を書き込むと、クロックを出す。
スレーブはそのクロックに合わせてデータを送信する。
だから、ダミーデータの送信が終わると、受信レジスタに値が入っていることになる。

つまりまあ、送信と受信は同時に行われるのだな。
UARTやI2Cと違った動きなので、それはそれで面白い。

 

個人的には、SPIが一番手間のかからんシリアル通信だという印象を持っている。
UARTはパソコンとかとやりとりしやすいけど、調歩同期ってのが苦手だ(私が)。
I2Cは線が2本でいいしアドレスごとにやりとりできるからよさそうだけど、デバッグすると誰が悪さをしているのかさっぱりわからない。

RC-S620/SもSPI対応したものがあると手軽なんだけどなー、とは思うが、今はUSB-シリアル変換チップを使ってPCから簡単に制御できることを考えると、UARTも捨てがたいとは思う。
悩ましい限りだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。