Ich arbeite an einem neuen Produktdesign und es wird wahrscheinlich kleine oder große Hardware-Änderungen / Korrekturen während der gesamten Lebensdauer des Produkts geben. Für zukünftige Firmware-Updates im Feld benötige ich eine Möglichkeit, die Hardware-Revision zu ermitteln. Was ist eine gute Strategie?
Ich ziehe gerade zwei Ersatzstifte mit externen Widerständen nach oben / unten und überprüfe das Muster. Dies ermöglicht nur 4 Hardware-Revisionen, aber dies könnte für praktische Zwecke ausreichen. Es könnte zu einem Problem werden, wenn ich in einer zukünftigen Hardwarerevision einen oder beide dieser Pins benötige.
Ich denke, ein wirtschaftlicherer Weg könnte sein, einen Widerstandsteiler an einen ADC-Pin anzuschließen. Jede Hardwarerevision kann unterschiedliche Wertwiderstände haben. Leider habe ich in meinem aktuellen Design keine Ersatz-ADCs.
Ich vermute, eine andere Möglichkeit könnte sein, die Hardware-Versionsnummer in einem EEPROM oder dem mcu-Flash während der Produktion zu verschlüsseln? (Wir haben diese Einrichtung im Moment nicht.)
Ich schätze, ich suche nach Vorschlägen für eine flexible und robuste Methode.
[BEARBEITEN]
Re. Vorschlag von @ trav1s: Ich habe keinen Adressbus an sich, aber ich habe ein 24LCxx-EEPROM auf dem I2C-Bus. Die unteren 3 Bits der Slave-Adresse sind fest verdrahtet. Ich denke, ich könnte die Adressbits ändern und während des Startvorgangs nach dem EEPROM suchen.
Ich würde keine im Mikrocontroller programmierte Versionsnummer verwenden. Es sei denn, die Software ist für verschiedene Boardversionen unterschiedlich, aber dann erscheint mir die Boardversion überflüssig. Verwenden Sie so wenige Versionen der Mikrocontroller-Software wie möglich, idealerweise nur eine. Jede andere Version kann zu logistischen Problemen führen.
Der EEPROM-Code ist eine gute Idee, da er viele verschiedene Kartencodes zulässt , diese jedoch in einem separaten Gerät aus dem Mikrocontroller entfernt. EEPROM ist teuer für große Kapazitäten (viel teurer pro Bit als Flash), aber für ein paar Bytes kann man sie billig finden. Dieser ist nur 16 Cent in 100s und benötigt nur 1 I / O-Leitung.
Eine Möglichkeit, die Wahrscheinlichkeit von Fehlern zu verringern, besteht darin, für jede Board-Version ein anderes Paket zu haben. Lassen Sie also eine Reihe von EEPROMs mit der Versionsnummer 1 in SOT-23, der nächsten Version 2 in MSOP usw. programmieren. Dann können Sie auf einer Karte der Version 2 kein EEPROM der Version 1 haben.
quelle
Eine Option, die nur zwei digitale Stifte verwendet, sieht folgendermaßen aus:
Durch Ändern der R1- und C1-Werte können Sie unterschiedliche Ladezeiten für den Kondensator festlegen, die Sie messen können, um die Hardwareversion zu bestimmen.
quelle
Wenn im Adressbus nicht genutzter Speicherplatz vorhanden ist, können Sie ein ROM-Register auf dem Bus platzieren, das von der MCU gelesen werden kann. Das Register würde die Versionsnummer der Hardware enthalten. Wenn die MCU von dieser Adresse liest, würde das Register seinen Wert auf den Datenbus schreiben. Das Register könnte auf der Platine fest verdrahtet sein, oder wenn Sie die Versionsnummer mit bloßen Händen ändern möchten, könnten Sie Stifte herstellen, die wie jetzt hoch- und runtergebunden werden können.
quelle