0FFF
Posts: 1
Joined: Wed Nov 28, 2018 7:55 am

SPI通信の通信間隔の変更方法

Wed Nov 28, 2018 8:52 am

初めまして。
初めての投稿で何かと至らぬ点も多々あるかと思いますが、何卒よろしくお願いします。

現在、3バイトのSPI通信を複数回に分けて連続で行うプログラムを書いているのですが、
いざ実行すると3バイトの通信と通信の間に90~100usの間隔があります。
CSがHighになっている区間だけで80usはあります。通信速度(3MHz)に対して遅すぎるように思えます。
この間隔を減らす方法はありますでしょうか。通信速度自体は正常です。

通信はioctl(xxx, SPI_IOC_MESSAGE(1), xxx)で行い、spi_ioc_transferのlenは3,delay_usecsは0です。
ioctlのループだけで回しても結果は同様でした。

機種はRaspberry Pi Zero W、OSはRaspbian Stretch / 2018-06-27で、
カーネルはリアルタイムカーネル(PREEMPT_RT)を適用した4.14.81-rt47+です。

どうかよろしくお願いいたします。

otani
Posts: 52
Joined: Fri Dec 13, 2013 4:18 am

Re: SPI通信の通信間隔の変更方法

Thu Nov 29, 2018 7:01 am

以前 MCP3208の3バイト転送で8chアナログデータロガーを作りました。
https://toragi.cqpub.co.jp/Portals/0/ba ... 7/p098.pdf
ソースコードは、出版社のダウンロードページから落とせます。

問題はSPIドライバでしてRaspiの世界では結構有名です。
Forumを "SPI driver latency and a possible solution" で検索してみてください。
対処方法はスレッドの中にあります。
viewtopic.php?p=1115408
ソースを変えて再コンパイルでしょうか。

または、別の対処方法は、SPIレジスタを直接叩く 
Faster SPI こちらは評判がいいみたいです。
viewtopic.php?t=84159

ちなみにICは何を使われるのでしょうか?
あとは、クロックを上げられれば相対的に転送速度が上げる。
一回のCS制御の転送バイト数を増やす、など。
頑張ってください。

Return to “日本語”