質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

0回答

2368閲覧

spidev:Linux環境下のSPI通信がわからない

Ykkykk

総合スコア140

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2021/06/04 00:07

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から受信データ回収ですが、省略

初歩的なことで申し訳ありませんがご教示いただけますと幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問