Welche SPI-Frequenzen unterstützt Raspberry Pi?

22

Welche SPI- Frequenzen unterstützt Raspberry Pi?

Zusätzlich:

  • Werden sie alle vom bootc.net SPI-Treiber unterstützt ?
  • Gibt es zusätzliche Dinge, bei denen ich vorsichtig sein sollte, wenn ich versuche, mit einem anderen Chip über SPI zu kommunizieren?
akavel
quelle

Antworten:

20

Der Raspberry Pi SPI läuft mit APB-Takt, was einer Kerntaktrate von 250 MHz entspricht. Dies kann durch eine gerade Zahl von 2 bis 65536 für die gewünschte Geschwindigkeit geteilt werden. Das Datenblatt gibt an, dass der Divisor eine Zweierpotenz sein muss, dies ist jedoch falsch . Ungerade Zahlen werden abgerundet und 0 (oder 1) entspricht 65536. Ein Divisor kleiner als 2 ist daher nicht möglich.

Dies macht den Frequenzbereich von 3,814 kHz bis 125 MHz mit 32768 Schritten dazwischen.

(Es gab viele Fehlinformationen in dieser Angelegenheit, aber diese Ergebnisse wurden durch Experimente bestätigt. Bitte verbreiten Sie das Wort.)

Nakedible
quelle
1
Ich denke, diese Antwort sollte ganz oben stehen.
Jon Watte
Bist du dir da sicher? Gordon behauptet, dass, obwohl Sie eine gerade Zahl füttern können, nur Zweierpotenzen tatsächlich einen Unterschied machen: SPI auf dem Raspberry Pi | verstehen Gordons Projects
scruss
2
Ich habe das mit einem Oszilloskop getestet. Ich denke, das Problem bei Gordon ist, dass er den Kerneltreiber verwendet, der die Taktrate beeinträchtigt, anstatt den Prozessor direkt zu steuern, ohne den Kerneltreiber zu verwenden.
Nakedible
2
Dieser Forum-Thread bietet weitere Informationen, um die Antwort von Nakedible zu beweisen: raspberrypi.org/phpBB3/…
Nippey
5

Der SPI kann mit der Kerntaktrate ausgeführt oder für langsamere Peripheriegeräte heruntergeteilt werden. Der Kerntakt ist 250 MHz. Der Teiler kann auf eine beliebige Zweierpotenz eingestellt werden - von 2 ^ 0 bis 2 ^ 16. Dies bedeutet, dass SPI-Frequenzen von 3,8 kHz bis 250 MHz unterstützt werden.

Quellen:

Maria Zverina
quelle
Wäre dies eine bessere Bearbeitung für FarhadAs Post? Oder erläutern Sie kurz die Kernuhr usw.
Alex Chamberlain,
1
Vielleicht - Farhad bezieht Datenblätter für BCM2835, bei dem es sich um den tatsächlichen SoC für RPi handelt, und meine Referenz bezieht sich auf den BCM2708, der nur ein Teil des SoC ist. Die Quellen könnten konvergieren ... aber sie könnten es auch nicht. Daher denke ich, dass es besser ist, alternative Quellen vorerst aufzubewahren.
Maria Zverina
1
Oh und area51 listet uns mit 1,7 Antworten pro Frage auf und gibt an: "2,5 Antworten pro Frage sind gut, nur 1 Antwort pro Frage erfordert etwas Arbeit. In einer gesunden Site erhalten Fragen mehrere Antworten und die beste Antwort wird nach oben gewählt." :-)
Maria Zverina
@MariaZverina: Scheiße, ich war verwirrt, warum die Treiber-Quelldateien als 'bcm2708' markiert sind, während RasPi BCM2835 verwenden soll - Sie sagen also, dies sind zwei verwandte Spezifikationen, die zusätzlich Inkonsistenzen aufweisen ??? Mann, das ist eine echte wtf Frage zu übermitteln ... raspberrypi.stackexchange.com/questions/840/…
akavel
Ich denke, BCM2708 ist die CPU-Komponente, die Teil des BCM2835 ist, das SoC (System on a Chip) ist. Aber es ist wirklich schwer, eine maßgebliche Quelle dafür zu finden ...
Maria Zverina
4

Im Datenblatt des BCM2835 heißt es auf Seite 120: Der Wert des Taktregisters des SPI-Blocks enthält.

BC Clock Divider SCLK = Kerntakt / CDIV Wenn CDIV auf 0 gesetzt ist, ist der Divisor 65536. Der Divisor muss eine Potenz von 2 sein. Ungerade Zahlen, abgerundet. Die maximale SPI-Taktrate ist der APB-Takt.

Ich kann keinen Hinweis auf die maximale Frequenz des APB-Busses finden. Ich denke, dies ist Teil der ARM11-Dokumentation und nicht dieses SoC.

FarhadA
quelle
1
Danke für den Hinweis; Ich glaube die Seite ist 156? CDIV scheint 16b breit zu sein, geht also von 1 auf 65536. "Kerntakt" ist wohl der 700MHz? Wir würden also eine Reichweite von ~ 10,7 kHz bis zur mysteriösen APB-Grenze erreichen?
Akavel
1
Sie sind herzlich willkommen, aber ich fürchte, diese Uhr ist nicht die Kernuhr. Es handelt sich um den APB-Bus: "APB ist für Steuerzugriffe mit geringer Bandbreite ausgelegt, z. B. Registerschnittstellen an Systemperipheriegeräten. Dieser Bus hat eine AHB-ähnliche Adress- und Datenphase, jedoch eine stark reduzierte Signalliste mit geringer Komplexität (z. B. keine Bursts) ). Es muss 32-Bit- und 66-MHz-Signale unterstützen. "
FarhadA
4

Ich habe mit dem wie auf http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html gesehen getestet und die Geschwindigkeit geändert.

Die maximale Geschwindigkeit bei bestandenem Test beträgt 15MHz = 15000KHz: Siehe Ergebnis:

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

Der Test bei 16MHz ist fehlgeschlagen. André

andré
quelle
1
Meins lief gut bei 32MHz = 32.000KHz. Ich habe es gesehen erwähnt hier , dass dies die praktische Grenze zu ist. Ich verwende die neueste RPi-Firmware auf Raspbian Hard Float, wenn das einen Unterschied macht.
dodgy_coder
Wenn RPi 3 diesen Test mit 60 MHz erfolgreich ausführt.
Vlad