Memorias Dim em Microcontroladores

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Memorias Dim em Microcontroladores

Mensagempor Kim Robert » 26 Set 2010 15:00

Meus caros colegas tenho uma duvida, sempre estou fazendo programas que nececita de muita memoria Ram, eu tive pensando em utilizar um pente de memoria de computador antigo, tipo ( MEMORIA DIM DE 64 MEGA ) usar esta referida, no meu microcontrolador, seria interesante pois acabaria de vez o meu problema constante de memoria ram para processamento em tempo real, alguem sabe como funciona estas memoria dim, e possivel ler e gravar nestas memorias com um micro controlador AVR ( M8 - M16 ou M32 ).
Kim Robert
Bit
 
Mensagens: 30
Registrado em: 20 Set 2007 17:56

Mensagempor chipselect » 27 Set 2010 07:37

Olha, não sei se tem algum AVR "simplezinho" com controladora de memória e barramento pra você usar uma memória dinâmica não, se tiver, geralmente é pra memória RAM estática e vai dar um pouco de trabalho enfiar uma ram dinâmica.

Até é possível botar mais memória num microcontrolador sem um barramentozinho externo de memória, mas você vai ter que fazer todo o processo de leitura/gravação das variáveis locais para a memória externa, vai dar um pouco de trabalho.

Uma vez que vai te dar trabalho mesmo pra usar uma memória dessas, e considerando que um pente de memória EDO, BEDO, ou qualquer outro de 72 pinos deve estar custando o mesmo preço das novas memórias, mesmo elas sendo usadas e de capacidade muito inferior, vale mais a pena você vender o pente pra alguém que tá precisando dessas antiguidades e colocar uma memória no barramento SPI ou I2C do seu microcontrolador com a grana que você receber pelos módulos de 72 pinos.

Bom, isso é minha opnião, posso estar bem enganado, já que não trabalho com AVR e não conheço o AVR32.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor Djalma Toledo Rodrigues » 27 Set 2010 08:46

E complementando:

São memórias Dinâmicas e necessitam de Reflesh para manter a Carga dos Capacitores.

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Francesco » 27 Set 2010 14:31

O que o Djalma falou é importante, não é simplesmente um barramendo de endereço-dado. Há um circuito de refrescamento de memória que precisa ser construído.

Além do mais, essas memórias tem um tempo de acesso mais lento do que as RAM de 8KB e 64KB que normalmente usamos. Você precisa se preocupar se os tempos de acesso são suficientes para seu sistema.

Aquém disso, não é um circuito impossível de se fazer. Na verdade, conheço um projeto de um cara que fez exatamente isso usando uma lógica programável, assim acessando a memória em um 8051 bem velhinho.

Dê uma olhada, o projeto é completamente aberto:
http://www.pjrc.com/tech/mp3/
Avatar do usuário
Francesco
Word
 
Mensagens: 699
Registrado em: 04 Mar 2008 00:22
Localização: São Paulo - SP

Mensagempor tcpipchip » 27 Set 2010 14:46

RAS CAS
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor chipselect » 27 Set 2010 18:19

a parte do refrescamento até dá pra tentar fazer por timer no microcontrolador, se esse tiver capacidade suficiente, mas uma memória EDO ou BEDO não tem só refrescamento, o acesso não é igual ao da RAM estática, e isso não fica simples o suficiente pra enfiar num micro de 8 bits a ponto de valer a pena.

A SDRAM tem o auto refresh, o que quase elimina o circuito de refresh da controladora de memória, mas botar uma sdram num microcontrolador sem a controladora de memória adequada, só se o mcu tiver clock lá nas estrelas pra ver se vale a pena.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor Kim Robert » 27 Set 2010 20:09

