Boas práticas para tratamento de GPIOs não conectados

GPIOs não conectados

O que fazer com os pinos de GPIO do seu chip que não estão sendo utilizados no projeto? Neste artigo abordaremos boas práticas de tratamento e possíveis problemas quando estes pinos são subestimados.

 

Visão geral

 

Infelizmente, boas práticas para tratamento de pinos não utilizados, não são muito populares e difundidas em muitos processos de desenvolvimento, tendo em vista que é comum encontrarmos diferentes placas de circuito impresso com tais pinos sem tratamento algum.

 

O tratamento correto destes pinos é uma das variáveis importantes para a redução do consumo de corrente, de EMI (Electromagnetic Interference), suporte a debug e escalabilidade nos produtos eletrônicos, quando falamos de aplicações críticas e que dependem de certificações, selos de qualidade e os níveis de radiação eletromagnética devem estar dentro dos limites estabelecidos.

 

Deixar os pinos de GPIO flutuando pode até não afetar o funcionamento do produto se não for uma aplicação crítica, porém é nosso dever e, é importante problematizar este tipo atitude, pois os níveis de compatibilidade eletromagnética (EMC) do seu dispositivo tendem a sair dos padrões e com isso ele pode interferir no bom funcionamento de outros dispositivos próximos a ele. Clique aqui para saber mais sobre EMC neste artigo de Thiago Lima.

 

Figura 1: Meios de interferência eletromagnética.

 

 

Além do ponto de vista elétrico, podemos pensar também na escalabilidade do projeto, à vista que estão sempre sujeitos a alterações devido a avanços tecnológicos, novas normas e convenções, novas técnicas de ataque ao problema, etc. Sendo assim, prever escalabilidade dos pinos sobressalentes é uma economia de tempo e dinheiro em casos de alterações de projetos em que você precisa acessá-los. Tais pinos podem ser usados para debug, teste em linha de produção, portas de acesso para suporte e manutenção, diagnósticos, etc. Para isso é muito importante utilizar todos os recursos possíveis para melhorar e robustecer o projeto.

 

 

Consumo de pinos de entrada CMOS

 

A entrada digital CMOS é genericamente composta por pares de MOSFET, conforme a imagem abaixo.

 

Figura 2: Schmitt trigger CMOS

 

 

Quando a entrada está em um nível, apenas um par está acionado sendo ele P ou N. Quando o nível lógico da entrada está mudando de estado, um par está sendo desacionado  e o outro acionando. O problema é que neste curto período de tempo, temos uma fração de segundo em que os dois ficam parcialmente acionados e flui uma corrente entre eles do Vcc para o GND e esta corrente é chamada de shoot-through

 

O shot through é um fenômeno normal, mas que pode gerar um consumo acentuado no seu produto e precisa de atenção especial, principalmente em casos de aplicações ultra low power. Quando deixamos um pino de entrada digital flutuando, o que acontece é que temos este chaveamento acontecendo a todo momento internamente no nosso dispositivo, portanto o consumo e os ruídos aumentam devido ao chaveamento randômico excessivo. Por este motivo é tão importante manter um nível lógico bem definido, ou ao menos configurar o pino como entrada AD, desativando assim o schmitt trigger.

 

Este chaveamento não só se traduz em consumo na alimentação do chip. Como o consumo CMOS é chaveado e não linear, isso gera ruido harmônico. Como ele acontece em frequência indefinida (normalmente apenas limitado pelas capacitâncias parasitas do sistema), não se sabe onde a entrada CMOS pode acoplar: pode inclusive aumentar algum ruído já existente na placa. Embora raramente crítico, em EMI, qualquer fonte deve ser sempre eliminada.

 

 

Recomendações genéricas

 

Cada fabricante tem a sua recomendação e nosso dever enquanto desenvolvedores é verificar os datasheets, notas de aplicação e outras informações do componente em busca da recomendação do fabricante, pois cada chip possui sua demanda de configuração, mas de modo geral a recomendação é manter o pino em um estado fixo e bem definido geralmente com resistores de pull-up ou pull-down.

 

Casos particulares

 

Sensível a ESD

 

Quando o dispositivo é sensível a descargas eletrostáticas (ESD), o recomendado é conectar o pino ao ground externamente ou internamente configurando-o como open drain. É importante salientar que isto trás a necessidade de maior cautela na hora de utilizar tais pinos posteriormente e também riscos em caso de curto circuito entre pinos no momento da montagem da PCB. Isto se deve ao fato de que o pino conectado ao ground quando entra em contato com algum ponto de VCC gera uma alta corrente podendo ocasionar a queima do chip em questão, da fonte (caso não tenha proteção contra sobrecarga) e outros componentes, caso a fonte seja afetada.

 

Há também empresas que não possuem uma linha de montagem muito sofisticada e essa queima pode ser problemática e acarretar prejuízos financeiros a longo prazo. Uma linha hipotética com 50 mil peças/mês com uma taxa de reprovação de 0,5% ao mês; ao final do ano o prejuízo é de 3 mil peças. Quando tratamos de largas escalas é sempre importante ficar de olho em qualquer possível problema, pois isso pode resultar em uma considerável quantia.

 

 

Economia de energia

 

Em casos de aplicações low power, uma configuração bacana para pinos de GPIO não utilizados que economiza energia e os mantém num estado bem definido, é seta-los como saída Push-Pull com a mesma tensão do resistor de pull-up ou pull-down. Dessa forma a queda de tensão em cima do resistor é de 0V e teoricamente não há fluxo de corrente.

 

