質問: arduinoやraspberry piにおけるspi通信の挙動について 電子工作向けのプログラミングの勉強をしておりますが、spi通信で気になることがあって質問させていただきました。 arduinoやraspberry pi向けのosに含まれるspi関連のapiを使うと、数バイトを一度に送受信することができます。 ただ、ウィキペディア英語版(https://en.wikipedia.org/wiki/serial_peripheral_interface_bus)によると、spi通信時は、1クロックで1ビットのデータの送信と受信が同時に行われていると解釈できます。また、ざっと調べる限り、picマイコンで送受信を同時に実装する場合、1バイト送信したら、1バイトの受信を待たないと正しく動作しないようです。 上記のようなapiを利用した送受信が機能しているのであれば、一方がマルチバイトデータを送信しているときは、同時に相手側の機器からもダミーのバイトデータを送信していると解釈してもよいのでしょうか。あるいは、一通りの受信が終わるまで相手側は待機状態に入っている、もしくは、対象の機器の挙動にたいしてケース・バイ・ケースで対応する必要があるのでしょうか。
回答: >spi通信時は、1クロックで1ビットのデータの送信と受信が同時に行われていると解釈できます。 そうですね >また、ざっと調べる限り、picマイコンで送受信を同時に実装する場合、 >1バイト送信したら、1バイトの受信を待たないと正しく動作しないようです。 それはそのモジュールだかがそういう作りになってるだけです。 大概は8ビットを1文字として、意味ないヌルコードなら受け取っても捨てればいいし それ以外のコードなら双方の約束に従って解釈し動作すればいい >あるいは、一通りの受信が終わるまで相手側は待機状態に入っている、 >もしくは、対象の機器の挙動にたいしてケース・バイ・ケースで対応する必要があるのでしょうか。 spi通信は「データ送受信」の信号形態を規定するものであり データの中身とかは規定してません。 送受信双方の設計者が自由自在勝手気ままに決めればいいです。