Codierungsversion oder Konfiguration auf der Leiterplatte

10

Ich muss Informationen über die Version oder Konfiguration auf der Karte / elektrisch codieren, damit die Firmware erkennen kann, welches Kartenlayout verwendet wird.

Welche Optionen sind möglich und welche Vor- und Nachteile haben sie?

Henrik Hansen
quelle
1
Es gibt auch dieses Q von vor
einiger

Antworten:

14

Auf den ersten Blick fallen mir zwei einfache Lösungen ein.

  1. Schließen Sie n Leitungen an den GPIO Ihres Mikrocontrollers an. Binden Sie diese je nach Board-Version hoch oder niedrig. Dies würde Ihnen Kartenkonfigurationsoptionen geben. Dies würde n Pins an Ihrem Mikrocontroller verwenden. Die statische Stromaufnahme wäre vernachlässigbar.2n
  2. Haben Sie einen Eingang zum ADC des Mikrocontrollers und verwenden Sie einen Spannungsteiler mit unterschiedlichen Werten, abhängig von der Platinenkonfiguration. Dies würde nur einen einzigen Mikrocontroller-Pin verwenden. Dies hat den Nachteil, dass statischer Strom durch den Teiler gezogen wird. Es wäre auch anfällig für Stücklistenfehler, während der erste Vorschlag fest mit der Karte verbunden ist.

Diese beiden Vorschläge haben insofern eine Schwäche, als der Endbenutzer sie leicht ändern könnte, beispielsweise um "gesperrte" Funktionen zu öffnen. Dies ist möglicherweise kein Problem für Sie, aber etwas, das Sie berücksichtigen sollten.

awjlogan
quelle
1
Es gibt auch eine Kombination von [1] und [2]. Sie können einen Pin eines Mikrocontrollers für den ADC verwenden, aber dieselbe Wertkomponente verwenden, die parallel geschaltet ist, um einen Spannungsteiler zu bilden. So können Sie beispielsweise vier 10k-Widerstände haben, die 10k / float (zu vcc ziehen), float / 10k (zu gnd ziehen), 10k / 10k (vcc / 2), 5k / 10k (2/3 von vcc), 10k / bilden. 5 k (1/3 von vcc). Kurz gesagt: Eine Zeile in der Stückliste, nur eine andere Menge und ein ADC-Eingang erforderlich. Es hilft auch optisch.
Sokrates
2
Sie können die statische Stromaufnahme der ADC-Lösung beseitigen, wenn Sie einen zweiten Pin sparen können: Ersetzen Sie anstelle eines Spannungsteilers zwischen VCC und GND entweder VCC oder GND durch den zweiten Pin - Sie müssen die Platinenkonfiguration nur einmal lesen Stellen Sie zu Beginn des Programms den Pin nach Bedarf hoch / niedrig ein, um den Spannungsteiler zu aktivieren, führen Sie die ADC-Messung durch und schalten Sie den Pin so um, dass beide Enden des Spannungsteilers auf dem gleichen Potential liegen und kein Strom fließt.
Aleksi Torhamo
1
Die GPIO-Version ist auch anfällig für Stücklistenfehler, da diese normalerweise mit Null-Ohm-Verbindungen konfiguriert sind. Sie könnten es im Schaltplan und Layout tun, aber das ist teurer (Layout- Zeitkosten ).
Graham
1
In Bezug auf den ADC haben wir dies für Produkte verwendet, bei denen ich derzeit arbeite. Sie müssen jedoch mit Widerstandstoleranzen vorsichtig sein. Wenn Ihre beiden Widerstände eine Toleranz von 1% haben, kann die Spannung bis zu 2% betragen, sodass Sie höchstens 50 Schritte erhalten, die Sie auflösen können. In der Praxis ist es sicherer, das zu halbieren. Wenn Sie also 1% Widerstände und einen 5-V-Bereich an Ihrem ADC haben, möchten Sie, dass Versionen in Schritten von 0,2 V gemeldet werden.
Graham
9

Ich habe zuvor ein Schieberegister mit hoch und niedrig gebundenen Pins verwendet, um die Board-Revision zu codieren. Wenn Sie SPI bereits für etwas auf Ihrem Board verwenden, ist es trivial, es zu lesen.

Wenn Sie in der Lage sein müssen, die ID zur Laufzeit zu ändern, ist es eine gute Idee, Jumper zu verwenden, anstatt die Eingaben mit Traces zu verknüpfen.

Colin
quelle
Ich habe nach nicht eindeutigen Silizium-Seriennummern-ICs gegoogelt, aber dies ist eine clevere Alternative. Vor allem, wenn Sie es mit einem Einzeldraht-E / A-Expander kombinieren.
Jeroen3
7

Einige Optionen, die mir einfallen:

SMD PADS / O OHM Widerstandsverbindungen. Verwenden Sie ein Binärsystem für die Hardwarekonfiguration, um die Anzahl der Pins für Ihren Prozessor zu verringern.

Jumper. Die Platine würde 2xN Anschlussstifte hinzufügen und einen Jumper an den rechten Stift hinzufügen, damit Sie Ihre Konfiguration auswählen können. Ein Fehler ist leichter zu beheben. Dies ist möglicherweise etwas kostspielig und verbraucht je nach Jumper mehr Platz auf der Platine.

Wenn Sie ein EEPROM auf der Karte haben, können Sie die Konfiguration möglicherweise in den Speicher einbetten.

Ist es möglich, dass Sie die Firmware selbst mit einem #define oder ähnlichem ändern? Dann benötigen Sie keinen Platz auf der Platine und keine zusätzlichen Pins für die Versionserkennung.

R. Joshi
quelle
1

Ein-Draht-EEPROMs sind eine gute Lösung, da sie nur einen GPIO benötigen, aber eine große Menge an Konfigurationsinformationen speichern können. Sie ermöglichen es dem Mikrocontroller auch, diese Informationen während des Board-Tests zu schreiben (z. B. Kalibrierungsdaten). Viele haben einen Schreibschutzstift oder ein einmalig programmierbares Bit, um weitere Änderungen zu verhindern.

Weitere Vorteile sind nützliche Funktionen wie garantierte eindeutige Seriennummern.

Diese Option wird in vielen Systemen wie Oszilloskopsonden und Batterien verwendet, da nur eine einzige Datenleitung benötigt wird. Das EEPROM kann sogar über die Datenleitung selbst mit Strom versorgt werden.

Der Hauptnachteil sind die Kosten. Die Kosten sind nicht hoch, aber bei Massenprodukten können ein paar Cent eine Rolle spielen.

Ein Beispiel für ein solches EEPROM ist der DS2431, der 1 KB speichert.

Benutzer
quelle