O problema dessa técnica é que ela também pode provocar estragos em caso de curto entre pinos no processo de fabricação do produto.

 

Figura 3: Queda de tensão em cima do resistor de pull-up

 

 

A conexão do pino de GPIO configurado como entrada analógica e um resistor de 100 R para o ground pode ser uma alternativa caso queira prever uma modificação do estado deste pino. Ainda se em ele for colocado em nível alto em 3,3 V, será apenas 33 mA de corrente. Além disso, com o pad do resistor no lugar você pode remove-lo ou alterar o valor para outro que lhe convém.

 

Para casos extremos em que alguém esteja realmente com problemas de consumo e economizando correntes da ordem de uA, outra abordagem é que o GPIO seja configurado como AD e os pull-ups sejam desligados com um simples PMOS quando o chip entra em modo de extrema economia de energia.

 

Em ultimo caso, se sua aplicação deixará os pinos flutuando, é recomendado ainda sim, que o pino de GPIO seja ao menos configurado como entrada analógica se possível, para evitar o chaveamento randômico do Schmitt Trigger que aumenta o consumo de energia, como já explicado anteriormente, devido a flutuação da tensão.

 
Figura 4: Estrutura de uma GPIO genérica.

 

 

Escalabilidade

 

Do ponto de vista da escalabilidade é interessante pensar em possíveis usos futuros para os pinos não utilizados. Uma dica é projetar hardwares comuns e genéricos que possam ser usados mais tarde no seu projeto tais como: saídas transistorizadas, entrada de botões, interfaces de comunicação, etc. Outra sacada legal é usá-los para "debug", colocando pontos de teste neles para obter feedback do hardware e firmware.

 

É importante lembrar que para prever e poupar alterações no hardware esses pinos devem ser facilmente acessados, portanto é muito interessante deixa-los em um conector que seja compatível com o seu produto. Conectores do tipo PCI Express por exemplo, são muito bons para este tipo de aplicação e são usados em placas mãe para expandir os periféricos do seu computador!

 

Figura 5: Conector PCI Express de uma placa mãe.

 

 

Recomendações de alguns fabricantes

 

Este é um trecho retirado da nota de aplicação "AN4899" da ST "STM32 GPIO configuration for hardware settings and low-power consumption", nele há um fluxograma de como configurar os pinos de GPIO de maneira bem direta. Veja na figura abaixo a parte inicial que fala sobre o que fazer com pinos não conectados:

 

Figura 6: fluxograma de configuração de GPIO para hardware de baixo consumo

 

Como este documento faz parte de uma nota de aplicação de hardware de baixo consumo, ele recomenda aqui não deixar o pinos sobressalentes flutuando, seta-los como push-pull, habilitar o pull-up/pull-down no mesmo nível que está setando sua saída e alternativamente setar o pino como entrada analógica.

 

Abaixo coloquei também 3 recomendações de diferentes microcontroladores bastante comuns, a título de curiosidade: STM32, STM8 e o MSP430 respectivamente. Eles foram retirados diretamente de Applications notes e datasheets.

 

Figura 7: recomendação de configuração de pinos não utilizados no STM32.
Figura 8: recomendação de configuração de pinos não utilizados no STM8.
Figura 9: recomendação de conexão de pinos não utilizados no MSP430.
Figura 10: recomendação para configuração de pinos não utilizados no MSP430.

 

O que achou do artigo? Conhece outras boas práticas relevantes? Já teve problemas na homologação de produtos críticos? Compartilhe conosco! Seu feedback é muito importante para mim.

 

Saiba mais

 

Níveis e limites de tensões digitais

Técnicas para reduzir o consumo em sistemas com microcontroladores

 

Referências

 

EMC - Compatibilidade Eletromagnética

DEPARTMENT OF DEFENSE INTERFACE STANDARD REQUIREMENTS FOR THE CONTROL OF ELECTROMAGNETIC INTERFERENCE CHARACTERISTICS OF SUBSYSTEMS AND EQUIPMENT

DEPARTMENT OF DEFENSE INTERFACE STANDARD ELECTROMAGNETIC ENVIRONMENTAL EFFECTS REQUIREMENTS FOR SYSTEMS

MSP430x2xx Family User's Guide

EMI Electromagnetic Interference: the fundamentals

How to achieve the lowest current consumption with STM32F2xx

AN2752 Application note Getting started with STM8S and STM8AF microcontrollers

Save Power By Managing Unused CMOS I/O Pins

NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

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

Muriel Costa
Técnico em mecatrônica, Graduando em Engenharia da informação pela Federal do ABC. Entusiasta da área, adoro frequentar espaços colaborativos e estar engajado com a comunidade. Em minhas escassas horas vagas gosto de organizar meu laboratório, desenvolver projetos, assistir séries e apreciar um bom churrasco.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Muriel CostaCarlos Eduardo Affonso Henriques Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Carlos Eduardo Affonso Henriques
Membro

Em RPIs, Arduinos e ESPs, sempre defino uma GPIO não utilizada seto como saída e com nível 1 (5V ou 3.3V). Ocorre que o nível "0" corresponde aos transistores (sejam FET, TTL, não importa) eles permanacem saturados (em estado de condução entre VCC e massa), e isso aumenta o consumo e a geração de calor. Emprego resistores de pul[lup|down] apenas para entradas que não possam ser configuradas como saída via software, como por exemplo o pino chipselect de alguns modelos de múdulos ESP8266. Muito bom seu artigo que ressalta a "eletrônica da coisa".