É possível usar módulos DRAM de vários gigabytes com um microcontrolador?

20

Tenho dois módulos restantes de 2 GB de RAM que removi do meu MacBook Pro ao fazer uma atualização. Eu só estava me perguntando se estes eram utilizáveis ​​com, por exemplo, um Arduino. Eu seria muito iniciante para realmente tentar fazer isso agora, mas estou curioso para saber se isso é possível ou se é memória demais para um microcontrolador resolver.

johndeo
fonte
11
você provavelmente poderia montar algo para fazer isso, mas o circuito da interface provavelmente seria a parte mais complexa do sistema resultante e haveria pouco valor prático no resultado.
JustJeff
Obrigado pelas ótimas respostas! Muito interessante. Estou gradualmente aprendendo sobre como as peças se encaixam. Obrigado.
Johndeo 5/05
As plataformas ARM9 e ARM11 hospedam controladores DDR2, mas você não está falando de microcontroladores, mas de microprocessadores. O FPGA também pode interagir com ele. Toda a tarefa é bastante complexa. Um arduino é de apenas 8 bits, por isso simplesmente não pode fazer o enorme trabalho de endereçamento em mãos.
9117 Hans
O que Hans disse - qualquer micro suficientemente poderoso para usar esse tipo de RAM terá um controlador DDR embutido. Eu não olhei atentamente para o funcionamento interno do controle DDR, mas o fato de você precisar de hardware dedicado para isso diz a você algo ... módulos antigos, material de impressoras a laser antigas etc. podem ser mais úteis.
você

Respostas:

24

Vou dizer não: a incompatibilidade mais básica é que há muitos pinos nesses módulos até que podem fazer a interface física com um Arduino. O mesmo vale para microcontroladores pequenos semelhantes. Um ARM Cortex M3 está se aproximando, mas poucos deles têm o barramento externo necessário para fazer a interface da RAM dessa maneira (eu acho).

Mas eu vou tocar e ir além. Supondo que você possa conectar o chip ao Arduino de alguma forma, outro problema básico de compatibilidade elétrica são as voltagens necessárias. Eu acho que esses módulos de RAM usam algo estranho como 2.2V - não está presente em uma placa Arduino de baunilha ou na verdade, em qualquer outro microcontrolador hobby básico.

Supondo que isso fosse resolvido, o chip funcionaria como qualquer outra memória externa do Arduino. Isso é realmente feito o tempo todo - as pessoas adicionam EEPROM externa para armazenar constantes importantes ou cartões SD / MMC para armazenamento de logs de servidores da Web e outros. Obviamente, nesse contexto, os módulos de RAM não apresentam nenhum benefício real para o Arduino. Sua principal característica é a velocidade e o Arduino (e sim, outros microcontroladores amadores) normalmente não quebram 25MHz na velocidade do relógio. Eles são muito lentos para se preocupar com velocidade. E o tamanho do armazenamento não é um grande problema, pois a interface com um cartão SD / MMC é claramente mais fácil e oferece tanto espaço para brincar.

Portanto, mesmo que fosse possível, não seria realmente aconselhável.

AngryEE
fonte
tenho que confessar que pensei em conectar alguns DIP DRAM antigos ao meu arduino, apenas para larfs. (mas isso seria possível, mesmo em uma tábua de pão, com o lixo da era 4164). por outro lado, concordo totalmente.
JustJeff 4/11/11
11
Essa é uma resposta de qualidade, usando suposições passo a passo e chegando à condição final. Bom trabalho!
LeanerRocky
2
Não ignore os problemas de atualização. Outro motivo pelo qual o flash "baseado em comando" provavelmente é uma correspondência melhor quando um mouse de um controlador está tentando dirigir um caminhão mack de uma memória.
Chris Stratton
Coloquei um comentário acima, com a pergunta, mas acho que devo colocá-lo aqui. Muito obrigado pela resposta. A troca de pilhas é um super recurso, e tudo se deve ao fato de as pessoas terem tempo para fornecer respostas de qualidade.
Johndeo 5/05
8

Eu diria que não, não sem colocar um fpga de bom tamanho (contagem de pinos) no meio, o fpga fala com a memória e o microcontrolador fala com o fpga usando um esquema de paginação.

