Можно ли использовать многогигабайтные модули DRAM с микроконтроллером?

У меня есть два оставшихся модуля оперативной памяти по 2 ГБ, которые я удалил из своего MacBook Pro при обновлении. Мне просто интересно, можно ли их использовать, например, с Arduino. В любом случае, я был бы слишком новичком, чтобы попытаться сделать это сейчас, но мне любопытно, возможно ли это вообще, или это слишком много памяти для микроконтроллера.

вы, вероятно, могли бы что-то настроить для этого, но схема интерфейса, вероятно, была бы самой сложной частью получившейся системы, и в результате было бы мало практической ценности.
Спасибо за отличные ответы! Очень интересно. Я постепенно узнаю, как кусочки сочетаются друг с другом. Спасибо.
Платформы ARM9 и ARM11 содержат контроллеры DDR2, но тогда вы говорите не о микроконтроллерах, а о микропроцессорах. FPGA также может взаимодействовать с ним. Вся задача достаточно сложная. Arduino только 8-битная, поэтому она просто не может выполнять огромную работу по адресации.
Что сказал Ганс: любой микропроцессор, достаточно мощный для использования такого типа ОЗУ, будет иметь встроенный контроллер DDR. Я не внимательно изучал внутреннюю работу управления DDR, но тот факт, что для этого вам нужно специальное оборудование, говорит вам кое-что... старые модули, вещи из старых лазерных принтеров и т. д. могут быть более полезными.

Ответы (7)

Я собираюсь сказать нет: самая основная несовместимость заключается в том, что на этих модулях слишком много контактов, даже чтобы физически связать их с Arduino. То же самое для аналогичных небольших микроконтроллеров. ARM Cortex M3 приближается, но немногие из них на самом деле имеют внешнюю шину, необходимую для такого взаимодействия с ОЗУ (я думаю).

Но я подыграю и пойду дальше. Предполагая, что вы можете каким-то образом подключить чип к Arduino, еще одна основная проблема электрической совместимости — это требуемые напряжения. Я думаю, что эти модули оперативной памяти используют что-то странное, например, 2,2 В, чего нет ни на ванильной плате Arduino, ни на любом другом базовом микроконтроллере для любителей.

Предполагая, что об этом позаботились, чип будет работать как любая другая внешняя память для Arduino. Это действительно делается все время - люди добавляют внешнюю EEPROM для хранения важных констант или карты SD / MMC для хранения журналов веб-сервера и тому подобного. Конечно, в этом контексте модули оперативной памяти не представляют реальной пользы для Arduino. Его главной особенностью является скорость, и Arduino (и да, другие микроконтроллеры для любителей) обычно не превышают тактовую частоту 25 МГц. Они слишком медленные, чтобы заботиться о скорости. И размер хранилища не является большой проблемой, поскольку интерфейс с картой SD/MMC значительно проще и предоставляет столько же места для игры.

Так что даже если бы это было возможно, это было бы нецелесообразно.

Должен признаться, я думал о подключении какой-то старой DIP DRAM к моему Arduino, просто для удовольствия. (но это было бы выполнимо даже на макетной плате с мусором эпохи 4164). в остальном, я полностью согласен.
Это качественный ответ, использующий пошаговые предположения и приходящий к конечному условию. Хорошая работа!
Не упускайте из виду проблемы с обновлением. Еще одна причина, по которой «командная» флэш-память, вероятно, лучше подходит, когда мышь контроллера пытается управлять грузовиком с памятью.
Я разместил комментарий выше с вопросом, но я думаю, что я действительно должен разместить его здесь. Большое спасибо за ответ. Обмен стеками — это супер-ресурс, и все потому, что люди тратят время на предоставление качественных ответов.

Я бы сказал нет, не без вставления fpga хорошего размера (количество выводов) между ними, fpga общается с памятью, а микроконтроллер общается с fpga, используя схему подкачки.

Моя мысль также. И пусть FPGA будет прозрачным контроллером обновления. Но на самом деле... не проще ли и дешевле эмулировать Arduino в программном обеспечении на небольшой системе ARM?
Какой бы забавной или познавательной она ни была, DDR — это не просто и не для новичков. Найдите другой ноутбук или материнскую плату, чтобы вставить эту память, и узнайте о DDR, используя, скажем, плату fpga eval, у которой есть немного сбоку, или, может быть, биглборд или что-то в этом роде. Первая проблема — количество выводов, вторая — сигналы, синхронизация и т. д. Трудно заставить это работать, когда вы делаете свою собственную печатную плату. Это не интерфейс ЖК-дисплея или что-то в этом роде, что можно отмакетировать в микроконтроллер.

Возможно, вы могли бы использовать систему защелок, чтобы позволить чему-то вроде Arduino генерировать 32-битный адрес, и вы, вероятно, могли бы разработать какую-то схему для генерации циклов обновления, но в этом не было бы почти никакого смысла, кроме как с технической точки зрения. упражнение.

Схема интерфейса, вероятно, будет самой сложной частью полученной системы, и результат будет иметь небольшую практическую ценность; Arduino не сможет выполнять код из ОЗУ, хранилище будет энергозависимым и, вероятно, будет потреблять больше энергии, чем Arduino. Если вы хотите хранить данные, SPI EEPROM, вероятно, будет лучшим решением.

Может ли AVR выполнять код из оперативной памяти при любых обстоятельствах?
@Nick T - я косвенно не предполагал, что есть такие сценарии, в которых это могло бы быть; Я прямо говорил, что если кто-то думает о подключении к этому типу ОЗУ, было бы ошибкой думать, что они могут использовать его таким образом.
Serial Flash или SRAM обычно намного быстрее, чем EEPROM. Если вам нужно много энергонезависимых данных (вариант использования удаленного кода), Flash, вероятно, будет лучшим выбором. Для больших буферов используйте SRAM; это намного быстрее, чем EEPROM. Если у вас есть несколько битов конфигурации, которые нужно переключать независимо друг от друга, это действительно единственная ниша, оставшаяся для EEPROM.
@reemrevnivek - хорошая мысль, я +1 к вашему комментарию. Если вы храните несколько десятков параметров конфигурации, EEPROM. Если вы хотите сохранить кадры видео, SRAM.

Если вы когда-нибудь заглянете в таблицы данных чипов DRAM, то увидите, что минимальная тактовая частота для DDR2 составляет около 50 МГц+. Так что нет, вы не сможете взаимодействовать с ними с помощью микроконтроллера (если только он не имеет встроенной аппаратной поддержки).

Не говоря уже о том, что вам нужно освежать память довольно часто! Arduino будет занят, тратя все свое время на управление линиями управления памятью!

Короткий ответ: нет.

Arduino не может управлять интерфейсом памяти DDR или DDR2. Вы могли бы сделать контроллер DDR/DDR2 с интерфейсом SPI с FPGA, но это важное мероприятие.

Вам понадобится драйвер низкого напряжения (SSTL) и какой-то способ управления примерно 100 каналами (каждый дифференциал, то есть около 200 контактов. Думаю, BGA).

Большая часть DRAM должна обновляться с частотой не менее 1 кГц и, возможно, больше, чтобы иметь низкий уровень битовых ошибок. Затем это сформирует основную фоновую задачу и израсходует большую часть вычислительной мощности Arduino, если вообще возможно обновлять память с такой скоростью.

На что вы можете обратить внимание, так это на то, что некоторые микроконтроллеры, например PIC24F/H/dsPIC33F, поддерживают интерфейс параллельной главной шины, что позволяет получить доступ к некоторым типам параллельной SRAM. Существует даже поддержка C, поскольку эта внешняя память может быть отображена на несколько переменных в коде и даже на блоки, которые объединяют внутреннюю и внешнюю память. Внешняя память требует, чтобы вы написали некоторый код PMB. Однако с этим вы сможете адресовать только до 1 МБ.

AFAIK DDR использует SSTL, а не LVDS
@mazurnification, Да, вы правы (моя ошибка). Тем не менее, кошмар для управления с Arduino.
Тогда исправьте свой ответ!
@reemrevnivek, хорошо. Исправленный. Однако я лишь указал на то, что это нецелесообразно. Независимо от того, какой формат сигнализации используется.

Нет, не без пейджингового интерфейса какого-то между памятью и MCU. Некоторые микроконтроллеры AVR действительно имеют встроенный интерфейс внешней памяти — например, Atmega2560 (см. раздел 8 технического описания ATmega640/1280/1281/2560/2561). Но адресное пространство измеряется в килобайтах, а не в гигабайтах.