class SPI – un protocole série piloté par un contrôleur¶
SPI est un protocole série synchrone piloté par un contrôleur. Au niveau physique, il utilise trois lignes (SCK, MOSI, MISO) plus une ligne de sélection de puce par périphérique.
L’utilisation est similaire à I2C ; la principale différence réside dans les paramètres passés lors de l’initialisation du bus
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
Le seul paramètre requis est mode (SPI.CONTROLLER ou SPI.PERIPHERAL). polarity est le niveau au repos de SCK (0 ou 1). phase détermine si les données sont échantillonnées sur le premier (0) ou le second (1) front d’horloge. crc vaut soit None (pas de CRC), soit un polynôme CRC.
Transfert de données
data = spi.send_recv(b"1234") # send 4 bytes and receive 4 bytes
buf = bytearray(4)
spi.send_recv(b"1234", buf) # send 4 bytes and receive 4 into buf
spi.send_recv(buf, buf) # send/receive 4 bytes through buf
Constructeurs¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
Construit un objet SPI sur le
busdonné (un index entier de périphérique SPI, par exemple2pourSPI2). Sans paramètres supplémentaires, l’objet est créé mais non initialisé (il conserve les réglages précédents du bus, le cas échéant) ; si des arguments supplémentaires sont fournis, le bus est initialisé avec ceux-ci. Voirinit()pour les paramètres disponibles.SPI(2)est câblé aux mêmes broches du connecteur sur toutes les OpenMV Cam STM32 ; l’OpenMV Cam N6 expose en plusSPI(4):Bus
NSS
SCK
MISO
MOSI
SPI(2)(toutes les OpenMV Cam STM32)P3P2P1P0SPI(4)(OpenMV Cam N6 uniquement)P15P16P17P18NSSn’est piloté par le périphérique SPI sur aucun des deux bus ; il est libre d’être utilisé comme une sélection de puce GPIO normale.Méthodes¶
- init(mode: int, baudrate: int = 328125, *, prescaler: int = -1, polarity: int = 1, phase: int = 0, bits: int = 8, firstbit: int = SPI.MSB, ti: bool = False, crc: int | None = None) None¶
Initialise le bus SPI avec les paramètres donnés :
modedoit être soitSPI.CONTROLLER, soitSPI.PERIPHERAL.baudrateest la fréquence d’horloge SCK (n’a de sens que pour un contrôleur).prescalerest le diviseur utilisé pour dériver SCK de la fréquence du bus APB ; l’utilisation deprescalerprévaut surbaudrate.polaritypeut valoir 0 ou 1, et correspond au niveau auquel se trouve la ligne d’horloge au repos.phasepeut valoir 0 ou 1 pour échantillonner les données respectivement sur le premier ou le second front d’horloge.bitspeut valoir 8 ou 16, et correspond au nombre de bits dans chaque mot transféré.firstbitpeut valoirSPI.MSBouSPI.LSB.tià True indique les conventions de signaux Texas Instruments, par opposition à Motorola.crcpeut valoir None pour aucun CRC, ou un spécificateur de polynôme.
La fréquence d’horloge SPI peut ne pas correspondre exactement à
baudrate. Le matériel ne prend en charge que des horloges correspondant à la fréquence du bus APB parent divisée par un diviseur en puissance de deux (2, 4, 8, 16, 32, 64, 128ou256) ; le pilote choisit la valeur la plus élevée qui ne dépasse pas lebaudratedemandé.SPI(2)est sur APB1. Pour un contrôle précis de l’horloge, définissez directementprescalerplutôt quebaudrate.L’affichage de l’objet SPI montre le débit en bauds calculé et le diviseur choisi.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
Reçoit des données sur le bus :
recvpeut être un entier, qui est le nombre d’octets à recevoir, ou un tampon modifiable, qui sera rempli avec les octets reçus.timeoutest le délai d’attente en millisecondes pour la réception.
Valeur de retour : si
recvest un entier, alors un nouveau tampon contenant les octets reçus, sinon le même tampon que celui passé àrecv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Envoie des données sur le bus :
sendest la donnée à envoyer (un entier à envoyer, ou un objet tampon).timeoutest le délai d’attente en millisecondes pour l’envoi.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
Envoie et reçoit des données sur le bus en même temps :
sendest la donnée à envoyer (un entier à envoyer, ou un objet tampon).recvest un tampon modifiable qui sera rempli avec les octets reçus. Il peut être le même quesend, ou être omis. S’il est omis, un nouveau tampon sera créé.timeoutest le délai d’attente en millisecondes pour la réception.
Valeur de retour : le tampon contenant les octets reçus.
Constantes¶
- CONTROLLER: int¶
Initialise le bus SPI en maître (contrôleur) – l’OpenMV Cam pilote
SCKetMOSIet est responsable de la transaction.
- PERIPHERAL: int¶
Initialise le bus SPI en esclave (périphérique) – l’OpenMV Cam répond aux impulsions d’horloge pilotées par un contrôleur distant.