Manual

do

Maker

.

com

Como usar SPI no ESP32S3

Como usar SPI no ESP32S3

Estou usando já há algum tempo algumas placas com ESP32S3, vilipendiando por todo esse tempo o poder dessa placa. Somente hoje, durante o ensaio do artigo "Como usar mais de um display SPI?" tive a necessidade de dar real atenção à placa. E vi que dava outro artigo: Como usar SPI no ESP32S3?

GPIO usado no SPI do ESP32S3

No ESP32 tradicional, temos 1 periférico SPI. No ESP32S2 e ESP32S3 as coisas mudam, mas vamos falar de ESP32S3.

O ESP32S3 possui 4 periféricos SPI, sendo que SPI0 e SPI1 são usados internamente para gerenciamento da memória, ficando disponíveis para o usuário o SPI2 e SPI3. Os SPI disponíveis são o VSPI e HSPI.

O SPI2 tem 6 linhas CS, enquanto SPI3 tem 3 linhas CS. Cada CS pode ser usado para controlar um dispositivo SPI.

Usando o framework do Arduino (seja na IDE do Arduino ou no PlatformIO) podemos facilmente definir pinos alternativos; isto é, podemos definir qualquer pino para o SPI:

#ifdef ALTERNATE_PINS
  #define VSPI_MISO   2
  #define VSPI_MOSI   4
  #define VSPI_SCLK   0
  #define VSPI_SS     33

  #define HSPI_MISO   26
  #define HSPI_MOSI   27
  #define HSPI_SCLK   25
  #define HSPI_SS     32
#else
  #define VSPI_MISO   MISO
  #define VSPI_MOSI   MOSI
  #define VSPI_SCLK   SCK
  #define VSPI_SS     SS

  #define HSPI_MISO   12
  #define HSPI_MOSI   13
  #define HSPI_SCLK   14
  #define HSPI_SS     15
#endif

No else podemos ver que existe uma definição de pinos padrão. Mas que pinos são MISO, MOSI, SCK e SS (CS)? - Se estiver usando VS Code com PlatformIO, basta parar o mouse sobre as definições. Se estiver utilizando a IDE do Arduino, segure a tecla Ctrl e clique sobre a definição. Isso abrir o arquivo pins_arduino.h (para isso, você já deve estar com a placa ESP32S3 Dev Module selecionada). E nesse caso poderemos ver:

static const uint8_t TX = 43;
static const uint8_t RX = 44;

static const uint8_t SDA = 8;
static const uint8_t SCL = 9;

static const uint8_t SS    = 10;
static const uint8_t MOSI  = 11;
static const uint8_t MISO  = 13;
static const uint8_t SCK   = 12;

Já aproveitei para colar o I2C e uma UART, porque certamente esses serão dúvidas para muitos (como era para mim também).

Tem um sketch de exemplo contendo os defines expostos mais acima. Basta abrir o sketch indo em Arquivos > Exemplos > SPI > Múltiplos barramentos SPI. O exemplo mostra uma comunicação SPI, fazendo a transmissão diretamente no sketch.

No próximo artigo mostrarei como controlar múltiplos displays SPI usando o ESP32S3, portanto, esse artigo é uma referência para a configuração inicial do SPI. Se esquecer, só procurar na caixa de Busca rápida por SPI ou ESP32S3.

Até o próximo artigo!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.