class SPI – protocolo série controlado por controlador¶
SPI é um protocolo série síncrono controlado por um controlador. Ao nível físico utiliza três linhas (SCK, MOSI, MISO) mais uma linha de seleção de chip por periférico.
A utilização é semelhante a I2C; a principal diferença está nos 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 inativo de SCK (0 ou 1). phase seleciona se os dados são amostrados na primeira (0) ou segunda (1) transição de relógio. crc é None (sem CRC) ou um polinómio CRC.
Transferência de 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
busindicado (um índice inteiro de periférico SPI, por exemplo2paraSPI2). Sem parâmetros adicionais, o objeto é criado mas não inicializado (retém as configurações anteriores do barramento, se existirem); se forem fornecidos argumentos extra, o barramento é inicializado com eles. Consulteinit()para os parâmetros disponíveis.SPI(2)está ligado aos mesmos pinos do conector 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)(apenas OpenMV Cam N6)P15P16P17P18NSSnão é controlado pelo periférico SPI em nenhum dos barramentos; está disponível para ser utilizado como GPIO normal de seleção de chip.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 indicados:
modedeve serSPI.CONTROLLERouSPI.PERIPHERAL.baudrateé a taxa de relógio SCK (apenas relevante para um controlador).prescaleré o prescaler a utilizar para derivar o SCK da frequência do barramento APB; a utilização deprescalersubstituibaudrate.polaritypode ser 0 ou 1, e é o nível em que a linha de relógio fica em repouso.phasepode ser 0 ou 1 para amostrar os dados na primeira ou segunda transição de relógio, respetivamente.bitspode ser 8 ou 16, e é o número de bits em cada palavra transferida.firstbitpode serSPI.MSBouSPI.LSB.tiTrue indica convenções de sinal Texas Instruments, em oposição a Motorola.crcpode ser None para sem CRC, ou um especificador de polinómio.
A frequência de relógio SPI pode não corresponder exatamente a
baudrate. O hardware apenas suporta relógios que são a frequência do barramento APB pai dividida por um prescaler que é potência de dois (2, 4, 8, 16, 32, 64, 128ou256); o driver escolhe o mais alto que não exceda obaudratesolicitado.SPI(2)está no APB1. Para controlo preciso sobre o relógio, definaprescalerdiretamente em vez debaudrate.Ao imprimir o objeto SPI é mostrada a taxa de baud 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 receção.
Valor de retorno: se
recvfor um inteiro, um novo buffer com os bytes recebidos; caso contrário, o mesmo buffer que foi passado arecv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
Envia dados no barramento:
sendsão os dados 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:
sendsão os dados a enviar (um inteiro a enviar, ou um objeto buffer).recvé um buffer mutável que será preenchido com os bytes recebidos. Pode ser o mesmo quesend, ou omitido. Se omitido, será criado um novo buffer.timeouté o tempo limite em milissegundos para aguardar a receção.
Valor de retorno: o buffer com os bytes recebidos.
Constantes¶
- CONTROLLER: int¶
Inicializa o barramento SPI como mestre (controlador) – a OpenMV Cam controla
SCKeMOSIe gere a transação.
- PERIPHERAL: int¶
Inicializa o barramento SPI como escravo (periférico) – a OpenMV Cam responde aos impulsos de relógio acionados por um controlador remoto.