This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Add nordic nrf52832 softdevice(S132) as an image to IAR

Hi Sir,

I am use S132 softdevice and it converted to binary file using srecord tool, the add binary file into IAR project seems not working for softdevice.

Below is my ICF file in IAR, the softdevice address from 0x00000 to 0x25fff,

Does anyone knows why I setting does not working? 

Much appreciated.

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/

define symbol __ICFEDIT_intvec_start__ = 0x26000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x26000;
/* Below for 52832 S132 */
define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff;

define symbol __ICFEDIT_region_SOFTDEVICE_start__ = 0x00000;
define symbol __ICFEDIT_region_SOFTDEVICE_end__ = 0x25fff;


define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98;
/* Below for 52832 */
define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff;
export symbol __ICFEDIT_region_RAM_start__;
export symbol __ICFEDIT_region_RAM_end__;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 8192;
define symbol __ICFEDIT_size_heap__ = 8192;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region SOFTDEVICE_region = mem:[from __ICFEDIT_region_SOFTDEVICE_start__ to __ICFEDIT_region_SOFTDEVICE_end__];
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];

define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
define block RO_END with alignment = 8, size = 0 { };

initialize by copy { readwrite };
do not initialize { section .noinit };

keep { section .intvec };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM_region { readonly,
block RO_END };
place in RAM_region { readwrite,
block CSTACK,
block HEAP };
place in SOFTDEVICE_region { section .SOFTDEVICE_Section };

  • Does anyone knows why I setting does not working

    IAR would know!

    If you've paid out the (considerable) price for IAR, you should certainly be making the most of their support!

  • Sorry, there maybe confuse to you about my question.

    The image add successfully but it does not work to nRF52832, if I do programming softdevice in nRFGO or command line then everything works fine.

    I don't know why softdevice could not be an image file add into IAR. does anyone did try it before?

  • Hi,

    I suspect that you have been following the oldest answers in Integrate SoftDevice Stack into IAR Workbench 7.10.1 for ARM. It seems some people have had problems getting that to work. Have you tried the suggestion by  in that same thread instead? I.e. flash the SoftDevice as part of a build event.

    Regards,
    Terje

  • Actually there is a missing step in previous advice for IAR and using a combined programming action with application and SoftDevice. The build steps are as before, and the Softdevice is added via the following but Flash Loader does not work and so must be unchecked:

    Options->Debugger->Images:

      Download Extra Image [Checked]

      Path: blah\blah\s132_nrf52_5.1.0_softdevice.hex

      Offset: 0

      Options->Debugger->Download:

      Verify Download [Checked]

      Use Flash Loader: [Un-Checked]

      This works as-is with the vanilla linker icf file and standard SoftDevice settings (Nordic Uart example based) which doesn't need editing:

    /*###ICF### Section handled by ICF editor, don't touch! ****/
    /*-Editor annotation file-*/
    /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
    /*-Specials-*/
    define symbol __ICFEDIT_intvec_start__ = 0x26000;
    /*-Memory Regions-*/
    define symbol __ICFEDIT_region_ROM_start__   = 0x26000;
    define symbol __ICFEDIT_region_ROM_end__     = 0x7ffff;
    define symbol __ICFEDIT_region_RAM_start__   = 0x20002a98;
    define symbol __ICFEDIT_region_RAM_end__     = 0x2000ffff;
    export symbol __ICFEDIT_region_RAM_start__;
    export symbol __ICFEDIT_region_RAM_end__;
    /*-Sizes-*/
    define symbol __ICFEDIT_size_cstack__   = 8192;
    define symbol __ICFEDIT_size_heap__     = 8192;
    /**** End of ICF editor section. ###ICF###*/
    
    define memory mem with size = 4G;
    define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
    define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
    
    define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
    define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
    define block RO_END    with alignment = 8, size = 0     { };
    
    initialize by copy { readwrite };
    do not initialize  { section .noinit };
    
    keep { section .intvec };
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
    place in ROM_region   { readonly,
                            block RO_END };
    place in RAM_region   { readwrite,
                            block CSTACK,
                            block HEAP };
    

  • The   use command-line to programming softdevice, and it is working good. But I am just don't understand why softdevice cannot be a normal binary file add into project.

Related