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.

nowECC v2.21 returns error for range specification

Other Parts Discussed in Thread: TMS570LS3137, NOWECC

Hello,

to generate valid ECC data for the entire internal flash memory of the TMS570LS3137 we would like to specify the memory range from 0x0 to 0x2fffff.

nowECC -i application.hex -r 0x0 0x2FFFFF -o application_ecc.hex -F021 16M_ADD -r4

Unfortunately the nowECC tool returns the error:

Error 48 - Invalid range value - End address: 0x002fffff is invalid

The error is returned, because our input file doesn't contain addresses up to 0x2FFFFF.

Our input file is not filled up to 0x2FFFFF with 0xFF, as this is anyway the erased value which should also be considered in nowECC for uninitialized data, if the range to be calculated is explicitely stated.

We have to force the nowECC tool to generate ECC data for the entire internal flash memory, to prevent the error pin toggling for speculative prefetches of the core. (http://e2e.ti.com/support/microcontrollers/hercules/f/312/t/228184.aspx)

It seems that with linker generated ECC and virtual memory filling (VFILL) such a use case would be possible, but unfortunately we can't switch to linker generated ECC as after the link process an external tool is used to modify some sections in the application file (builddate, application CRC value, ect..). The ECC needs to be calculated after this 

Is there any way to force nowECC to generate ECC data also for holes in the input file?

  • Thanks for using the Hercules forum! An engineer has been notified of your question. 

  • Hello Stefan,

    1. In cmd file, please fill all the flash section with 0xFFFFFFFF, then compile to generate .out file

    MEMORY{
    VECTORS (X) : origin=0x00000000 length=0x00000020 fill=0xffffffff
    FLASH0 (RX) : origin=0x00000020 length=0x0007FFE0 fill=0xffffffff
    FLASH1 (RX) : origin=0x00080000 length=0x00080000 fill=0xffffffff
    FLASH2 (RX) : origin=0x00100000 length=0x00080000 fill=0xffffffff
    FLASH3 (RX) : origin=0x00180000 length=0x00080000 fill=0xffffffff
    RAM (RW) : origin=0x08000000 length=0x00030000
    SDRAM (RW) : origin=0x80000020 length 0x007FFFE0
    RAM_ALIGN (RW) : origin=0x08030000 length=0x000E0000
    }

    2. Use the .out file to generate ecc file using this format:

    nowECC -i TMS570LS3137Test.out -F021 16M_ADD -o TMS570LS3137Test_ecc.out -r4

    The generated ecc file should contain the unused flash area.

    Regards,

    QJ

  • Hello,

    flash filling is exactly what we wouldn't like to do. Flash filling would always result in a huge output file, containing all the 0xFF in unused sections.

    As the flash erased value is 0xFF, it would be sufficient to specify somehow in the nowECC tool to assume 0xFF for non specified addresses over a certain range, whitout the need of having all addresses specified in the input file.

    It there any solution for it?

  • Is there any update?

    Can you please provide me feedback how to calculate ECC over the entire flash without filling the holes?

    thanks, br

    Stefan