class SPI – um protocolo serial acionado por um controlador¶
SPI é um protocolo serial síncrono acionado por um controlador. No nível físico, ele usa três linhas (SCK, MOSI, MISO) mais uma linha de chip-select por periférico.
O uso é semelhante ao de I2C; a principal diferença são os parâmetros passados ao inicializar o barramento:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
O único parâmetro obrigatório é mode (SPI.CONTROLLER ou SPI.PERIPHERAL). polarity é o nível de repouso de SCK (0 ou 1). phase seleciona se os dados são amostrados na primeira (0) ou na segunda (1) borda de clock. crc é None (sem CRC) ou um polinômio de CRC.
Transferindo dados:
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
Construtores¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
Constrói um objeto SPI no
busfornecido (um índice inteiro de periférico SPI, por exemplo2paraSPI2). Sem parâmetros adicionais, o objeto é criado mas não inicializado (ele mantém as configurações de barramento anteriores, se houver); se argumentos extras forem fornecidos, o barramento é inicializado com eles. Vejainit()para os parâmetros disponíveis.SPI(2)está conectado aos mesmos pinos do header em todas as OpenMV Cams STM32; a OpenMV Cam N6 expõe adicionalmenteSPI(4):Barramento
NSS
SCK
MISO
MOSI
SPI(2)(todas as OpenMV Cams STM32)P3P2P1P0SPI(4)(somente OpenMV Cam N6)P15P16P17P18NSSnão é acionado pelo periférico SPI em nenhum dos barramentos; ele fica livre para uso como um chip-select 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 o barramento SPI com os parâmetros fornecidos:
modedeve serSPI.CONTROLLERouSPI.PERIPHERAL.baudrateé a taxa de clock de SCK (só faz sentido para um controlador).prescaleré o prescaler usado para derivar SCK da frequência do barramento APB; o uso deprescalersobrepõebaudrate.polaritypode ser 0 ou 1, e é o nível em que a linha de clock fica em repouso.phasepode ser 0 ou 1 para amostrar os dados na primeira ou na segunda borda de clock, respectivamente.bitspode ser 8 ou 16, e é o número de bits em cada palavra transferida.firstbitpode serSPI.MSBouSPI.LSB.tiTrue indica as convenções de sinal da Texas Instruments, em oposição às da Motorola.crcpode ser None para nenhum CRC, ou um especificador de polinômio.
A frequência de clock do SPI pode não corresponder exatamente a
baudrate. O hardware suporta apenas clocks que são a frequência do barramento APB pai dividida por um prescaler de potência de dois (2, 4, 8, 16, 32, 64, 128ou256); o driver escolhe o maior que não exceda obaudratesolicitado.SPI(2)está no APB1. Para controle preciso sobre o clock, definaprescalerdiretamente em vez debaudrate.Imprimir o objeto SPI mostra a taxa de transmissão (baud rate) calculada e o prescaler escolhido.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
Recebe dados no barramento:
recvpode ser um inteiro, que é o número de bytes a receber, ou um buffer mutável, que será preenchido com os bytes recebidos.timeouté o tempo limite em milissegundos para aguardar a recepção.
Valor de retorno: se
recvfor um inteiro, então um novo buffer com os bytes recebidos, caso contrário o mesmo buffer que foi passado emrecv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Envia dados no barramento:
sendé o dado a enviar (um inteiro a enviar, ou um objeto buffer).timeouté o tempo limite em milissegundos para aguardar o envio.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
Envia e recebe dados no barramento ao mesmo tempo:
sendé o dado a enviar (um inteiro a enviar, ou um objeto buffer).recvé um buffer mutável que será preenchido com os bytes recebidos. Ele pode ser o mesmo quesend, ou ser omitido. Se omitido, um novo buffer será criado.timeouté o tempo limite em milissegundos para aguardar a recepção.
Valor de retorno: o buffer com os bytes recebidos.
Constantes¶
- CONTROLLER: int¶
Inicializa o barramento SPI como mestre (controlador) – a OpenMV Cam aciona
SCKeMOSIe está no comando da transação.
- PERIPHERAL: int¶
Inicializa o barramento SPI como escravo (periférico) – a OpenMV Cam responde aos pulsos de clock acionados por um controlador remoto.