Well folks,
I have a KickStarter project that might interest a few of you. It is Shield for a Mega2560 that adds 1MB of RAM that can be used for HEAP or directly accessed. The shield divides the Mega2560's address space into 8KB panes the upper 6 can access any of the 128 8K pages. The first 8K page is internal to the Mega2560 processor the second 8k page can be set either of two possible 8K pages or no page.
I need a few more souls to successfully complete this project. I have already built and tested a similar design. The similar design only used one 512KB RAM chip instead of the Two 512KB RAM's on this design.
Thank for your interest.
Chuck Todd.
Check out my KickStarter Project Memory Panes a 1MB RAM expansion for Mega2560 projects.
How will this be used? Is there a library that will use the shield as a direct extension of the MCU?
Yes, I will supply a 1.6.4 Library. If the Heap is move to the expanded RAM, the arduino environment will just see an increase of HEAP available, and the Stack can use all of the Processor RAM until it runs into the Global .bss, .data segments. The standard library routines will now use the External memory for all New, malloc, object creation.
//1: initialize hardware, you can choose to use from one to seven 8k panes a HEAP.
MP.init(uint8_t CS, uint8_t SPIAddr, uint8_t HighestHeapPane);
//CS and SPIAddr are for controlling the Paging Hardware.
//HighestHeapPane: 0, leave Heap in internal Processor Ram, all panes can be reassigned.
// 1..7 Assign Heap from 0x2200 to ((HighestHeapPane+1)*0x2000)-1
// When HighestHeapPane is used; XRAM pages 0 .. (HighestHeapPane-1) are assigned to panes 1..HighestHeapPane.
// once Heap had been moved into expanded RAM, those panes will not allow their mapping to be changed. only panes above the heap can have their mappings reassigned.
//2: enable/disable external memory hardware (reconfiguring the CPU)
//3: set a specific Page to Pane
uint8_t MP.setPane(uint8_t pane, uint8_t page);
// pane is from 2..7
// page is from 0..127
//4: set new pane to page mapping, save previous mapping
uint16_t MP.pushPane(uint8_t pane, uint8_t page);
// returns previous pane mapping
//5: restore previous pane mapping
uint8_t MP.popPane( uint16_t pushstack);
//pushstack is prior result from MP.pushPane()
//6: set all panes at once
uint8_t MP.setWindow(uint8_t * window[]);
// window is and array of 6 bytes of page number to assign to panes 2..7
//7: read current pane assignments
uint8_t MP.readWindow( uint8_t * window[]);
//8: create pointer to specific pane
uint16_t MP.panetoAddr(uint8_t pane);
//9: disable a specific pane
uint8_t MP.clearPane(uint8_t pane);
// this function just disables access to the RAM for this page, the processor see a floating data buss.
// for that panes memory range.
Chuck.
Great!
How much will one of these cost?
There are three available early bird specials for $39 The regular price is $49.
Chuck.