This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Compiler/RM48L952: Need Help on RM48L952 UART Bootloader

Part Number: RM48L952
Other Parts Discussed in Thread: UNIFLASH

Tool/software: TI C/C++ Compiler

Hi,

 I have download a bootloader software  RM48L952. I`m not able to erase the flash memory

Kindly share Working Hercules RM48L952  bootloader source code.

Regards,

Murali

  • Hello Murali,

    I have forwarded your post to one of our boot loader experts. They should get back with you soon. In the meantime, what errors are you getting when you attempt to erase? i.e., when you call the erase return, it should return a status value indicating success or failure and for what reason.
  • Dear chuck,

    We are waiting for the support, we tried so many methods using available example codes, but even FLASH ERASE and WRITE using FLASH API code is also not working we followed as per application notes.
    Waiting for fast response to the technical issue.

    Thanks and regards,
    Murali Prasad
  • Murali,

    The code that is included with the application note is validated working code so there must be some gap in the process you have followed which we will need to identify.

    First, can you provide some details on any status return values from the code. i.e., when you issue the flash erase command, what it he return code of the operation status? Are you certain the programming code is being copied to RAM appropriately? You cannot execute from the same bank while also trying to erase it so you must insure the execution is from either a separate bank or from RAM.

    Also, I apologize for any delays in providing answers, our support team for Hercules is located in Houston, TX which, as you have probably heard has been devastated with rain and flooding in the aftermath of Hurricane Harvey. We are beginning to recover and be able to provide support, but please be aware that there may be longer delays in getting answers than normal.
  • Murali,

    Have you had a look at this application note and the example code referenced by it?

    www.ti.com/.../spna190
  • Chuck,

    1)We have gone through the application notes.
    2) we are writing the bootloader code to FLASH0 and writing application code to FLASH1 and we checked the bootloader application code being written to respective flash memory banks using uniflash.
    3)In bootloader code we are end of code we are giving below instruction so bootloader to jump to application code

    JumpAddress = (uint32_t)APP_START_ADDRESS; // APP_START_ADDRESS =0000dccc ("_c_int00" address: 0000dccc)
    ((void (*)(void))JumpAddress)();

    systemREG1->SYSECR = 0; //used for software reset so it will go to application code.

    BOOTLOADER linker File content:
    /*----------------------------------------------------------------------------*/
    /* Linker Settings */
    --retain="*(.intvecs)"
    /*----------------------------------------------------------------------------*/
    /* Memory Map */

    MEMORY
    {
    /* USER CODE BEGIN (2) */
    VECTORS (X) : fill=0xFFFFFFFF origin=0x00000000 length=0x00000020
    BOOT_LOAD (RX) : fill=0xFFFFFFFF origin=0x00000020 length=0x00007FE0
    FLASH0 (RX) : vfill=0xFFFFFFFF origin=0x00008000 length=0x00178000
    FLASH1 (RX) : vfill=0xFFFFFFFF origin=0x00180000 length=0x00180000

    STACKS (RW) : origin=0x08000000 length=0x00001500
    RAM (RW) : origin=0x08001500 length=0x0003EB00
    /* USER CODE END */
    }

    SECTIONS
    {
    /* USER CODE BEGIN (4) */
    .intvecs : {} > VECTORS

    .text : {} > FLASH0
    .const : {} > FLASH0
    .cinit : {} > FLASH0
    .pinit : {} > FLASH0

    .stack : {} > STACKS

    .bss : {} > RAM
    .data : {} > RAM
    .sysmem : {} > RAM
    /* USER CODE END */
    }

    APPLICATION CODE link file content:
    /*----------------------------------------------------------------------------*/
    /* Linker Settings */
    --retain="*(.intvecs)"
    /*----------------------------------------------------------------------------*/
    /* Memory Map */

    MEMORY
    {
    //VECTORS (X) : origin=0x00000000 length=0x00000020
    VECTORS (X) : origin=0x00180000 length=0x00000020
    FLASH0 (RX) : origin=0x00000000 length=0x00180000
    FLASH1 (RX) : origin=0x00180020 length=0x0017FFE0
    STACKS (RW) : origin=0x08000000 length=0x00001500
    RAM (RW) : origin=0x08001500 length=0x0003EB00

    /* USER CODE BEGIN (2) */
    /* USER CODE END */
    }
    /*----------------------------------------------------------------------------*/
    /* Section Configuration */

    SECTIONS
    {
    /* USER CODE BEGIN (4) */
    .intvecs : {} > VECTORS
    .text : {} > FLASH1
    .const : {} > FLASH1
    .cinit : {} > FLASH1
    .pinit : {} > FLASH1
    .bss : {} > RAM
    .data : {} > RAM
    .sysmem : {} > RAM
    /* USER CODE END */
    }

    Currently application is not getting executed by MCU.

    Let me know any mistakes were made during linker file configuration.

    Thanks,
    Murali Prasad
  • Hello Murali,

    I am going to forward your post to one of our boot loader specialists to see if they can offer any assistance. One of my initial observations is that the interrupt vectors cannot be relocated to bank1. They have to be at address 0. This is a requirement of the CPU but I think there is some dependency on which mode you are operating the VIM in.
  • Hello Murali,

    Your application is placed at 0x180000, so the application start address should be 0x180000. You also need to modify the int vector table (sys_intvecs.asm)

    b _c_int00 ;0x00
    b #0x180000-0x8
    b #0x180000-0x8  ;; Software interrupt
    b #0x180000-0x8  ;; Abort (prefetch)
    b #0x180000-0x8 ;;Abort (data)
    reservedEntry
    b reservedEntry     
    ldr pc,[pc, #-0x1b0]
    ldr pc,[pc, #-0x1b0]