Est-il possible d'utiliser des modules DRAM de plusieurs gigaoctets avec un microcontrôleur?

20

Il me reste deux modules RAM de 2 Go que j'ai retirés de mon MacBook Pro lors d'une mise à niveau. Je me demandais simplement si ceux-ci étaient utilisables avec, par exemple, un Arduino. Je serais trop débutant pour essayer de le faire maintenant, mais je suis curieux de savoir si c'est possible, ou si c'est juste trop de mémoire pour un microcontrôleur.

johndeo
la source
1
vous pourriez probablement truquer quelque chose pour le faire, mais le circuit d'interface serait probablement la partie la plus complexe du système résultant, et il y aurait peu de valeur pratique dans le résultat.
JustJeff
Merci pour les bonnes réponses! Très intéressant. J'apprends progressivement comment les pièces s'assemblent. Merci.
johndeo
Les plates-formes ARM9 et ARM11 hébergent des contrôleurs DDR2, mais alors vous ne parlez pas de microcontrôleurs mais de microprocesseurs. Le FPGA peut également s'interfacer avec lui. L'ensemble de la tâche est assez complexe. Un arduino n'est que de 8 bits, il ne peut donc pas faire le travail d'adressage massif en main.
Hans
Ce que Hans a dit - tout micro suffisamment puissant pour utiliser ce type de RAM aura un contrôleur DDR intégré. Je n'ai pas examiné de près le fonctionnement interne du contrôle DDR, mais le fait que vous ayez besoin d'un matériel dédié pour le faire vous indique quelque chose ... des modules plus anciens, des trucs d'anciennes imprimantes laser, etc. pourraient être plus utilisables.
John U

Réponses:

24

Je vais dire non: l'incompatibilité la plus fondamentale est qu'il y a beaucoup trop de broches sur ces modules, même pour pouvoir l'interfacer physiquement avec un Arduino. Idem pour les petits microcontrôleurs similaires. Un ARM Cortex M3 se rapproche, mais peu d'entre eux ont en fait le bus externe nécessaire pour interfacer la RAM de cette façon (je pense).

Mais je vais aller plus loin. En supposant que vous puissiez interfacer la puce à l'Arduino, les tensions requises sont un autre problème de compatibilité électrique de base. Je pense que ces modules RAM utilisent quelque chose d'étrange comme 2,2 V - pas présent sur une carte Arduino vanille ou vraiment, tout autre microcontrôleur amateur de base.

En supposant que cela ait été pris en charge, la puce fonctionnerait à peu près comme n'importe quelle autre mémoire externe de l'Arduino. C'est vraiment fait tout le temps - les gens ajoutent de l'EEPROM externe pour stocker des constantes importantes ou des cartes SD / MMC pour le stockage des journaux du serveur Web et autres. Bien sûr, dans ce contexte, les modules RAM ne présentent aucun avantage réel pour l'Arduino. Sa principale caractéristique est la vitesse et l'Arduino (et oui, les autres microcontrôleurs amateurs) ne cassent généralement pas la fréquence d'horloge de 25 MHz. Ils sont trop lents pour se soucier de la vitesse. Et la taille du stockage n'est pas un gros problème, car l'interfaçage avec une carte SD / MMC est nettement plus facile et offre autant d'espace pour jouer.

Donc, même si c'était possible, ce ne serait pas vraiment conseillé.

AngryEE
la source
je dois avouer que j'ai pensé à interfacer un vieux DIP DRAM à mon arduino, juste pour les larves. (mais, ce serait faisable, même sur une planche à pain, avec des ordures de l'ère 4164). autrement, je suis totalement d'accord.
JustJeff
1
C'est une réponse de qualité, en utilisant des hypothèses étape par étape et en arrivant à la condition finale. Bon travail!
LeanerRocky
2
Ne négligez pas les problèmes de rafraîchissement. Une autre raison pour laquelle le flash "basé sur des commandes" est probablement mieux adapté lorsqu'une souris d'un contrôleur essaie de conduire un camion Mack d'une mémoire.
Chris Stratton
J'ai mis un commentaire ci-dessus, avec la question, mais je suppose que je devrais vraiment le mettre ici. Merci beaucoup pour la réponse. L'échange de piles est une super ressource, et tout cela parce que les gens prennent du temps pour fournir des réponses de qualité.
johndeo
8

Je dirais non, non sans coller un fpga de bonne taille (nombre de broches) entre les deux, le fpga parle à la mémoire et le microcontrôleur parle au fpga en utilisant un schéma de pagination.

