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.

CC2651R3: OAD Image Not Booting with 8MB External Flash on CC2651R3 Using Project Zero

Part Number: CC2651R3
Other Parts Discussed in Thread: UNIFLASH, CC2651P3

Tool/software:

Dear Texas Instruments Support Team,

I am using,

CCS Version - 12.7

SDK Version simplelink_cc13xx_cc26xx_sdk_7_41_00_17

Compiler Version - TI Clang v3.2.0 LTS

I am currently working on a project based on the project_zero example for the CC2651R3 and have integrated an 8MB external flash memory instead of the default 1MB flash. The external flash (both 1MB and 8MB) is from the same manufacturer and supports the same command set.

I have made the necessary changes in the project to accommodate the new flash size, including updates to:(Refer the attached screenshot)

  • project_zero.syscfg

     

  • flash_interface.h

    /* flash_interface.h */
    
    /*!
     * Total size of external flash
     */
    //#define EFL_FLASH_SIZE                      0x100000
    #define EFL_FLASH_SIZE                      0x800000

After flashing the firmware to the device, I attempted an OAD (Over-the-Air Download) update using BTool and a host device. The OAD process completed successfully according to BTool’s logs, but the device did not boot into the new firmware. After resetting, the device still runs the older firmware previously flashed using UniFlash.

To verify flash functionality, I have tested the 8MB flash by performing erase, write, and read operations successfully — including writing and reading data up to 1MB in size. So far, the flash appears to be working as expected for basic operations.

Request for Support:

Could you please help identify what could be causing this behavior, where OAD completes successfully but the new image is not being booted? Are there any additional considerations or configurations needed when using an external flash larger than 1MB for OAD on the CC2651R3?

Any guidance or insights you can provide would be greatly appreciated.

Best regards,
Rajnish Singh

  • Hello,

    Thank you for reaching out! This is certainly strange behavior. Have you changed the version number of the new firmware image to be greater than the version number of the current image? This is crucial, as without it, the device will not boot the new image.

    Best Regards,

    Tarek

  • Hi Tarek,

    Thanks for your response and helpful input!

    You were absolutely right to ask about the versioning — we had ensured that the new firmware image version was greater than the currently running image.

    After some deeper investigation, I found that the issue was actually related to support for flash devices larger than 2MB. Specifically, the boot image manager (bim_offchip_LP_CC2651P3) project does not initially recognize the 8MB external flash unless it is explicitly added to the flash info table in the following file:

    Path: ExternalFlash -> ext_flash.c
    Static Table: static const ExtFlashInfo_t flashInfo[]

    Once I added an entry for the 8MB flash to this table, the OAD worked as expected. Here's the updated section of the table with the added entry:

    /* ext_flash.c */
    
    // Supported flash devices
    static const ExtFlashInfo_t flashInfo[] =
    {
        {
            .manfId = 0xC2,         // Macronics MX25R6435F
            .devId = 0x17,
            .deviceSize = 0x800000  // 8 MByte (64 Mbit)
        },
        {
            .manfId = 0xC2,         // Macronics MX25R3235F
            .devId = 0x16,
            .deviceSize = 0x400000  // 4 MByte (32 Mbit)
        },
        {
            .manfId = 0xC2,         // Macronics MX25R1635F
            .devId = 0x15,
            .deviceSize = 0x200000  // 2 MByte (16 Mbit)
        },
        {
            .manfId = 0xC2,         // Macronics MX25R8035F
            .devId = 0x14,          //
            .deviceSize = 0x100000  // 1 MByte (8 Mbit)
        },
        {
            .manfId = 0xEF,         // WinBond W25X40CL
            .devId = 0x12,
            .deviceSize = 0x080000  // 512 KByte (4 Mbit)
        },
        {
            .manfId = 0xEF,         // WinBond W25X20CL
            .devId = 0x11,
            .deviceSize = 0x040000  // 256 KByte (2 Mbit)
        },
        {
            .manfId = 0x0,
            .devId = 0x0,
            .deviceSize = 0x0
        }
    };

    With this update — along with the previously mentioned changes in project_zero.syscfg and flash_interface.h — I’m now able to perform OAD successfully on the 8MB external flash device.

    Thanks again for your support!

    Best regards,
    Rajnish Singh

  • Hello Rajnish,

    I'm glad to here it works!

    Best Regards,

    Tarek