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.

[参考译文] CCS/CC2640:如果应用代码在0x1000而非默认位置0x00进行刷写、则应用程序不起作用

Guru**** 2595800 points
Other Parts Discussed in Thread: CC2640, CC2650, CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/608232/ccs-cc2640-application-is-not-workingg-if-application-code-is-flashed-at-0x1000-instead-of-default-location-0x00

器件型号:CC2640
Thread 中讨论的其他器件: CC2650

工具/软件:Code Composer Studio

您好!

我使用的是 cc2640和 CCSv6
我有一个应用程序、我想在控制器闪存中保留0x00至0x1000的空间以存储一些用户定义的数据、应用程序应该从闪存位置0x1000开始。
对配置和命令文件进行了更改、以便从0x1000位置而不是默认的0x00刷写应用程序。 刷写应用程序和堆栈后、我可以看到按照映射文件将应用程序和堆栈刷写到所需位置。
但在刷写应用程序之后仍然无法正常工作。
以下是我所做的更改。

1。FLASH_ONLY _BUILD 设置为1以避免 RCFG
2.在 cc26xx_app.cmd 文件 flash_app_base 0x00000000更改为 flash_app_base 0x00001000
3.在 app_ble.cfg 文件中 m3Hwi.resetVectorAddress = 0x00;更改为 m3Hwi.resetVectorAddress = 0x1000;
4.在 ccfg.c 文件中、将 SET_CCFG_IMAGE_VALID CONF_IMAGE_VALID 0x000000000更改为 SET_CCFG_IMAGE_VALID CONF_IMAGE_VALID 0x000001000

即使我尝试在 cc26xx_stack_cfg.cmd 中将 FLASH_START 0x0000更改为 FLASH_START 0x1000、在这种情况下也不起作用。

执行上述更改后、应用程序从0x1000刷写、并将0xFF 写入0x00至0xFFF。

所做的更改是否正确,或者是否缺少任何配置更改?  

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

    您好 Rahul、

    对于 CC2650/CC2640、复位矢量需要放置在闪存中的地址0x0处。 在 CC2640R2F 上、在 CCFG 中添加了一个选项来更改中断矢量表的偏移量。

    祝你一切顺利

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

    Rahul、

    正如 JXS 建议的那样、对于 CC2650、CC2640 R1、ROM 中的 RTOS 映像将中断矢量放置在0x0000。 您在帖子中提到的 CCFG 设置仅对 CC2640R2F 有效。

    另一个选项是在闪存中使用 RTOS 映像、这将允许您重新定位中断矢量。 不过、还有一个问题、您打算将第一页用于什么? 如果以 NV 形式存储数据、则可能会通过提供的 OSAL SNV 页面?

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

    感谢您的 JXS 和 Sean2重放。

    我也尝试过闪存中的 TI-RTOS 映像、每当我从0x0移动 resetVecs 时、系统就会保持死机状态。 因此、我相信正如 JXS 所说的、无法将 ResetVecs 移动到 CC2640的其他位置。

    我需要在闪存中保留一个页面来存储用户特定的数据。 我也在使用 SNV 部分来存储一些其他数据。 考虑到我还需要实现片上 OAD、您能否告诉我闪存中可保留的合适部分(SNV 除外)?

    是否可以使用为其保留的堆栈未使用部分?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您是否确认有足够的闪存来在片上实施 OAD 并保留一个额外的闪存页? 我们建议将 CC2640R2F 用于片上 OAD。

    如果是这样、您只需在 OAD_Target 应用中定义一个 non_init 4KB const 区域、然后使用闪存 R/W API 访问它。

    祝你一切顺利