Inhaltsverzeichnis:

MTP Arduino Programmierbeispiel - Gunook
MTP Arduino Programmierbeispiel - Gunook

Video: MTP Arduino Programmierbeispiel - Gunook

Video: MTP Arduino Programmierbeispiel - Gunook
Video: Roteno Labs - USB Host 2024, Juli
Anonim
MTP-Arduino-Programmierbeispiel
MTP-Arduino-Programmierbeispiel

In diesem Instructable zeigen wir, wie man die SLG46824 / 6 Arduino-Programmierskizze verwendet, um ein Dialog SLG46824 / 6 GreenPAK ™ Multiple-Time Programmable (MTP) -Gerät zu programmieren.

Die meisten GreenPAK-Geräte sind One-Time Programmable (OTP), d. h., sobald ihre nichtflüchtige Speicherbank (NVM) beschrieben ist, kann sie nicht überschrieben werden. GreenPAKs mit MTP-Funktion, wie das SLG46824 und das SLG46826, verfügen über eine andere Art von NVM-Speicherbank, die mehr als einmal programmiert werden kann.

Wir haben eine Arduino-Skizze geschrieben, die es dem Benutzer ermöglicht, ein MTP GreenPAK mit ein paar einfachen seriellen Monitorbefehlen zu programmieren. In diesem Instructable verwenden wir ein SLG46826 als unser GreenPAK mit MTP.

Wir stellen Beispielcode für Arduino Uno mit einer Open-Source-Plattform auf Basis von C/C++ bereit. Designer sollten die im Arduino-Code verwendeten Techniken für ihre spezifische Plattform extrapolieren.

Spezifische Informationen zu I2C-Signalspezifikationen, I2C-Adressierung und Speicherbereichen finden Sie im GreenPAK In-System Programming Guide auf der SLG46826-Produktseite. Dieses Instructable bietet eine einfache Implementierung dieses Programmierhandbuchs.

Im Folgenden haben wir die erforderlichen Schritte beschrieben, um zu verstehen, wie der GreenPAK-Chip programmiert wurde. Wenn Sie jedoch nur das Ergebnis der Programmierung erhalten möchten, laden Sie die GreenPAK-Software herunter, um die bereits fertige GreenPAK-Designdatei anzuzeigen. Schließen Sie das GreenPAK Development Kit an Ihren Computer an und klicken Sie auf Programm, um den benutzerdefinierten IC zu erstellen.

Schritt 1: Arduino-GreenPAK-Verbindungen

Arduino-GreenPAK-Verbindungen
Arduino-GreenPAK-Verbindungen
Arduino-GreenPAK-Verbindungen
Arduino-GreenPAK-Verbindungen

Um die NVM unseres SLG46826 GreenPAK mit unserer Arduino-Skizze zu programmieren, müssen wir zunächst vier Arduino Uno-Pins mit unserem GreenPAK verbinden. Sie können diese Pins direkt mit dem GreenPAK-Sockeladapter oder mit einem aufgelöteten GreenPAK-Breakout-Board verbinden.

Bitte beachten Sie, dass externe I2C-Pull-Up-Widerstände in Abbildung 1 nicht dargestellt sind. Bitte schließen Sie einen 4,7 kΩ Pull-Up-Widerstand von SCL und SDA an den 3,3-V-Ausgang des Arduino an.

Schritt 2: Exportieren von GreenPAK NVM-Daten aus einer GreenPAK-Designdatei

Exportieren von GreenPAK NVM-Daten aus einer GreenPAK-Designdatei
Exportieren von GreenPAK NVM-Daten aus einer GreenPAK-Designdatei
Exportieren von GreenPAK NVM-Daten aus einer GreenPAK-Designdatei
Exportieren von GreenPAK NVM-Daten aus einer GreenPAK-Designdatei
Exportieren von GreenPAK NVM-Daten aus einer GreenPAK-Designdatei
Exportieren von GreenPAK NVM-Daten aus einer GreenPAK-Designdatei

Wir stellen ein sehr einfaches GreenPAK-Design zusammen, um zu veranschaulichen, wie die NVM-Daten exportiert werden. Das folgende Design ist ein einfacher Pegelumsetzer, bei dem die blauen Pins links mit VDD (3,3 V) verbunden sind, während die gelben Pins rechts mit VDD2 (1,8 V) verbunden sind.

Um die Informationen aus diesem Design zu exportieren, müssen Sie Datei → Exportieren → NVM exportieren auswählen, wie in Abbildung 3 gezeigt.

Sie müssen dann als Dateityp Intel HEX-Dateien (*.hex) auswählen und die Datei speichern.

Jetzt müssen Sie die.hex-Datei mit einem Texteditor (wie Notepad ++) öffnen. Um mehr über das HEX-Dateiformat und die Syntax von Intel zu erfahren, besuchen Sie die Wikipedia-Seite. Für diese Anwendung interessieren wir uns nur für den Datenteil der Datei, wie in Abbildung 5 gezeigt.

Markieren und kopieren Sie die 256 Byte der NVM-Konfigurationsdaten, die sich in der HEX-Datei befinden. Jede Zeile, die wir kopieren, ist 32 Zeichen lang, was 16 Bytes entspricht.

Fügen Sie die Informationen in den hervorgehobenen Abschnitt nvmString der Arduino-Skizze ein, wie in Abbildung 6 gezeigt. Wenn Sie einen Nicht-Arduino-Mikrocontroller verwenden, können Sie eine Funktion schreiben, um die in der GreenPAK-. GP6-Datei gespeicherten nvmData zu analysieren. (Wenn Sie eine GreenPAK-Datei mit einem Texteditor öffnen, sehen Sie, dass wir Projektinformationen in einem leicht zugänglichen XML-Format speichern.)

Um die EEPROM-Daten für Ihr GreenPAK-Design festzulegen, wählen Sie den EEPROM-Block aus dem Komponentenfenster aus, öffnen Sie sein Eigenschaftenfenster und klicken Sie auf "Daten festlegen".

Jetzt können Sie jedes Byte im EEPROM einzeln mit unserer GUI-Oberfläche bearbeiten.

Sobald Ihre EEPROM-Daten eingestellt sind, können Sie sie in eine HEX-Datei exportieren, indem Sie die gleiche Methode verwenden, die zuvor für den Export der NVM-Daten beschrieben wurde. Fügen Sie diese 256 Byte EEPROM-Daten in den Abschnitt eepromString der Arduino-Skizze ein.

Für jedes benutzerdefinierte Design ist es wichtig, die Schutzeinstellungen auf der Registerkarte „Sicherheit“der Projekteinstellungen zu überprüfen. Auf dieser Registerkarte werden die Schutzbits für die Matrixkonfigurationsregister, das NVM und das EEPROM konfiguriert. Unter bestimmten Konfigurationen kann das Hochladen der NVM-Sequenz das SLG46824/6 auf seine aktuelle Konfiguration sperren und die MTP-Funktionalität des Chips entfernen.

Schritt 3: Verwenden Sie die Arduino-Skizze

Verwenden Sie die Arduino-Skizze
Verwenden Sie die Arduino-Skizze

Laden Sie die Skizze auf Ihren Arduino hoch und öffnen Sie den seriellen Monitor mit einer Baudrate von 115200. Jetzt können Sie die MENÜ-Eingabeaufforderungen der Skizze verwenden, um mehrere Befehle auszuführen:

● Lesen – liest entweder die NVM-Daten des Geräts oder die EEPROM-Daten unter Verwendung der angegebenen Slave-Adresse

● Löschen – löscht entweder die NVM-Daten des Geräts oder die EEPROM-Daten unter Verwendung der angegebenen Slave-Adresse

● Schreiben – Löscht und schreibt dann entweder die NVM-Daten des Geräts oder die EEPROM-Daten unter Verwendung der angegebenen Slave-Adresse. Dieser Befehl schreibt die Daten, die in den Arrays nvmString oder eepromString gespeichert sind.

● Ping – gibt eine Liste der Geräte-Slave-Adressen zurück, die mit dem I2C-Bus verbunden sind

Die Ergebnisse dieser Befehle werden auf der seriellen Monitorkonsole ausgegeben.

Schritt 4: Programmiertipps und Best Practices

Im Zuge der Unterstützung des SLG46824/6 haben wir einige Programmiertipps dokumentiert, um häufige Fallstricke beim Löschen und Schreiben in den NVM-Adressraum zu vermeiden. In den folgenden Unterkapiteln wird dieses Thema genauer beschrieben.

