主题中讨论的其他器件:CC2652R7、 CC1352P、CC2652RB、 CC1352P7、 CC2651P3、CC2651R3SIPA
工具与软件:
对于影响闪存长度计算的一些或大多数示例、链接器命令文件中存在错误:
闪存存储器段定义为:
FLASH (RX):origin = flash_start、length =(flash_end - flash_start + 1)
FLASH_START 定义为:
#define FLASH_start ENTRY_END + 1
entry_end 定义为:
#define ENTRY_START + ENTRY_SIZE - 1
如果您扩展这些宏、 闪存段将变为:
FLASH (RX):origin = flash_start、length =(flash_end - entry_start + entry_size - 1+ 1)
正确的计算方法应该是:
FLASH (RX):origin = flash_start、length =(flash_end - (entry_start + entry_size - 1+ 1)+ 1)
缺少方括号会导致闪存长度超过 entry_size 而不是小于 entry_size。 这会导致声明闪存大小过大、一旦闪存填满到最后、OAD 映像实际上会覆盖位于闪存末尾的引导加载程序代码、从而使器件闪烁。
如果将受影响的 cmd 文件链接到其中(来自 CC2642工程)、则这来自 MAP 文件:
存储器配置
文件夹 使用的原始长度 未使用 属性填充
--------------- --- --- --- --- ---
FLASH_IMG_HDR 00000000 00000090 0000008d 00000003 R X
条目 00000090 00000040 0000003c 00000004 R X
闪存 000000d0 000560d0 00056020 000000b0 R X
RTOS_SRAM 20000000 0000012c 000000e4 00000048 RW X
SRAM 20000fdf 00013021 0000de84 0000519d RW X
请注意、闪存长度应为0x56000 - 0xD0、而非0x56000+ 0xD0 (引导加载程序从0x56000开始)
为了纠正这个错误、我们需要在 flash_start 宏周围添加一个括号:
FLASH (RX): origin = flash_start , length =(flash_end -(flash_start )+1 )
至少以下 SDK 中存在此错误:
6.20.00.29.
3.30.00.03
这是我检查的一些存在此错误的命令文件路径(示例中有数百个命令文件、因此我只检查了几个):
simplelink_cc13xx_cc26xx_sdk_6_20_00_29\examples\rtos\LP_CC2652R7\ble5stack\simple_peripheral_oad_onchip\tirtos7\ticlang\cc13x2x7_cc26x2x7_app_tirtos7.cmd"
simplelink_cc13xx_cc26xx_sdk_6_20_00_29\examples\rtos\LP_CC2652R7\ble5stack\simple_peripheral_oad_offchip\tirtos7\ticlang\cc13x2x7_cc26x2x7_app_tirtos7.cmd"
simplelink_cc13x2_26x2_sdk_3_30_00_03\examples\rtos\CC1352R1_LAUNCHXL\ble5stack\simple_peripheral_oad_onchip\tirtos\ccs\cc13x2_cc26x2_app.cmd"
simplelink_cc13x2_26x2_sdk_3_30_00_03\examples\rtos\CC1352R1_LAUNCHXL\ble5stack\simple_centr\tirtos\ccs\cc13x2_cc26x2_app.cmd"
simplelink_cc13x2_26x2_sdk_3_30_00_03\examples\rtos\CC1352P1_LAUNCHXL\ble5stack\simple_peripheral_oad_onchip\tirtos\ccs\cc13x2_cc26x2_app.cmd"