old_timer
fonte
Meu pensamento também. E faça com que o FPGA seja um controlador de atualização transparente. Mas realmente ... não seria mais simples e mais barato emular um arduino em software em um pequeno sistema ARM?
Chris Stratton
11
Por mais divertido ou educacional que seja, DDR não é simples, e não é para iniciantes. Encontre outro laptop ou placa-mãe para colocar essa memória e aprenda sobre DDR usando, digamos, uma placa de avaliação fpga que tenha um pouco de lado ou talvez uma beagleboard ou algo assim. O primeiro problema é a contagem de pinos, o segundo são os sinais, o tempo etc. É difícil fazê-lo funcionar quando você faz sua própria placa de circuito impresso. Não é como uma interface de LCD ou algo parecido que você pode fazer com a placa de ensaio para um microcontrolador.
old_timer
7

É possível usar um sistema de trincas para permitir que algo como um arduino gere 32 bits de endereço, e você provavelmente poderia criar algum esquema para gerar os ciclos de atualização, mas não haveria sentido em fazê-lo, exceto como técnica. exercício.

O circuito da interface provavelmente seria a parte mais complexa do sistema resultante e haveria pouco valor prático no resultado; o arduino não seria capaz de executar o código a partir da RAM, o armazenamento seria volátil e provavelmente consumiria mais energia que o arduino também. Se você deseja armazenar dados, uma SPI EEPROM provavelmente é uma solução muito melhor.

JustJeff
fonte
11
Um AVR pode executar código da RAM em qualquer circunstância?
Nick T
@ Nick T - Eu não estava sugerindo indiretamente que existem cenários onde poderia; Eu estava dizendo diretamente que, caso alguém estivesse pensando em fazer interface com esse tipo de RAM, seria errado pensar que eles poderiam usá-lo dessa maneira.
JustJeff 4/11/11
11
Serial Flash ou SRAM são geralmente muito mais rápidos que a EEPROM. Se você precisar de muitos dados não voláteis (o caso de uso de código remoto), o Flash é provavelmente a melhor escolha. Para buffers grandes, use SRAM; é muito mais rápido que EEPROM. Se você tem alguns bits de configuração que precisam ser alternados independentemente, esse é realmente o único nicho que resta para as EEPROMs.
Kevin Vermeer
@reemrevnivek - bom ponto, marquei seu comentário com +1. Se você estiver mantendo algumas dezenas de definições de configuração, EEPROM. Se você deseja manter os quadros de vídeo, SRAM.
JustJeff
7

Se você observar as fichas de chips DRAM, há uma velocidade de clock mínima de algo como 50MHz + para DDR2. Portanto, não, você não poderá interagir com eles com um microcontrolador (a menos que ele tenha suporte de hardware embutido).

allanw
fonte
Sem mencionar que você também precisa atualizar a memória com bastante frequência! O Arduino estaria ocupado passando o tempo todo dirigindo as linhas de controle de memória!
Toybuilder
6

A resposta curta é não.

O Arduino não pode dirigir a interface de memória DDR ou DDR2. Você poderia criar um controlador DDR / DDR2 com uma interface SPI com um FPGA, mas isso é uma tarefa significativa.

akohlsmith
fonte
6

Você precisaria de um driver de baixa tensão (SSTL) e alguma maneira de controlar cerca de 100 canais (cada diferencial, cerca de 200 pinos. Pense em BGA.)

A maioria das DRAM deve ser atualizada pelo menos 1kHz e provavelmente mais para ter uma baixa taxa de erros de bits. Isso formará uma grande tarefa em segundo plano e consumirá a maior parte do poder de processamento do Arduino, se for possível atualizar a memória a essa taxa.

O que você pode ver é que em alguns microcontroladores, por exemplo, PIC24F / H / dsPIC33F, eles suportam uma interface de barramento mestre paralelo, que permite o acesso a alguns tipos de SRAM paralela. Existe até suporte para C, pois essa memória externa pode ser mapeada para várias variáveis ​​de código e até blocos que combinam memórias internas e externas. A memória externa requer que você escreva algum código PMB. Você só poderia endereçar até cerca de 1 MB com isso.

Thomas O
fonte
AFAIK DDR usa SSTL não LVDS
mazurnification
@ amazurnification, Sim, você está correto (meu erro.) Ainda assim, um pesadelo para controlar de um Arduino.
Thomas O
Então corrija sua resposta!
Kevin Vermeer
@reemrevnivek, ok. Corrigido. No entanto, eu estava apenas apontando que isso era impraticável. Não importa qual formato de sinalização é usado.
Thomas O
2

Não, não sem uma interface de paginação de algum tipo entre a memória e o MCU. De fato, algumas das MCUs do AVR possuem uma interface de memória externa integrada - Atmega2560, por exemplo (consulte a seção 8 da folha de dados ATmega640 / 1280/1281/2560/2561). Mas o espaço de endereço é medido em kilobytes, não em gigabytes.

JRobert
fonte