Skip to main content
Mateusz Grosik
Associate II
December 13, 2016
Question

SPC56 BAM bootloader

  • December 13, 2016
  • 2 replies
  • 1140 views
Posted on December 13, 2016 at 21:48

Hello

In my Engineering Thesis i make a SPC56 BAM bootloader using CAN. A board with STM32 f103 'sending' code via CAN to CAN on taget board with SPC560B and program uP using BAM.

Can i do this in SPC5 studio? Becouse i cant find any options and configuration in program.

Best regards

    This topic has been closed for replies.

    2 replies

    Erwan YVIN
    ST Technical Moderator
    December 14, 2016
    Posted on December 14, 2016 at 09:49

    Hello Mateusz ,

    Yes , it is possible , better to use  user.ld to customize your own linker file

     you can find any information in the RM SPC56B (reference manual) (chap 6 Microcontroller boot)  (Bolero B)

    Between 2 boards , you should use some CAN Transceivers between the 2 boards.

                  Best regards

                                        Erwan

    In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.
    Mateusz Grosik
    Associate II
    February 23, 2017
    Posted on February 24, 2017 at 00:04

    Ok thanks, i used transceivers between the 2 boards. Now i want to run uC in BAM mode. I generate a CAN example using project wizard, can i change here application.ld file to make BAM mode or how i can make a user.ld?

    I make some standalone_ram.ld in ghs, here is my file, it is correct to ran uC in BAM mode?

    Here is code:

    MEMORY {

    // 384k Internal Flash

    flash_rsvd1 : ORIGIN = 0x00000000, LENGTH = 8

    flash_memory : ORIGIN = ., LENGTH = 384K-8

    flash_rsvd2 : ORIGIN = ., LENGTH = 0

    // 24KB of internal SRAM starting at 0x40000000

    dram_rsvd1 : ORIGIN = 0x40000000, LENGTH = 0

    dram_reset : ORIGIN = ., LENGTH = 0

    dram_memory : ORIGIN = ., LENGTH = 24K-256

    heap_reserve:origin = ., LENGTH = 8K

    stack_reserve:origin = ., LENGTH = 8K

    dram_rsvd2 : ORIGIN = ., LENGTH = 16

    }

    DEFAULTS {

    stack_reserve = 4K

    heap_reserve = 4K

    }

    //

    // Program layout for running out of RAM.

    //

    //

    SECTIONS

    {

    .PPC.EMB.sdata0 ABS : > dram_memory

    .PPC.EMB.sbss0 CLEAR ABS : > .

    .text : > dram_memory

    .vletext : > .

    .syscall : > .

    .rchw NOCHECKSUM : > .

    .secinfo : > .

    .rodata : > .

    .sdata2 : > .

    .fixaddr : > .

    .fixtype : > .

    .sdabase ALIGN(16) : > dram_memory

    .sdata : > .

    .sbss : > .

    .data : > .

    .bss : > .

    .heap ALIGN(16) PAD(heap_reserve) : > .

    .stack ALIGN(16) PAD(stack_reserve) : > .

    //

    // These special symbols mark the bounds of RAM and ROM memory.

    // They are used by the MULTI debugger.

    //

    __ghs_ramstart = MEMADDR(dram_rsvd1);

    __ghs_ramend = MEMENDADDR(dram_memory);

    __ghs_romstart = MEMADDR(flash_rsvd1);

    __ghs_romend = MEMENDADDR(flash_rsvd2);

    _ram_image_heap = ENDADDR (heap_reserve);

    _ram_image_stack = ENDADDR (stack_reserve);

    _ram_image_end = ENDADDR (.bss);

    }

    Best regards

    Mateusz