- pamięć o nieskończonej liczbie cykli oraz krótkim czasie odczytu i zapisu,
- komunikacja poprzez interfejs I2C,
- pojemność pamięci 4 kb,
- możliwość ustawienia adresu bazowego z zakresu 0x50…0x56.
Kopiowanie pamięci SRAM do EEPROM może zostać wymuszone sprzętowo za pomocą wyprowadzenia HS lub poleceniem programowym. Podczas zaniku zasilania układ zasila się z współpracującego kondensatora elektrolitycznego o odpowiednio dobranej pojemności aż do zakończenia cyklu zapisu EEPROM. Minimoduł EERAM wykorzystuje układ 47L16 (16 kb), którego schemat wewnętrzny został pokazany na rysunku 1. Dostępny jest też układ o mniejszej pojemności 47L04 (4 kb). Seria 47Lxx przystosowana jest do pracy z napięciem 2,7...3,3 V, seria 47Cxx z napięciem 4,5...5,5 V i jest zgodna wyprowadzeniami. Wszystkie układy mają szeregowy interfejs I2C. Wyprowadzenia adresowe A1 i A2 umożliwiają współpracę do 4 układów 47xxx na jednej magistrali. Pamięci 47xxx mają możliwość programowej ochrony przed zmianą zawartości wybranego bloku lub całej pamięci.
W wielu aplikacjach hybrydowa pamięć wykazuje zalety w porównaniu z Flash, EEPROM lub FRAM, niestety nie jest z nimi zgodna wyprowadzeniami, co utrudnia ewentualną podmianę w istniejącej aplikacji.
Budowa i działanie
Schemat minimodułu pokazano na rysunku 2. Moduł komunikuje się poprzez magistralę I2C doprowadzoną do złącza I2C typu EH2.54 lub I2CA typu JST 1 mm, co ułatwia połączenie z różnymi systemami uruchomieniowymi. Magistrala powielona jest na złączach J2 i J3. W zależności od zastosowanego układu U1, 47Lxx lub 47Cxx możliwe jest zasilanie 3,3 V przy współpracy z Raspberry czy STM32 lub 5 V z Arduino. Dioda LD sygnalizuje obecność zasilania.
Rezystory R2 i R3 podciągają magistralę I2C, podciąganie można wyłączyć, usuwając zwory RP (wyprowadzenia 1–2, 3–4). Ustawienie adresu bazowego 0x50...0x56 możliwe jest zworami ADR (wyprowadzenia 1–2, 3–4). Układ 47xxx zawiera dodatkowe wyprowadzenie HS aktywne stanem wysokim, które odpowiada za wyzwolenie procesu kopiowania pamięci SRAM do EEPROM. Gdy nie jest wykorzystane, może pozostać niepodłączone, gdyż ma wbudowany układ podciągający do masy.
Kondensator CE1 podłączony do wyprowadzenia VCAP odpowiada za podtrzymanie zasilania U1 podczas zaniku napięcia, aż do zakończenia przenoszenia zawartości SRAM do EEPROM w trybie automatycznym Auto-Store. Kondensator jest ładowany poprzez wewnętrzne obwody U1. Gdy napięcie na kondensatorze jest zbyt niskie i wynosi odpowiednio 2,6 V dla 47Lxx lub 4,4 V dla 47Cxx, operacje na pamięci są blokowane. Auto-Store to podstawowy i wygodny tryb pracy EERAM. Jeżeli funkcja nie jest używana, należy zewrzeć zworę MSM i wymuszać zapis programowy lub za pomocą pinu HS. Przywracanie zawartości EEPROM do SRAM odbywa się każdorazowo automatycznie po włączeniu zasilania układu lub możne zostać wymuszone programowo.
Montaż i uruchomienie
Moduł zmontowany jest na dwustronnej płytce drukowanej. Rozmieszczenie elementów pokazano na rysunku 3. Sposób montażu jest klasyczny i nie wymaga opisu.
Konstrukcja mechaniczna modułu umożliwia bezproblemową współpracę z płytkami stykowymi lub prototypowymi, zalecam stosowanie długich (30...40 mm) złączy SIP, wlutowanych tak, aby wyprowadzenia wystawały po obu stronach płytki drukowanej. Taki sposób montażu umożliwia wygodne dołączenie do płytek stykowych oraz ułatwia wyprowadzenie sygnałów oraz rozszerzanie magistrali I2C.
Dla szybkiego sprawdzenia działania moduł można podłączyć do magistrali I2C Raspberry Pi (47Lxx) ze zdjętą zworą MSM (tryb automatyczny). Przy wykorzystaniu biblioteki i2ctools, po ustawieniu adresu bazowego zworami A2 i A1 (domyślnie A2, A1=ON=LL, 0x50) moduł powinien być widoczny po odczycie magistrali poleceniem:
i2cdetect -y 1
W odróżnieniu od typowej pamięci EEPROM na magistrali pojawią się dwa urządzenia. Pod adresem 0x50 jest właściwa matryca pamięci EERAM, a pod adresem 0x18 jej rejestry konfiguracyjne. Przy zmienionej zworami ADR adresacji widoczne adresy zostaną przesunięte na wartość odpowiednio 0x50...0x56 i 0x18...0x1A. Samo korzystanie z pamięci EERAM odbywa się identycznie jak w przypadku EEPROM. 47xxx adresowany jest 16-bitowo, a cykl odczytu i zapisu może odbywać się bajtowo lub blokowo (sekwencyjnie).
Znaczenie bitów rejestrów konfiguracyjnych opisuje tabela 1. Rejestry dostępne są pod dwoma subadresami 0x00 dla STATUS (zapis/odczyt) i 0x55 dla COMMAND (tylko zapis).
Konfiguracja trybu pracy układu 47xxx odbywa się poprzez zapis rejestru STATUS (0x18/0x00):
- B7: AM, bit ustawiony jest, gdy nastąpiła zmiana zawartości SRAM od ostatniego cyklu zapisu EEPROM, jeżeli jest ustawiony (1) informuje o różnicy zawartości SRAM i EEPROM;
- B6, B5: nieużywane, B65=00;
- B4 B3, B2: BP2, 1, 0, bity odpowiadające za blokadę zapisu bloku lub całej pamięci zgodnie z tabelą 2;
- B1: ASE, aktywacja trybu zapisu automatycznego, po ustawieniu ASE=1 układ pracuje w trybie automatycznego zapisu SRAM do EEPROM po zaniku zasilania;
- B0: EVENT, informuje stanem wysokim o aktywności wyprowadzenia HS.
Bity B4...0 są nieulotne.
Rejestr COMMAND służy do programowej inicjacji zapisu SRAM do EEPROM i obsługuje tylko dwie komendy: 0x33 inicjuje zapis SRAM do EEPROM (Software Store), 0xDD inicjuje odczyt EEPROM do SRAM (Software Recal). W pierwszej kolejności zapisujemy rejestr STATUS, ustawiając tryb automatyczny, bez ochrony pamięci przed zapisem poleceniem:
i2cset -y 1 0x18 0x02
Poprawność ustawienia możemy sprawdzić poleceniem:
i2cget -y 1 0x18 0x00
Przykładowy odczyt zawartości komórki 0x0F, EERAM wykonujemy dwoma poleceniami. Pierwsze ustawia adres 16-bitowy (i2ctools nie obsługuje bezpośrednio tego trybu adresowania i konieczne jest małe obejście):
i2cset -y 1 0x50 0x00 0x0F
Drugie jest właściwym odczytem z 16-bitowego adresu:
i2cget -y 1 0x50
Przykładowy zapis zawartości komórki 0x0F wartością 0x55 wykonujemy poleceniem:
i2cset -y 1 0x50 0x00 0x0F 0x55 i
Weryfikacje zapisu wykonujemy poleceniami:
i2cset -y 1 0x50 0x00 0x0F
i2cget -y 1 0x50
Powinna zostać zwrócona zapisana wartość 0x55, a w rejestrze STATUS ustawiony bit AM(B8) informujący o różnicy zawartości SRAM/EEPROM:
i2cget -y 1 0x18
0x82
Teraz możemy odłączyć zasilanie modułu i po ponownym podłączeniu sprawdzić zawartość rejestru STATUS i ustawienie AM=0, co świadczy o prawidłowym skopiowaniu wartości:
i2cget -y 1 0x18
0x02
Zweryfikujmy zawartość komórki 0x0F:
i2cset -y 1 0x50 0x00 0x0F
i2cget -y 1 0x50
Powinna zostać zwrócona zapisana wcześniej wartość 0x55.
Jeżeli wszystko działa poprawnie, można moduł zastosować we własnej aplikacji, sprawdzając działanie blokady zapisu oraz tryb programowy. Pozostałe informacje o pamięciach EERAM można znaleźć w karcie katalogowej 47xxx oraz nocie AN2047 udostępnionej przez firmę Microchip.
Adam Tatuś
adam.tatus@ep.com.pl
- R1…R5: 4,7 kΩ SMD0805 1%
- C1: 0,1 µF SMD0805
- CE1: 47 µF/10 V SMD3528 tantalowy B
- LD: LED SMD0805
- U1: 47L16-I/SN (SO8)
- ADR, MSM, RP: goldpin 2×5 2,54 mm + zwory
- I2C: złącze EH4 kątowe
- I2CA: złącze JST4 1 mm
- J2: złącze SIP5 2,54 mm
- J3: złącze SIP4 2,54 mm