Recomendación para la configuración predeterminada de pines no utilizados en un STM32 (ARM Cortex M3): ¿subir / bajar?

13

Actualmente estamos utilizando varias variantes de la familia de microcontroladores STM32. Me gustaría saber lo siguiente:

1) ¿Cuáles son las configuraciones predeterminadas recomendadas para los pines de los microcontroladores en general si tiene la opción de seleccionar tanto pull-ups como pull-ups? ¿Cuáles son los pros y los contras de ir con uno u otro? (Asumiendo que los configurará por defecto como entradas)

2) En particular, me gustaría saber qué hacer con los pines no utilizados para la familia de microcontroladores STM32. Para mí es obvio que no debemos dejar los pines flotando (que es todo lo que dice la hoja de datos, :(), pero ¿debería configurarlos para que ingresen con pull ups o input con pull down? En particular, me gustaría para elegir una configuración que sea menos susceptible a ESD y también, si es posible, consume la menor cantidad de energía.

3) Para pines críticos, ¿deberíamos confiar en el firmware para configurar correctamente los pines en el estado predeterminado correcto o esta responsabilidad debería recaer en el hardware externo (conexión de pull-ups o pull-ups externos)? Si los valores elegidos para las resistencias externas son mayores que los pull-ups o pull-ups internos, la configuración en el firmware no importa.

Lo profesional que puedo ver por hacer lo anterior es que si el micro no se inicializa correctamente por cualquier motivo (hardware defectuoso o similares), no confiamos en el firmware para configurar el pin correctamente.

La desventaja que veo es que cuesta más hacer esto es hardware.

Cualquier luz que pueda arrojar sobre lo anterior será realmente apreciada.

Gracias..

IntelliChick
fuente
¿Por qué no establecer pines no utilizados como salidas? Eso eliminaría el problema de pull-up vs pull-down.
Connor Wolf
Nota: "En cualquier evento de reinicio, todos los GPIO son entradas flotantes. Esto evita cualquier daño accidental a los GPIO en caso de emergencia". embedded-lab.com/blog/stm32-gpio-ports-insights
cp.engr

Respuestas:

10

Esta respuesta no es específica de STM32, pero se basa en la experiencia y muchas de esas discusiones durante muchos (muchos) años. Otros pueden agregar a esto: cubre los puntos principales (creo), pero puede no estar completo.

Es alentador ver a alguien haciendo estas preguntas simples pero fundamentales y mostrando una conciencia de cómo esas "pequeñas cosas" pueden "aglomerar a las pandillas" en la vida real.

es decir, "si el micro no se inicializa correctamente ..." realmente dice "... cuando el micro no se inicializa correctamente ..." :-) - y es obvio que te das cuenta de esto.