1. Präzise 16-Byte-NVM-Seitenschreibvorgänge ausführen:

Beim Schreiben von Daten auf die NVM des SLG46824/6 gibt es drei Techniken zu vermeiden:

● Seitenschreibvorgänge mit weniger als 16 Byte

● Seite schreibt mit mehr als 16 Byte

● Seitenschreibvorgänge, die nicht beim ersten Register innerhalb einer Seite beginnen (zB: 0x10, 0x20 usw.)

Wenn eine der oben genannten Techniken verwendet wird, ignoriert die MTP-Schnittstelle den I2C-Schreibvorgang, um zu vermeiden, dass die NVM mit falschen Informationen geladen wird. Wir empfehlen, nach dem Schreiben einen I2C-Lesen des NVM-Adressraums durchzuführen, um die korrekte Datenübertragung zu überprüfen.

2. Übertragen von NVM-Daten in die Matrix-Konfigurationsregister

Beim Schreiben des NVM werden die Matrixkonfigurationsregister nicht automatisch mit den neu geschriebenen NVM-Daten neu geladen. Die Übertragung muss manuell eingeleitet werden, indem das PAK VDD zyklisch durchlaufen wird oder indem ein Soft-Reset über I2C generiert wird. Durch Setzen des Registers in Adresse 0xC8 reaktiviert das Gerät die Power-On Reset (POR)-Sequenz und lädt die Registerdaten vom NVM neu in die Register.

3. Zurücksetzen der I2C-Adresse nach einem NVM-Erase:

Wenn der NVM gelöscht wird, wird die NVM-Adresse, die die I2C-Slave-Adresse enthält, auf 0000 gesetzt. Nach dem Löschen behält der Chip seine aktuelle Slave-Adresse in den Konfigurationsregistern, bis das Gerät wie oben beschrieben zurückgesetzt wird. Nachdem der Chip zurückgesetzt wurde, muss die I2C-Slave-Adresse bei jedem Power-Cycle oder Reset des GreenPAK in Adresse 0xCA in den Konfigurationsregistern eingestellt werden. Dies muss erfolgen, bis die neue I2C-Slave-Adressseite in die NVM geschrieben wurde.

Schritt 5: Errata-Diskussion

Errata-Diskussion
Errata-Diskussion

Beim Schreiben in das „Page Erase Byte“(Adresse: 0xE3) erzeugt das SLG46824/6 nach dem „Data“-Teil des I2C-Befehls ein nicht I2C-konformes ACK. Dieses Verhalten kann je nach Implementierung des I2C-Masters als NACK interpretiert werden.

Um diesem Verhalten Rechnung zu tragen, haben wir den Arduino-Programmierer modifiziert, indem wir den in Abbildung 11 gezeigten Code auskommentiert haben. Dieser Codeabschnitt prüft auf ein I2C-ACK am Ende jedes I2C-Befehls in der Funktion deleteChip(). Diese Funktion wird verwendet, um die NVM- und EEPROM-Seiten zu löschen. Da sich dieser Codeabschnitt in einer For-Schleife befindet, wird „return -1;“Zeile bewirkt, dass die MCU die Funktion vorzeitig beendet.

Trotz des Vorhandenseins eines NACK werden die NVM- und EEPROM-Löschfunktionen ordnungsgemäß ausgeführt. Eine detaillierte Erklärung dieses Verhaltens finden Sie unter „Problem 2: Non-I2C Compliant ACK Behavior for the NVM and EEPROM Page Erase Byte“im Errata-Dokument SLG46824/6 (Revision XC) auf der Website von Dialog.

Abschluss

In diesem Instructable beschreiben wir den Prozess der Verwendung des bereitgestellten Arduino-Programmierers, um benutzerdefinierte NVM- und EEPROM-Strings auf einen GreenPAK-IC hochzuladen. Der Code im Arduino Sketch ist ausführlich kommentiert, aber wenn Sie Fragen zum Sketch haben, wenden Sie sich bitte an einen unserer Field Application Engineers oder stellen Sie Ihre Frage in unserem Forum. Ausführlichere Informationen zu MTP-Programmierregistern und -prozeduren finden Sie im In-System Programming Guide von Dialog.

Empfohlen: