# What is a good choice for an ARM to interface with external memory?

I just completed a project using the LPC2132 chip, but ran into problems with using up the whole 64kb of RAM.

For my next project, I'd like to use something that can reference an external, much larger memory chip. What sort of ARM can do this and what do I need to do to get the two devices talking?

• what kind of memory we talking about SRAM, SDRAM, DDR, DDR2, DDR3? – Jay Atkinson Jun 22 '10 at 2:09
• No kind in particular. Something larger than 64k... – samoz Jun 23 '10 at 18:29

You don't need an MMU for external RAM memory, the determining factor if you need one is a completely separate issue from simply needing more space. If you've been coding directly to the metal it may actually make your life easier not having an MMU. I'd also like to note that an MMU is virtually never an external component but rather on the SoC die.

You can find ARM SoCs in many families that allow external memory from the ARM7 on up for example the NXP LPC2212 Series not saying its the best, just the first ARM7 SoC that came up in google with an external memory interface, there are lots of options.

I'd pay more attention to the features of the various cores in the ARM families as you can find almost all of them in SoC's with external memory controllers.

Now as to what type of memory you need and how to get it working, that depends on the SoC you choose and what memory the external memory controller supports. For instance the ARM7 SoC i linked supports external SRAM as well as flash's and roms and supports up to 4 16MB banks, so you could hook external flash and SRAM to it at the same time.

You could use separate RAM and flash IC's there are also packages called MCP (Multi Chip Package) that can include both flash and ram in 1 package. How you choose these devices depends on many factors, you'd need to be more specific about your application.

How easy this is to hook up depends on the speed you need. Most external memory controller have programmable clock rates. The memory interface clock rates could be very high at least 10MHz and likely much higher. In short your very likely not breadboarding something like this, you need to design a PCB and pay special attention to signal integrity issues for these lines.

Your best bet is to pick a core you want to play with and a find one of the many development boards out there with external memory on it.

• Thanks for the answer Mark. I was confused if an MMU was necessary or not. Looking at Sparkfun, they actually have an LPC 2294 on sale right now, which has an external memory bus. I think I'll go with that. – samoz Jun 22 '10 at 11:27
• an MMU is used to map a virtual address space to physical devices. Its used by operating systems to isolate the memory of different processes, for paging, resolving memory fragmentation issues, memory mapping dynamic hardware devices, etc. It virtualizes the memory sub suystem. In most cases you would only need an MMU if you wanted to run a operating system with a full set of multiprocessing features. For instance you would need an MMU to run the full linux kernel, although there is uClinux that has been modified to run without an MMU. – Mark Jun 22 '10 at 16:34
• is it okey to breadboard an external eeprom working in SPI/IIC mode? I am looking forward to extend my MCU's flash memory using 24c64 IC. – 0xakhil May 24 '11 at 15:30
• It would be difficult; you need a good breadboard, very short wires (e.g. 1 inch) and very slow clocks (avoid anything beyond 2 MHz, I'd say). I'd use 200 ohm resistors instead of wires just in case, to get slower rise/fall times. Remeber that GND should be short between chips as well. This wouldn't break any records, but would give you a proof of concept you can translate to a better board. – Guillermo Prandi Jun 18 '19 at 4:31

The larger series of STM32 processors (32-bit Cortex-M3 core) has a FSMC, which is a Flexible Static Memory Controller. With this you is able to connect Flash, RAM, and other memory peripherals like LCD and such.

I can recommend the STM32F103ZET6 as tcrosley also said, and you can get a development board including flash and sram on ebay for $68 - http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=220619908411 • warning, any external memory you add to an STM32x is not going to be as fast as the internal SRAM or internal Flash. Like 6-9X slower. If you need fast memory, make sure it is internal. I'm doing a project with 16MB PSRAM on an STM32 and it is pretty slow if you use it as general purpose memory. – Mark Lakata Nov 2 '12 at 17:42 • You can get the FSMC/PSRAM to go faster, but you can't just map it to normal memory space, ie for heap memory. You'll have to use dedicated DMA accesses. – Mark Lakata Nov 2 '12 at 17:43 I recently had a similar requirement for a new project, and chose the STMicro STM32F103ZET6 (ARM 32-bit Cortex-M3), with 512K of internal Flash and 64K of internal RAM for around$10 in quantity. It has a memory controller which can address up to 64MB of external memory (26 address bits). Available in a 144-pin LQFP package. (I don't like using BGA for prototypes.) I will be interfacing it with a 2MB Cypress SRAM, without any other glue required (no multiplexing).

• Cool! Are you using a development board or did you make your own? – samoz Jun 30 '10 at 16:56
• My local STMicro rep gave me an "IAR KickStart Kit for STM32" iar.com/website1/1.0.1.0/658/1/?item=prod_prod-s1/225 to play with; however the micro is only a 64-pin package so it doesn't have the FSMC pins, so I may end up getting the boards with the 144-pin package. – tcrosley Jun 30 '10 at 18:13
• Am I missing something? 26 bits can directly address 2^6 = 64 M locations. 512MB with that would mean 8-byte words. Should that be 512Mb? – XTL Jul 12 '10 at 7:40
• @XTL: good catch, I corrected my answer. – tcrosley Jul 12 '10 at 17:04

Maybe an Atmel AT91SAM9G20?

It's a bit of a beast (217-pin BGA package), but it's a great chip for the price. If you're looking for something a little more human-friendly, maybe try the Atmel AT91M42800A. I think that's the smallest MCU that has external memory hardware, at least from Atmel. It's a 144-pin LQFP package.

Atmel has a parametric selector: http://www.atmel.com/dyn/products/param_table_v2.asp?family_id=605&OrderBy=part_no&Direction=ASC

(I guess I should add that I don't work for Atmel; I just happen to be familiar with their stuff.)