Czy można używać wielobajtowych modułów DRAM z mikrokontrolerem?

20

Mam dwa pozostałe moduły RAM 2 GB, które usunąłem z MacBooka Pro podczas aktualizacji. Zastanawiałem się tylko, czy nadają się one na przykład do Arduino. I tak byłbym zbyt początkujący, by spróbować to teraz zrobić, ale jestem ciekawy, czy to w ogóle możliwe, czy to po prostu za dużo pamięci, aby mikrokontroler mógł się z tym uporać.

johndeo
źródło
1
prawdopodobnie można by to zrobić, ale obwód interfejsu byłby prawdopodobnie najbardziej złożoną częścią wynikowego systemu, a wynik byłby niewielki praktyczny.
JustJeff
Dzięki za świetne odpowiedzi! Bardzo interesujące. Stopniowo uczę się, jak pasują do siebie elementy. Dzięki.
johndeo
Platformy ARM9 i ARM11 obsługują kontrolery DDR2, ale wtedy nie mówimy o mikrokontrolerach, ale o mikroprocesorach. FPGA również może się z nim połączyć. Całe zadanie jest dość złożone. Arduino ma tylko 8 bitów, więc po prostu nie jest w stanie wykonać ogromnej roboty adresowania.
Hans
To, co powiedział Hans - każda mikro wystarczająco mocna, aby korzystać z tego rodzaju pamięci RAM, ma wbudowany kontroler DDR. Nie przyjrzałem się bliżej wewnętrznemu działaniu kontroli DDR, ale fakt, że potrzebujesz do tego dedykowanego sprzętu, mówi ci coś… starsze moduły, rzeczy ze starych drukarek laserowych itp. mogą być bardziej użyteczne.
John U

Odpowiedzi:

24

Powiem nie: najbardziej podstawowa niezgodność polega na tym, że zbyt wiele pinów na tych modułach jest w stanie fizycznie połączyć je z Arduino. To samo dotyczy podobnych małych mikrokontrolerów. ARM Cortex M3 jest coraz bliżej, ale niewiele z nich faktycznie ma zewnętrzną magistralę niezbędną do interfejsu RAM w taki sposób (tak myślę).

Ale zagram dalej. Zakładając, że możesz połączyć układ z Arduino, kolejnym podstawowym problemem związanym z kompatybilnością elektryczną jest wymagane napięcie. Myślę, że te moduły pamięci RAM używają czegoś dziwnego, jak np. 2,2 V - nieobecnego na waniliowej płycie Arduino lub naprawdę innym podstawowym hobbistycznym mikrokontrolerze.

Zakładając, że o to zadbano, układ działałby prawie jak każda zewnętrzna pamięć Arduino. Robi się to naprawdę cały czas - ludzie dodają zewnętrzną pamięć EEPROM do przechowywania ważnych stałych lub kart SD / MMC do przechowywania dzienników serwera WWW i tym podobnych. Oczywiście w tym kontekście moduły RAM nie przynoszą Arduino żadnych rzeczywistych korzyści. Jego główną cechą jest szybkość, a Arduino (i tak, inni hobbystyczni mikrokontrolery) zazwyczaj nie łamią częstotliwości taktowania 25 MHz. Są zbyt powolni, aby dbać o szybkość. Rozmiar pamięci nie jest dużym problemem, ponieważ interfejs do karty SD / MMC jest wyraźnie łatwiejszy i zapewnia tyle miejsca do zabawy.

Więc nawet gdyby było to możliwe, tak naprawdę nie byłoby wskazane.

AngryEE
źródło
muszę wyznać, że pomyślałem o połączeniu starej pamięci DIP DRAM z moim arduino, tylko dla larfów. (ale byłoby to wykonalne, nawet na desce chlebowej, z śmieciami z ery 4164). otherise, całkowicie się zgadzam.
JustJeff
1
To wysokiej jakości odpowiedź, wykorzystująca założenia krok po kroku i osiągająca stan końcowy. Dobra robota!
LeanerRocky
2
Nie przeocz problemów z odświeżaniem. Innym powodem, dla którego flashowanie oparte na poleceniach jest prawdopodobnie lepsze, gdy mysz kontrolera próbuje prowadzić ciężarówkę z pamięcią.
Chris Stratton
Powyżej zamieszczam komentarz z pytaniem, ale chyba powinienem go tutaj umieścić. Dziękuję bardzo za odpowiedź. Wymiana stosów jest super zasobem, a wszystko dlatego, że ludzie poświęcają czas na udzielanie wysokiej jakości odpowiedzi.
johndeo
8

Powiedziałbym „nie”, nie bez włożenia między nie dobrej wielkości fpga (fpga), fpga mówi do pamięci, a mikrokontroler do fpga za pomocą schematu stronicowania.

old_timer
źródło
Moja myśl też. I niech FPGA będzie przezroczystym kontrolerem odświeżania. Ale naprawdę ... czy nie byłoby łatwiej i taniej emulować arduino w oprogramowaniu na małym systemie ARM?
Chris Stratton
1
Niezależnie od tego, jak zabawne lub edukacyjne może być DDR, nie jest to proste i nie jest to dla początkujących. Znajdź inny laptop lub płytę główną, aby umieścić tę pamięć i dowiedz się o DDR, używając powiedzmy płyty ewaluacyjnej FPGA, która ma trochę z boku, a może beagleboard lub coś w tym rodzaju. Pierwszy problem to liczba pinów, drugi to sygnały, synchronizacja itp. Trudno jest go uruchomić, kiedy tworzysz własną płytkę. To nie jest interfejs lcd ani coś takiego, co można podłączyć do mikrokontrolera.
old_timer
7

Można sobie wyobrazić, że można użyć systemu zatrzasków, aby coś w rodzaju arduino wygenerowało 32 bity adresu, i prawdopodobnie można opracować jakiś schemat generowania cykli odświeżania, ale byłoby to praktycznie bez sensu, chyba że miałoby to charakter techniczny ćwiczenie.

Zespół obwodów interfejsu byłby prawdopodobnie najbardziej złożoną częścią wynikowego systemu, a wynik byłby mało praktyczny; arduino nie byłoby w stanie wykonać kodu poza pamięcią RAM, pamięć byłaby niestabilna i prawdopodobnie zużyłaby również więcej energii niż arduino. Jeśli chcesz przechowywać dane, pamięć EEPROM SPI jest prawdopodobnie znacznie lepszym rozwiązaniem.

JustJeff
źródło
1
Czy AVR może wykonać kod z pamięci RAM w jakichkolwiek okolicznościach?
Nick T
@Nick T - Nie sugerowałem pośrednio, że istnieją takie scenariusze; Byłem bezpośrednio mówiąc, że w przypadku gdy ktoś myślał o relacje z tego rodzaju pamięci RAM, byłoby błędne myśleć mogli go używać w ten sposób.
JustJeff
1
Szeregowy Flash lub SRAM są zwykle o wiele szybsze niż EEPROM. Jeśli potrzebujesz dużo nieulotnych danych (przypadek użycia kodu zdalnego), Flash jest prawdopodobnie lepszym wyborem. W przypadku dużych buforów użyj SRAM; jest znacznie szybszy niż EEPROM. Jeśli masz kilka bitów konfiguracyjnych, które trzeba przełączać niezależnie, to naprawdę jedyna niszowa pamięć EEPROM.
Kevin Vermeer,
@reemrevnivek - uwaga, daję +1 Twojemu komentarzowi. Jeśli utrzymujesz kilkadziesiąt ustawień konfiguracji, EEPROM. Jeśli chcesz zachować klatki wideo, SRAM.
JustJeff,
7

Jeśli kiedykolwiek spojrzysz na karty danych układów DRAM, minimalna częstotliwość zegara wynosi około 50 MHz + dla DDR2. Więc nie, nie będziesz w stanie połączyć się z nimi za pomocą mikrokontrolera (chyba że ma on wbudowaną obsługę sprzętu).

allanw
źródło
Nie wspominając już o tym, że trzeba także często odświeżać pamięć! Arduino byłby zajęty spędzaniem całego czasu na prowadzeniu linii kontrolnych pamięci!
Toybuilder
6

Krótka odpowiedź brzmi: nie.

Arduino nie może obsługiwać interfejsu pamięci DDR ani DDR2. Możesz zrobić kontroler DDR / DDR2 z interfejsem SPI z FPGA, ale to znaczące przedsięwzięcie.

akohlsmith
źródło
6

Potrzebny byłby sterownik niskiego napięcia (SSTL) i jakiś sposób sterowania około 100 kanałami (każdy różnicowy, więc około 200 pinów. Pomyśl o BGA.)

Większość pamięci DRAM należy odświeżyć co najmniej 1 kHz, a prawdopodobnie więcej, aby uzyskać niski bitowy poziom błędu. Spowoduje to utworzenie dużego zadania w tle i wykorzystanie większości mocy przetwarzania Arduino, jeśli w ogóle możliwe będzie odświeżenie pamięci z taką szybkością.

Jednak niektóre mikrokontrolery, np. PIC24F / H / dsPIC33F, obsługują interfejs równoległej magistrali master, który umożliwia dostęp do niektórych typów równoległych pamięci SRAM. Istnieje nawet wsparcie dla C, ponieważ ta pamięć zewnętrzna może być mapowana na kilka zmiennych kodu, a nawet bloki, które łączą pamięć wewnętrzną i zewnętrzną. Pamięć zewnętrzna wymaga napisania kodu PMB. Dzięki temu będziesz w stanie rozwiązać tylko około 1 MB.

Thomas O
źródło
AFAIK DDR używa SSTL, a nie LVDS
mazurnifikacja
@mazurnification, Tak, masz rację (mój błąd.) Mimo to koszmar do kontrolowania z Arduino.
Thomas O
Następnie popraw swoją odpowiedź!
Kevin Vermeer,
@reemrevnivek, dobrze. Poprawione Zwróciłem jednak uwagę, że jest to niepraktyczne. Bez względu na używany format sygnalizacji.
Thomas O
2

Nie, nie bez interfejsu stronicowania między pamięcią a MCU. Niektóre jednostki MCU AVR faktycznie mają wbudowany interfejs pamięci zewnętrznej - na przykład Atmega2560 (patrz sekcja 8 karty danych ATmega640 / 1280/1281/2560/2561). Ale przestrzeń adresowa jest mierzona w kilobajtach, a nie w gigabajtach.

JRobert
źródło