Cuprins:

Programare MTP Arduino Exemplu: 5 pași
Programare MTP Arduino Exemplu: 5 pași

Video: Programare MTP Arduino Exemplu: 5 pași

Video: Programare MTP Arduino Exemplu: 5 pași
Video: 30 de sfaturi și trucuri pentru Windows 10 pentru 2020 2024, Noiembrie
Anonim
Exemplu de programare MTP Arduino
Exemplu de programare MTP Arduino

În acest Instructable, vă arătăm cum să utilizați schița de programare SLG46824 / 6 Arduino pentru a programa un dispozitiv Dialog SLG46824 / 6 GreenPAK ™ Multiple Time Programmable (MTP).

Majoritatea dispozitivelor GreenPAK sunt programabile o singură dată (OTP), ceea ce înseamnă că, odată ce banca lor de memorie non-volatilă (NVM) este scrisă, aceasta nu poate fi suprascrisă. GreenPAK-urile cu caracteristică MTP, precum SLG46824 și SLG46826, au un alt tip de banc de memorie NVM care poate fi programat de mai multe ori.

Am scris o schiță Arduino care permite utilizatorului să programeze un MTP GreenPAK cu câteva comenzi simple de monitorizare în serie. În acest Instructable folosim un SLG46826 ca GreenPAK cu MTP.

Oferim un exemplu de cod pentru Arduino Uno folosind o platformă open-source bazată pe C / C ++. Proiectanții ar trebui să extrapoleze tehnicile utilizate în codul Arduino pentru platforma lor specifică.

Pentru informații specifice referitoare la specificațiile semnalului I2C, adresarea I2C și spațiile de memorie, vă rugăm să consultați Ghidul de programare în sistem GreenPAK furnizat pe pagina produsului SLG46826. Acest Instructable oferă o implementare simplă a acestui ghid de programare.

Mai jos am descris pașii necesari pentru a înțelege modul în care a fost programat cipul GreenPAK. Cu toate acestea, dacă doriți doar să obțineți rezultatul programării, descărcați software-ul GreenPAK pentru a vizualiza fișierul de proiectare GreenPAK deja finalizat. Conectați kitul de dezvoltare GreenPAK la computer și apăsați programul pentru a crea un IC personalizat.

Pasul 1: Conexiuni Arduino-GreenPAK

Conexiuni Arduino-GreenPAK
Conexiuni Arduino-GreenPAK
Conexiuni Arduino-GreenPAK
Conexiuni Arduino-GreenPAK

Pentru a programa NVM-ul nostru SLG46826 GreenPAK cu schița noastră Arduino, va trebui mai întâi să conectăm patru pini Arduino Uno la GreenPAK. Puteți conecta acești pini direct la adaptorul de soclu GreenPAK sau la o placă de rupere cu GreenPAK lipit.

Vă rugăm să rețineți că rezistențele externe I2C pull up nu sunt prezentate în Figura 1. Vă rugăm să conectați un rezistor pull up de 4,7 kΩ atât de la SCL cât și SDA la ieșirea Arduino de 3,3 V.

Pasul 2: Exportul datelor GreenPAK NVM dintr-un fișier de proiectare GreenPAK

Exportul datelor GreenPAK NVM dintr-un fișier de proiectare GreenPAK
Exportul datelor GreenPAK NVM dintr-un fișier de proiectare GreenPAK
Exportul datelor GreenPAK NVM dintr-un fișier de proiectare GreenPAK
Exportul datelor GreenPAK NVM dintr-un fișier de proiectare GreenPAK
Exportul datelor GreenPAK NVM dintr-un fișier de proiectare GreenPAK
Exportul datelor GreenPAK NVM dintr-un fișier de proiectare GreenPAK

Vom pune împreună un design GreenPAK foarte simplu pentru a ilustra cum să exportăm datele NVM. Designul de mai jos este un schimbător de nivel simplu, în care pinii albastri din stânga sunt legați de VDD (3,3v), în timp ce pinii galbeni din dreapta sunt legați de VDD2 (1,8v).

Pentru a exporta informațiile din acest design, trebuie să selectați Fișier → Export → Export NVM, așa cum se arată în Figura 3.

Apoi va trebui să selectați fișierele Intel HEX (*.hex) ca tip de fișier și să salvați fișierul.

Acum, va trebui să deschideți fișierul.hex cu un editor de text (cum ar fi Notepad ++). Pentru a afla mai multe despre formatul și sintaxa fișierului HEX Intel, consultați pagina Wikipedia. Pentru această aplicație ne interesează doar porțiunea de date a fișierului, așa cum se arată în Figura 5.

Evidențiați și copiați 256 de octeți de date de configurare NVM situate în fișierul HEX. Fiecare linie pe care o copiem are 32 de caractere, ceea ce corespunde la 16 octeți.

Inserați informațiile în secțiunea nvmString evidențiată a schiței Arduino așa cum se arată în Figura 6. Dacă utilizați un microcontroler non-Arduino, puteți scrie o funcție pentru a analiza nvmData salvate în fișierul GreenPAK. GP6. (Dacă deschideți un fișier GreenPAK cu un editor de text, veți vedea că stocăm informații despre proiect într-un format XML ușor accesibil.)

Pentru a seta datele EEPROM pentru proiectul dvs. GreenPAK, selectați blocul EEPROM din panoul de componente, deschideți panoul de proprietăți și faceți clic pe „Setare date”.

Acum puteți edita fiecare octet în EEPROM individual cu interfața noastră GUI.

Odată ce datele dvs. EEPROM sunt setate, le puteți exporta într-un fișier HEX utilizând aceeași metodă descrisă anterior pentru exportul datelor NVM. Introduceți acești 256 de octeți de date EEPROM în secțiunea eepromString din schița Arduino.

Pentru fiecare design personalizat, este important să verificați setările de protecție în fila „Securitate” a setărilor proiectului. Această filă configurează biții de protecție pentru registrele de configurare a matricei, NVM și EEPROM. În anumite configurații, încărcarea secvenței NVM poate bloca SLG46824 / 6 la configurația sa actuală și poate elimina funcționalitatea MTP a cipului.

Pasul 3: Utilizați Arduino Sketch

Folosiți Arduino Sketch
Folosiți Arduino Sketch

Încărcați schița pe Arduino și deschideți monitorul serial cu o rată de 115200 baud. Acum puteți utiliza solicitările MENU ale schiței pentru a efectua mai multe comenzi:

● Citire - citește fie datele NVM ale dispozitivului, fie datele EEPROM utilizând adresa slave specificată

● Șterge - șterge fie datele NVM ale dispozitivului, fie datele EEPROM utilizând adresa slave specificată

● Scrie - Șterge și apoi scrie fie datele NVM ale dispozitivului, fie datele EEPROM folosind adresa de sclav specificată. Această comandă scrie datele salvate în matricile nvmString sau eepromString.

● Ping - returnează o listă a adreselor slave ale dispozitivului care sunt conectate la magistrala I2C

Rezultatele acestor comenzi vor fi tipărite pe consola monitorului serial.

Pasul 4: Sfaturi de programare și cele mai bune practici

Pe parcursul susținerii SLG46824 / 6, am documentat câteva sfaturi de programare pentru a evita evidențele comune asociate cu ștergerea și scrierea în spațiul de adrese NVM. Următoarele subsecțiuni prezintă acest subiect în detaliu.

1. Executarea scrierilor de pagini NVM precise de 16 octeți:

Când scrieți date pe NVM-ul SLG46824 / 6, există trei tehnici de evitat:

● Scrierea paginii cu mai puțin de 16 octeți

● Scrierea paginii cu mai mult de 16 octeți

● Scrierile de pagină care nu încep de la primul registru dintr-o pagină (IE: 0x10, 0x20 etc.)

Dacă se utilizează oricare dintre tehnicile de mai sus, interfața MTP va ignora scrierea I2C pentru a evita încărcarea NVM cu informații incorecte. Vă recomandăm să efectuați o citire I2C a spațiului de adrese NVM după scriere pentru a verifica transferul corect de date.

2. Transferul datelor NVM în registrele de configurare Matrix

Când NVM este scris, registrele de configurare a matricei nu sunt reîncărcate automat cu datele NVM recent scrise. Transferul trebuie inițiat manual prin ciclarea PAK VDD sau prin generarea unei resetări soft folosind I2C. Prin setarea înregistrării la adresa 0xC8, dispozitivul reactivează secvența de resetare la pornire (POR) și reîncarcă datele registrului din NVM în registre.

3. Resetarea adresei I2C după ștergerea NVM:

Când NVM-ul este șters, adresa NVM care conține adresa slave I2C va fi setată la 0000. După ștergere, cipul își va menține adresa slave actuală în registrele de configurare până când dispozitivul este resetat așa cum este descris mai sus. Odată ce cipul a fost resetat, adresa slave I2C trebuie setată la adresa 0xCA în registrele de configurare de fiecare dată când GreenPAK este pornit sau resetat. Acest lucru trebuie făcut până când noua pagină a adreselor slave I2C a fost scrisă în NVM.

Pasul 5: Discuție despre erori

Discuție Errata
Discuție Errata

Când scrieți pe „Page Erase Byte” (Adresă: 0xE3), SLG46824 / 6 produce un ACK care nu este conform I2C după porțiunea „Date” a comenzii I2C. Acest comportament poate fi interpretat ca un NACK, în funcție de implementarea masterului I2C.

Pentru a face față acestui comportament, am modificat programatorul Arduino comentând codul prezentat în Figura 11. Această secțiune de cod verifică dacă există un ACK I2C la sfârșitul fiecărei comenzi I2C din funcția eraseChip (). Această funcție este utilizată pentru a șterge paginile NVM și EEPROM. Deoarece această secțiune de cod este situată într-o buclă For, „return -1;” linia determină ieșirea prematură a funcției de către MCU.

În ciuda prezenței unui NACK, funcțiile de ștergere NVM și EEPROM se vor executa corect. Pentru o explicație detaliată a acestui comportament, vă rugăm să consultați „Problema 2: Comportamentul ACK care nu respectă I2C pentru octetul de ștergere a paginii NVM și EEPROM” în documentul de eroare SLG46824 / 6 (Revision XC) de pe site-ul Dialog.

Concluzie

În acest Instructable descriem procesul de utilizare a programatorului Arduino furnizat pentru a încărca șiruri personalizate NVM și EEPROM pe un IC GreenPAK. Codul din schița Arduino este comentat cu atenție, dar dacă aveți întrebări referitoare la schiță, vă rugăm să contactați unul dintre inginerii noștri de aplicații de teren sau să postați întrebarea pe forumul nostru. Pentru informații mai detaliate privind registrele și procedurile de programare MTP, vă rugăm să consultați Ghidul de programare integrat al Dialogului.

Recomandat: