Recomendação para configurações padrão de pinos não utilizados em um STM32 (ARM Cortex M3) - puxar para cima / para baixo?


13

Atualmente, estamos usando várias variantes da família de microcontroladores STM32. Eu gostaria de saber o seguinte:

1) Quais são as configurações padrão recomendadas para os pinos dos microcontroladores em geral, se você tiver a opção de selecionar pull ups ou pull downs? Quais são os prós e os contras de ir com um ou outro? (Supondo que você os configure por padrão como entradas)

2) Em particular, gostaria de saber o que fazer com pinos não utilizados para a família de microcontroladores STM32. É óbvio para mim que não devemos deixar os pinos flutuando (o que é tudo o que a folha de dados diz :(), mas devo configurá-los para entrada com pull ups ou entradas com pull downs? Em particular, eu gostaria escolher uma configuração que seja menos suscetível a ESD e também, se possível, consuma a menor quantidade de energia.

3) Para pinos críticos, devemos confiar no firmware para configurá-los corretamente no estado padrão correto ou essa responsabilidade deve ser do hardware externo (conectar pull ups externos ou pull downs)? Se os valores escolhidos para os resistores externos forem maiores que os pull ups ou pull downs internos, a configuração no firmware não importa.

O profissional que posso ver ao fazer o acima é que, se o micro não inicializar corretamente por qualquer motivo (hardware defeituoso ou algo semelhante), não estaremos confiando no firmware para configurar o pino corretamente.

O golpe que vejo é que custa mais para fazer isso é hardware.

Qualquer luz que você puder lançar sobre o item acima será realmente apreciada.

Obrigado..


Por que não definir pinos não utilizados como saídas? Isso eliminaria a questão pull-up vs pull-down.
Connor Lobo

Nota: "Após qualquer evento de redefinição, todos os GPIOs são entradas flutuantes. Isso evita danos acidentais aos GPIOs em caso de emergência." embedded-lab.com/blog/stm32-gpio-ports-insights
cp.engr 4/11/16

Respostas:


10

Esta resposta não é específica do STM32, mas baseia-se na experiência e em muitas dessas discussões ao longo de muitos (muitos) anos. Outros podem acrescentar isso - ele cobre os pontos principais (acho), mas pode não estar completo.

É encorajador ver alguém fazendo essas perguntas simples, mas fundamentais, e mostrando uma consciência de como essas "pequenas coisas" podem 'agredir' na vida real.

ou seja, "Se o micro não inicializa corretamente ..." realmente lê "... quando o micro não inicializa corretamente ..." :-) - e é óbvio que você percebe isso.

Então:

  • O uso de pullup externo ou pulldown é essencial para aqueles realmente interessados ​​em obter um resultado bem definido. Esta é a maior coisa a se fazer aqui. Todo o resto é um bônus. ou seja, definir entradas com pullxxx interno é um compromisso que quase sempre funcionará.
    Mas se "quase sempre" não for bom o suficiente para o seu design, você precisará de xxxs de tração externa.

  • Pullup ou down não parece ter um resultado melhor esmagador. Pode variar entre os CIs, mas pode ser determinado na folha de dados. Todas as coisas são iguais (como podem ser) Eu preferiria o pull-down, pois existe um potencial de menor vazamento para as correntes externas do dispositivo - mas isso pode ser mínimo em um PCB revestido de acordo e / ou em um ambiente benigno.

  • Você pode querer observar a ação de inicialização se realmente se importa. por exemplo, um pino puxado começará baixo e transitará alto em algum momento. Um pino puxado provavelmente ficará baixo o tempo todo. Provavelmente isso não é importante, mas é mencionado para ser completo.

  • A suscetibilidade à ESD será específica do dispositivo, provavelmente simétrica e, em média, em muitos processadores provavelmente favorece a queda, pois os drivers tendem a afundar melhor do que a fonte, se assimétricos. Se você se preocupa muito com ESD, pode usar baixas saídas com pull downs - pois um caminho de baixa impedância (provavelmente) oferecerá melhor proteção contra ESD. Mas se você se preocupa muito com ESD, precisará projetá-lo de outras maneiras e não confiar na proteção dentro do IC como sua principal proteção.

  • Re questão 3 - pullxxxs externos é desejável, mas parece seguro usar valores que estão no limite máximo do design adequado e, em seguida, usar xxx interno em paralelo, se desejado. No entanto, como xxxs de pull interno geralmente têm um Reefetivo 2: 1, você pode obter a maior R e a menor corrente usando apenas externo. Evidentemente, o que você deseja evitar é flexões externas e flexões internas ou vice-versa - mas é improvável que isso seja um problema.

  • Quando digo "... limitando o limite do design adequado ...", quero dizer exatamente isso e não "ultrapassando o limite ...". isto é, o pino terá um valor especificado de resistência que permite que a pior especificação de Vin seja atendida. Um resistor maior pode consumir menos corrente no resistor, mas pode começar a ligar levemente o interruptor interno. ou seja, pode haver uma troca Rpulldown_current versus a menor corrente global à medida que o driver interno começa a ver a corrente de fuga (que será extremamente pequena) aumentando a corrente para o dirver e sussurrando-a levemente.

  • Se você usar, por exemplo, pulldown, poderá encontrar menor potência para ajustar o pino à saída e reduzi-lo, mas essa é uma opção que pode ser decidida no devido tempo.

  • Quase à parte - NUNCA permita que os diodos de proteção manejem "quaisquer correntes significativas" em qualquer estágio durante a operação. Permitir que eles façam isso pode levar a uma ação totalmente inexplicável do processador. Quanto menor a corrente, menor a chance de as coisas darem errado - e mais difícil encontrá-las quando o fazem.


1
Resposta muito perspicaz. Muito obrigado. Você pode elaborar um pouco mais sobre isso - "Se você se preocupa muito com ESD, pode usar baixas saídas com pull downs - pois um caminho de baixa impedância (provavelmente) oferecerá melhor proteção contra ESD"? Se estiver configurando para uma saída - você abriria o dreno ou empurraria o pull (alto / baixo) por padrão?
IntelliChick

2

Para que você está otimizando? A otimização de custos determina que você defina pinos não utilizados para saídas. A otimização da confiabilidade determina que todos os níveis de pinos sejam definidos, mesmo no curto período antes que o firmware tenha a chance de definir pinos não utilizados para o que julgar apropriado.

Uma vez tive que verificar os cálculos de confiabilidade de uma placa processadora. Foi bem projetado, com tampas de desacoplamento em todo o lugar e resistências de todos os pinos de E / S. O engenheiro de confiabilidade pegou seu manual, adicionou as taxas de falha de todos os componentes envolvidos e terminou com um número dominado pelas taxas de falha dos componentes passivos. Esse número foi superior ao requisito, por isso tivemos um problema. Remova esses resistores e a figura ficaria bem. Mas com essa proposta, os engenheiros elétricos começaram a gritar de raiva (com razão, IMO). Não me lembro como a história terminou; Acho que fomos ao cliente e pedimos a dispensa por omitir as taxas de falha dos resistores do cálculo, alegando que eles não carregavam corrente significativa.


1

Acabei de configurar os pinos não utilizados como saídas e os reduzi.


você normalmente os colocaria para empurrar ou abrir o dreno? E nos dois casos você os colocaria em nível baixo? Você pode me dizer por que você escolheria um sobre o outro.
IntelliChick

@ Leon Heller - que atende ao teste "geralmente funciona", mas falha "quando o micrprocessador não inicializa corretamente, ou quando Murphy alterna um pouco semi-aleatoriamente, como ocasionalmente faz. , funciona.
Russell McMahon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.