Qual é uma boa maneira para o mcu determinar em qual versão de hardware está sendo executado?

13

Estou trabalhando em um novo design de produto e provavelmente haverá pequenas / grandes alterações / correções de hardware durante a vida útil do produto. Para futuras atualizações de firmware no campo, preciso de uma maneira de determinar a revisão do hardware. O que é uma boa estratégia?

Atualmente, estou puxando dois pinos sobressalentes para cima / baixo com resistores externos e verificando o padrão. Isso permite apenas quatro revisões de hardware, mas isso pode ser suficiente para fins práticos. Pode se tornar um problema se eu precisar de um ou dos dois pinos em uma futura revisão de hardware.

Eu acho que uma maneira mais econômica seria ter um divisor de resistor conectado a um pino ADC. Cada revisão de hardware pode ter diferentes resistores de valor. Infelizmente, não tenho ADCs de reposição no meu design atual.

Eu acho que outra maneira poderia ser codificar o número da versão do hardware em uma EEPROM ou o flash da mcu durante a produção? (Não temos essa facilidade no momento.)

Acho que estou procurando sugestões para um método flexível e robusto.

[EDITAR]

Ré. sugestão de @ trav1s: não tenho um barramento de endereços em si, mas tenho uma EEPROM 24LCxx no barramento I2C. Os 3 bits baixos do endereço escravo são conectados. Acho que poderia alterar os bits de endereço e procurar a EEPROM durante a inicialização.

morten
fonte

Respostas:

7

Isso é algo com que eu lido continuamente. Temos hardware muito complexo que está em campo há quase 10 anos, com diferentes versões de vários subsistemas. Alguns dos subsistemas têm um código de 2 bits, mas como você mencionou, isso nem sempre é suficiente.

A sugestão da EEPROM é boa, mas requer a programação da EEPROM e o preenchimento da placa com a versão correta.

O que eu sugeriria é um registro paralelo de saída paralela de 8 bits como um 74HC166. O número da versão pode ser definido na entrada pela própria placa PC, vinculando as entradas HIGH ou LOW e, em seguida, você precisa apenas de 3 pinos para carregar e ler o registro de deslocamento de um MCU.

Lyndon
fonte
Eu gosto que a versão hw esteja conectada na placa, dessa forma eu preciso de apenas uma versão de firmware e não preciso lidar com EEPROMs pré-programadas. Parece que um registro de turno pode ser encontrado por cerca de US $ 0,1 e isso é bom.
morten
2
Na mesma linha, você também pode usar um expansor de porta I2C pendurado no barramento I2C. Pode ser um pouco mais caro, no entanto.
alex.forencich
8

Eu não usaria um número de versão programado no microcontrolador. A menos que o software seja diferente para diferentes versões da placa, mas a versão da placa parece supérflua para mim. Tenha o mínimo possível de versões do software do microcontrolador, idealmente apenas uma. Cada versão diferente pode causar problemas logísticos.

O código EEPROM é uma boa idéia, pois permite vários códigos de placa diferentes, mas retira-o do microcontrolador, em um dispositivo separado. A EEPROM é cara para grandes capacidades (muito mais cara por bit que o Flash), mas por alguns bytes você pode encontrá-las baratas. Este é apenas 16 centavos em 100s e precisa apenas de 1 linha de E / S.

Uma maneira de diminuir a chance de erros é ter um pacote diferente para cada versão da placa. Portanto, tenha um lote de EEPROMs programados com um número de versão 1 no SOT-23, a próxima versão 2 no MSOP, etc. Então você não pode ter um EEPROM da versão 1 em uma placa da versão 2.

stevenvh
fonte
Valeu. Essa pode ser uma pergunta estúpida, mas como faço para programar um lote de EEPROMs antes de colocá-las no quadro? Não tenho a capacidade de retirar as EEPROMS da fita, programá-las, colocá-las novamente em fita e enviá-las ao montador de PCB.
morten
@ Morten - Seu fornecedor pode fazer isso por você. Você envia seu arquivo (aquele byte :-)) e programa as partes de volta, marcadas com uma marcação de sua escolha. O custo dependerá do tamanho do lote; você terá um custo fixo + um custo por peça. Uma vez calculamos se não seria mais barato fazer a programação sozinhos, mas, de qualquer forma, para milhares, não valeu a pena.
stevenvh
4

Uma opção que usará apenas dois pinos digitais é algo como isto:

Diagrama de circuito

Alterando os valores R1 e C1, você pode ter tempos de carga diferentes para o capacitor que pode ser medido para determinar a versão do hardware.

Bruno Ferreira
fonte
Aha, solução inteligente bastante :-)
morten
2

Se houver algum espaço não utilizado no barramento de endereços, você poderá colocar um registro de ROM no barramento que possa ser lido pelo MCU. O registro conteria o número da versão do hardware. Quando o MCU lê desse endereço, o registro grava seu valor no barramento de dados. O registro pode ser conectado no quadro ou, se você quiser alterar o número da versão com as próprias mãos, poderá criar pinos que podem ser amarrados / abaixados como você está fazendo agora.

travisbartley
fonte
Talvez eu possa usar o endereço da própria EEPROM ... veja editar na pergunta.
morten
ESTÁ BEM. Não sabia que havia um ônibus I2C. Talvez você possa fazer um pequeno escravo I2C que lê o número da versão quando o MCU lê a partir dele.
Travisartley