Spisu treści:

Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino: 5 kroków
Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino: 5 kroków

Wideo: Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino: 5 kroków

Wideo: Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino: 5 kroków
Wideo: kurs Arduino programowanie - EEPROM zapis i odczyt pamięci mikrokontrolera - #27 2024, Lipiec
Anonim
Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino
Odczytywanie i zapisywanie danych do zewnętrznej pamięci EEPROM za pomocą Arduino

EEPROM to skrót od Electricly Erasable Programmable Read-Only Memory.

EEPROM jest bardzo ważny i użyteczny, ponieważ jest nieulotną formą pamięci. Oznacza to, że nawet gdy płyta jest wyłączona, układ EEPROM nadal zachowuje program, który został na nim zapisany. Więc kiedy wyłączysz płytę, a następnie włączysz ją ponownie, program zapisany w EEPROM może zostać uruchomiony. Zasadniczo EEPROM przechowuje i uruchamia program bez względu na wszystko. Oznacza to, że możesz wyłączyć urządzenie, pozostawić je wyłączone przez 3 dni, a następnie wrócić i włączyć je i nadal może uruchomić program, który został w nim zaprogramowany. Tak działa większość konsumenckich urządzeń elektronicznych.

Ten projekt jest sponsorowany przez LCSC. Używam komponentów elektronicznych z LCSC.com. LCSC jest mocno zaangażowana w oferowanie szerokiego wyboru oryginalnych, wysokiej jakości komponentów elektronicznych w najlepszej cenie z globalną siecią wysyłkową do ponad 200 krajów. Zarejestruj się już dziś i zyskaj 8 USD zniżki na pierwsze zamówienie.

EEPROM jest również bardzo wydajny, ponieważ poszczególne bajty w tradycyjnej pamięci EEPROM mogą być niezależnie odczytywane, kasowane i przepisywane. W większości innych rodzajów pamięci nieulotnej nie można tego zrobić. Szeregowe urządzenia EEPROM, takie jak EEPROM serii 24 firmy Microchip, umożliwiają dodanie większej ilości pamięci do dowolnego urządzenia, które obsługuje I²C.

Kieszonkowe dzieci

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. Kryształ 16 MHz
  4. Deska do krojenia chleba
  5. Rezystor 4,7 kΩ x 2
  6. Kondensator 22 pF x 2

Krok 1: Podstawy EEPROM

Podstawy EEPROM
Podstawy EEPROM

Chip Microchip 24LC2512 można kupić w 8-pinowej obudowie DIP. Piny w 24LC512 są dość proste i składają się z zasilania (8), GND(4), ochrony przed zapisem (7), SCL/SDA (6, 5) i trzech pinów adresowych (1, 2, 3).

Krótka historia ROM

Wczesne komputery typu „Stored-Program” – takie jak kalkulatory biurkowe i interpretery klawiatury – zaczęły używać pamięci ROM w postaci ROM z matrycą diodową. Była to pamięć składająca się z dyskretnych diod półprzewodnikowych umieszczonych na specjalnie zorganizowanej płytce drukowanej. To ustąpiło miejsca Mask ROM wraz z pojawieniem się układów scalonych. Maska ROM była bardzo podobna do ROM z matrycą diodową, ale została zaimplementowana na znacznie mniejszą skalę. Oznaczało to jednak, że nie można było po prostu przenieść kilku diod za pomocą lutownicy i przeprogramować. Maska ROM musiała być zaprogramowana przez producenta i później nie można jej było zmienić.

Niestety, maska ROM była droga, a jej wyprodukowanie zajęło dużo czasu, ponieważ każdy nowy program wymagał wyprodukowania przez odlewnię zupełnie nowego urządzenia. Jednak w 1956 r. problem ten został rozwiązany dzięki wynalezieniu PROM (Programmable ROM), który umożliwił programistom samodzielne programowanie układów. Oznaczało to, że producenci mogli produkować miliony takich samych niezaprogramowanych urządzeń, co czyniło je tańszym i bardziej praktycznym. Jednak PROM można było zapisać tylko raz za pomocą programatora wysokiego napięcia. Po zaprogramowaniu urządzenia PROM nie było możliwości przywrócenia urządzenia do stanu niezaprogramowanego.

Zmieniło się to w 1971 roku wraz z wynalezieniem EPROM (Erasable Programmable ROM), który - oprócz dodania kolejnej litery do akronimu - przyniósł ze sobą możliwość kasowania urządzenia i przywracania go do stanu "pustego" przy użyciu silnego źródła światła UV. Zgadza się, musiałeś świecić jasnym światłem na IC, aby go przeprogramować, jakie to fajne? Cóż, okazuje się, że jest całkiem fajnie, chyba że jesteś programistą pracującym nad oprogramowaniem układowym, w którym to przypadku naprawdę chciałbyś mieć możliwość przeprogramowania urządzenia za pomocą sygnałów elektrycznych. Stało się to w końcu rzeczywistością w 1983 roku wraz z opracowaniem EEPROM (Electrically Erasable Programmable ROM) i dzięki temu doszliśmy do dzisiejszego nieporęcznego akronimu.

Krok 2: Dziwactwa EEPROM

EEPROM jako metoda przechowywania danych ma dwie główne wady. W większości zastosowań zalety przeważają nad wadami, ale należy być ich świadomym przed włączeniem pamięci EEPROM do kolejnego projektu.

Przede wszystkim technologia, dzięki której EEPROM działa, ogranicza również liczbę przepisywania. Ma to związek z uwięzieniem elektronów w tranzystorach tworzących pamięć ROM i narastaniem, aż różnica ładunków między „1” i „0” będzie nierozpoznawalna. Ale nie martw się, większość EEPROM-ów ma maksymalną liczbę ponownego zapisu 1 milion lub więcej. Dopóki nie zapisujesz w sposób ciągły do EEPROM-u, jest mało prawdopodobne, że osiągniesz to maksimum. Po drugie, EEPROM nie zostanie skasowany, jeśli odłączysz od niego zasilanie, ale nie będzie przechowywać twoich danych w nieskończoność. Elektrony mogą dryfować z tranzystorów i przez izolator, skutecznie wymazując z czasem pamięć EEPROM. To powiedziawszy, zwykle dzieje się to przez lata (chociaż można to przyspieszyć pod wpływem ciepła). Większość producentów twierdzi, że Twoje dane są bezpieczne w pamięci EEPROM przez co najmniej 10 lat w temperaturze pokojowej. I jest jeszcze jedna rzecz, o której należy pamiętać przy wyborze urządzenia EEPROM do swojego projektu. Pojemność pamięci EEPROM jest mierzona w bitach, a nie w bajtach. EEPROM 512 KB pomieści 512 KB danych, innymi słowy tylko 64 KB.

Krok 3: Podłączenie sprzętu Arduino

Podłączenie sprzętu Arduino
Podłączenie sprzętu Arduino
Podłączenie sprzętu Arduino
Podłączenie sprzętu Arduino

Dobra, teraz, gdy wiemy, czym jest EEPROM, podłączmy jeden i zobaczmy, co może zrobić! Aby nasze urządzenie mogło mówić, musimy podłączyć zasilanie oraz linie szeregowe I²C. To urządzenie w szczególności działa przy 5VDC, więc podłączymy je do wyjścia 5V naszego Arduino UNO. Ponadto linie I²C będą wymagały rezystorów podciągających, aby komunikacja przebiegała prawidłowo. Wartość tych rezystorów zależy od pojemności linii i częstotliwości, którą chcesz przekazać, ale dobrą zasadą dla aplikacji niekrytycznych jest po prostu utrzymywanie go w zakresie kΩ. W tym przykładzie użyjemy rezystorów podciągających 4,7 kΩ.

W tym urządzeniu są trzy piny do wyboru adresu I²C, w ten sposób możesz mieć więcej niż jedną pamięć EEPROM na magistrali i adresować je w inny sposób. Mógłbyś po prostu uziemić je wszystkie, ale będziemy je okablować, abyśmy mogli wrzucić urządzenie o większej pojemności w dalszej części samouczka.

Użyjemy płytki prototypowej, aby połączyć wszystko razem. Poniższy schemat przedstawia prawidłowe podłączenie dla większości urządzeń EEPROM I²C, w tym EEPROM serii 24 firmy Microchip, który sprzedajemy.

Krok 4: Czytanie i pisanie

W większości przypadków, gdy używasz pamięci EEPROM w połączeniu z mikrokontrolerem, nie musisz widzieć całej zawartości pamięci na raz. W razie potrzeby będziesz po prostu czytać i pisać bajty tu i tam. Jednak w tym przykładzie zapiszemy cały plik do pamięci EEPROM, a następnie ponownie go odczytamy, aby móc go wyświetlić na naszym komputerze. Powinno to nas zadowolić pomysłem korzystania z EEPROM, a także dać nam poczucie, ile danych naprawdę może zmieścić się na małym urządzeniu.

Napisz coś

Nasz przykładowy szkic po prostu weźmie każdy bajt przychodzący przez port szeregowy i zapisze go w pamięci EEPROM, śledząc po drodze, ile bajtów zapisaliśmy w pamięci.

