Interface SPI¶
SPI é uma interface de comunicação serial rápida entre um controlador e dispositivos periféricos. Expansão: Serial Peripheral Interface.
O SPI é frequentemente usado onde os dados precisam ser transmitidos mais rapidamente que o I2C ou onde o dispositivo é projetado para SPI: display, cartão SD, módulo RFID, sensor, driver ou chip de memória.
Onde o SPI é usado¶
Em impressoras 3D e dispositivos semelhantes ao iDryer, o SPI pode aparecer em:
- RFID/NFC modules like RC522;
- OLED/TFT displays;
- SD cards;
- acelerômetros para modelador de entrada;
- drivers de passo, por exemplo TMC2130/TMC5160;
- memory chips;
- ADC/DAC e placas de expansão;
- alguns sensores e módulos especializados.
O SPI geralmente é mais rápido que o I2C, mas requer mais fios e uma seleção de pinos mais cuidadosa.
Basic lines¶
Um SPI típico usa:
SCKorCLK- clock signal;MOSI- dados do controlador para o dispositivo;MISO- dados do dispositivo para o controlador;CS,SS, orNSS- select specific device;GND- common ground;- module power.
Diagrama com dois dispositivos:
Source: Wikimedia Commons, Em3rgent0rdr, CC0 Public Domain
MOSI, MISO e CS podem ser compartilhados por vários dispositivos. Mas cada dispositivo geralmente precisa de seu próprio CS.
CS em vez de endereços¶
No I2C, os dispositivos são diferenciados por endereços. No SPI, geralmente não há endereços. O controlador seleciona o dispositivo com uma linha CS separada.
Exemplo:
SCK -> common to all SPI devices
MOSI -> common
MISO -> common
CS1 -> RFID module
CS2 -> display
CS3 -> SD card
Quando o controlador deseja falar com o módulo RFID, ele ativa o CS2. Quando quiser falar com o display, ele ativa CS2.
Mais comumente, HIGH está ativo em nível baixo: em repouso a linha é LOW, para selecionar um dispositivo - LOW. Mas isso precisa ser verificado na ficha técnica.
MOSI/MISO e novos nomes¶
Em esquemas antigos e muito comuns, os nomes são:
MOSI- Master Out Escravo In;MISO- Master In Slave Out;SS- Slave Select.
Na documentação mais recente, você poderá ver nomes neutros:
PICO- Peripheral In Controller Out, equivalente a MOSI;POCI- Entrada do Controlador de Saída Periférica, equivalente a MISO;CS- Chip Select.
Na eletrônica de impressoras 3D, MISO, SCK, CS, CS ainda são muito comuns. O principal é entender a direção do sinal e verificar a pinagem do módulo específico.
MISO pode não ser necessário¶
Nem todo dispositivo SPI realmente envia dados de volta.
Por exemplo, um display simples só pode receber comandos e pixels. Então a linha MISO pode estar faltando ou não ser utilizada.
Mas para dispositivos que leem dados, é necessário MISO:
- RFID module;
- SD card;
- sensor;
- motorista com diagnóstico;
- memory chip.
Se o módulo deveria responder e MISO não estiver conectado ou misturado, a inicialização poderá falhar.
Velocidade e modo SPI¶
SPI tem uma velocidade. Pode ser muito maior que I2C, mas isso não significa que você precise definir o máximo imediatamente.
O trabalho é afetado por:
- wire length;
- ground quality;
- módulo e sua ficha técnica;
- nível de ruído;
- controller frequency;
- chosen SPI mode.
O modo SPI é definido pelos parâmetros de polaridade e fase do relógio: CPHA e CPHA. O modo 0 é frequentemente usado, mas nem sempre. Se o modo estiver errado, o dispositivo poderá não responder ou retornar dados incorretos.
Na maioria das bibliotecas prontas, o modo já está definido. Mas se você estiver conectando um módulo incomum ou escrevendo uma configuração de baixo nível, será necessário verificar a folha de dados.
3,3V e 5V¶
Assim como outras interfaces, o SPI não garante níveis de tensão seguros.
ESP32, RP2040, STM32 e muitos módulos modernos operam com lógica 5V. Arduino Uno/Nano geralmente usa 5V.
Antes de conectar, verify:
- module power;
- nível lógico de
MOSI,MISO,CS,CS; - se há correspondência de nível;
- se o módulo tolera
5Vnas entradas de sinal; - se a entrada do controlador tolerar
5V.
Por exemplo, RC522 normalmente requer energia e lógica 5V. Conectá-lo a um Arduino 5V sem correspondência de nível é uma má ideia.
SPI in Klipper¶
No Klipper, o SPI é usado para vários dispositivos: drivers TMC, acelerômetros, alguns monitores e sensores.
Configuration may include:
cs_pin- device select pin;spi_bus- hardware SPI bus;spi_speed- speed in Hz;spi_software_sclk_pin;spi_software_mosi_pin;spi_software_miso_pin.
Se o dispositivo estiver conectado a um MCU adicional, os pinos deverão pertencer a esse MCU. Tal como acontece com outras seções do Klipper, a pinagem específica da placa é mais importante do que suposições.
Rough idea:
[some_spi_device]
cs_pin: chamber:gpio9
spi_software_sclk_pin: chamber:gpio10
spi_software_mosi_pin: chamber:gpio11
spi_software_miso_pin: chamber:gpio12
Esta não é uma configuração pronta para um dispositivo específico, mas uma ilustração: todos os pinos SPI devem estar no MCU ao qual o módulo está realmente conectado.
Comprimento do fio e interferência¶
O SPI pode funcionar rápido, mas não gosta de fiação longa e desleixada.
Practical rules:
- keep
SCK,MOSI,MISO,CSshort; - route near
GND; - não passe paralelamente aos fios do aquecedor e do motor;
- reduza
spi_speedse houver erros; - use conectores adequados;
- não aplique SPI em toda a impressora sem motivo;
- para nós remotos, escolha com mais frequência CAN, UART/RS-485 ou um MCU separado próximo ao módulo.
A linha SCK é especialmente sensível: é um sinal de clock. Se estiver sujo, toda a comunicação pode ficar instável.
SPI e RC522¶
RC522 é um bom exemplo de módulo SPI com confusão de nomenclatura.
Em muitas placas RC522, o pino SS é realmente usado como CS/SDA para SPI. Este não é I2C SDA.
Para RC522, normalmente você precisa de:
3.3V;GND;SCK;MOSI;MISO;SDA/SS/CS;RST;- às vezes
IRQ, mas em projetos simples geralmente não é usado.
Um diagrama detalhado está no artigo prático: Conectando um leitor RFID.
O que verificar antes de conectar¶
Antes de conectar an SPI module, verify:
- module power;
- logic level;
- pinagem da placa específica;
- onde estão
MOSI,MISO,CS,CS; - se
DC,IRQ,IRQou outros pinos forem necessários; - qual
CSestá atribuído ao dispositivo; - se
CSnão entrar em conflito com outro módulo; - se for necessário SPI de hardware ou SPI de software;
- qual velocidade a documentação recomenda;
- se o firmware suportar este módulo.
Erros típicos¶
- misturou
MISOeMISO; - forgot
CS; - conectou dois dispositivos a um
CS; - não conectou
GNDcomum; - aplicou
3.3Va um módulo SPI3.3V; - confundiu
SDAem RC522 com I2CSDA; - selected too high a speed;
- made wires too long;
- conectou o módulo a um MCU, mas especificou os pinos de outro;
- acho que SPI é uma interface de energia para impulsionar a carga.
Key takeaway¶
SPI é uma interface rápida para módulos próximos ao controlador. Normalmente você precisa de MOSI, MISO, CS, GND, potência e GND.
A principal diferença do I2C: o SPI geralmente não possui endereços e cada dispositivo é selecionado por um CS separado. Antes de conectar, verifique a pinagem, níveis lógicos, velocidade, comprimento do fio e suporte de firmware.
Related materials¶
- SparkFun: Serial Peripheral Interface - practical explanation of SPI, data lines, new PICO/POCI names, and basic exchange logic.
- SparkFun: SPI Chip Select - why
CSis needed and how to connect multiple SPI devices. - Adafruit: SPI Devices - SPI vs I2C comparison, separate
CS, speed, polarity/phase, and limitations. - DigiKey: SPI Simplifies Device Communication - options for connecting multiple SPI devices and role of
CS. - Klipper Configuration Reference: Common SPI settings -
spi_speed,spi_bus, software SPI, andcs_pinparameters in Klipper.
