Wie erkennen Sie die Anzahl der Pins auf einem MSP430G2553 programmgesteuert?

Ich verwende ein Launchpad, um einen MSP430G2553-Controller zu programmieren. Ich benutze es zum Debuggen. Dieser Controller hat 20 Pins. Das Endziel hier ist jedoch, mein Programm auf einem MSP430G2553IPW28R-Controller auszuführen. Dieser Controller hat 28 statt 20 Pins.

Ich verwende die Pins P3.0 und P3.1 auf dem 28-Pin-Controller für einige LEDs. Und mein Launchpad-Controller hat diese Pins nicht. Ich muss feststellen, auf welchem ​​Controller der Code ausgeführt wird.

Ich werde die JTAG-Pins meines Launchpads verwenden, um den 28-Pin-Controller zu programmieren. Die Frage ist also, wie ich programmgesteuert feststellen kann, auf welchem ​​der beiden Controller mein Code ausgeführt wird, und eine Art #define einrichten kann, um die Pins P3.0, P3.1 zu verwenden, wenn sie auf dem 28-Pin-Controller und den Pins ausgeführt werden P2.1 und P2.2 bei Ausführung auf dem Launchpad-Controller. Ich möchte nicht jedes Mal Codezeilen kommentieren und auskommentieren, wenn ich von einem Prozessor zum anderen wechsle ...

Bitte beachten Sie, dass ich Energia als meine Entwicklungsumgebung verwende.

Launchpad fehlt JTAG, meinst du den 6-Pin-Header mit SBW?
Soweit ich mich erinnere, können Sie nicht einfach versuchen, die Pins umzuschalten, da sie zwar nicht ausgebrochen sind, aber dennoch in Hardware implementiert sind. Sie sollten nicht mehrere Zeilen auskommentieren müssen. Erstellen Sie einen Satz von wenn definiert, und Sie müssten nur eine einzige Zeile ändern, wenn Sie das Paket wechseln. Wenn A definiert ist, xyz als 123 definieren, andernfalls wenn B definiert ist usw. Es kann jedoch immer noch eine Prüfung zur Kompilierungszeit für Paket oder Signatur geben. Welchen Compiler oder IDE verwendest du?
Sie müssen Code für verschiedene Konfigurationen nicht auskommentieren und auskommentieren. Fügen Sie einfach ein -D 20PIN oder -D 28PIN zu den Build-Einstellungen hinzu, und #ifdef ist um den Code für jede Auswahl.
Sind Sie bereit, einen der zusätzlichen 8 Pins zu opfern, um ihn als Bootstrap-/Laufzeit-Check zu verwenden? Stellen Sie Port 3 Pin 7 als Eingang mit Pull-up ein. Wenn der Stift auf der Platine mit Masse verbunden ist, verwenden Sie 3.0 und 3.1. Da Sie diesen Pin auf dem 20-Pin-Paket nicht niedrig binden können, wissen Sie, welches Paket verwendet wird. Um die Stromaufnahme zu minimieren, würden Sie den Pin auf Low-Ausgang ändern, nachdem die Prüfung beim Start durchgeführt wurde.

Antworten (3)

Je nach Projektkomplexität und Größe der MCU verwende ich 1 bis 3 Pins für die "PCB-Identifikation" mit externen Pulldown-Widerständen. Widerstände werden je nach Platinenrevision bestückt. Die Anwendung innerhalb der MCU betrachtet diese Pins beim Start und bestimmt, was zu tun ist.

Es hilft noch mehr, wenn Sie mehrere Produkte mit einigen Unterschieden haben, die es Ihnen ermöglichen, ein einzelnes Binärabbild für alle Hardwareversionen zu haben.

IMHO ist die am meisten bevorzugte Option, in der Dokumentation nach einer Chip-ID zu suchen. Die meisten modernen Chips bieten ein internes Register mit Chiptyp und Revision. Sie könnten das verwenden, um Ihre Logik voranzutreiben.

Für die MSP430-Familie konnte ich einige Kern-IDs in der BSL-Dokumentation (Seite 37) finden. Diese beschränken sich jedoch nur auf die Familie der Chips und unterscheiden nicht zwischen Chippaketen. Sie können immer noch versuchen, zu testen und zu überprüfen, ob es Unterschiede gibt.

Alternativ könnten Sie physische Board-Änderungen verwenden, wie z. B. das Hinzufügen von Pull-Up/Downs an bestimmten Pins, die softwaregetestet werden können, oder das Binden von Pins niedrig/hoch.

Die folgende Methode zeigt Ihnen, ob ein Pin auf dem Controller vorhanden ist. Um also festzustellen, ob wir einen 20- oder einen 28-Pin-Controller verwenden, wählen Sie einen Digital-Pin aus, der > 20 ist, und übergeben Sie ihn als Parameter an die Funktion unten. Wenn es wahr zurückgibt, haben Sie einen 28-Pin-Controller. Wenn es falsch zurückgibt, haben Sie einen 20-Pin-Controller. Ich habe dies mit meinem MSP430G2553 Launchpad getestet und habe folgende Ergebnisse:

  showPinExistence(2);
  showPinExistence(3);
  showPinExistence(5);
  showPinExistence(6);
  showPinExistence(7);
  showPinExistence(8);
  showPinExistence(11);
  showPinExistence(15);
  showPinExistence(18);
  showPinExistence(21);
  showPinExistence(22);
  showPinExistence(23);


