Mega2560 Expansion Ram, Arduino Compatible XMEM
Does your Mega2560 project need more than the 8k ram in the Arduino processor? With Memory Panes, your project can now use 1MB!
This project came about as a result of needing more memory for a Arduino Mega2560 project. I searched the net looking for a quick addon memory shield. Andy Brown http://andybrown.me.uk/wk/2011/08/28/512kb-sram-expansion-for-the-arduino-mega-design/ designed a 512kb expansion back in 2011. But, He didn't have any left over.
So I took the knowledge from his projected and added my own. I created a custom ATMega2560 board with 512KB ram, SDCard, 20x4 LCD(SPI), 5x5 keypad(SPI), 2mb SPI Flash, 64KB SPI Ram, RS232(12v, Full RTS,CTS handshaking), 2xRS485, I2C(2x3.3v, 1x5v),I2C RTCC, I2C EEPROM, this solved my problem.
I thought others might have the need for expanded memory in their Arduino projects. My "Kitchen Sink" board is probably too specialized for anyone else to want it. So I took the knowledge from my experience and designed a Arduino Compatible Mega2560 Shield. Here is my Result:
- Arduino Mega2560 formfactor (Shortened and Expanded to allow mounting as a Shield or Flipped, which only uses the 18x2 end Header).
- Fast memory Access, The selected hardware is fast enough to run full speed, zero additional wait states needed. But since ATMega2560 multiplexes both Data0..7 and Address0..7 on the same 8 pins, there is a performance penalty using external ram as compared to internal ram. Internal ram access (0x0000..0x21FF) is twice as fast as external ram. My library will only move the Heap to external ram, the Stack is always internal to the Arduino Processor.
- 1,024KB RAM accessible as 8KB selectable pages(128) in 6 memory mapped panes(0x4000..0xFFFF). A 'default' pane 0x2200..0x3FFF may be assigned one of two 8KB(actually 7,680 byte) pages(Bank0:0, Bank1:0, or None).
- Any of the 128 8KB pages can be accessed through each of the 6 panes. The same page can be accessed in multiple panes simultaneously.
- Each of the 6 panes can access one page at a time, or no page.
- Arduino 1.6.4 library for control: Initialize board, move Heap to expansion ram, assign pages to panes, save and restore pagemap.
- Pins Used Exclusively: P22-P37, P39-P41
- Pins Used Shared: P50-P52
- Pin Used Selectable: P53. Pin 53 is use as SPI_SS by default. There is a cut-able pad and 2x1x0.100" jumper that can be used to change the SPI Chip Select.
Memory Pane orientations
Risks and challenges
The design is proven to work, the only risk I can identify is part availability. All of the component parts have multiple vendors so unless a million people want one, we should be good.Learn about accountability on Kickstarter
- (45 days)