Inhoudsopgave:

MTP Arduino-programmeervoorbeeld: 5 stappen
MTP Arduino-programmeervoorbeeld: 5 stappen

Video: MTP Arduino-programmeervoorbeeld: 5 stappen

Video: MTP Arduino-programmeervoorbeeld: 5 stappen
Video: Как получить дополнительные 5 В (или 3,3 В для плат 3,3 В) и вывод GND от Arduino 2024, Juli-
Anonim
Voorbeeld van MTP Arduino-programmering
Voorbeeld van MTP Arduino-programmering

In deze Instructable laten we zien hoe u de SLG46824/6 Arduino-programmeerschets kunt gebruiken om een Dialog SLG46824/6 GreenPAK™ Multiple-Time Programmable (MTP) -apparaat te programmeren.

De meeste GreenPAK-apparaten zijn eenmalig programmeerbaar (OTP), wat betekent dat zodra hun niet-vluchtige geheugenbank (NVM) is geschreven, deze niet meer kan worden overschreven. GreenPAK's met de MTP-functie, zoals de SLG46824 en SLG46826, hebben een ander type NVM-geheugenbank die meer dan eens kan worden geprogrammeerd.

We hebben een Arduino-schets geschreven waarmee de gebruiker een MTP GreenPAK kan programmeren met een paar eenvoudige seriële monitoropdrachten. In deze Instructable gebruiken we een SLG46826 als onze GreenPAK met MTP.

We bieden voorbeeldcode voor de Arduino Uno met behulp van een open-sourceplatform op basis van C/C++. Ontwerpers moeten de technieken die in de Arduino-code worden gebruikt, extrapoleren voor hun specifieke platform.

Raadpleeg voor specifieke informatie over I2C-signaalspecificaties, I2C-adressering en geheugenruimte de GreenPAK In-System Programming Guide op de SLG46826 productpagina. Dit Instructable biedt een eenvoudige implementatie van deze programmeergids.

Hieronder hebben we de stappen beschreven die nodig zijn om te begrijpen hoe de GreenPAK-chip is geprogrammeerd. Als u echter alleen het resultaat van het programmeren wilt hebben, download dan GreenPAK-software om het reeds voltooide GreenPAK-ontwerpbestand te bekijken. Sluit de GreenPAK Development Kit aan op uw computer en klik op programma om de aangepaste IC te maken.

Stap 1: Arduino-GreenPAK-verbindingen

Arduino-GreenPAK-verbindingen
Arduino-GreenPAK-verbindingen
Arduino-GreenPAK-verbindingen
Arduino-GreenPAK-verbindingen

Om de NVM van onze SLG46826 GreenPAK te programmeren met onze Arduino-schets, moeten we eerst vier Arduino Uno-pinnen op onze GreenPAK aansluiten. U kunt deze pinnen direct aansluiten op de GreenPAK Socket Adapter of op een breakout board met de GreenPAK vastgesoldeerd.

Houd er rekening mee dat externe I2C pull-up-weerstanden niet worden weergegeven in afbeelding 1. Sluit een pull-up-weerstand van 4,7 kΩ van zowel SCL als SDA aan op de 3,3 V-uitgang van de Arduino.

Stap 2: GreenPAK NVM-gegevens exporteren uit een GreenPAK-ontwerpbestand

GreenPAK NVM-gegevens exporteren uit een GreenPAK-ontwerpbestand
GreenPAK NVM-gegevens exporteren uit een GreenPAK-ontwerpbestand
GreenPAK NVM-gegevens exporteren uit een GreenPAK-ontwerpbestand
GreenPAK NVM-gegevens exporteren uit een GreenPAK-ontwerpbestand
GreenPAK NVM-gegevens exporteren uit een GreenPAK-ontwerpbestand
GreenPAK NVM-gegevens exporteren uit een GreenPAK-ontwerpbestand

We zullen een heel eenvoudig GreenPAK-ontwerp samenstellen om te illustreren hoe de NVM-gegevens moeten worden geëxporteerd. Het onderstaande ontwerp is een eenvoudige niveauverschuiver waarbij de blauwe pinnen aan de linkerkant zijn gekoppeld aan VDD (3,3v), terwijl de gele pinnen aan de rechterkant zijn gekoppeld aan VDD2 (1,8v).

Om de informatie van dit ontwerp te exporteren, moet u Bestand → Exporteren → NVM exporteren selecteren, zoals weergegeven in afbeelding 3.

U moet dan Intel HEX Files (*.hex) als bestandstype selecteren en het bestand opslaan.

Nu moet je het.hex-bestand openen met een teksteditor (zoals Notepad++). Bekijk de Wikipedia-pagina voor meer informatie over het HEX-bestandsformaat en de syntaxis van Intel. Voor deze toepassing zijn we alleen geïnteresseerd in het gegevensgedeelte van het bestand zoals weergegeven in figuur 5.

Markeer en kopieer de 256 bytes aan NVM-configuratiegegevens in het HEX-bestand. Elke regel die we kopiëren is 32 tekens lang, wat overeenkomt met 16 bytes.

Plak de informatie in de gemarkeerde nvmString-sectie van de Arduino-schets, zoals weergegeven in figuur 6. Als u een niet-Arduino-microcontroller gebruikt, kunt u een functie schrijven om de nvmData te ontleden die is opgeslagen in het GreenPAK. GP6-bestand. (Als u een GreenPAK-bestand opent met een teksteditor, ziet u dat we projectinformatie opslaan in een gemakkelijk toegankelijk XML-formaat.)

Om de EEPROM-gegevens voor uw GreenPAK-ontwerp in te stellen, selecteert u het EEPROM-blok in het componentenpaneel, opent u het eigenschappenpaneel en klikt u op "Gegevens instellen".

Nu kunt u elke byte in de EEPROM afzonderlijk bewerken met onze GUI-interface.

Zodra uw EEPROM-gegevens zijn ingesteld, kunt u deze naar een HEX-bestand exporteren met dezelfde methode die eerder is beschreven voor het exporteren van de NVM-gegevens. Plaats deze 256 bytes aan EEPROM-gegevens in het gedeelte eepromString van de Arduino-schets.

Voor elk aangepast ontwerp is het belangrijk om de beveiligingsinstellingen te controleren op het tabblad "Beveiliging" van de projectinstellingen. Dit tabblad configureert de beschermingsbits voor de matrixconfiguratieregisters, de NVM en de EEPROM. Bij bepaalde configuraties kan het uploaden van de NVM-reeks de SLG46824/6 vergrendelen in de huidige configuratie en de MTP-functionaliteit van de chip verwijderen.

Stap 3: Gebruik de Arduino Sketch

Gebruik de Arduino Sketch
Gebruik de Arduino Sketch

Upload de schets naar je Arduino en open de seriële monitor met een baudrate van 115200. Nu kunt u de MENU-aanwijzingen van de schets gebruiken om verschillende opdrachten uit te voeren:

● Lezen - leest ofwel de NVM-gegevens van het apparaat of de EEPROM-gegevens met behulp van het opgegeven slave-adres

● Wissen - wist de NVM-gegevens van het apparaat of de EEPROM-gegevens met behulp van het opgegeven slave-adres

● Schrijven - Wist en schrijft vervolgens de NVM-gegevens van het apparaat of de EEPROM-gegevens met behulp van het opgegeven slave-adres. Deze opdracht schrijft de gegevens die zijn opgeslagen in de arrays nvmString of eepromString.

● Ping - retourneert een lijst met slave-adressen van apparaten die zijn aangesloten op de I2C-bus

De resultaten van deze opdrachten worden afgedrukt naar de seriële monitorconsole.

Stap 4: Programmeertips en best practices

In de loop van de ondersteuning van de SLG46824/6 hebben we een paar programmeertips gedocumenteerd om veelvoorkomende valkuilen bij het wissen van en schrijven naar de NVM-adresruimte te helpen voorkomen. In de volgende paragrafen wordt dit onderwerp nader toegelicht.

1. Precieze 16-Byte NVM-paginaschrijven uitvoeren:

Bij het schrijven van gegevens naar de NVM van de SLG46824/6 moet u drie technieken vermijden:

● Pagina schrijft met minder dan 16 bytes

● Pagina schrijft met meer dan 16 bytes

● Pagina schrijft die niet beginnen bij het eerste register binnen een pagina (IE: 0x10, 0x20, etc.)

Als een van de bovenstaande technieken wordt gebruikt, negeert de MTP-interface de I2C-schrijfbewerking om te voorkomen dat de NVM met onjuiste informatie wordt geladen. We raden aan om na het schrijven een I2C-lezing van de NVM-adresruimte uit te voeren om de juiste gegevensoverdracht te verifiëren.

2. NVM-gegevens overbrengen naar de matrixconfiguratieregisters

Bij het schrijven van de NVM worden de matrixconfiguratieregisters niet automatisch opnieuw geladen met de nieuw geschreven NVM-gegevens. De overdracht moet handmatig worden gestart door de PAK VDD te laten draaien of door een zachte reset te genereren met I2C. Door register in adres 0xC8 in te stellen, activeert het apparaat de Power-On Reset (POR)-sequentie opnieuw en laadt de registergegevens van de NVM opnieuw in de registers.

3. Het I2C-adres resetten na een NVM-wissen:

Wanneer de NVM wordt gewist, wordt het NVM-adres met het I2C-slave-adres ingesteld op 0000. Na het wissen behoudt de chip zijn huidige slave-adres in de configuratieregisters totdat het apparaat wordt gereset zoals hierboven beschreven. Nadat de chip is gereset, moet het I2C-slave-adres worden ingesteld op adres 0xCA in de configuratieregisters telkens wanneer de GreenPAK wordt uit- en weer ingeschakeld of gereset. Dit moet gebeuren totdat de nieuwe I2C-slave-adrespagina in de NVM is geschreven.

Stap 5: Errata-discussie

Errata-discussie
Errata-discussie

Bij het schrijven naar de "Page Erase Byte" (Adres: 0xE3), produceert de SLG46824/6 een niet-I2C-compatibele ACK na het "Data" -gedeelte van de I2C-opdracht. Dit gedrag kan worden geïnterpreteerd als een NACK, afhankelijk van de implementatie van de I2C-master.

Om tegemoet te komen aan dit gedrag, hebben we de Arduino-programmeur aangepast door de code in Afbeelding 11 te becommentariëren. Dit gedeelte van de code controleert op een I2C ACK aan het einde van elk I2C-commando in de eraseChip()-functie. Deze functie wordt gebruikt om de NVM- en EEPROM-pagina's te wissen. Aangezien dit gedeelte van de code zich in een For-lus bevindt, is de "return -1;" regel zorgt ervoor dat de MCU de functie voortijdig verlaat.

Ondanks de aanwezigheid van een NACK, zullen de NVM- en EEPROM-wisfuncties correct worden uitgevoerd. Raadpleeg voor een gedetailleerde uitleg van dit gedrag "Probleem 2: Non-I2C-compatibel ACK-gedrag voor de NVM en EEPROM Page Erase Byte" in het SLG46824/6 errata-document (Revisie XC) op de website van Dialog.

Conclusie

In deze Instructable beschrijven we het proces van het gebruik van de meegeleverde Arduino-programmeur om aangepaste NVM- en EEPROM-strings naar een GreenPAK IC te uploaden. De code in de Arduino Sketch is uitvoerig becommentarieerd, maar als je vragen hebt over de sketch, neem dan contact op met een van onze Field Application Engineers of stel je vraag op ons forum. Raadpleeg voor meer diepgaande informatie over MTP-programmeerregisters en -procedures de In-System Programming Guide van Dialog.

Aanbevolen: