Spisu treści:

Przykład programowania MTP Arduino: 5 kroków
Przykład programowania MTP Arduino: 5 kroków

Wideo: Przykład programowania MTP Arduino: 5 kroków

Wideo: Przykład programowania MTP Arduino: 5 kroków
Wideo: Kurs Arduino #1: Wstęp - Jak zacząć przygodę z Arduino (od podstaw) 2024, Listopad
Anonim
Przykład programowania MTP Arduino
Przykład programowania MTP Arduino

W tej instrukcji pokazujemy, jak używać szkicu programowania Arduino SLG46824/6 do programowania urządzenia Dialog SLG46824/6 GreenPAK ™ Multiple-Time Programmable (MTP).

Większość urządzeń GreenPAK jest jednorazowych programowalnych (OTP), co oznacza, że po zapisaniu ich banku pamięci nieulotnej (NVM) nie można go nadpisać. GreenPAK z funkcją MTP, takie jak SLG46824 i SLG46826, mają inny typ banku pamięci NVM, który można zaprogramować więcej niż raz.

Napisaliśmy szkic Arduino, który pozwala użytkownikowi zaprogramować MTP GreenPAK za pomocą kilku prostych poleceń monitora szeregowego. W tej instrukcji używamy SLG46826 jako naszego GreenPAK z MTP.

Dostarczamy przykładowy kod dla Arduino Uno przy użyciu platformy open-source opartej na C/C++. Projektanci powinni ekstrapolować techniki użyte w kodzie Arduino dla swojej konkretnej platformy.

Aby uzyskać szczegółowe informacje dotyczące specyfikacji sygnału I2C, adresowania I2C i przestrzeni pamięci, zapoznaj się z przewodnikiem programowania w systemie GreenPAK dostępnym na stronie produktu SLG46826. Ten Instruktaż zapewnia prostą implementację tego przewodnika programowania.

Poniżej opisaliśmy kroki potrzebne do zrozumienia, jak zaprogramowano chip GreenPAK. Jeśli jednak chcesz tylko uzyskać wynik programowania, pobierz oprogramowanie GreenPAK, aby wyświetlić już ukończony plik projektu GreenPAK. Podłącz zestaw GreenPAK Development Kit do komputera i naciśnij program, aby utworzyć niestandardowy układ scalony.

Krok 1: Połączenia Arduino-GreenPAK

Połączenia Arduino-GreenPAK
Połączenia Arduino-GreenPAK
Połączenia Arduino-GreenPAK
Połączenia Arduino-GreenPAK

Aby zaprogramować NVM naszego SLG46826 GreenPAK za pomocą naszego szkicu Arduino, najpierw musimy podłączyć cztery piny Arduino Uno do naszego GreenPAK. Możesz podłączyć te piny bezpośrednio do adaptera gniazda GreenPAK lub do płytki zaciskowej z przylutowanym GreenPAK.

Należy pamiętać, że zewnętrzne rezystory podciągające I2C nie są pokazane na rysunku 1. Proszę podłączyć rezystor podciągający 4,7 kΩ z SCL i SDA do wyjścia 3,3 V Arduino.

Krok 2: Eksportowanie danych GreenPAK NVM z pliku projektowego GreenPAK

Eksportowanie danych GreenPAK NVM z pliku projektowego GreenPAK
Eksportowanie danych GreenPAK NVM z pliku projektowego GreenPAK
Eksportowanie danych GreenPAK NVM z pliku projektowego GreenPAK
Eksportowanie danych GreenPAK NVM z pliku projektowego GreenPAK
Eksportowanie danych GreenPAK NVM z pliku projektowego GreenPAK
Eksportowanie danych GreenPAK NVM z pliku projektowego GreenPAK

Stworzymy bardzo prosty projekt GreenPAK, aby zilustrować, jak eksportować dane NVM. Poniższy projekt to prosty przełącznik poziomu, w którym niebieskie styki po lewej stronie są związane z VDD (3,3 V), a żółte szpilki po prawej stronie są związane z VDD2 (1.8 v).

Aby wyeksportować informacje z tego projektu, musisz wybrać Plik → Eksportuj → Eksportuj NVM, jak pokazano na rysunku 3.

Następnie musisz wybrać Intel HEX Files (*.hex) jako typ pliku i zapisać plik.

Teraz musisz otworzyć plik.hex za pomocą edytora tekstu (takiego jak Notepad++). Aby dowiedzieć się więcej o formacie i składni plików HEX firmy Intel, odwiedź stronę Wikipedii. W przypadku tej aplikacji interesuje nas tylko część pliku z danymi, jak pokazano na rysunku 5.

Zaznacz i skopiuj 256 bajtów danych konfiguracyjnych NVM znajdujących się w pliku HEX. Każda kopiowana przez nas linia ma długość 32 znaków, co odpowiada 16 bajtom.

Wklej informacje do podświetlonej sekcji nvmString szkicu Arduino, jak pokazano na rysunku 6. Jeśli używasz mikrokontrolera innego niż Arduino, możesz napisać funkcję parsowania danych nvmData zapisanych w pliku GreenPAK. GP6. (Jeśli otworzysz plik GreenPAK za pomocą edytora tekstu, zobaczysz, że przechowujemy informacje o projekcie w łatwo dostępnym formacie XML.)

Aby ustawić dane EEPROM dla projektu GreenPAK, wybierz blok EEPROM z panelu komponentów, otwórz jego panel właściwości i kliknij „Ustaw dane”.

Teraz możesz edytować każdy bajt w EEPROM indywidualnie za pomocą naszego interfejsu GUI.

Po ustawieniu danych EEPROM można je wyeksportować do pliku HEX, korzystając z tej samej metody opisanej wcześniej dla eksportowania danych NVM. Wstaw te 256 bajtów danych EEPROM do sekcji eepromString szkicu Arduino.

Dla każdego projektu niestandardowego ważne jest, aby sprawdzić ustawienia ochrony w zakładce „Zabezpieczenia” w ustawieniach projektu. Ta zakładka konfiguruje bity ochrony dla rejestrów konfiguracji macierzy, NVM i EEPROM. W niektórych konfiguracjach przesłanie sekwencji NVM może zablokować SLG46824/6 w jego bieżącej konfiguracji i usunąć funkcjonalność MTP układu.

Krok 3: Użyj szkicu Arduino

Użyj szkicu Arduino
Użyj szkicu Arduino

Prześlij szkic do swojego Arduino i otwórz monitor szeregowy z prędkością 115200 bodów. Teraz możesz użyć podpowiedzi MENU szkicu, aby wykonać kilka poleceń:

● Odczyt - odczytuje dane NVM urządzenia lub dane EEPROM przy użyciu określonego adresu urządzenia podrzędnego

● Wymaż - usuwa dane NVM urządzenia lub dane EEPROM przy użyciu określonego adresu urządzenia podrzędnego

● Write (Zapis) - kasuje, a następnie zapisuje dane NVM urządzenia lub dane EEPROM przy użyciu określonego adresu urządzenia podrzędnego. To polecenie zapisuje dane, które są zapisywane w tablicach nvmString lub eepromString.

● Ping - zwraca listę adresów urządzeń podrzędnych podłączonych do magistrali I2C

Wyniki tych poleceń zostaną wydrukowane na konsoli monitora szeregowego.

Krok 4: Wskazówki dotyczące programowania i najlepsze praktyki

W trakcie obsługi SLG46824/6 udokumentowaliśmy kilka wskazówek programistycznych, które pomogą uniknąć typowych pułapek związanych z wymazywaniem i zapisywaniem w przestrzeni adresowej NVM. Poniższe podrozdziały opisują ten temat bardziej szczegółowo.

1. Wykonywanie precyzyjnych zapisów 16-bajtowych stron NVM:

Podczas zapisywania danych do pamięci NVM SLG46824/6 należy unikać trzech technik:

● Strona zapisuje mniej niż 16 bajtów

● Strona zapisuje więcej niż 16 bajtów

● Zapisy stron, które nie zaczynają się od pierwszego rejestru na stronie (IE: 0x10, 0x20 itd.)

Jeśli zostanie użyta dowolna z powyższych technik, interfejs MTP zignoruje zapis I2C, aby uniknąć załadowania NVM niepoprawnymi informacjami. Zalecamy wykonanie odczytu I2C przestrzeni adresowej NVM po zapisaniu, aby zweryfikować poprawność transferu danych.

2. Przenoszenie danych NVM do rejestrów konfiguracji macierzy

Podczas zapisywania NVM rejestry konfiguracji macierzy nie są automatycznie ponownie ładowane nowo zapisanymi danymi NVM. Transfer musi być zainicjowany ręcznie przez cykl PAK VDD lub poprzez wygenerowanie miękkiego resetu za pomocą I2C. Ustawiając rejestr pod adresem 0xC8, urządzenie ponownie włącza sekwencję Power-On Reset (POR) i ponownie ładuje dane rejestru z NVM do rejestrów.

3. Resetowanie adresu I2C po wymazaniu NVM:

Po skasowaniu NVM adres NVM zawierający adres urządzenia podrzędnego I2C zostanie ustawiony na 0000. Po skasowaniu układ zachowa swój aktualny adres urządzenia podrzędnego w rejestrach konfiguracyjnych do czasu zresetowania urządzenia w sposób opisany powyżej. Po zresetowaniu układu adres podrzędny I2C musi być ustawiony w adresie 0xCA w rejestrach konfiguracyjnych za każdym razem, gdy GreenPAK jest włączany i resetowany. Należy to zrobić, dopóki nowa strona adresowa urządzenia podrzędnego I2C nie zostanie zapisana w NVM.

Krok 5: Dyskusja o erracie

Dyskusja o erracie
Dyskusja o erracie

Podczas zapisywania do „bajtu wymazywania strony” (adres: 0xE3), SLG46824/6 generuje potwierdzenie ACK niezgodne z I2C po części „Dane” polecenia I2C. To zachowanie może być interpretowane jako NACK w zależności od implementacji mastera I2C.

Aby dostosować się do tego zachowania, zmodyfikowaliśmy programator Arduino, komentując kod pokazany na rysunku 11. Ta sekcja kodu sprawdza, czy na końcu każdego polecenia I2C w funkcji eraseChip() znajduje się potwierdzenie I2C ACK. Ta funkcja służy do kasowania stron NVM i EEPROM. Ponieważ ta sekcja kodu znajduje się w pętli For, „return -1;” linia powoduje, że MCU przedwcześnie wychodzi z funkcji.

Pomimo obecności NACK, funkcje kasowania pamięci NVM i EEPROM będą działać poprawnie. Szczegółowe wyjaśnienie tego zachowania można znaleźć w dokumencie „Problem 2: Niezgodne z I2C zachowanie ACK dla bajtu kasowania strony NVM i pamięci EEPROM” w dokumencie erraty SLG46824/6 (wersja XC) na stronie internetowej Dialog.

Wniosek

W tej instrukcji opisujemy proces korzystania z dostarczonego programatora Arduino do przesyłania niestandardowych ciągów NVM i EEPROM do układu GreenPAK IC. Kod w Arduino Sketch jest dokładnie skomentowany, ale jeśli masz jakiekolwiek pytania dotyczące szkicu, skontaktuj się z jednym z naszych inżynierów aplikacji terenowych lub opublikuj swoje pytanie na naszym forum. Więcej szczegółowych informacji na temat rejestrów i procedur programowania MTP można znaleźć w In-System Programming Guide.

Zalecana: