Nordic Semi nRF52 832 memory layout

Ruuvi Version 3.x.x

E000 0000 … SCS, FPB, DWT, ITM nRF52 Peripheral Addresses

From armgcc/ruuvi_firmware.ld:
MEMORY
{
                                                    /* Leave room for SoftDevice RAM */
  RAM                         (rwx) : ORIGIN = 0x20002450, LENGTH =  0xDBB0  /*  ends at  FFFF */
/* bootloader                                       75000 .. 7AB77                             */
  bootloader_settings_page      (r) : ORIGIN = 0x0007F000, LENGTH =  0x1000  /*  ends at 7FFFF */
  mbr_params_page               (r) : ORIGIN = 0x0007E000, LENGTH =  0x1000
  FLASH                        (rx) : ORIGIN = 0x00026000, LENGTH = 0x4F000  /*    through 0x75000 (i.e.FDS start) */
  uicr_bootloader_start_address (r) : ORIGIN = 0x00000FF8, LENGTH =       4    /* contains 0x75000                */
  uicr_mbr_params_page          (r) : ORIGIN = 0x00000FFC, LENGTH =       4    /* contains 0x7E000                */
}
See armgcc/_build/*.map)

RAM

     2001 0000 top o stack __StackTop = (ORIGIN (RAM) + LENGTH (RAM))
used for local variables
     2000 E000 __StackLimit = (__StackTop - SIZEOF (.stack_dummy))
                                 nRF52832 64KB RAM 
     2000 5FFF                   nRF52811 24KB RAM     Doesn't fit
      …        
unused RAM for growth    with debugging, No DPS310,TMP117,NTC or PHOTO
      …       
   .bss.                                     10000 - 786C = 34707 aka 33KB

 *(vtable)
 *(.data*)

Lowest RAM address (above Soft Device RAM)

.data 20002450 43c load address4cd08 20002450 __data_start__ = . .data.shtc1_cmd_measure Why are these few variables at the bottom of availale RAM? 20002450 2 shtc1 .data.adc_config 20002454 4 ruuvi_nrf5_sdk15_adc_mcu ./ruuvi.drivers.c/src/nrf5_sdk15_platform/adc/ruuvi_nrf5_sdk15_adc_mcu.c static bool m_adc_is_init = false; static nrf_drv_saadc_config_t adc_config = NRF_DRV_SAADC_DEFAULT_CONFIG; static uint8_t bits_resolution[ADC_BITS_RESOLUTION_NUM] = { ADC_BITS_RESOLUTION_8, ADC_BITS_RESOLUTION_10, ADC_BITS_RESOLUTION_12, ADC_BITS_RESOLUTION_14, .data.m_adv_uuids 2000245C 4 ruuvi_nrf5_sdk15_communication_ble_advertising static ble_uuid_t m_adv_uuids[] = { {BLE_UUID_NUS_SERVICE, BLE_UUID_TYPE_VENDOR_BEGIN} }; .data.m_adv_handle 20002458 1 ruuvi_nrf5_sdk15_communication_ble_advertising ./ruuvi.drivers.c/src/nrf5_sdk15_platform/communication/ruuvi_nrf5_sdk15_communication_ble_advertising.c static bool m_advertise_nus; static ri_adv_type_t m_type; //!< Type, configured by user. static ri_radio_channels_t m_radio_channels; //!< Enabled channels to send /** @brief Advertising handle used to identify an advertising set. */ static uint8_t m_adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET; /** @brief Flag for initialization **/ static bool m_advertisement_is_init = false; /** @brief Flag for advertising in process **/ static bool m_advertising = false; … .data.timeout_us_per_byte 20002498 2 ruuvi_nrf5_sdk15_i2c ./ruuvi.drivers.c/src/nrf5_sdk15_platform/i2c/ruuvi_nrf5_sdk15_i2c.c static uint16_t timeout_us_per_byte = 1000; These variables are unexplainably allocated: ./ruuvi.drivers.c/src/nrf5_sdk15_platform/log/ruuvi_nrf5_sdk15_log.c ri_log_severity_t m_log_level = APP_LOG_LEVEL occurs BEFORE lastChar in source! bool m_log_show_times = true; // time/delta prefix char m_log_lastChar = '\n'; // if previous message ended with \n add timestamp uint64_t m_log_prior_ms = 0; // Time of last message for displaying delta uint32_t s_log_calls[5]= {0}; // statistics uint32_t s_log_calls_skipped[RI_LOG_LEVEL_DEBUG]= {0}; // statistics ruuvi_nrf5_sdk15_log Not the order from the source! .data.m_log_lastChar 2000249A 1 m_log_lastChar .data.m_log_level 2000249B 1 m_log_level .data.m_log_show_times 2000249C 1 m_log_show_times … xfer_status 20003C68 4 ruuvi_nrf5_sdk15_i2c m_log_prior_ms 20003C70 8 m_log_prior_ms far away!! s_log_calls 20003C78 14 s_log_calls s_log_calls_skipped 20003c8C 10 s_log_calls_skipped … .data._impure_ptr 200026B0 _impure_ptr .data.impure_data .data.__global_locale 20002714 __global_locale .data.__fdlib_version 20002880 __fdlib_version 20002884 PROVIDE (__preinit_array_start = .) *(.preinit_array) 20002884 PROVIDE (__preinit_array_end = .) 20002884 PROVIDE (__init_array_start = .) *(SORT_BY_NAME(.init_array.*)) *(.init_array) 20002888 PROVIDE (__init_array_end = .) [!provide] PROVIDE (__fini_array_start = .) *(SORT_BY_NAME(.fini_array.*)) *(.fini_array) [!provide] PROVIDE (__fini_array_end = .) *(.jcr*) 2000288C __data_end__ = . .igot.plt 2000288C load address4d144 .mem_section_dummy_ram .log_dynamic_data 2000288C 2000288C PROVIDE (__start_log_dynamic_data = .) *(SORT_BY_NAME(.log_dynamic_data*)) [!provide] PROVIDE (__stop_log_dynamic_data = .) .log_filter_data 2000288C [!provide] PROVIDE (__start_log_filter_data = .) *(SORT_BY_NAME(.log_filter_data*)) [!provide] PROVIDE (__stop_log_filter_data = .) .fs_data 2000288C 14 load address4d144 2000288c PROVIDE (__start_fs_data = .) *(.fs_data) .fs_data 2000288C 14 fds 2000288C m_fs 200028A0 PROVIDE (__stop_fs_data = .) .bss 200028A0 4e4c load address4d158 200028A0 __bss_start__ = . *(.bss*) fifo_int 200028BC 1 ruuvi_driver_sensor_test level_int 200028BD 1 ruuvi_driver_sensor_test m_channel 200028C0 14 ruuvi_interface_communication_ble_advertising_test *(COMMON) __bss_end__ (9/2/21) 3.30.3 tests +DEBUG see the .map _SEGGER_RTT COMMON MISRA says dont use. heap_end. (heap not used by Ruuvi 3.1.2 set to 64(x40) bytes (was 8,192) m_t4t_active nfc_t4t_lib_al.c (last defined)

