Qual è un buon modo per mcu di determinare su quale versione hardware è in esecuzione?


13

Sto lavorando alla progettazione di un nuovo prodotto e probabilmente ci saranno piccole o grandi modifiche / correzioni hardware nel corso della vita del prodotto. Per futuri aggiornamenti del firmware sul campo ho bisogno di un modo per determinare la revisione dell'hardware. Qual è una buona strategia?

Attualmente sto tirando su / giù due perni di riserva con resistori esterni e controllando il motivo. Ciò consente solo 4 revisioni hardware, ma potrebbe essere sufficiente per scopi pratici. Potrebbe diventare un problema se avessi bisogno di uno o entrambi quei pin in una futura revisione dell'hardware.

Immagino che un modo più economico potrebbe essere quello di avere un divisore di resistenza collegato a un pin ADC. Ogni revisione hardware potrebbe avere resistori di valore diverso. Purtroppo non ho alcun ADC di riserva nel mio progetto attuale.

Immagino che un altro modo potrebbe essere quello di codificare il numero di versione dell'hardware in una EEPROM o il flash MCU durante la produzione? (Non abbiamo quella struttura al momento.)

Immagino che sto cercando suggerimenti per un metodo flessibile e robusto.

[MODIFICARE]

Ri. suggerimento di @ trav1s: non ho un bus di indirizzo di per sé ma ho una EEPROM 24LCxx sul bus I2C. I 3 bit bassi dell'indirizzo slave sono cablati. Immagino di poter cambiare i bit dell'indirizzo e cercare la EEPROM durante l'avvio.

Risposte:


7

Questo è qualcosa di cui mi occupo su base permanente. Abbiamo hardware molto complesso presente sul campo da quasi 10 anni, con diverse versioni di vari sottosistemi. Alcuni sottosistemi hanno un codice a 2 bit, ma come hai detto, non è sempre abbastanza.

Il suggerimento EEPROM è buono, ma richiede la programmazione della EEPROM e il popolamento della scheda con la versione giusta.

Quello che suggerirei è un registro a scorrimento in-serial in parallelo a 8 bit come un 74HC166. Il numero di versione può essere impostato sull'ingresso dalla scheda PC stessa collegando gli ingressi HIGH o LOW e quindi sono necessari solo 3 pin per caricare e leggere il registro a scorrimento da un MCU.


Mi piace che la versione hw sia cablata sulla scheda, in questo modo ho bisogno di una sola versione del firmware e non ho bisogno di gestire EEPROM preprogrammate. Sembra che si possa trovare un registro a turni per circa USD 0,1 e va bene.
Morten,

2
Sulla stessa linea, potresti anche usare un espansore di porte I2C che pende dal tuo bus I2C. Potrebbe essere un po 'più costoso, però.
alex.forencich,

8

Non userei un numero di versione programmato nel microcontrollore. A meno che il software non sia diverso per le diverse versioni della scheda, ma la versione della scheda mi sembra superflua. Possiedi il minor numero possibile di versioni del software del microcontrollore, idealmente solo una. Ogni versione diversa può causare problemi logistici.

Il codice EEPROM è una buona idea, perché consente molti codici di scheda diversi, ma lo estrae dal microcontrollore, in un dispositivo separato. EEPROM è costoso per grandi capacità (molto più costoso per bit rispetto a Flash), ma per pochi byte le puoi trovare a buon mercato. Questo è solo 16 centesimi su 100 e necessita solo di 1 linea I / O.

Un modo per ridurre la possibilità di errori consiste nell'avere un pacchetto diverso per ogni versione della scheda. Quindi avere un batch di EEPROM programmato con una versione numero 1 in SOT-23, la prossima versione 2 in MSOP, ecc. Quindi non è possibile avere una EEPROM versione 1 su una scheda versione 2.


Grazie. Questa potrebbe essere una domanda stupida, ma come faccio a programmare una serie di EEPROM prima di metterle sul tavolo? Non ho la possibilità di togliere le EEPROM dal nastro, programmarle, rimetterle su nastro e inviare il nastro all'assemblatore PCB.
Morten,

@morten - Il tuo fornitore può farlo per te. Invii loro il tuo file (quell'unico byte :-)) e ottieni le parti programmate indietro, contrassegnate con un segno a tua scelta. Il costo dipenderà dalla dimensione del lotto; avrai un costo fisso + un costo per parte. Una volta abbiamo calcolato se non sarebbe stato più economico fare noi stessi la programmazione, ma in ogni caso per migliaia non ne è valsa la pena.
Stevenvh,

4

Un'opzione che utilizzerà solo due pin digitali è qualcosa del genere:

Schema elettrico

Modificando i valori R1 e C1 è possibile avere tempi di carica diversi per il condensatore che è possibile misurare per determinare la versione dell'hardware.


Ah, soluzione abbastanza intelligente :-)
morten,

2

Se nel bus degli indirizzi è presente uno spazio inutilizzato, è possibile posizionare sul bus un registro ROM che può essere letto dall'MCU. Il registro conterrebbe il numero di versione dell'hardware. Quando la MCU legge da quell'indirizzo il registro scriverà il suo valore sul bus dati. Il registro potrebbe essere cablato sulla scheda o se vuoi essere in grado di cambiare il numero di versione a mani nude potresti creare pin che possono essere legati su / giù come stai facendo ora.


Forse potrei usare l'indirizzo della EEPROM stessa ... vedi modifica alla domanda.
Morten,

OK. Non sapevo che esistesse un bus I2C. Forse potresti semplicemente creare un piccolo slave I2C che legge il numero di versione quando l'MCU legge da esso.
Travisbartley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.