Entonces:

  • El uso de pullup o pulldown externo es esencial para aquellos realmente interesados ​​en obtener un resultado bien definido. Este es el mayor deber que se debe hacer aquí. Todo lo demás es una bonificación. es decir, configurar entradas con pullxxx interno es un compromiso que casi siempre funcionará.
    PERO si "casi siempre" no es lo suficientemente bueno para su diseño, entonces necesita xxxs de extracción externa.

  • Pullup o down no parece tener un resultado abrumadoramente mejor. Puede variar entre los circuitos integrados, pero se puede determinar a partir de la hoja de datos. En igualdad de condiciones (por así decirlo), preferiría el pull-down ya que existe la posibilidad de una menor fuga a las corrientes externas del dispositivo, pero es probable que esto sea mínimo en un PCB con revestimiento conformado y / o un entorno benigno.

  • Es posible que desee ver la acción de inicio si realmente le importa. por ejemplo, un pasador levantado comenzará bajo y transitará alto en algún momento. Un pasador desplegado probablemente se mantendrá bajo en todo momento. Probablemente esto no sea importante, pero se menciona por completo.

  • La susceptibilidad a ESD será específica del dispositivo, muy probablemente simétrica y, en promedio, en muchos procesadores probablemente favorezca la caída, ya que los controladores tienden a hundirse mejor que la fuente si son asimétricos. Si le importa mucho la ESD, entonces puede que desee utilizar salidas bajas con bajadas, ya que una ruta de baja impedancia (probablemente) ofrecerá una mejor protección contra ESD. Pero si le importa mucho la ESD, deseará diseñarla de otras maneras y no confiar en la protección en IC como su protección principal.

  • Con respecto a la pregunta 3: es deseable pullxxxs externos, pero parece seguro usar valores que están en el límite superior del diseño adecuado y luego usar xxx internos en paralelo si lo desea. Sin embargo, dado que los xxxs de extracción interna a menudo tienen un Reffectivo 2: 1, puede obtener la corriente R más grande y la más pequeña usando solo externo. Lo que, por supuesto, desea evitar son pull-ups externos y pull-ups internos o viceversa, pero es poco probable que sea un problema.

  • Cuando digo "... limitando el extremo superior del diseño adecuado ..." quiero decir exactamente eso y no "más allá del límite ...". es decir, el pin tendrá un valor específico de resistencia que permite cumplir con la peor especificación de Vin. Una resistencia más grande puede tomar menos corriente en la resistencia pero puede comenzar a encender muy ligeramente el interruptor interno. es decir, puede haber una Rpulldown_current versus la compensación de corriente general más baja a medida que el controlador interno comienza a ver la corriente de fuga (que será extremadamente pequeña) aumentando la corriente al conductor y susurrándola muy ligeramente.

  • Si usa, por ejemplo, el menú desplegable, puede encontrar una potencia más baja para configurar el pin a la salida y conducirlo bajo, pero esta es una opción que se puede decidir a su debido tiempo.

  • Casi a un lado: NUNCA permita que los diodos de protección manejen "cualquier corriente significativa" en cualquier etapa durante la operación. Permitirles hacerlo puede llevar a una acción del procesador totalmente inexplicable. Cuanto menor sea la corriente, menor será la posibilidad de que las cosas salgan mal, y más difícil de encontrar cuando lo hagan.

Russell McMahon
fuente
1
Muy perspicaz respuesta. Muchas gracias. ¿Puede explicar un poco más sobre esto: "Si le importa mucho la ESD, entonces puede desear utilizar salidas bajas con pull-down, ya que una ruta de baja impedancia (probablemente) ofrecerá una mejor protección ESD"? Si se configura en una salida, ¿iría a abrir el drenaje o empujar, jalar (alto / bajo) de forma predeterminada?
IntelliChick
2

¿Para qué estás optimizando? La optimización de costos dicta que establezca pines no utilizados en las salidas. La optimización de la confiabilidad dicta que todos los niveles de los pines estén definidos, incluso en el corto período antes de que el firmware tenga la posibilidad de establecer los pines no utilizados a lo que considere apropiado.

Una vez tuve que verificar los cálculos de confiabilidad de una placa de procesador. Estaba bien diseñado, con tapas de desacoplamiento en todo el lugar y resistencias de extracción en todos los pines de E / S. El ingeniero de confiabilidad sacó su manual, agregó las tasas de falla de todos los componentes involucrados y terminó con una cifra dominada por las tasas de falla de los componentes pasivos. Esa cifra fue superior al requisito, por lo que tuvimos un problema. Retire esas resistencias, y la cifra estaría bien. Pero ante esa propuesta, los ingenieros eléctricos comenzaron a gritar con ira (con razón, en mi opinión). No recuerdo cómo terminó la historia; Creo que fuimos al cliente y le pedimos a dispensador que omitiera las tasas de falla de las resistencias del cálculo, debido a que no tenían una corriente significativa.

Wouter van Ooijen
fuente
1

Simplemente configuro pines no utilizados como salidas y los configuro en bajo

Leon Heller
fuente
¿los configuraría normalmente para empujar-jalar o abrir el drenaje? ¿Y en ambos casos los pondrías a bajo? ¿Me puede decir por qué elegiría uno sobre el otro?
IntelliChick
@Leon Heller: cumple con la prueba de "funciona habitualmente", pero falla "cuando el microprocesador no se inicializa correctamente, o cuando Murphy se voltea un poco al azar, como lo hace ocasionalmente. , funciona.
Russell McMahon