void showPinExistence(int pin)
{
  Serial.print("Pin ");
  Serial.print(pin);
  Serial.print(" Exists: ");
  Serial.println(pinExists(pin)?"True":"False");
  Serial.flush();
}

bool pinExists(int pin)
{
    bool lowResult;
    bool highResult;

    pinMode(pin, OUTPUT);
    digitalWrite(pin, LOW);
    lowResult = digitalRead(pin);

    digitalWrite(pin, HIGH);
    highResult = digitalRead(pin);

    return lowResult != highResult;
}

Hier ist die Ausgabe für LaunchPad mit MSP430G2553 (20 Pin):

Pin 2 Exists: True
Pin 3 Exists: True
Pin 5 Exists: True
Pin 6 Exists: True
Pin 7 Exists: True
Pin 8 Exists: True
Pin 11 Exists: True
Pin 15 Exists: True
Pin 18 Exists: True
Pin 21 Exists: False
Pin 22 Exists: False
Pin 23 Exists: False

Hier ist die Ausgabe für MSP430G2553 (28 Pin):

Pin 8 Exists: True
Pin 9 Exists: True
Pin 10 Exists: True
Pin 11 Exists: True
Pin 12 Exists: True
Pin 13 Exists: True
Pin 14 Exists: True
Pin 15 Exists: True
Pin 16 Exists: True
Pin 17 Exists: True
Pin 18 Exists: True
Pin 19 Exists: True
Pin 20 Exists: True
Pin 21 Exists: True
Pin 22 Exists: True
Pin 23 Exists: True

Ich musste mit Pin 8 beginnen, weil es mir nicht gefiel, als ich versuchte, 2-7 als Ausgangspins zu setzen :-) Wie auch immer, der Punkt ist, dass Sie versuchen können, Pin 23 als Ausgangspin zu setzen und seinen Wert zu schreiben und zu lesen um festzustellen, ob der von Ihnen verwendete Chip ein 20-Pin-Chip ist oder mehr als 20 Pins hat. Ich habe keinen 32-Pin-Chip, aber ich würde mir vorstellen, dass Sie an einem Pin größer als 28 testen könnten, um festzustellen, ob es sich um einen 32-Pin-Chip handelt.

Nun, nach allem, was ich gesagt habe. Seit ich dies geschrieben habe, habe ich entdeckt, dass es jetzt 28-Pin-Unterstützung auf GitHub gibt. Ich benutze es jetzt und beziehe mich auf Pins mit ihrer richtigen P3_0, P2_0-Notation anstatt direkt auf die Pin-Nummer, und das scheint jetzt gut zu funktionieren.

Die Stifte 21,22,23 geben in der obigen Funktion falsch zurück, wenn ein 20-poliges Gehäuse verwendet wird. Ich werde es in ein paar Tagen auf einem 28-poligen Gehäuse testen.
Warten. Du bist OP. Ich nehme an, Sie haben das getestet und festgestellt, dass es funktioniert?
Ergebnisse und eine zusätzliche kurze Hilfsfunktion hinzugefügt, um der obigen Antwort hoffentlich Glaubwürdigkeit zu verleihen.
Ich stimme nicht herunter, da das Datenblatt darauf hinzudeuten scheint, dass der Port 3 auf dem 20-Pin-Gehäuse vollständig ausgeschlossen ist, was bedeutet, dass ein anderer Wafer-Die verwendet wird. Das scheint seltsam. Ich weiß mit Sicherheit, dass dies nicht funktioniert, wenn es für die Pins P2.0-P2.5 auf den 14-Pin-MSP430s verwendet wird, da der Chip derselbe ist wie der des 20-Pin-Gehäuses.
Siehe zum Beispiel den Hinweis auf Seite 328 des x2xx-Familienleitfadens. Der G2210/30 ist die 8-Pin-Version, und dies würde für P1.0, 1.1, 1.3, 1.4, 2.6 und 2.7 fehlschlagen, da das DIE das gleiche ist wie die 2211- und 2231-14-Pin-Version. Aktualisieren Sie also bitte, sobald Sie den 28/32-Pin 2253 testen können, da ich dies gerne bestätigen würde
Ich habe eine Ausgabe für einen 28-Pin-MSP430G2553 hinzugefügt, die das Vorhandensein der Pins 21-23 anzeigt, wobei die 20-Pin-Version diese Pins als falsch anzeigte.
Das funktioniert nicht. Port 3 Regs funktioniert gut auf meiner msp430g2553 Launchpad 20-Pin-Version. Ich erhalte die gleichen Ergebnisse mit Ihrem obigen Beispiel, showPinExistence() gibt false für Pins von Port 3 zurück, aber das liegt daran, dass der pinMode/digitalWrite nicht wirklich auf den P3-Port schreibt/vom P3-Port liest, sondern weil P3 nicht intern definiert ist . Was mich verwirrt, ist, dass es scheinbar auf der 28-Pin-Version für Sie funktioniert, was es nicht sollte, basierend auf dem, was ich sehe, es sei denn, Sie haben auch das Build-Ziel in Energia geändert.