old_timer
la source
Ma pensée aussi. Et que le FPGA soit un contrôleur de rafraîchissement transparent. Mais vraiment ... ne serait-il pas plus simple et moins cher d' émuler un arduino dans un logiciel sur un petit système ARM?
Chris Stratton
1
Aussi amusant ou éducatif soit-il, le DDR n'est pas simple et pas pour les débutants. Trouvez un autre ordinateur portable ou une carte mère pour y mettre cette mémoire et découvrez le DDR en utilisant, par exemple, une carte fpga eval qui a un peu sur le côté ou peut-être une beagleboard ou quelque chose comme ça. Le premier problème est le nombre de broches, le second les signaux, le timing, etc. Il est difficile de le faire fonctionner lorsque vous créez votre propre carte. Ce n'est pas comme une interface lcd ou quelque chose comme ça que vous pouvez tester sur un microcontrôleur.
old_timer
7

Vous pourriez peut-être utiliser un système de verrous pour permettre à quelque chose comme un arduino de générer 32 bits d'adresse, et vous pourriez probablement concevoir un schéma pour générer les cycles de rafraîchissement, mais cela n'aurait presque aucun intérêt, sauf en tant que technique exercice.

Le circuit d'interface serait probablement la partie la plus complexe du système résultant, et il y aurait peu de valeur pratique dans le résultat; l'arduino ne serait pas en mesure d'exécuter du code à partir de la RAM, le stockage serait volatile et consomme probablement plus d'énergie que l'arduino également. Si vous souhaitez stocker des données, une EEPROM SPI est probablement une bien meilleure solution.

JustJeff
la source
1
Un AVR peut-il exécuter du code à partir de la RAM en toutes circonstances?
Nick T
@ Nick T - Je ne suggérais pas indirectement qu'il existe de tels scénarios où cela pourrait se produire; Je disais directement que si quelqu'un envisageait de s'interfacer avec ce type de RAM, il serait erroné de penser qu'il pourrait l'utiliser ainsi.
JustJeff
1
Flash série ou SRAM sont généralement beaucoup plus rapides que l'EEPROM. Si vous avez besoin de beaucoup de données non volatiles (le cas d'utilisation du code à distance), Flash est probablement le meilleur choix. Pour les grands tampons, utilisez SRAM; c'est beaucoup plus rapide que l'EEPROM. Si vous avez quelques bits de configuration qui doivent être basculés indépendamment, c'est vraiment le seul créneau qui reste pour les EEPROM.
Kevin Vermeer
@reemrevnivek - bon point, je +1 votre commentaire. Si vous conservez quelques dizaines de paramètres de configuration, EEPROM. Si vous souhaitez conserver des images de vidéo, SRAM.
JustJeff
7

Si vous regardez les fiches techniques des puces DRAM, il y a une vitesse d'horloge minimale de quelque 50 MHz + pour la DDR2. Donc non, vous ne pourrez pas vous connecter avec eux avec un microcontrôleur (à moins qu'il n'ait un support matériel intégré).

allanw
la source
Sans oublier que vous devez également rafraîchir la mémoire assez fréquemment! L'Arduino serait occupé à passer tout son temps à piloter les lignes de contrôle de la mémoire!
Toybuilder
6

La réponse courte est non.

L'Arduino ne peut pas piloter l'interface mémoire DDR ou DDR2. Vous pourriez faire un contrôleur DDR / DDR2 avec une interface SPI avec un FPGA, mais c'est une entreprise importante.

akohlsmith
la source
6

Vous auriez besoin d'un pilote basse tension (SSTL) et d'un moyen de contrôler environ 100 canaux (chaque différentiel, donc environ 200 broches. Pensez BGA.)

La plupart des DRAM doivent être actualisées à au moins 1 kHz et probablement davantage pour avoir un faible taux d'erreur sur les bits. Cela formera alors une tâche d'arrière-plan majeure et utilisera la majeure partie de la puissance de traitement préalable de l'Arduino, s'il est même possible de rafraîchir la mémoire à un tel rythme.

Cependant, avec certains microcontrôleurs, par exemple PIC24F / H / dsPIC33F, ils prennent en charge une interface de bus maître parallèle, qui permet d'accéder à certains types de SRAM parallèle. Il y a même un support avec C, car cette mémoire externe peut être mappée sur plusieurs variables de code et même des blocs qui combinent des mémoires internes et externes. La mémoire externe vous oblige à écrire du code PMB. Cependant, vous ne pourrez traiter que jusqu'à environ 1 Mo.

Thomas O
la source
AFAIK DDR utilise SSTL et non LVDS
mazurnification
@mazurnification, Ouais, tu as raison (mon erreur.) Pourtant, un cauchemar à contrôler depuis un Arduino.
Thomas O
Corrigez ensuite votre réponse!
Kevin Vermeer
@reemrevnivek, d'accord. Corrigée. Cependant, je faisais simplement remarquer que ce n'était pas pratique. Quel que soit le format de signalisation utilisé.
Thomas O
2

Non, pas sans interface de pagination entre la mémoire et le MCU. Certains des microcontrôleurs AVR ont en fait une interface de mémoire externe intégrée - Atmega2560, par exemple (voir la section 8 de la fiche technique ATmega640 / 1280/1281/2560/2561). Mais l'espace d'adressage est mesuré en kilo-octets, pas en gigaoctets.

JRobert
la source