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.
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.
fonte
Uma opção que usará apenas dois pinos digitais é algo como isto:
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.
fonte
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.
fonte