Raspberry piでSPI通信を試しております。何点か不明なことがあり、調べてもわからなかったため、お尋ねさせてください。
使用しているライブラリはspidevです。
### 質問1
Linux環境では、チップセレクトを手動で行うことはできないのでしょうか?データ送受信の前にプログラミングでピンの極性を変更したいのですが、Linuxのドキュメントサイトには下記のように記してありましたので、不可能なのかと思っているのですが、いかがでしょうか。
• From userspace, you can’t currently change the chip select polarity; that could corrupt transfers to other devices sharing the SPI bus. Each SPI device is deselected when it’s not in active use, allowing other drivers to talk to other devices.
質問2
Armadilloのポータルサイトでは、SPIドライバによって一度に転送可能なバイト数が異なるという記述があり、送信バイト数に制限がある場合はデータを分割して送信しなければいけないようです。その場合、受信する際にはどのようにデータは返ってくる/受け取るのでしょうか。
Armadilloポータルサイトリンク
上記リンクから引用したものが下記のソースコードです。rx_bufにはどのようにデータが入ってくるのでしょうか。rx_bufも複数に分割されて受信することになりますでしょうか。
unsigned char tx_buf[24] = { 0 }; unsigned char rx_buf[24] = { 0 }; struct spi_ioc_transfer tr[3]; // ここでtx_bufにデータ格納ですが、省略 for (int i = 0; i < 3; i++) { tr[i].tx_buf = (unsigned long)tx_buf + i * 8; tr[i].rx_buf = (unsigned long)rx_buf + i * 8; tr[i].len = 8; tr[i].delay_usecs = 0; tr[i].speed_hz = spi_speed; tr[i].bits_per_word = spi_bits; } int ret = ioctl(fd_spi, SPI_IOC_MESSAGE(3), tr); // このioctlの戻り値は送受信したバイト数。エラー時は負。 if (ret < 0) { pabort("spi_transfer"); } // ここでrx_bufから受信データ回収ですが、省略
初歩的なことで申し訳ありませんがご教示いただけますと幸いです。よろしくお願いいたします。
あなたの回答
tips
プレビュー