¿Cuál es una buena manera para que el mcu determine en qué versión de hardware se está ejecutando?

12

Estoy trabajando en un nuevo diseño de producto y probablemente habrá cambios / correcciones de hardware pequeños o grandes durante la vida útil del producto. Para futuras actualizaciones de firmware en el campo necesito una forma de determinar la revisión de hardware. ¿Qué es una buena estrategia?

Actualmente estoy subiendo / bajando dos pines de repuesto con resistencias externas y comprobando el patrón. Esto solo permite 4 revisiones de hardware, pero eso podría ser suficiente para propósitos prácticos. Podría convertirse en un problema si necesito uno o ambos pines en una futura revisión de hardware.

Supongo que una forma más económica podría ser tener un divisor de resistencia conectado a un pin ADC. Cada revisión de hardware podría tener diferentes resistencias de valor. Desafortunadamente, no tengo ningún ADC de repuesto en mi diseño actual.

¿Supongo que otra forma podría ser codificar el número de versión de hardware en una EEPROM o el flash mcu durante la producción? (No tenemos esa facilidad en este momento).

Supongo que estoy buscando sugerencias para un método flexible y robusto.

[EDITAR]

Re. Sugerencia de @ trav1s: No tengo un bus de direcciones per se, pero tengo una EEPROM 24LCxx en el bus I2C. Los 3 bits bajos de la dirección del esclavo están cableados. Supongo que podría cambiar los bits de dirección y buscar la EEPROM durante el inicio.

    
pregunta morten

4 respuestas

6

Esto es algo con lo que trato de manera continua. Tenemos un hardware muy complejo que ha estado en el campo durante casi 10 años, con diferentes versiones de varios subsistemas. Algunos de los subsistemas tienen un código de 2 bits, pero como mencionó, no siempre es suficiente.

La sugerencia de EEPROM es buena, pero requiere la programación de la EEPROM y llenar la pizarra con la versión correcta.

Lo que sugeriría es un registro de desplazamiento de salida paralelo en serie de 8 bits como un 74HC166. El número de versión se puede configurar en la entrada por medio de la placa PC, atando las entradas ALTA o BAJA, y luego solo necesita 3 pines para cargar y leer el registro de desplazamiento desde una MCU.

    
respondido por el lyndon
8

No usaría un número de versión programado en el microcontrolador. A menos que el software sea diferente para las diferentes versiones de la placa, la versión de la placa me parece superflua. Tenga la menor cantidad de versiones del software del microcontrolador como sea posible, idealmente solo una. Cada versión diferente puede causar problemas logísticos.

El código EEPROM es una buena idea, ya que permite lotes de diferentes códigos de placa, pero sáquelo del microcontrolador, en un dispositivo separado. La EEPROM es cara para grandes capacidades (mucho más cara por bit que Flash), pero para unos pocos bytes puede encontrarla barata. Este solo tiene 16 centavos en 100 y solo necesita 1 línea de E / S.

Una forma de reducir la posibilidad de errores es tener un paquete diferente para cada versión de placa. Entonces, tenga un lote de EEPROM programadas con una versión número 1 en SOT-23, la próxima versión 2 en MSOP, etc. Entonces no puede tener una versión 1 EEPROM en una placa de la versión 2.

    
respondido por el stevenvh
4

Una opción que usará solo dos pines digitales es algo como esto:

Al cambiar los valores R1 y C1, puede tener diferentes tiempos de carga para el condensador que puede medir para determinar la versión del hardware.

    
respondido por el Bruno Ferreira
2

Si hay algún espacio no utilizado en el bus de direcciones, puede colocar un registro ROM en el bus que puede leer la MCU. El registro contendría el número de versión del hardware. Cuando la MCU lee desde esa dirección, el registro escribiría su valor en el bus de datos. El registro podría estar cableado en el tablero o, si desea poder cambiar el número de versión con sus propias manos, puede hacer alfileres que se pueden atar hacia arriba / abajo como lo está haciendo ahora.

    
respondido por el travisbartley

Lea otras preguntas en las etiquetas