F28M35E20B: F2800157QPNQ1A serial flash programmer will not load the generated .txt from hex2000 correctly

Part Number: F28M35E20B

I've been using the provided serial flash programmer to try to load my .out that I've converted into a .txt from the hex2000 tool, but it fails on verification every time for address 0x80000. 

I've tested to make sure everything is paramtertized correctly by loading the provided example "blinky.txt" with the serial flash programmer which works, but my custom app does not.

I've tried loads of modications in the linker by minimizing the number of sectors used. I've tried reparameterizing hex2000 so that it's block alligned and making the block size smaller. I've tried manually erasing before entering DFU mode in the serial progrmmer. There's more I've tried that I don't even remember.

I will attach the generated .txt for you to test, and I'd like to get to the bottom of why it's failing as there are no good resources to identify the root cause.

Thanks,

-Alex

secondary.txt 

  • Hello,

    Is flash being programmed at all? Does the flash programmer report any error or hang? Is your application aligned correctly?

    Best,

    Alex

  • From what I can tell in the memory browser flash is not getting programmed at all starting at the 0x80000 address. The way I checked was in the flash programmer after the flash kernel is loaded I explicitly call a mass flash erase, and then enter DFU mode to program the app. Afterwards flash is all 0xFFFF meaning the image was never dumped into flash, or at least not at starting address 0x80000. 

    The error reported is VERIFICATION_ERROR after the image is loaded.

    My application linker is pretty standard for the most part. The only changes I made were to extend the flash regions for the text segment so my app could fit, but it uses less than half the available flash. I'll attach the generated .cmd for context. I've also attached the .map file.

  • #ifdef generic_flash_lnk
    
    MEMORY
    {
    
        RAMM0                     : origin = 0x000128, length = 0x0002D8
        RAMM1                     : origin = 0x000400, length = 0x0003F8
        RAMLS0                    : origin = 0x008000, length = 0x002000
        RAMLS1                    : origin = 0x00A000, length = 0x001FF8
        FLASH_BANK0_SEC_0_7       : origin = 0x080000, length = 0x002000
        FLASH_BANK0_SEC_8_15      : origin = 0x082000, length = 0x002000
        FLASH_BANK0_SEC_16_23     : origin = 0x084000, length = 0x002000
        FLASH_BANK0_SEC_24_31     : origin = 0x086000, length = 0x002000
        FLASH_BANK0_SEC_32_29     : origin = 0x088000, length = 0x002000
        FLASH_BANK0_SEC_40_47     : origin = 0x08A000, length = 0x002000
        FLASH_BANK0_SEC_48_55     : origin = 0x08C000, length = 0x002000
        FLASH_BANK0_SEC_56_63     : origin = 0x08E000, length = 0x002000
        FLASH_BANK0_SEC_64_71     : origin = 0x090000, length = 0x002000
        FLASH_BANK0_SEC_72_79     : origin = 0x092000, length = 0x002000
        FLASH_BANK0_SEC_80_87     : origin = 0x094000, length = 0x002000
        FLASH_BANK0_SEC_88_95     : origin = 0x096000, length = 0x002000
        FLASH_BANK0_SEC_96_103    : origin = 0x098000, length = 0x002000
        FLASH_BANK0_SEC_104_111   : origin = 0x09A000, length = 0x002000
        FLASH_BANK0_SEC_112_119   : origin = 0x09C000, length = 0x002000
        FLASH_BANK0_SEC_120_127   : origin = 0x09E000, length = 0x001FF0
        RESET                     : origin = 0x3FFFC0, length = 0x000002
    }
    
    
    SECTIONS
    {
        //
        // C28x Sections
        //
        .reset               : >  RESET, TYPE = DSECT /* not used, */
        codestart            : >  0x080000
        .text                : >> FLASH_BANK0_SEC_16_23 | FLASH_BANK0_SEC_24_31 | FLASH_BANK0_SEC_32_29 | FLASH_BANK0_SEC_40_47 | FLASH_BANK0_SEC_48_55,
                                  ALIGN(8)
        .TI.ramfunc          :    LOAD >  FLASH_BANK0_SEC_0_7,
                                  RUN  >  RAMLS0,
                                  TABLE(copyTable_ramfunc),
                                  ALIGN(8)
        .binit               : >  FLASH_BANK0_SEC_0_7,
                                  ALIGN(8)
        .ovly                : >  FLASH_BANK0_SEC_0_7,
                                  ALIGN(8)
        .cinit               : >  FLASH_BANK0_SEC_0_7,
                                  ALIGN(8)
        .stack               : >  RAMM1
        .init_array          : >  FLASH_BANK0_SEC_0_7,
                                  ALIGN(8)
        .bss                 : >  RAMLS0
        .const               : >  FLASH_BANK0_SEC_32_29,
                                  ALIGN(8)
        .data                : >  RAMLS0
        .switch              : >  FLASH_BANK0_SEC_0_7,
                                  ALIGN(8)
        .sysmem              : >  RAMLS0
    
        //
        // User Sections
        //
        FreeRTOS_Heap { *(.freertosHeap) }    >> RAMLS0 | RAMLS1
        FreeRTOS_Stack { *(.freertosStaticStack) }    >> RAMLS0 | RAMLS1
        dclfuncs { *(dclfuncs) }    >  RAMLS0,
                                  ALIGN(2)
    
    }
    
    #endif
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    
    3426.app_map.txt

  • Hi Alex,
    Any updates on this thread? Have you had a chance to look at the device_cmd.txt and 3426.app_map.txt attached? Your help is greatly appreciated!
    Best,
    Dana