The nRF52840 contains 1024 kB of flash memory and 256 kB of RAM that can be used for code and data storage.
The CPU and peripherals with EasyDMA can access memory via the AHB multilayer interconnect. In additon, peripherals are accessed by the CPU via the AHB multilayer interconnect, as shown in the following figure.
See AHB multilayer and EasyDMA for more information about the AHB multilayer interconnect and EasyDMA.
The same physical RAM is mapped to both the Data RAM region and the Code RAM region. It is up to the application to partition the RAM within these regions so that one does not corrupt the other.
The RAM interface is divided into nine RAM AHB slaves.
RAM AHB slaves 0 to 7 are connected to two 4 kB RAM sections each, while RAM AHB slave 8 is connected to six 32 kB sections, as shown in Memory layout.
Each RAM section has separate power control for System ON and System OFF mode operation, which is configured via RAM register (see the POWER — Power supply).
The CPU can read from flash memory an unlimited number of times, but is restricted in how it writes to flash and the number of writes and erases it can perform.
Writing to flash memory is managed by the non-volatile memory controller (NVMC), see NVMC — Non-volatile memory controller.
Flash memory is divided into 256 pages of 4 kB each that can be accessed by the CPU via the ICODE and DCODE buses as shown in Memory layout.
The complete memory map for the nRF52840 is shown in the following figure. As described in Memory, Code RAM and Data RAM are the same physical RAM.
ID | Base address | Peripheral | Instance | Description | |
---|---|---|---|---|---|
0 | 0x40000000 | APPROTECT | APPROTECT |
APPROTECT control |
|
0 | 0x40000000 | CLOCK | CLOCK |
Clock control |
|
0 | 0x40000000 | POWER | POWER |
Power control |
|
0 | 0x50000000 | GPIO | GPIO |
General purpose input and output |
Deprecated |
0 | 0x50000000 | GPIO | P0 |
General purpose input and output, port 0 |
|
0 | 0x50000300 | GPIO | P1 |
General purpose input and output, port 1 |
|
1 | 0x40001000 | RADIO | RADIO |
2.4 GHz radio |
|
2 | 0x40002000 | UART | UART0 |
Universal asynchronous receiver/transmitter |
Deprecated |
2 | 0x40002000 | UARTE | UARTE0 |
Universal asynchronous receiver/transmitter with EasyDMA, unit 0 |
|
3 | 0x40003000 | SPI | SPI0 |
SPI master 0 |
Deprecated |
3 | 0x40003000 | SPIM | SPIM0 |
SPI master 0 |
|
3 | 0x40003000 | SPIS | SPIS0 |
SPI slave 0 |
|
3 | 0x40003000 | TWI | TWI0 |
Two-wire interface master 0 |
Deprecated |
3 | 0x40003000 | TWIM | TWIM0 |
Two-wire interface master 0 |
|
3 | 0x40003000 | TWIS | TWIS0 |
Two-wire interface slave 0 |
|
4 | 0x40004000 | SPI | SPI1 |
SPI master 1 |
Deprecated |
4 | 0x40004000 | SPIM | SPIM1 |
SPI master 1 |
|
4 | 0x40004000 | SPIS | SPIS1 |
SPI slave 1 |
|
4 | 0x40004000 | TWI | TWI1 |
Two-wire interface master 1 |
Deprecated |
4 | 0x40004000 | TWIM | TWIM1 |
Two-wire interface master 1 |
|
4 | 0x40004000 | TWIS | TWIS1 |
Two-wire interface slave 1 |
|
5 | 0x40005000 | NFCT | NFCT |
Near field communication tag |
|
6 | 0x40006000 | GPIOTE | GPIOTE |
GPIO tasks and events |
|
7 | 0x40007000 | SAADC | SAADC |
Analog to digital converter |
|
8 | 0x40008000 | TIMER | TIMER0 |
Timer 0 |
|
9 | 0x40009000 | TIMER | TIMER1 |
Timer 1 |
|
10 | 0x4000A000 | TIMER | TIMER2 |
Timer 2 |
|
11 | 0x4000B000 | RTC | RTC0 |
Real-time counter 0 |
|
12 | 0x4000C000 | TEMP | TEMP |
Temperature sensor |
|
13 | 0x4000D000 | RNG | RNG |
Random number generator |
|
14 | 0x4000E000 | ECB | ECB |
AES electronic code book (ECB) mode block encryption |
|
15 | 0x4000F000 | CCM | CCM |
AES counter with CBC-MAC (CCM) mode block encryption |
|
15 | 0x4000F000 | AAR | AAR |
Accelerated address resolver |
|
16 | 0x40010000 | WDT | WDT |
Watchdog timer |
|
17 | 0x40011000 | RTC | RTC1 |
Real-time counter 1 |
|
18 | 0x40012000 | QDEC | QDEC |
Quadrature decoder |
|
19 | 0x40013000 | COMP | COMP |
General purpose comparator |
|
19 | 0x40013000 | LPCOMP | LPCOMP |
Low power comparator |
|
20 | 0x40014000 | EGU | EGU0 |
Event generator unit 0 |
|
20 | 0x40014000 | SWI | SWI0 |
Software interrupt 0 |
|
21 | 0x40015000 | EGU | EGU1 |
Event generator unit 1 |
|
21 | 0x40015000 | SWI | SWI1 |
Software interrupt 1 |
|
22 | 0x40016000 | EGU | EGU2 |
Event generator unit 2 |
|
22 | 0x40016000 | SWI | SWI2 |
Software interrupt 2 |
|
23 | 0x40017000 | EGU | EGU3 |
Event generator unit 3 |
|
23 | 0x40017000 | SWI | SWI3 |
Software interrupt 3 |
|
24 | 0x40018000 | EGU | EGU4 |
Event generator unit 4 |
|
24 | 0x40018000 | SWI | SWI4 |
Software interrupt 4 |
|
25 | 0x40019000 | EGU | EGU5 |
Event generator unit 5 |
|
25 | 0x40019000 | SWI | SWI5 |
Software interrupt 5 |
|
26 | 0x4001A000 | TIMER | TIMER3 |
Timer 3 |
|
27 | 0x4001B000 | TIMER | TIMER4 |
Timer 4 |
|
28 | 0x4001C000 | PWM | PWM0 |
Pulse width modulation unit 0 |
|
29 | 0x4001D000 | PDM | PDM |
Pulse Density modulation (digital microphone) interface |
|
30 | 0x4001E000 | ACL | ACL |
Access control lists |
|
30 | 0x4001E000 | NVMC | NVMC |
Non-volatile memory controller |
|
31 | 0x4001F000 | PPI | PPI |
Programmable peripheral interconnect |
|
32 | 0x40020000 | MWU | MWU |
Memory watch unit |
|
33 | 0x40021000 | PWM | PWM1 |
Pulse width modulation unit 1 |
|
34 | 0x40022000 | PWM | PWM2 |
Pulse width modulation unit 2 |
|
35 | 0x40023000 | SPI | SPI2 |
SPI master 2 |
Deprecated |
35 | 0x40023000 | SPIM | SPIM2 |
SPI master 2 |
|
35 | 0x40023000 | SPIS | SPIS2 |
SPI slave 2 |
|
36 | 0x40024000 | RTC | RTC2 |
Real-time counter 2 |
|
37 | 0x40025000 | I2S | I2S |
Inter-IC sound interface |
|
38 | 0x40026000 | FPU | FPU |
FPU interrupt |
|
39 | 0x40027000 | USBD | USBD |
Universal serial bus device |
|
40 | 0x40028000 | UARTE | UARTE1 |
Universal asynchronous receiver/transmitter with EasyDMA, unit 1 |
|
41 | 0x40029000 | QSPI | QSPI |
External memory interface |
|
42 | 0x5002A000 | CC_HOST_RGF | CC_HOST_RGF |
Host platform interface |
|
42 | 0x5002A000 | CRYPTOCELL | CRYPTOCELL |
CryptoCell subsystem control interface |
|
45 | 0x4002D000 | PWM | PWM3 |
Pulse width modulation unit 3 |
|
47 | 0x4002F000 | SPIM | SPIM3 |
SPI master 3 |
|
N/A | 0x10000000 | FICR | FICR |
Factory information configuration |
|
N/A | 0x10001000 | UICR | UICR |
User information configuration |
|