Interesting symbols

See .map for addresses nfc_rx_buffer (256.) big? _acUpBuffer (512. x200 SEGGER_RTT.c ~~~ look here if RTT not running _acDownBuffer m_log_data nrf_log_frontend.c (1,060) ! m_log_output_block fb4 app_log.c history BIG!! aka 1005 words m_log_input_block fb4 app_log.c history BIG!! aka 1005 words don't copy to RAM !! use directly from flash (_) m_log_config m_pages nfc_tx_buf nfc_id_buf nfc_fw_buf nfc_addr_buf rx_data e8(232) ruuvi_interface_communication_nfc_test.c rx_data e8(232) ruuvi_interface_communication_ble_gatt_test. m_adv m_timeout m_has_sent ruuvi_interface_communication_ble_gatt_test m_has_received m_has_disconnected m_has_connected m_channel ruuvi_interface_communication_ble_advertising_test.c level_int ruuvi_driver_sensor_test.c fifo_int __bss_start__ m_fs fds.c .fs_data __data_end__

These low adress areas won't change unless order of load changes.

2000 24a4 .data.m_conn_handle 2000 24a0 .data.m_adv_uuids 2000 249c .data.m_adv_handle 2000 2498 .data.adc_config .data.singleton_ctx_spi .data.shtc1_cmd_measure __data_start__ defined in .ld. See map as of 9/01/21 2000 244F SoftDevice RAM … 2000 0000 SoftDevice RAM Code RAM 0080 0000 unused by Ruuvi Firmware
Some systems copy portions of the code from FLASH to RAM which is faster and requires less power (especially if this allows for the FLASH to be powered off.

FLASH

special FLASH

    1000 10FC UICR->CUSTOMER[32]
    1000 1080 UICR->CUSTOMER[0]
    1000 1000 UICR

    1000 0204 " 
    1000 0208 APPROTECT  Access port protection  blocks debugger access to all CPU registers and memory-mapped addresses.
    1000 0200 Mapping of the nRESET
    1000 0000 FICR 
    0007 FFFF 
    0003 0000  nRF52811 192K Flash 
    0007 F000 '  Bootloader settings.
        See nrfutil
    0007 E000   mbr_params_page
    0007 F050 .. 0007 FFFF last flash page see discusion
        …     settings
                          unused
   0007 AB77    bootloader
   0007 A000    DFU Bootloader, data, and MBR parameters 
   0007 5000    bootloader  uicr_bootloader_start_address   
    0007 5000 __stop_storage_flash = . + 15000 (from .ld)  EXCLUSIVE i.e. 0007 4FFF is last used address

                  Flash Data Storage

     __start_storage_flash  (from .ld) lomgmem uses 50000
                          bytes unused for growth of code
As of 3.31.1 11/11/21
   __exidx_end from .map
    4B380  .ARM.exidx    
     4C0B0   F______F F______F F______F F______F
     4C0A0      311F9 0______0 0______0 F______F 
     4C090      26225    26201 0______0 0______0 
     4C080   0______0 0______0 0______0       01 
     4C070   0______0 0______0 0______0 0______0 
     4C060   0______0 0______0 5341   0 00494943 
     4C050   0______0 0______0 0______0 0______0 
     4C040   F______F     FFFF 5341   1 00494943 
     4C030      4B951    4B951 F______F F______F 
     4C020      4B951    4B951    4B951    4B951 
     4C010      4B708    4B951    4B951    4B951 
     4C         43B05    42F2D 0______0    4B73E 
     4BFF0   0______0 0______0 0______0 0______0   

.rodata.pow.str1.4
    4B960   70 6F 77 00 70 6F 77 66  00 00 00 00 73 71 72 74  pow.powf....sqrt
    4B330 __start_log_backends 
   .sdh
    4b88c  _ruuvi_log

    4B794 i_nrfx_clock
    .log_const_data

.mem_section_dummy_rom

address vary 
    4b2xx  .crypto_data   

  .rodata  strings to initalize function's literals LOG("compiled...

.rodata._setlocale_r.str1.1 0004Af80       8 libc_nano.a(lib_a-locale.o)
0004AFxx 43 00 50 4F 53 49 58 00  2E 00                    C.POSIX...
.rodata._printf_i.str1.1    0004Af9C      22 libc_nano.a(lib_a-nano-vfprintf_i.o)
0004AFxx                                49 4E 46 00 69 6E            INF.in
0004AFxx 66 00 4E 41 4E 00 6E 61  6E 00 30 00 30 31 32 33  f.NAN.nan.0.0123
0004AFxx 34 35 36 37 38 39 41 42  43 44 45 46 00 30 31 32  456789ABCDEF.012
0004AFxx 33 34 35 36 37 38 39 61  62 63 64 65 66 00 00 20  3456789abcdef.. 

    0004 8D40   .rodata.setup.str1.4 main.c
00048D40 2E 2E 2F 2E 2E 2F 2E 2E  2F 6D 61 69 6E 2E 63 00  ../../../main.c.
00048D50 22 73 65 6E 73 6F 72 73  22 3A 20 7B 0D 0A 00 00  "sensors": {....
00048D60 7B 0D 0A 22 66 69 72 6D  77 61 72 65 22 3A 22 52  {.."firmware":"R
00048D70 75 75 76 69 20 46 57 20  76 33 2E 33 30 2E 33 22  uuvi FW v3.30.3"
00048D80 2C 0D 0A 00 22 63 6F 6D  70 69 6C 65 64 5F 6F 6E  ,..."compiled_on
00048D90 22 3A 22 53 65 70 20 20  36 20 32 30 32 31 20 32  ":"Sep  6 2021 2
00048DA0 30 3A 33 35 3A 31 32 22  2C 0D 0A 00 22 62 6F 61  0:35:12",..."boa
00048EB0 69 20 46 57 00 00 00 00  76 33 2E 33 30 2E 33 00  i FW....v3.30.3.
00048EC0 2B 64 65 62 75 67 00 00  43 68 65 63 6B 20 50 43  +debug..C


    47880
                                            gatt_cache_manager.c
   .text.  Program code
    47874 _fini 
    4785C __errno
 
       

Library routines

412xx gcc_startup_nrf52.S IRQ Handlers 40Dxx nrfx_nfct_rx 3E1xx SEGGER_RTT_Init 3c2xx nrf_log_frontend_std_0 3B8xx is_busy 3B8xx 10 nrf_fstorage_sd.c SoftDevice 35Bxx app_log_process 3xxxx 00 BE BKPT #0 app_error.c DSB #15 DataSyncBarrier LDR R1, [PC, #+18] LDR R3, [PC, #+1C] LDR R2, [R1, #+0C] AND R2, R2, #700 ORRS R3, R2 STR R3, [R1, #+0C] store BX R3 MOVW R4, #FFC R4< LDR R0, [R4] MOV R6, #10001000 R6349xx main 349xx setup 349xx app_on_error 333xx NFC 329xx rt_adv_send_data 31xxx ri_yield_init 31xxx ri_scheduler_init 31xxx WDT_IRQHandler 31xxx fds_stat 31xxx fds_init 2fxxx ri_rtc_millis 2fxxx ri_log 2exxx ri_flash_record_get sd_ble_gap_adv_set_configure ruuvi_nrf5_sdk15_communication_ble_advertising.c 2dxxx ri_comm_id_get ruuvi_nrf5_sdk15_communication.c sensor code 26000 gcc_startup_nrf52.S, _start , __isr_vector 25140 = 2A 86 08 01 9F 09 16 CB 32 7F 0B 6C F4 10 C0 00 22000 | 21000 | 20000-' 1F000 __ISR_vector 15CCE SEV sometimes get stuck here before main() 15CD0: WFE 15CD2: LDRB R7, [R4, #+01] r4/2000000C 15CD4: LDRB R0, [R4] r0/0 15CD6: STRB R0, [R4, #+01] 15CD8: LDR R5, [R6, #+200] r5/900 15CDC: BL #-148E0s 1400: LDR R0, [PC, #+40] 1402: BX LR 15CE1 15CE0: BICS R5, R0 15CE2: BNE #+0A 15CE4: LDR R0, [R6, #+204] 15CE8: CBNZ R0, #+04 15CF0: BL #-9DDA BF1A: LDR R1, [PC, #+D0] BF1C: LDR R0, [PC, #+D4] BF1E: SUBS R1, R1, #4 BF20: STR R0, [R1] BF22: BX LR 15CF4: MOVS R0, #0 15CF6: POP {R4-R8,PC} 122E: PUSH {R0} 1230: LDR R0, [SP, #+04] 1232: MOV LR, R0 1234: POP {R0} 1236: ADD SP, SP, #4 1238: POP {R1-R4,PC} 77CBE: SVC #65 77CC0: BX LR 77E18: B #-10 77E0C: BL #+2660 7A470: LDR R3, [PC, #+0C] 7A472: LDR R3, [R3, #+400] 7A476: CBZ R3, #+02 7A478: B #-B0 7A3CC: LDR R2, [PC, #+28] 7A3CE: LDR R3, [R2, #+400] 7A3D2: CBZ R3, #+1E 7A3D4: LDR R0, [PC, #+24] 7A3D6: MOVS R3, #0 7A3D8: LDR R1, [R2, #+508] <--, 7A3DC: LSRS R1, R3 | 7A3DE: LSLS R1, R1, #31 | 7A3E0: IT MI | 7A3E2: ADD R1, R3, #180 | 7A3E6: ADD R3, R3, #01 | 7A3EA: IT MI | 7A3EC: STR R0, [R2, R1, LSL #2] | 7A3F0: CMP R3, #7 | 7A3F2: BNE #-1E ---->--------' 7A3F4: BX LR 77E10: BL #-292C 754E8: PUSH {R3-R7,LR} 754EA: LDR R4, [PC, #+48] 754EC: LDR R5, [PC, #+48] 754EE: MOV R6, R4 754F0: LDRB R2, [R4] 754F2: LDRB R3, [R5] 754F4: CMP R2, R3 754F6: BNE #+00 754F8: POP {R3-R7,PC} 77E14: BL #-15A 77CBE: SVC #65 ----------- 0AA4: TST LR, #04 0AA8: ITE EQ 0AAA: MRS R1, MSP 0AAE: MRS R1, PSP 0AB2: LDR R0, [R1, #+18] 0AB4: SUBS R0, #2 0AB6: LDRB R0, [R0] 0AB8: CMP R0, #24 0ABA: BNE #+06 --->---------, | 0AC4: LDR R2, [PC, #+1C] <--' 0AC6: LDR R2, [R2] 0AC8: ADDS R2, #44 0ACA: LDR R2, [R2] 24B74: MOVS R0, #4 24B76: MOV R1, LR 0000 0FFC address of uicr_mbr_params_page 7E000 0000 0FF8 address of uicr_bootloader_start_address 7F000 i.e. last page of FLASH SoftDevice end 1000 = 80 13 00 20 19 4B 02 00 05 C0 00 00 7F 4A 02 00 FF0 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF … B00 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF AF0 = 00 10 00 00 00 00 00 00 00 FF FF FF 00 90 D0 03 110 F000 BCAC F640 71FC 6808 F04F 2210 1C40 100 093B B51F F000 F803 E88D 000F BD1F 0F0 913 91D 927 931 0E0 8EB 8F5 8FF 909 0D0 8C3 8CD 8D7 8E1 0C0 89B 8A5 8AF 8B9 0B0 873 87D 887 891 0A0 84B 855 85F 869 090 823 82D 837 841 080 7FB 805 80F 819 070 7D3 7DD 7E7 7F1 060 7AB 7B5 7BF 7C9 050 783 78D 797 7A1 040 75B 765 76F 779 030 73D 000 747 751 Sorted; all unique, all ODD addresses 931 927 91D 913 909 8FF 8F5 8EB 8E1 8D7 8CD 8C3 8B9 8AF 8A5 89B 891 887 87D 873 869 85F 855 84B 841 837 82D 823 819 80F 805 7FB 7F1 7E7 7DD 7D3 7C9 7BF 7B5 7AB 7A1 797 78D 783 779 76F 765 75B 751 747 73D 000 mem16 731 90 731 = 1847 8720 0949 0968 0858 3047 8520 0949 741 = 0968 0858 3847 8220 0949 0968 0858 3C47 751 = 8020 0949 0968 0858 4047 7D20 0949 0968 761 = 0858 4447 7B20 0949 0968 0858 4847 7820 771 = 0949 0968 0858 4C47 7620 0949 0968 0858 781 = 5047 7320 0949 0968 0858 5447 7120 0949 791 = 0968 0858 5847 6E20 0949 0968 0858 5C47 7A1 = 6C20 0949 0968 0858 6047 6920 0949 0968 7B1 = 0858 6447 6720 0949 0968 0858 6847 6420 7C1 = 0949 0968 0858 6C47 6220 0949 0968 0858 7D1 = 7047 5F20 0949 0968 0858 7447 5D20 0949 7E1 = 0968 0858 7847 5A20 0949 0968 0858 7C47 7F1 = 5820 0949 0968 0858 8047 5520 0949 0968 801 = 0858 8447 5320 0949 0968 0858 8847 5020 811 = 0949 0968 0858 8C47 4E20 0949 0968 0858 821 = 9047 4B20 0949 0968 0858 9447 4920 0949 831 = 0968 0858 9847 4620 0949 0968 0858 9C47 841 = 4420 0949 0968 0858 A047 4120 0949 0968 All unique EXCEPT 28 * 858 29 * 949 (odd) 29 * 968 858 = 6809 5809 4708 20A8 493C 6809 5809 4708 868 = 20AC 493A 6809 5809 4708 20B0 4937 6809 878 = 5809 4708 20B4 4935 6809 5809 4708 20B8 888 = 4932 6809 5809 4708 20BC 4930 6809 5809 949 = 0448 0249 034A 704B 0047 0000 0000 0020 959 = 000B 0000 000B 4000 01EA 1003 9BB5 0F07 969 = 04D1 0D2A 10D3 08C8 12C9 9C1F F842 20D0 979 = 19BA 88BA 0142 01D9 1020 4FBD FFF0 1030 968 = D10F 2A04 D30D C810 C908 1F12 429C D0F8 978 = BA20 BA19 4288 D901 2001 BD10 F04F 30FF 988 = BD10 B11A 07D3 D003 1C52 E007 2000 BD10 998 = F810 3B01 F811 4B01 1B1B D107 F810 3B01 Master Boot Record (MBR) 20000400 0A81 715 A61 71F 729 733 00000000 0AA5 0000 2000 0400 0A81 715 A61 0010 71F 729 733 0020 0AA5
0x removed i.e. all integersm are in hex. A80 execution starts here: A80 LDR R3,[PC, #+18] A82 BX R3 -> A84 LDR R2, [PC, #+18] A86 STR R0, [R2] A88 LDR R1, [R0] A8A 08 88 MSR MSP, R1 A8E LDR R0, [R0, #+04] A90 BX R0 75374 LDR R0, [PC, #+40] 416 MOVW R4, #FFC / 7E000 41A LDR R0,[R4] 41C MOV R6, #10001000 420 ADDS R0,R0,#1 7E001 422 BEQ #+46 -. 424 LDR R0, [R4] 426 ADDS R0, R0, #1 428 BEQ #+18 -. 42A LDR R0, [R4] 42C ADDS R0, R0, #1 42E BEQ #+3E -. 430 LDR R5, [R4] 432 LDR R0, [R4] 434 ADD R5, R5, #80 438 ADDS R0, R0, #1 43A BEQ #+36 -. 43C LDR R7, [R4] 43E LDRB R0, [R7, #+04] 440 CMP R0, #170 442 BEQ #+32 -. 444 MOVW R0, #FF8 448 LDR R1, [R0] 44A ADDS R1, R1, #1 44C BEQ #+84 -. 44E LDR R1, [R0] 450 ADDS R1, R1, #1 452 BEQ #+8A -. 454 LDR R1, [R0] 456 ADDS R1, R1, #1 458 BEQ #+7C -. 45A LDR R1, [R0] 45C LDR R1, [R1] 45E ADDS R1, R1, #1 460 BEQ #+7C -. 462 LDR R1, [R0] 464 ADDS R1, R1, #1 466 BEQ #+72 -. 468 LDR R0, [R0] 46A B #+7C A84 4EA BL #+596 ---> A84 ?? 4EE B #-04 .^ 4F0 DSB #15 4F4 LDR R0, [PC, #+98] 4F6 LDR R1, [R0] 4F8 LDR R2, [PC, #+98] 4FA AND R1, R1, #700 4FE ORRS R1, R2 500 STR R1, [R0] 502 DSB #15 ... A84 A8E LDR R0, [R0,#+4] A90 BX R0 75364 LDR R0., [PC, #+40]`

Peripheral Instances

ID Base Address Peripheral Instance 0 4000 0000 Clock control POWER Power control BPROT Block Protect 1 4000 1000 RADIO 2.4 GHz radio 2 4000 2000 UARTE0 with EasyDMA 3 4000 3000 SPI master/slave SPIM0 SPI master 0 SPIS0 SPI slave 0 TWIM0 Two-wire master 0 TWIS0 interface slave 4 4000 4000 SPIM1, SPIS1, SPI1 TWI1, TWIS1, TWIM1 5 4000 5000 NFCT 6 4000 6000 GPIOTE 7 4000 7000 SAADC 8 4000 8000 TIMER0 9 4000 9000 TIMER1 10 4000 A000 TIMER2 11 4000 B000 RTC0 12 4000 C000 TEMPerature sensor 13 4000 D000 RNG Random number generator 14 4000 E000 ECB AES Electronic Codebook (ECB) 15 4000 F000 CCM AES CCM mode encryption 15 4000 F000 ARR Accelerated address resolver ID Base Address Peripheral Instance 16 4001 0000 WDT 17 4001 1000 RTC1 18 4001 2000 QDEC Quadrature decoder 19 4001 3000 LPCOMP, COMP 20 4001 4000 SWI0 Software interrupt EGU0 Event generator unit 21 4001 5000 EGU1, SWI1 22 4001 6000 EFU2, SWI2 23 4001 7000 EGU3, SWi3 24 4001 8000 EGU4, SWI4 25 4001 9000 EGU5, SWI4 26 4001 A000 TIMER3 27 4001 B000 TIMER4 28 4001 C000 PWM0 29 4001 D000 PDM Pulse-Density Modulation (digital microphone interface) 30 4001 E000 NVMC 31 4001 F000 PPI ID Base Address Peripheral Instance 32 4002 0000 MWU 33 4002 1000 PWM1 34 4002 2000 PWM2 35 4002 3000 SPI2, SPIS2, SPIM2 36 4002 4000 RTC2 37 4002 5000 I2S 38 4002 6000 FPU 0 5000 0000 GPIO, P0

WDT §40

RWS
Nordic RWS
mem32 40010400 11 running Example 00000001
      40010504Counter Reload Value Example 012C0000
      4001050C01 run while sleep
10 run while debugging
Example 00000001
Run while sleep,
not while debugging

NFC §42

FIELDDETECTED, FIELDLOST
40005404ERRORSTATUS Error Status register 
40005504 FRAMEDELAYMIN  Minimum frame delay
40005590 NFCID1_LAST Last NFCID1 part (4, 7 or 10 bytes ID)
40005594 7 or 10 bytes ID
40005598 10 bytes ID
40005FFC power??nrfx_nfc

IPSR 0 = Thread mode 2 = NMI 3 = HardFault 4 = MemManage 5 = BusFault 6 = UsageFault 11 = SVCall 14 = PendSV 15 = SysTick 16 = IRQ0 . n+15 = IRQ(n-1)[a].

ISR

From version 3.31.1 See nRF52.h mem32 26000 40 26000 = 20010000 427A5 427CD 427CF 26010 = 427D1 427D3 427D5 ....0 26020 = ....0 ....0 ....0 427D7 26030 = 427D9 ....0 427DB 427DD 26040 = 3FE21 427DF 41B79 409DD 26050 = 41239 425A5 3FAA5 40125 26060 = 427DF 40FA1 427DF 427DF 26070 = 427DF 427DF 427DF 427DF 26080 = 31585 3DB95 427DF 427DF 26090 = 3DC35 36B6D 3E4E5 427DF 260A0 = 427DF 427DF 427DF 40FF9 260B0 = 3FEA1 427DF ....0 ....0 260C0 = 427DF 427DF 427DF 427DF 260D0 = 40071 427DF 31A75 ....0 260E0 = ....0 ....0 ....0 ....0 260F0 = ....0 ....0 ....0 ....0 427a4 Reset_ 427cc NMI_ 427ce HardFault_ 427d0 MemoryManagement_ 427d2 BusFault_ 427d4 UsageFault_ 427d6 SVC_ 427d8 DebugMon_ 427da PendSV_ 427dc SysTick_ all IRQ go to 427DE: B B B very bad TIMER0 PWM2 ECB Default_ CCM_AAR SWI5_EGU5 RNG SWI3_EGU3 SPIM2_SPIS2_SPI2 MWU TIMER2 COMP_LPCOMP RTC0 PWM1 RADIO PDM TEMP QDEC TIMER3 I2S SWI4_EGU4 SystemInit 427e0 3c0 system_nrf52 427e0 SystemInit

nRF52 has no means of detecting stack overflow.
Use Memory Watch Unit (MWU) to implement stack overflow detection.

0007 E000 = 4F0507F6 00000002 00000001 00000001 mbr_params_page 0007 E010 = 0______0 0______0 00020890 EC9BBA09 0007 E020 = 00000001 0______0 0______0 0______0 0007 E030 = 0______0 0______0 0______0 0______0 0007 E040 = 0______0 0______0 0______0 0______0 0007 E050 = 0______0 0______0 0______0 FFFFFFFF 0007 E060 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF Large block of unused (usable?) 0007 E250 = FF FF FF FF FF FF FF FF FF FF FF FF 92 AF 43 D1 0007 E260 = 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0007 E270 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0007 E280 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0007 E290 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0007 E2A0 = FF 01 09 BA 9B EC FF FF FF FF FF FF FF FF FF FF ..... 0007 E2B0 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0007 E2C0 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0007 E2D0 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0007 E2E0 = FF FF 00 FF FF FF FF FF FF FF FF FF FF FF FF FF ... 0007 EFFF

Master Boot Record Param Page
0007 F000 = 4F0507F6 00000002 00000001 00000001 
0007 F010 = 00000000 00000000 00020890 EC9BBA09 
 or
0007 F000 = 699C5732 00000002 00000001 00000001 
0007 F010 = 00000000 00000000 000262A0 4CA0A93F  0 0   _start  ? 
0007 F020 = 00000001 00000000 00000000 00000000 
0007 F030 = 00000000 00000000 00000000 00000000 
0007 F040 = 00000000 00000000 00000000 00000000 
0007 F050 = 00000000 00000000 00000000 FFFFFFFF 
…
0007 F250 = FFFFFFFF FFFFFFFF FFFFFFFF 0F25ED9A 
0007 F260 = FFFFFF00 FFFFFFFF FFFFFFFF FFFFFFFF 
0007 F270 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
0007 F280 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
0007 F290 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
0007 F2A0 = A93F01FF FFFF4CA0 FFFFFFFF FFFFFFFF 
0007 F2B0 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
0007 F2C0 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
0007 F2D0 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
0007 F2E0 = FF00FFFF FFFFFFFF FFFFFFFF FFFFFFFF 

0007 E000 - duplicate of 0007 F000 - 0007 FFFF
Keil ARM compiler