Quelles fréquences SPI le Raspberry Pi prend-il en charge?

22

Quelles fréquences SPI le Raspberry Pi prend-il en charge?

Aditionellement:

  • Sont-ils tous pris en charge par le pilote SPI bootc.net ?
  • Y a-t-il des éléments supplémentaires que je devrais être prudent lorsque j'essaie de communiquer avec une autre puce via SPI?
Akavel
la source

Réponses:

21

Le Raspberry Pi SPI fonctionne à la vitesse d'horloge APB, qui est équivalente à la fréquence d'horloge principale, 250 MHz. Cela peut être divisé par un nombre pair de 2 à 65536 pour la vitesse souhaitée. La fiche technique spécifie que le diviseur doit être une puissance de deux, mais c'est incorrect . Les nombres impairs sont arrondis et 0 (ou 1) équivaut à 65536. Un diviseur inférieur à 2 est donc impossible.

Cela rend la plage de fréquences de 3,814 kHz à 125 MHz, avec 32768 pas entre les deux.

(Il y a eu beaucoup de désinformation à ce sujet, mais ces résultats ont été vérifiés par expérimentation. Veuillez passer le mot.)

Nakedible
la source
1
Je pense que cette réponse devrait être au sommet.
Jon Watte
Es-tu sûr de ça? Gordon affirme que, bien que vous puissiez le nourrir n'importe quel nombre pair, seuls deux pouvoirs font réellement la différence: Comprendre SPI sur le Raspberry Pi | Gordons Projects
scruss
3
J'ai testé cela avec un oscilloscope. Je pense que le problème avec Gordon est qu'il utilise le pilote du noyau, qui réduit la vitesse d'horloge, au lieu de commander directement le processeur sans utiliser le pilote du noyau.
Nakedible
2
Ce Forum-Thread fournit des informations supplémentaires pour prouver la réponse de Nakedible: raspberrypi.org/phpBB3/…
Nippey
5

Le SPI peut être exécuté à la vitesse d'horloge de base ou divisé pour les périphériques plus lents. L'horloge principale est de 250 MHz. Le diviseur peut être réglé sur n'importe quelle puissance de deux - de 2 ^ 0 à 2 ^ 16. Cela signifie que les fréquences SPI de 3,8 kHz à 250 MHz sont prises en charge.

Sources:

Maria Zverina
la source
1
Peut-être - Farhad s'approvisionne à partir de fiches techniques pour BCM2835 qui est le SoC réel pour RPi tandis que ma référence est pour le BCM2708 qui n'est qu'une partie du SoC. Les sources pourraient converger ... mais là encore, elles pourraient ne pas l'être. Je pense donc qu'il vaut mieux conserver les sources alternatives pour l'instant.
Maria Zverina
1
Oh et area51 nous indique comme ayant 1,7 réponse par question et déclare "2,5 réponses par question est bonne, seulement 1 réponse par question nécessite un peu de travail. Dans un site sain, les questions reçoivent plusieurs réponses et la meilleure réponse est votée en haut." :-)
Maria Zverina
1
Réponse incorrecte: 2 ^ 0 n'est pas pris en charge et le diviseur n'a pas besoin d'être une puissance de deux.
Nakedible
1
@Nakedible pouvez-vous fournir la source de vos déclarations?
Maria Zverina
1
La fiche technique bcm2835 confirme le point 2 ^ 0. raspberrypi.org/wp-content/uploads/2012/02/… Ceci est également confirmé par define dans la bibliothèque bcm2835. open.com.au/mikem/bcm2835 Quant à la non puissance de deux diviseurs, l'errata de la fiche technique mentionne que peut-être un multiple de 2 était voulu. elinux.org/BCM2835_datasheet_errata Cela a également été publié sur un forum que tout multiple de 2 semble fonctionner. Tout cela a également été confirmé en testant la sortie SPI sur du matériel réel. Voir ma réponse ci-dessous qui le précise exactement.
Nakedible
4

La fiche technique du BCM2835 indique ce qui suit à la page 120: La valeur du registre d'horloge du bloc SPI contient.

BC Clock Divider SCLK = Core Clock / CDIV Si CDIV est réglé sur 0, le diviseur est 65536. Le diviseur doit être une puissance de 2. Nombres impairs arrondis vers le bas. La fréquence d'horloge SPI maximale est de l'horloge APB.

Je ne trouve aucune référence à quelle est la fréquence maximale du bus APB, je pense que cela fait partie de la documentation ARM11 et non de ce SoC.

FarhadA
la source
1
Merci pour la référence; Je crois que la page est 156? Le CDIV semble avoir une largeur de 16b, donc passe de 1 à 65536. "L'horloge principale" est probablement le 700MHz? Nous aurions donc une plage allant de ~ 10,7 kHz à la mystérieuse limite APB?
akavel
1
Vous êtes les bienvenus, mais je crains que cette horloge ne soit pas l'horloge de base. Il s'agit du bus APB: "APB est conçu pour les accès de contrôle à faible bande passante, par exemple les interfaces de registre sur les périphériques du système. Ce bus a une phase d'adresse et de données similaire à AHB, mais une liste de signaux de complexité très réduite (par exemple pas de rafales Il doit prendre en charge les signaux 32 bits et 66 MHz. "
FarhadA
4

J'ai testé avec le comme vu sur http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html et changé la vitesse.

La vitesse maximale lorsque le test est réussi est de 15 MHz = 15 000 KHz: Voir résultat:

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

Le test à 16 MHz a échoué. André

andré
la source
1
Le mien fonctionnait bien à 32 MHz = 32 000 kHz. Je l'ai vu mentionner ici que c'est aussi la limite pratique. J'utilise le dernier firmware RPi sur Raspbian hard float si cela fait une différence.
dodgy_coder
Avoir RPi 3 exécutant ce test à 60 MHz avec succès.
Vlad