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.

[参考译文] LP-CC2652R7:尝试动态调整引导加载程序

Guru**** 2767125 points

Other Parts Discussed in Thread: CC2652R7

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1276175/lp-cc2652r7-trying-to-dynamically-adjusting-bootloader

器件型号:LP-CC2652R7
主题中讨论的其他器件:CC2652R7

您好!

我一直在尝试使用论坛上提供的各种方法来动态地更改闪存中的引导加载程序。 我已尝试使用 NVS 数据保存当前 ccfg 存储器、然后使用调整后的值将其写回闪存。 我还尝试了 flash_interface_internal 的 writeFlash ()方法、HPiProgramFlash ()方法和 HWREG,都尝试更改引导加载程序配置。

uint8_t* bloon =(uint8_t*) malloc (4 * sizeof (uint8_t));

HWREG (0x50004000 + 0x00000FD8)= 0xC5FE08C5;
HPiProgramFlash (BLON、0x50004FD8、4);
writeFlash (0x50004FD8、BLON、4)

谢谢。
肯尼斯   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Kenneth:

    不建议您在运行时更改 CCFG: https://e2e.ti.com/f/1/t/1263255

    如果您已确定要更改它、则应该尝试修改闪存的最后一页。  对于 CC2652R7、这是0xAE000至0xB0000。  您将需要使用闪存操作来读取、擦除、修改和写入该区域。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我想知道您从何处获得存储器地址0xAE000至0xB0000? 您还会建议哪些闪存操作?  

    谢谢。
    肯尼斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    0xAE000至0xB0000 是存储 CCFG 的704kB SimpleLink 器件的闪存的最后一页。  您可以查看项目的命令链接器文件以了解更多背景信息。   

    Unknown 说:
    尝试了 flash_interface_internal_
    的 writeFlash ()方法

    此 API 或此 API 作为基础 driverlib 功能可能适用。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    这就是我当前尝试更改闪存中引导加载程序的 CCFG 的方式、每次闪存方法调用都成功返回、但每当我查看闪存时、它没有更改。

    FLASH_OPEN();
    uint8_t status =-99;
    uint8_t* bloon =(uint8_t*) malloc (8192 * sizeof (uint8_t));

    状态= readFlashPg (87、0、BLON、8192);
    printf ("状态:%d \r\n、状态");
    printf ("BLON[0]:%d、BLON[1]:%d、BLON[2]:%d、BLON[3]:%d、BLON[3]:%d \r\n"、BLON[8152]、 BLON[853]、BLON[854]、BLON[8155]);

    Status = eraseFlashPg (87);
    printf ("状态:%d \r\n、状态");

    BLON[0]= 197;
    BLON[1]=11;
    BLON[2]= 254;
    BLON[3]= 197;
    printf ("BLON[0]:%d、BLON[1]:%d、BLON[2]:%d、BLON[3]:%d、BLON[3]:%d \r\n"、BLON[0]、 BLON[1]、BLON[2]、BLON[3]);

    状态= writeFlashPg (87、0、BLON、8192);
    printf ("状态:%d \r\n、状态");

    状态= readFlashPg (87、0、BLON、8192);
    printf ("状态:%d \r\n、状态");
    printf ("BLON[0]:%d、BLON[1]:%d、BLON[2]:%d、BLON[3]:%d、BLON[3]:%d \r\n"、BLON[8152]、 BLON[853]、BLON[854]、BLON[8155]);

    Flash_Close();

    谢谢。
    肯尼斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此方法是否适用于  不包含 CCFG 的其他闪存页?  您能否确认 eraseFlashPg 对目标闪存区域不执行任何操作?  是否 为此闪存页启用了 CCFG 写保护?

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我能够让它正常工作。 第一个问题是我修改了数组中的错误值(应该是8152到8155)、另一个问题是所有 printf 语句的使用。 由于某种原因、它们会阻止编写代码运行。  

    再次感谢您的帮助、
    肯尼斯