Muinto grato pelas explicações, mas olha existe alguma memoria paralela de pelo menos 1 Mega Byte disponivel ou facil de encontrar para a gente usar nos avrs, procurei e so encontrei as conhecidas 62256 foi a maior que encontrei, eu preciso fazer um banco de pelo menos 5 Mega Byte de RAM ai eu teria que utilizar 32 memorias 62256 para alcançar apenas 1 Mega Byte, e teria que ter 32 Pinos de Chip Celect para escolher qual memoria acessar, tudo bem que faria esta escolha com 4 Cis 373 somente para os Chip Celect, mas o pior e gerenciar tudo isto, sem contar no tamanho que ficaria esta placa com 32 Memorias 62256 para alcançar apenas 1 MB e para alcançar 5 MB então nen da pra imaginar, qual a sugestao que vcs me dão para que eu possa utilizar 5 Mega de Ram no Micro Controlador, Ja pensei em Cartao de memoria Flash as conhecidas memorias de Cartão SD, ja fiz projetos com este tipo de memoria, e funcionou muito bem, e utilizei apenas 4 Pinos do Micro controlador e conseguí acessar 4 GB de Memoria, mas este tipo de memoria tem limite de gravação, ja que o sistema vai ler e gravar constantemente nesta Ram, a memoria flash se deterioraria rapidamente, sem contar que um cartao de memoria flash do tipo SD, não tem a velocidade que estas memorias 62256 tem, por este motivo acho os Cartões SD inviaveis para este projeto, eu gostaria de encontrar uma memoria que fosse pratica como as conhecidas 62256, mas que tivesse uma capacidade de pelo menos 1 Mega cada uma, ai so precizaria de 5 para o meu projetos, alguem sabe de algo nestes termos.
Kim Robert
Bit
 
Mensagens: 30
Registrado em: 20 Set 2007 17:56

Mensagempor Kim Robert » 27 Set 2010 20:19

Continuando a narrar o projeto que fiz com a memoria SD, funcionou perfeitamente, mas quando precizo alterar um byte na memoria tenho que ler um bloco inteiro de 512 bytes guardar na memoria ram processar e depois devolver para a mesma, isto da um lentidao no sistema danado, sem contar com o grande numero de rotinas de tratamento que tive que fazer, quando o processo e constante, fica muito lento, por este motivo, quero utilizar ainda este tipo de memoria SD em meus projetos, pois achei seu uso interessante e bem funcional, mas quero retirar da memoria SD um bloco de 5 Mega pelo menos, Jogar na Ram e processar este bloco de Memoria, ai sim depois de feito e escolhido todos os parametro e detalhes do bloco de dados, eu posso gravar este bloco onde e como eu desejar, ainda mais, posso dar um nome e especificar parametros deste bloco de dados, por este motivo precizo muito de um banco de memora ram para este processo, pois caso contrario fica muito lento e inviavel estas tarefas, e a quantidade de linhas de codigos ficam imensa. conto com as sugestoes de voces.
Kim Robert
Bit
 
Mensagens: 30
Registrado em: 20 Set 2007 17:56

Mensagempor Sergio38br » 27 Set 2010 22:10

Pelo que tu esta falando, só para carregar os 5M, ja ficara um bom tempo a esperar, por que não muda para os atxmega da serie A1 que ja possuem barramento externo para SDRAM

http://www.atmel.com/dyn/resources/prod ... oc8067.pdf

