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

13

Estoy trabajando en un nuevo diseño de producto y probablemente habrá cambios / arreglos 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 del hardware. ¿Qué es una buena estrategia?

Actualmente estoy tirando dos pines de repuesto hacia arriba / abajo con resistencias externas y revisando el patrón. Esto solo permite 4 revisiones de hardware, pero eso podría ser suficiente para fines 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 resistencias de valor diferente. Lamentablemente, 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 mcu flash durante la producción? (No tenemos esa instalación 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.

Morten
fuente

Respuestas:

7

Esto es algo con lo que trato constantemente. Tenemos 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ó, eso no siempre es suficiente.

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

Lo que sugeriría es un registro de desplazamiento paralelo en serie de 8 bits como un 74HC166. La placa de la PC puede establecer el número de versión en la entrada uniendo las entradas ALTA o BAJA y luego solo necesita 3 pines para cargar y leer el registro de desplazamiento de una MCU.

Lyndon
fuente
Me gusta que la versión hw esté cableada en la placa, de esa manera solo necesito una versión de firmware y no necesito manejar EEPROM preprogramadas. Parece que se puede encontrar un registro de desplazamiento por aproximadamente USD 0.1 y eso está bien.
morten
2
En esa misma línea, también podría usar un expansor de puerto I2C colgando de su bus I2C. Sin embargo, puede ser un poco más caro.
alex.forencich
8

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

El código EEPROM es una buena idea, ya que permite muchos códigos de placa diferentes, pero retírelo del microcontrolador, en un dispositivo separado. EEPROM es costoso para grandes capacidades (mucho más caro por bit que Flash), pero por unos pocos bytes puede encontrarlos baratos. Este es solo 16 centavos en 100 y solo necesita 1 línea de E / S.

Una forma de disminuir la posibilidad de errores es tener un paquete diferente para cada versión de placa. Por lo tanto, programe un lote de EEPROM 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.

stevenvh
fuente
Gracias. Esta puede ser una pregunta estúpida, pero ¿cómo puedo programar un lote de EEPROM antes de ponerlas en el tablero? No tengo la facilidad de quitar los EEPROMS de la cinta, programarlos, volver a ponerlos en cinta y enviar la cinta al ensamblador de PCB.
morten
@morten: su proveedor puede hacerlo por usted. Les envía su archivo (ese byte :-)) y obtiene las partes programadas de nuevo, marcadas con una marca de su elección. El costo dependerá del tamaño del lote; tendrá un costo fijo + un costo por pieza. Una vez calculamos si no sería más barato hacer la programación nosotros mismos, pero en cualquier caso por miles no valió la pena.
stevenvh
4

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

Diagrama de circuito

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.

Bruno Ferreira
fuente
Ajá, solución bastante inteligente :-)
morten
2

Si hay algún espacio no utilizado en el bus de direcciones, puede colocar un registro ROM en el bus que pueda 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. La caja registradora podría estar cableada en el tablero o, si desea cambiar el número de versión con sus propias manos, puede hacer alfileres que se puedan atar / atar como lo está haciendo ahora.

Travisbartley
fuente
Tal vez podría usar la dirección de la EEPROM en sí ... ver editar para preguntar.
morten
OKAY. No sabía que había un autobús I2C. Tal vez podría hacer un pequeño esclavo I2C que lea el número de versión cuando la MCU lo lea.
travisbartley