Raspberry PiはどのSPI周波数をサポートしていますか?


22

Raspberry PiはどのSPI周波数をサポートしていますか?

さらに:

  • それらはすべてbootc.net SPIドライバーでサポートされていますか?
  • SPIを介して他のチップと通信しようとする際に注意すべき追加の事項はありますか?

回答:


21

Raspberry Pi SPIはAPBクロック速度で動作します。これは、コアクロック速度である250 MHzと同等です。これは、2〜65536の任意の偶数で除算して、目的の速度にすることができます。データシートでは、除数は2のべき乗でなければならないが、これは間違っています。奇数は切り捨てられ、0(または1)は65536に相当します。したがって、2より小さい除数は不可能です。

これにより、周波数範囲は3.814 kHz〜125 MHzで、間に32768ステップがあります。

(この問題に関して多くの誤った情報がありましたが、これらの結果は実験によって検証されました。その言葉を広めてください。)


1
この答えは一番上にあるべきだと思います。
ジョンワット

これ本気か?ゴードンは、あなたがそれを偶数で供給できるが、実際には違いがあるのは2のべき乗だけだと断言します:Raspberry PiのSPIを理解する| ゴードンプロジェクト
スクラブ

3
これをオシロスコープでテストしました。Gordonの問題は、カーネルドライバーを使用せずにプロセッサに直接命令するのではなく、クロックスピードを乱すカーネルドライバーを使用していることだと思います。
裸の

2
このフォーラムスレッドは、Nakedibleの答えを証明するための詳細情報を提供します:raspberrypi.org/phpBB3/…–
Nippey

5

SPIはコアクロック速度で実行するか、より遅い周辺機器用に分割できます。コアクロックは250 MHzです。分周器は、2 ^ 0から2 ^ 16までの2の累乗に設定できます。これは、3.8 kHz〜250 MHzのSPI周波数がサポートされることを意味します。

ソース:


1
たぶん-FarhadはRPiの実際のSoCであるBCM2835のデータシートから調達していますが、私の参考はSoCの一部であるBCM2708についてです。ソースは収束する可能性がありますが、その後再び収束しない可能性があります。だから、今のところ代替ソースを保存する方が良いと思う。
マリアズベリナ

1
ああ、area51には、質問ごとに1.7の回答があると記載されており、「質問ごとに2.5の回答が良い、質問ごとに1つの回答だけが何らかの作業を必要とします。:-)
マリアズベリナ

1
不正解:2 ^ 0はサポートされておらず、分周器は2の累乗である必要はありません。
裸の

1
@Nakedibleステートメントのソースを提供できますか?
マリアズベリナ

1
bcm2835データシートは2 ^ 0ポイントを確認します。raspberrypi.org/wp-content/uploads/2012/02/…これは、bcm2835ライブラリの定義によっても確認されています。open.com.au/mikem/bcm2835 2つの除数の非累乗に関しては、データシートの正誤表には、おそらく2の倍数が意味されていると記載されています。elinux.org/BCM2835_datasheet_errataこれはいくつかのフォーラムにも投稿されており、2の倍数が機能しているようです。このすべては、実際のハードウェアでSPI出力をテストすることでも確認されています。これを正確に指定する以下の私の答えを参照してください。
-Nakedible

4

BCM2835データシートには、120ページに次のように記載されています。SPIブロックのクロックレジスタの値が含まれています。

BCクロック分周器SCLK =コアクロック/ CDIV CDIVが0に設定されている場合、除数は65536です。除数は2の累乗でなければなりません。奇数は切り捨てられます。最大SPIクロックレートはAPBクロックです。

APBバスの最大周波数とは何なのか参照できません。これはこのSoCではなくARM11のドキュメントの一部だと思います。


1
参照いただきありがとうございます。ページは156ですか?CDIVは16b幅のようで、1から65536になります。「コアクロック」はおそらく700MHzですか。それで、10.7kHzから神秘的なAPB制限までの範囲を取得できますか?
akavel

1
どういたしまして。ただし、この時計はコア時計ではありません。APBバス:「APBは、システム周辺機器のレジスタインターフェイスなど、低帯域幅の制御アクセス用に設計されています。このバスには、AHBに似たアドレスとデータフェーズがありますが、信号リストは大幅に削減され、複雑性が低くなります(バーストなしなど) )。32ビットおよび66MHz信号をサポートする必要があります。」
-FarhadA

4

私はhttp://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.htmlで見られるようにテストし、速度を変更しました。

テストに合格したときの最大速度は15MHz = 15000KHzです:結果を参照してください:

spi mode: 0
bits per word: 8
max speed: 15000000 Hz (15000 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

16MHzでのテストに失敗しました。アンドレ


1
私は32MHz = 32,000KHzで問題なく動作しました。ここでも、これが実際的な制限あると述べました。Raspbianハードフロートで最新のRPiファームウェアを実行している場合、それが違いを生みます。
-dodgy_coder

RPi 3が60MHzでそのテストを正常に実行している。
Vlad
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.