[ ]`s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Memorias Sdram

Mensagempor Kim Robert » 06 Out 2010 15:58

Interessante o que voce sujeriu, mas como funciona esta memoria SDRAM, elas funcionam como os cartoes SD, se for seria interessante pois eu poderia acessalas via SPI do AVR.
Kim Robert
Bit
 
Mensagens: 30
Registrado em: 20 Set 2007 17:56

Mensagempor proex » 06 Out 2010 17:12

Trabalhar com memoria SDRAM, aquela que precisa de Refresh, é mais simples do que vcs imaginam.

Num projeto meu, de uma camara de éco digital, que saiu anos atras na revista Saber Eletronica, usei um miseravel PIC16C54 e uma Ram Dinamica.

Fazer refresh numa ram dinamica é muito simples e facil.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor Wagner de Queiroz » 06 Out 2010 20:33

e por falar em circuitos de refresh, pq vc nao pega um segundo mcu que seria o controlador de memorias, digo, ele faz o refresh das linhas, recebe o comando para ler ou gravar um endereco do seu mcu principal, e vai lá na memoria, ve se a linha nao esta sendo refrescada (Voce nao pode ler numa linha que esta sendo refrescada) dai le ou grava o dado que se quer. Entre o MCU de memoria e o seu MCU principal vc pode usar uma linha ou 8 para comunicacao.

Pelo que eu me lembre, as memorias EDO sao mais rapidas que as velhas DRAM´s podem ser lidas enquanto as requisicoes anteriores nao terminaram, melhorando o tempo de acesso, (quem se lembra do velho 6-2-2-2?)

Ou entao o jeito é ir para a SDRAM que ja sao memorias estaticas. Essas memorias de Cache de Processador Pentium devem ser jogadas aos montes no lixo hoje em dia, 5Mb deve dar um pouco de trabalho de conseguir juntar, mas nao impossivel.

ou talvez eu esteja viajando na maionese. A FPM nao pode ser lida enquanto o pedido de leitura anterior nao tenha sido completado. Nao me lembro se era na EDO que vc podia ler qualquer linha exceto a que estava recebendo refresh.

Ainda tenho o meu livro do IBM-XT, boa leitura para entender de memoria RAM.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Re: Memorias Sdram

Mensagempor Djalma Toledo Rodrigues » 06 Out 2010 22:14

Kim Robert escreveu: ... memoria SDRAM, elas funcionam como os cartoes SD(?) ...

Cartão SD (San Disk), ou Pendriver, são o equivalente ao HD de estado sólido

Pode inclusive Desflagmentar , usar o ScanDisk, Limpeza de Disco, etc.

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor msamsoniuk » 06 Out 2010 23:54

opa opa opa... SDRAM eh synchronous DRAM! nao confundir com SRAM! :/

a unica diferenca de uma SDRAM para uma DRAM boa eh apenas a existencia de clock, que permite fazer transferencias em burst com um acesso por clock em uma mesma linha de acesso. o armazenamento no array de memoria continua sendo com capacitancia parasita, o que significa que a memoria continua requerendo refresh periodico. o que melhorou foi a performance e a funcionalidade.

na epoca do proex a vida era simples pq era facil de entender e usar uma memoria DRAM. uma memoria de 64Kbit formava na verdade um array com 256 x256 elementos, assim bastava colocar em A0-7 o valor da linha desejada no array e ativar RAS. depois de um certo tempo de acesos, os 256 bits da linha eram lidos e bufferizados. na subida de RAS os 256 bits eram entao reescritos e isso corresponde a uma operacao de refresh do tipo RAS-only.

se antes de subir RAS vc colocasse o valor da coluna em A0-7 e baixasse CAS, depois de um tempo de acesso vc conseguia transferir para DO o valor dessa coluna especifica. se o pino RW estivesse baixo durante a subida de CAS, no lugar de escrever a linha inteira bufferizada (como se fosse um refresh), aquele elemento em particular enderecado em DO seria substituido pelo valor em DI e assim vc estaria fazendo nao apenas o refresh da linha inteira, como tambem a atualizacao de uma coluna especifica do array.

daih eh facil melhorar o esquema: se vc nao subir RAS nunca, vc nunca vai gravar a linha. isso significa que vc pode enderecar uma linha especifica com RAS e entao ler e escrever varias colunas nessa mesma linha, ativando e desativando varias vezes CAS. com isso vc tem o que se chama de page mode. mas vc nao pode ficar parado muito tempo, pois precisa fazer refresh de outras linhas.

surgiram varias solucoes, hidden refresh, que permite vc embutir o ciclo de refresh no proprio ciclo RAS/CAS. e vale lembrar que apesar do array ser comporto por capacitores parasitas, quando se le uma linha ela eh armazenada em estruturas estaticas, portanto eh facil adicionar logica de aceleracao e isso gerou memorias tipo static colunm, bust, pipeline burst, bank interleave, etc.

em especial, a SDRAM eh o apice desses melhoramentos, ou seja, o array de capacitores continua o mesmo, o que melhora eh a tecnologia entre o buffer de linha e o processador. e isso vai melhorando mais e mais com as memorias DDR.

entao DRAM, SDRAM, DDR e qq coisa dinamica eh tudo farinha do mesmo saco! soh muda mesmo a complexidade (e velocidade) da interface.

DRAM eh relativamente simples com uma maquina de estados... exemplo de um pseudo-codigo para uma DRAM de 64Kbyte, cada linha eh um evento no tempo:

write_dram:
RW = 0
D[0-7] = dados
A[0-7] = linha
RAS = 0
A[0-7] = coluna
CAS = 0
CAS = 1
RAS = 1

read_dram:
RW = 1
A[0-7] = linha
RAS = 0
A[0-7] = coluna
CAS = 0
dados = D[0-7]
CAS = 1
RAS = 1

refresh_dram:
RW = 1
A[0-7] = refresh++
RAS = 0
RAS = 1

nos datasheets tem o tempo para fazer o refresh espalhado, ou seja, a cada tantos microsegundos vc faz o refresh de uma linha. com isso vc garante que cada celula nao fica mais que tantos milisegundos sem refresh. o exemplo de leitura e escrita sao simples e assumem um processador lento, isso pq em uma DRAM de 70ns vc precisa garantir pelo menos uns 40ns o CAS em nivel 0 para que o dado seja efetivamente lido ou escrito. bom, SPI nao dah nem para o comeco pq uma DRAM da epoca do proex fornece ae mais de uma dezena de MBytes/s na boa de taxa de transferencia, bem acima do que SPI eh capaz.

SDRAM e DDR sao parecidos, mas infinitamente mais complexos, pq sao memorias sincronas e usam estes clocks para transferir bursts. as SDRAM tipicas operam entre 66 e 133MHz, mas as DDR tipicas comecam em 133 e vao acima dos 1333 MHz. essas coisas podem chegar na boa dos GBytes/s, mas se aventurar a fazer um controlador no braco eh loucura, melhor investir em um processador de verdade com controlador SDRAM ou DDR integrado.

lembrando que nas memorias SRAM ou MRAM, apesar de serem estruturas em arrays, vc nao precisa de refresh pq sao estruturas completamente estaticas, ou seja, sao farinha de outro saco hehehe. esse fato por si elimina a necessidade de ler, bufferizar e escrever linhas inteiras o tempo todo... isso as torna simples e rapidas.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor Kim Robert » 07 Out 2010 15:58

Suas dicas clariaram muito minhas ideias, olha concegui comprar uma memode de 64 Mega, so que não sei se é Megabit ou Mega byte alguem pode me ajudar, se for megabit ela e de apenas 8 Mega Byte, mas de qualquer forma ela resolve o meu problema, eu vi algo sobre Auto Refresh, e aquela dificuldade na qual voces se referiam, acho que colocando no modo algo Refresh ela faz o Refrexamento altomatico sem que eu precize me preocupar com isto, estou correto?, a minha duvida e o seguinte, ela tem coisas de bancos e etc, cada banco que eu seleciono ela tem uma quantidade de memoria para ler ou gravar, mas vi uma coisa de comandos que nao entendí muito bem, me parece que tenho que mandar um comando para iniciar a leitura, e depois outro comando para finalizar, e isto? estou um pouco confuso, eu comprei dois tipos de memoria, nao sei qual e a mais facil pra mim os codigos dela são:

1º:
MT48LC8M8A2 – 2 Meg x 8 x 4 banks ( Esta eu li algo do tal Refresh)

2º:
IS42S32200C1 (Nesta não ví nada disto)

qual das duas vcs me sugere ser mais facil trabalhar?
Kim Robert
Bit
 
Mensagens: 30
Registrado em: 20 Set 2007 17:56

Próximo

Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x