ADSP-SC587 adi_rom_boot() for Second Stage Load


I just start to develop a new firmware platform with ADSP-SC587, there are so many questions that i cannot figure it out.

For now, i foucsed on the program upgraded, here i met some issues, i wondered if anyone famaliar with ADSP-SC587 SSL function adi_rom_boot() ?

I have two project, one is Main code means APPLICATION, another one is Bootloader(bootloader is used to do the second stage load). I try to use the Bootloader code to flash the APPLCAITON code in the flash. In order to realize that, when the main code executes in some part, it was commanded to jump to Bootloader, i used function adi_rom_boot:

Here below part of my code:

/*Configuring the SPU secureP registers for boot peripheral to do secure access to memory*/







adi_rom_boot((void*) 0x60800000,0,0,0,0x80207);

return 0;

the pAddress is ox60800000, because i flashed the bootloader code with cldp.exe through ICE-1000 with an offset 0x800000. And the main code(APPLICATION) was flased into the same section, but the start address is 0x60000000.

the two project code was flashed into the same flash, but they have different spac.

In addition, the adi_rom_boot() was invoked in Core2, and the Bootloader code was also realized in Core2.

However, i have no idea why the main code cannot jump to the bootloader with fucntion adi_rom_boot((void*) 0x60800000,0,0,0,0x80207) ?????

i am not sure if there are some system file should be added into the project or there are some mistake in my code ?

Plus, i am not sure it necessary that the adi_rom_boot() should be invoked in Core0 ?

Please kindly to suppor new starter for ADI  DSP

  • 0
    •  Analog Employees 
    on Jul 18, 2018 11:52 PM


    This issue is handled through private support. To avoid duplication of efforts, you can continue the discussions through private support and we will post the final resolution here.

    Best Regards,


  • 0
    •  Analog Employees 
    on Sep 17, 2018 3:24 PM in reply to ADIApproved


    As this query is closed in the private support, post the final resolution for others to get benefit.

    Seems that you call the adi_rom_boot function from SHARC core 2. In that case, as mentioned in EE-384, "If the ROM API is invoked from the secondary SHARC (core2), then the boot kernel can only boot the core2 SHARC (not the core 0 ARM nor the core1 SHARC)."


    On the other hand, if you want to boot application from all the three cores, it is mandatory that adi_rom_boot command is called from ARM core. 


    We are attaching two projects namely "" and "". The two projects contains three cores each. The adi_rom_boot function is called from SHARC core 2. The LED application is also built on SHARC core 2. Please modify the same code for ADSP-SC587.


    The loader file for LED is created only for SHARC core 2. In addition, you need not add init code while creating loader stream.



  • Hi,

    I was searching through this forum and this thread is the closest to what I am looking for.  I am looking for a way to make an application (running on a 2156x) that will boot from spi flash . Then once it is running at some point in time I need it to boot another ldr file that is saved on a different location in flash memory.  Your example look straightforward in that I just have to call adi_rom_boot( ) with the parameters. 

    I do have the following questions just to clarify:

    1. The value 0x60000000 is the starting address of the spi2 as mapped in the datasheets. My question is that in your comment it says that it will grab the new from sector 4. How did you arrive at  0x60080000?  I looked at the address mapping of the spi flash and it did not add up to me for sector 4. To me I see it that it will be picking up at sector 8  based on the 64k sector numbering.  Please clarify or maybe there is a different equation that I should be observing. 

    2. On the last parameter, is it ok if I keep the value to 0x207? I noticed that in EE 384 there was a special association for bits 19-16 and I just need something simple and that works. Also as a follow up, the last nibble (0x7), I see in the datasheet that 0x2 is an option as legacy ; is 2 also usable? Is there a requirement in the first booted application that it should setup the spi2 flash into memory before calling this adi_rom_Boot ( ).

    3. I have read that L2 SRAM memory is critical in calling this adi_rom_Boot( ). Any specific pointers that I have to be aware when I want to use this with ADSP-21565 interfaced to a three byte address spi flash ?  (The 21569 ezkit uses a 4 byte address spi flash)

    4. Lastly, with respect to the *pREG_SPU0_SECURExxx set of calls, If I am using other peripherals out side of these ports, is there a necessary step that I need to call?

    Thank you.