class SPI – un protocolo serie controlado por un controlador¶
SPI es un protocolo serie síncrono gobernado por un controlador. A nivel físico utiliza tres líneas (SCK, MOSI, MISO) más una línea de selección de chip por cada periférico.
El uso es similar al de I2C; la principal diferencia son los parámetros que se pasan al inicializar el bus:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
El único parámetro obligatorio es mode (SPI.CONTROLLER o SPI.PERIPHERAL). polarity es el nivel de reposo de SCK (0 o 1). phase selecciona si los datos se muestrean en el primer (0) o segundo (1) flanco de reloj. crc es None (sin CRC) o un polinomio CRC.
Transferencia de datos:
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
Constructores¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
Construye un objeto SPI en el
busdado (un índice entero de periférico SPI, p. ej.2paraSPI2). Sin parámetros adicionales, el objeto se crea pero no se inicializa (conserva la configuración de bus anterior, si la hubiera); si se proporcionan argumentos adicionales, el bus se inicializa con ellos. Consulteinit()para los parámetros disponibles.SPI(2)está conectado a los mismos pines del conector en todas las OpenMV Cam basadas en STM32; la OpenMV Cam N6 expone ademásSPI(4):Bus
NSS
SCK
MISO
MOSI
SPI(2)(todas las OpenMV Cam con STM32)P3P2P1P0SPI(4)(solo OpenMV Cam N6)P15P16P17P18NSSno es controlado por el periférico SPI en ninguno de los dos buses; queda libre para usarse como una selección de chip GPIO normal.Métodos¶
- 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¶
Inicializa el bus SPI con los parámetros dados:
modedebe serSPI.CONTROLLERoSPI.PERIPHERAL.baudratees la velocidad del reloj SCK (solo tiene sentido para un controlador).prescaleres el divisor que se usa para derivar SCK de la frecuencia del bus APB; el uso deprescaleranula abaudrate.polaritypuede ser 0 o 1, y es el nivel en el que reposa la línea de reloj en estado inactivo.phasepuede ser 0 o 1 para muestrear los datos en el primer o segundo flanco de reloj respectivamente.bitspuede ser 8 o 16, y es el número de bits en cada palabra transferida.firstbitpuede serSPI.MSBoSPI.LSB.tiTrue indica las convenciones de señal de Texas Instruments, en lugar de las de Motorola.crcpuede ser None para no usar CRC, o un especificador de polinomio.
Es posible que la frecuencia del reloj SPI no coincida exactamente con
baudrate. El hardware solo admite relojes que sean la frecuencia del bus APB padre dividida por un divisor (prescaler) que sea potencia de dos (2, 4, 8, 16, 32, 64, 128o256); el controlador elige el más alto que no supere elbaudratesolicitado.SPI(2)está en APB1. Para un control preciso del reloj, establezcaprescalerdirectamente en lugar debaudrate.Al imprimir el objeto SPI se muestra la velocidad en baudios calculada y el divisor (prescaler) elegido.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
Recibe datos en el bus:
recvpuede ser un entero, que es el número de bytes a recibir, o un búfer mutable, que se llenará con los bytes recibidos.timeoutes el tiempo de espera en milisegundos para la recepción.
Valor de retorno: si
recves un entero, un nuevo búfer con los bytes recibidos; de lo contrario, el mismo búfer que se pasó arecv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Envía datos en el bus:
sendson los datos a enviar (un entero a enviar, o un objeto búfer).timeoutes el tiempo de espera en milisegundos para el envío.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
Envía y recibe datos en el bus al mismo tiempo:
sendson los datos a enviar (un entero a enviar, o un objeto búfer).recves un búfer mutable que se llenará con los bytes recibidos. Puede ser el mismo quesend, u omitirse. Si se omite, se creará un nuevo búfer.timeoutes el tiempo de espera en milisegundos para la recepción.
Valor de retorno: el búfer con los bytes recibidos.
Constantes¶
- CONTROLLER: int¶
Inicializa el bus SPI como maestro (controller) – la OpenMV Cam gobierna
SCKyMOSIy está a cargo de la transacción.
- PERIPHERAL: int¶
Inicializa el bus SPI como esclavo (peripheral) – la OpenMV Cam responde a los pulsos de reloj gobernados por un controlador remoto.