Qual é uma boa opção para um ARM fazer interface com a memória externa?

13

Acabei de concluir um projeto usando o chip LPC2132, mas tive problemas com o uso de 64kb de RAM.

Para o meu próximo projeto, eu gostaria de usar algo que possa fazer referência a um chip de memória externo muito maior. Que tipo de ARM pode fazer isso e o que preciso fazer para que os dois dispositivos falem?

samoz
fonte
1
que tipo de memória estamos falando sobre SRAM, SDRAM, DDR, DDR2, DDR3?
Jay Atkinson
1
Nenhum tipo em particular. Algo maior que 64k ...
samoz

Respostas:

10

Você não precisa de um MMU para memória RAM externa, o fator determinante para isso é um problema completamente separado da necessidade de mais espaço. Se você codificou diretamente para o metal, isso pode facilitar sua vida por não ter uma MMU. Eu também gostaria de observar que uma MMU praticamente nunca é um componente externo, mas sim no dado do SoC.

Você pode encontrar SoCs ARM em muitas famílias que permitem a memória externa do ARM7, por exemplo, a série NXP LPC2212 não dizendo o melhor, apenas o primeiro SoC ARM7 que surgiu no Google com uma interface de memória externa, existem muitas opções .

Eu prestaria mais atenção aos recursos dos vários núcleos nas famílias ARM, pois você pode encontrar quase todos eles nos SoCs com controladores de memória externos.

Agora, quanto ao tipo de memória que você precisa e como fazê-la funcionar, isso depende do SoC que você escolher e de qual memória o controlador de memória externo suporta. Por exemplo, o ARM7 SoC i linked suporta SRAM externa, bem como flash e roms e suporta até 4 bancos de 16 MB, para que você possa conectar flash externo e SRAM a ele ao mesmo tempo.

Você pode usar RAM separado e ICs flash. Existem também pacotes chamados MCP (Multi Chip Package) que podem incluir flash e ram em um pacote. Como você escolhe esses dispositivos depende de muitos fatores, você precisa ser mais específico sobre seu aplicativo.

A facilidade de conexão depende da velocidade que você precisa. A maioria dos controladores de memória externa possui taxas de clock programáveis. As taxas de clock da interface de memória podem ser muito altas, pelo menos, 10 MHz e provavelmente muito mais altas. Em suma, é muito provável que você não faça algo assim, você precisa projetar uma placa de circuito impresso e prestar atenção especial aos problemas de integridade de sinal dessas linhas.

Sua melhor aposta é escolher um núcleo com o qual você queira jogar e encontrar uma das muitas placas de desenvolvimento disponíveis com memória externa.

Marca
fonte
Obrigado pela resposta Mark. Fiquei confuso se uma MMU era necessária ou não. Olhando para o Sparkfun, eles realmente têm um LPC 2294 à venda no momento, que possui um barramento de memória externo. Eu acho que vou com isso.
samoz
4
uma MMU é usada para mapear um espaço de endereço virtual para dispositivos físicos. É usado pelos sistemas operacionais para isolar a memória de diferentes processos, para paginação, resolução de problemas de fragmentação da memória, mapeamento de dispositivos de hardware dinâmico, etc. Ele virtualiza o subsistema de memória. Na maioria dos casos, você precisaria apenas de uma MMU se desejasse executar um sistema operacional com um conjunto completo de recursos de multiprocessamento. Por exemplo, você precisaria de um MMU para executar o kernel linux completo, embora exista o uClinux que foi modificado para ser executado sem um MMU.
Mark
é ok para a placa de ensaio um eeprom externo trabalhando no modo SPI / IIC? Estou ansioso para estender a memória flash do meu MCU usando 24c64 IC.
0xakhil
Seria difícil; você precisa de uma boa placa de ensaio, fios muito curtos (por exemplo, 1 polegada) e relógios muito lentos (evite qualquer coisa além de 2 MHz, eu diria). Eu usaria resistores de 200 ohm em vez de fios para garantir um tempo de subida / queda mais lento. Lembre-se de que o GND também deve ser curto entre os chips. Isso não quebraria nenhum recorde, mas forneceria uma prova de conceito que você pode traduzir para um quadro melhor.
Guillermo Prandi
5

A série maior de processadores STM32 (núcleo Cortex-M3 de 32 bits) possui um FSMC, que é um controlador de memória estática flexível. Com isso, você pode conectar Flash, RAM e outros periféricos de memória, como LCD e outros.

Posso recomendar o STM32F103ZET6 como tcrosley também disse, e você pode obter uma placa de desenvolvimento incluindo flash e sram no ebay por US $ 68 - http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=220619908411


fonte
aviso, qualquer memória externa adicionada a um STM32x não será tão rápida quanto a SRAM interna ou o Flash interno. Como 6-9X mais lento. Se você precisar de memória rápida, verifique se ela é interna. Estou fazendo um projeto com 16MB PSRAM em um STM32 e é muito lento se você usá-lo como memória de uso geral.
27475 Mark-Lakata #
1
Você pode fazer com que o FSMC / PSRAM vá mais rápido, mas não pode simplesmente mapeá-lo para o espaço de memória normal, ou seja, para a memória heap. Você terá que usar acessos dedicados ao DMA.
27475 Mark-Lakata #
4

Recentemente, eu tinha um requisito semelhante para um novo projeto e escolhi o STMicro STM32F103ZET6 (ARM Cortex-M3 de 32 bits), com 512K de Flash interno e 64K de RAM interna por cerca de US $ 10 em quantidade. Possui um controlador de memória que pode endereçar até 64 MB de memória externa (26 bits de endereço). Disponível em um pacote LQFP de 144 pinos. (Eu não gosto de usar BGA para protótipos.) Estarei fazendo interface com uma Cypress SRAM de 2 MB, sem nenhuma outra cola necessária (sem multiplexação).

tcrosley
fonte
Legal! Você está usando uma placa de desenvolvimento ou criou a sua?
samoz 30/06/10
Meu representante local do STMicro me deu um "IAR KickStart Kit for STM32" iar.com/website1/1.0.1.0/658/1/?item=prod_prod-s1/225 para brincar; no entanto, o micro é apenas um pacote de 64 pinos, por isso não possui os pinos FSMC; portanto, posso acabar recebendo as placas com o pacote de 144 pinos.
tcrosley
Estou esquecendo de algo? 26 bits podem endereçar diretamente 2 ^ 6 = 64 M. locais. 512 MB com isso significaria palavras de 8 bytes. Isso deveria ser 512Mb?
XTL
1
@XTL: boa captura, corrigi minha resposta.
tcrosley
3

Talvez um Atmel AT91SAM9G20 ?

É um pouco besta (pacote BGA de 217 pinos), mas é um ótimo chip pelo preço. Se você está procurando algo um pouco mais amigável ao ser humano, talvez experimente o Atmel AT91M42800A . Eu acho que esse é o menor MCU que possui hardware de memória externa, pelo menos da Atmel. É um pacote LQFP de 144 pinos.

A Atmel possui um seletor paramétrico: http://www.atmel.com/dyn/products/param_table_v2.asp?family_id=605&OrderBy=part_no&Direction=ASC

(Acho que devo acrescentar que não trabalho para a Atmel; estou familiarizado com as coisas deles.)

pingswept
fonte