Hi friends here we come to a very important and sensitive section in ARM controllers, memory mapping. Each ARM SOC will have an own memory map. The correspondence of addresses to devices is determined by which physical data and address line are connecting to which parts of the processor. All this information can be found in a Technical reference manual. A good start is to take a look at processor datasheets at company sites like Philips, NXP, ST, or ARM architecture itself at www.arm.com.
Actually I think you can’t remap peripherals in ARM processor, all peripheral devices correspond to fixed positions in memory map. Even all the registers are mapped to internal RAM memory that has permanent fixed positions. The things that you can remap are memory devices like SRAM, FLASH, etc. via FSMC (Flexible Static Memory Controller) or similar core feature. You can however remap a memory mapped add-on custom peripheral that is not part of the core itself, let’s say a hard disk controller for instance, but what it is inside ARM core’s fixed.
What is the need for memory remapping in ARM? What are the pros and cons?
As we all know ARM starts execution from address 0. This address must be non-volatile. All the interrupt vectors are located from location 0 and up. You often want these to be rewritable. So, address 0 must be non-volatile and contain a valid instruction. One common solution to this conundrum is to boot from flash mapped to address 0, jump to a higher, aliased address in that flash, and then remap RAM to address 0.
You also might map from an on-chip boot ROM to a reprogrammable off-chip application flash, even with hardwired interrupt vectors.
The address space of the ARM is large enough that it’s normally just the special addresses that are of interest.
Will there be a time difference in time while fetching a data from on chip ROM and an off chip flash memory?
Better check the data sheets. If you compare ROM/flash and RAM then ROM/flash is typically significantly slower than RAM. Whether one flash is slower than another will depend on the specific parts. Delay due to external location of the bits is legible in comparison to their access time.
ARM MCU Memory Map (LPC2000)
The size of the internal non-volatile memory (FLASH) and the static RAM depend on the derivative, as well as the ability to connect an external memory device.
Arm microcontrollers have linear memory organization. Internal Flash is located from 0x00000000 address to 0x40000000 address. On Chip RAM space is from 0x40000000 address to 0x7FFFFFFF address. As we know many ARM families like LPC2000 series MCU is preprogrammed with flash boot-loader and ARM real monitor debug, so both are placed at location starting from 0x7FFFFFFF to 0x80000000 memory location. In the case of LPC2000 microcontrollers have several boot modes which have to be taken into account during the development of an application.
These boot programs are able to:
- To perform FLASH programming using an internal serial port (ISP),
- To switch to the user application located in the internal FLASH.
Address space from 0x80000000 to 0xE0000000 is reserved for external memory.
Going up in memory space there is a peripheral memory space starting from 0xE0000000 to 0xE0200000. Each peripheral has its own memory page of 16Kbytes. Starting from 0xFFFFF000 there are Interrupt Unit located.
One sincere request to all the readers, please comment down and correct us, this site is trying to help people to understand embedded technology, this is only possible with your comments and corrections. Please subscribe to the newsletter to get latest project/article updates right in your email inbox. Take few moments and like zembedded facebook page, follow on tweeter, thanks!