Quali frequenze SPI supporta Raspberry Pi?


22

Quali frequenze SPI supporta Raspberry Pi?

Inoltre:

  • Sono tutti supportati dal driver SPI bootc.net ?
  • Ci sono cose aggiuntive di cui dovrei essere cauto quando provo a comunicare con qualche altro chip tramite SPI?

Risposte:


21

Il Raspberry Pi SPI funziona alla velocità di clock APB, che è equivalente alla velocità di clock principale, 250 MHz. Questo può essere diviso per qualsiasi numero pari da 2 a 65536 per la velocità desiderata. Il foglio dati specifica che il divisore deve essere una potenza di due, ma questo non è corretto . I numeri dispari vengono arrotondati per difetto e 0 (o 1) equivale a 65536. Un divisore più piccolo di 2 è quindi impossibile.

Ciò rende la gamma di frequenze compresa tra 3,814 kHz e 125 MHz, con 32768 passi in mezzo.

(C'è stata molta disinformazione su questo argomento, ma questi risultati sono stati verificati mediante sperimentazione. Per favore spargi la voce.)


1
Penso che questa risposta dovrebbe essere al top.
Jon Watte,

Sei sicuro di questo? Gordon afferma che, sebbene sia possibile dargli un numero pari, solo i poteri di due fanno davvero la differenza: Comprendere SPI sul Raspberry Pi | Gordons Projects
scruss

3
L'ho provato con un oscilloscopio. Penso che il problema con Gordon sia che usa il driver del kernel, che altera la velocità di clock, invece di comandare direttamente il processore senza usare il driver del kernel.
Nakedible

2
Questo thread del forum fornisce ulteriori informazioni per provare la risposta di Nakedible: raspberrypi.org/phpBB3/…
Nippey,

5

L'SPI può essere eseguito alla velocità di clock principale o suddiviso per periferiche più lente. Il core clock è di 250 MHz. Il divisore può essere impostato su qualsiasi potenza di due: da 2 ^ 0 fino a 2 ^ 16. Ciò significa che sono supportate le frequenze SPI da 3,8 kHz a 250 MHz.

fonti:


1
Forse - Farhad proviene da schede tecniche per BCM2835 che è il SoC effettivo per RPi mentre il mio riferimento è per il BCM2708 che è solo una parte del SoC. Le fonti potrebbero convergere ... ma poi potrebbero non esserlo. Quindi penso che sia meglio preservare fonti alternative per ora.
Maria Zverina,

1
Oh e area51 ci elenca come avere 1,7 risposte per domanda e afferma "2,5 risposte per domanda sono buone, solo 1 risposta per domanda ha bisogno di un po 'di lavoro. In un sito sano, le domande ricevono più risposte e la migliore è votata in alto." :-)
Maria Zverina,

1
Risposta errata: 2 ^ 0 non è supportato e il divisore non deve avere una potenza di due.
Nakedible

1
@Nakedible puoi fornire la fonte per le tue dichiarazioni?
Maria Zverina,

1
La scheda tecnica bcm2835 conferma il punto 2 ^ 0. raspberrypi.org/wp-content/uploads/2012/02/… Ciò è confermato anche da definisce nella libreria bcm2835. open.com.au/mikem/bcm2835 Per quanto riguarda la non potenza di due divisori, la scheda tecnica errata indica che probabilmente si intendeva multiplo di 2. elinux.org/BCM2835_datasheet_errata Questo è stato anche pubblicato su alcuni forum in cui qualsiasi multiplo di 2 sembra funzionare. Tutto ciò è stato confermato anche testando l'output SPI su hardware reale. Vedi la mia risposta di seguito che specifica esattamente questo.
Nakedible

4

Il foglio dati di BCM2835 dice quanto segue a pagina 120: Il valore del registro di clock del blocco SPI contiene.

BC Clock Divider SCLK = Core Clock / CDIV Se CDIV è impostato su 0, il divisore è 65536. Il divisore deve essere una potenza di 2. Numeri dispari arrotondati per difetto. La frequenza di clock SPI massima è dell'orologio APB.

Non riesco a trovare alcun riferimento a quale sia la frequenza massima del bus APB, penso che faccia parte della documentazione ARM11 e non di questo SoC.


1
Grazie per il riferimento; Credo che la pagina sia 156? Il CDIV sembra essere largo 16b, quindi va da 1 a 65536. "Il core clock" è probabilmente il 700MHz? Quindi avremmo una gamma da ~ 10,7 kHz fino al misterioso limite APB?
Akavel,

1
Sei il benvenuto, ma temo che questo orologio non sia l'orologio principale. È il bus APB: "L'APB è progettato per accessi con controllo a bassa larghezza di banda, ad esempio le interfacce di registro sulle periferiche di sistema. Questo bus ha un indirizzo e una fase di dati simili a AHB, ma un elenco di segnali molto ridotto e di bassa complessità (ad esempio nessuna esplosione ). Deve supportare segnali a 32 bit e 66 MHz. "
Farhad:

4

Ho provato con il visto su http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html e ho cambiato la velocità.

La velocità massima al superamento del test è 15 MHz = 15000 KHz: vedere il risultato:

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

Il test a 16 MHz non è riuscito. André


1
Il mio funzionava bene a 32MHz = 32.000KHz. Ho visto qui menzionato che anche questo è il limite pratico. Sto eseguendo l'ultimo firmware RPi sul float Raspbian se questo fa la differenza.
dodgy_coder il

Avere RPi 3 in esecuzione quel test con successo a 60MHz.
Vlad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.