Zapisanie bajta pamięci do EEPROM zazwyczaj odbywa się w trzech krokach:

  1. Wyślij najbardziej znaczący bajt adresu pamięci, do którego chcesz pisać.
  2. Wyślij najmniej znaczący bajt adresu pamięci, do którego chcesz pisać.
  3. Wyślij bajt danych, który chcesz przechowywać w tej lokalizacji.

Jest tam prawdopodobnie kilka kluczowych słów, które wyjaśniają:

Adresy pamięci

Jeśli wyobrazisz sobie, że wszystkie bajty w 512 Kbit EEPROM stoją w linii od 0 do 64000 - ponieważ jest 8 bitów na bajt i dlatego możesz zmieścić 64000 bajtów w 512 Kbit EEPROM - to adres pamięci jest miejscem w wiersz, w którym można znaleźć konkretny bajt. Musimy wysłać ten adres do EEPROM, aby wiedział, gdzie umieścić wysyłany bajt.

Najbardziej znaczące i najmniej znaczące bajty

Ponieważ w 256 Kbit EEPROM jest 32000 możliwych miejsc - a 255 to największa liczba, jaką można zakodować w jednym bajcie - musimy wysłać ten adres w dwóch bajtach. Najpierw wysyłamy Most Significant Byte (MSB) - w tym przypadku pierwsze 8 bitów. Następnie wysyłamy najmniej znaczący bajt (LSB) - drugie 8 bitów. Czemu? Bo tak urządzenie oczekuje ich odbioru, to wszystko.

Pisanie strony

Zapisywanie jednego bajtu na raz jest w porządku, ale większość urządzeń EEPROM ma coś, co nazywa się „buforem zapisu strony”, który pozwala na zapisywanie wielu bajtów naraz w taki sam sposób, jak pojedynczy bajt. Wykorzystamy to w naszym przykładowym szkicu. EEPROM wykorzystuje wewnętrzny licznik, który automatycznie zwiększa miejsce w pamięci z każdym kolejnym odebranym bajtem danych. Po wysłaniu adresu pamięci możemy śledzić go z maksymalnie 64 bajtami danych. EEPROM zakłada (słusznie), że adres 312, po którym następuje 10 bajtów, zapisze bajt 0 pod adresem 312, bajt 1 pod adresem 313, bajt 2 pod adresem 314 i tak dalej.

Przeczytaj coś

Odczytywanie z EEPROM przebiega zasadniczo według tego samego trzyetapowego procesu, co zapisywanie do EEPROM:

  1. Wyślij najbardziej znaczący bajt adresu pamięci, do którego chcesz pisać.
  2. Wyślij najmniej znaczący bajt adresu pamięci, do którego chcesz pisać.
  3. Zapytaj o bajt danych w tej lokalizacji.

Krok 5: Schematy i kod

Schematy i kod
Schematy i kod

Kod:

#włączać

#define eeprom 0x50 //określa adres bazowy EEPROM

pusta konfiguracja () {

Wire.początek(); //tworzy obiekt Wire

Serial.początek(9600);

adres bez znaku = 0; //pierwszy adres EEPROM

Serial.println("Piszemy kod pocztowy 22222, kod pocztowy"); for(adres = 0; adres< 5; adres++) writeEEPROM(eeprom, adres, '2'); // Zapisuje 22222 w EEPROM

for(adres = 0; adres< 5; adres++) { Serial.print(odczyt EEPROM(eeprom, adres), HEX); } }

pusta pętla () {

/*nie ma nic w funkcji loop(), ponieważ nie chcemy, aby arduino wielokrotnie zapisywało to samo w pamięci EEPROM. Chcemy tylko jednorazowego zapisu, więc funkcja loop() jest unikana w EEPROM-ach.*/ }

//definiuje funkcję writeEEPROM

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data) { Wire.beginTransmission(deviceaddress); Wire.write((int)(adres>>8)); //zapisuje MSB Wire.write((int)(eeaddress & 0xFF)); //zapisuje LSB Wire.write(data); Wire.endTransmission(); }

//definiuje funkcję readEEPROM

byte readEEPROM(int deviceaddress, unsigned int eeaddress) { byte rdata = 0xFF; Wire.beginTransmission(adres urządzenia); Wire.write((int)(adres>>8)); //zapisuje MSB Wire.write((int)(eeaddress & 0xFF)); //zapisuje LSB Wire.endTransmission(); Wire.requestFrom(adres urządzenia, 1); if (Wire.available()) rdata = Wire.read(); zwróć rdane; }

Zalecana: