ESP32 - conhecendo os pinos de Strapping

Projetos com esse poderoso microcontrolador da Espressif vem se tornando muito frequentes, oferecendo conectividade sem fio, Wi-Fi e Bluetooth, com custos muito competitivos, permitindo criar variadas aplicações para IoT. Vou trazer aqui neste artigo, detalhes sobre os pinos de strapping do ESP32, para evitar problemas nos seus projetos baseados nessa plataforma.

O que são os pinos de Strapping?

Os pinos de strapping definem algumas configurações do ESP32. Durante o curto processo de  inicialização da CPU, é lido o estado lógico presente na entrada de cada um desses pinos especiais e esses estados (0 ou 1) são por sua vez, escritos num registrador chamado ”GPIO_STRAPPING”.

Após o processo de inicialização, esses pinos voltam a funcionar com sua função normal.

Os bits deste registrador configura o modo de boot, a tensão presente no pino VDD_SDIO e outras funções iniciais que vemos na tabela abaixo:

pinos de Strapping do ESP32
Figura 1 - Tabela funções dos pinos de strapping

O ESP32 têm cinco pinos de strapping: GPIO_12, GPIO_0, GPIO_2, GPIO_15 e GPIO_5.

pinos de Strapping do ESP32
Figura 2 - Destaque dos pinos no módulo ESP32-WROOM-32

Cada pino de strapping é conectado internamente a um resistor de pull-up ou pull-down interno durante a inicialização do chip (ver coluna “Default” na tabela da Fig.01). Consequentemente, se o pino está desconectado ou o circuito externo conectado é de alta impedância, o pull-up/pull-down interno determina o nível de entrada default dos pinos de strapping. Para alterar os valores default, o usuário pode aplicar as resistores externos para alterar o estado lógico da entrada.

Entendendo as funções dos pinos de strapping

Vamos entender o que exatamente cada pino de strapping faz, seguindo a tabela da Fig.01:

GPIO_12: Tensão do LDO interno do chip: Se este pino estiver desconectado (pull-down interno) ou com um nível lógico 0 na sua entrada durante a inicialização, o pino VDD_SDIO, que é uma saída de tensão de alimentação externa do chip, usado para alimentação de periféricos, terá tensão de 3V3 na sua saída. Agora se tiver com nível lógico 1, sua saída será de 1V8.

GPIO_0 e GPIO_2: Modo de Boot: Se ambos os pinos estiverem desconectados ou GPIO_0 em nível lógico 1 na sua entrada, o ESP32 irá executar o firmware gravado na memória FLASH pelo barramento SPI. Para entrar em modo de gravação do ESP32 (download boot) ambos pinos devem estar em nível lógico 0.

Esses três pinos de strapping acima são os que mais causam problemas. Vamos entender o porquê logo mais.

GPIO_15: Log de inicialização na saída do pino de comunicação serial U0TXD: Se este pino estiver desconectado (pull-up interno) ou com um nível lógico 1 na sua entrada, teremos na saída do pino U0TXD, que é referente à comunicação serial do chip, o Log de inicialização do chip, com diversas informações relevantes. Em nível lógico 0 esse Log é desabilitado.

Figura 3 - Trecho de Log de inicialização no pino U0TXD

GPIO_5 e GPIO_15: Temporizações do SDIO Slave: Esse pinos definem as características da comunicação do chip com periférico SD card. Se ambos estiverem desconectados (pull-up interno) ou nível lógico 1, a comunicação será do tipo Rising-edge Sampling / Rising-edge Output.

Enfim, os problemas

Os problemas começam quando esquecemos desses pinos de strapping e de seus estados lógicos quando estamos definindo os GPIOs no esquemático do projeto.

Veja o esquemático abaixo, definimos o barramento I2C nos GPIO_12 e GPIO_13:

Figura 4 - Barramento I2C

Esquecemos que o GPIO_12 (definido como SDA do I2C) é um pino de strapping, roteamos e montamos a placa do projeto dessa forma. O que vai acontecer ao ligar a placa?

  • Simplesmente nada vai funcionar: nada na saída serial, nada de gravação, nada de boot.

Sabemos que existe necessidade de resistores de pull-up no barramento de comunicação I2C para que o mesmo funcione adequadamente. Vide R21 e R22 no esquemático.

Colocando esses resistores para que o I2C funcione, colocamos o GPIO_12 em nível lógico 1… Aí está o problema!!!

Com o nível lógico em 1 definido durante a inicialização do ESP32, a memória FLASH interna ao módulo que tem a tensão de alimentação correta de 3V3, passou a ser alimentada com 1V8. Abaixo da tensão de trabalho recomendada.

A Fig.05 abaixo mostra como é ligado a memória FLASH internamente ao módulo. A alimentação da memória (pino 8 - VCC) provêm do pino VDD_SDIO, que tem sua tensão de saída definido pelo GPIO_12 durante a inicialização.

pinos de Strapping do ESP32
Figura 5 - Ligação memória FLASH interno ao módulo

Tem até uma nota no datasheet sobre essa situação (MTDI é o GPIO_12):

Figura 6 - Nota no datasheet do ESP32

Outra situação:

Um simples botão ligado ao GPIO_2. Um resistor de pull-up e o botão ligado ao GND. Vemos isso em diversos projetos. Veja na Fig.07 abaixo:

pinos de Strapping do ESP32
Figura 7 - Ligação botão ao GPIO_2

Mais uma vez teremos problemas, dessa vez o ESP32 não entrará em modo gravação. O GPIO_2 define o modo de boot e para entrar em modo download (gravação), ambos pinos, GPIO_2 respectivamente e também o GPIO_0 devem estar em nível lógico 0. E nesse caso o GPIO_2 está permanentemente em nível lógico 1 através do resistor de pull-up R21.

Essa outra situação na Fig.08 não traz tantos problemas funcionais, mas pode provocar estranheza a quem espera a saída do Log de inicialização sendo printado na serial do chip.

pinos de Strapping do ESP32
Figura 8 - LED ligado ao GPIO_15

efinimos no programa o GPIO_15 como saída para ativação de um LED.

Durante a inicialização do ESP32, o GPIO_15 está sendo ligado ao GND através do resistor R21 e do LED D10 polarizado diretamente. Com o GPIO_15 em nível lógico 0 temos o desabilitação do Log de saída.

Conclusão - ESP32 - conhecendo os pinos de Strapping

O datasheet é sempre o melhor amigo de um desenvolvedor de hardware. A regra de ouro que fica aqui é a leitura atenciosa do datasheet e dos outros documentos pertinentes, sempre quando começar a trabalhar com um novo dispositivo (Ah, isso inclui os documentos de Erratas também!). Atente-se aos detalhes e as notas do fabricante. Faça uma lista dos pontos importantes a serem observados durante o projeto (check-list).

Isso ajudará a evitar erros, mas caso algum passar, ajudará para um debug mais rápido.

Referências

https://www.espressif.com/en/support/download/documents/chips

https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf

https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Hardware » ESP32 - conhecendo os pinos de Strapping
Talvez você goste:

Nenhum resultado encontrado.

Comentários:

2
Deixe um comentário

avatar
1 Comentários
1 Respostas
0 Seguidores
 
Discussão de maior alcance
Discussão mais quente
2 Autores de comentários
Alexandre Fernandes dos AnjosCesar Augusto Comentários recentes
  Notificações  
recentes antigos mais votados
Notificar
Cesar Augusto
Visitante
CESAR A BONADIO

Bacana, parabéns pelo artigo

Séries

Menu