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.

[参考译文] CC1310:一个固件适用于64K 和128K CC1310器件

Guru**** 2481755 points
Other Parts Discussed in Thread: CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1278747/cc1310-one-firmware-for-64k-and-128k-cc1310-devices

器件型号:CC1310

您好

我们有混合库存 64K 和128K CC1310器件 我想知道、 是否有一种方法可以将单个固件用于两个器件版本?

我们的代码小于50K、且能够很好地适应64K 器件内存。 我了解器件(TI 固件?)有"ccfg"闪存区域 使用对"CCFG"寄存器进行编程(在运行时?)。 我正在使用64K 器件链接器文件、并已将"CC1310_LAUNCHXL.c"编辑为

NVS_REGISION_BASE 0x1A000

NVS_REGISION_BASE 0xF000

因此、无论是64k 器件还是128K 器件、ccfg 闪存部分都固定为地址0xF000。

由于链接器文件用于64K 器件、并且 ccfg 段定义为位于64K 器件的最后一个扇区、如下所示:

我希望128K 器件也能与此固件配合使用。

不过,情况并非如此。

当将该64K 固件编程到128K 器件中时、它首次正常启动、但在下电上电或复位后似乎不会启动。 启动时、我们通过 UART 打印一些数据、但这根本不会显示。 在这个条件下对芯片重新编程、将会对其进行复兴、但只会在第一次复位/加电时再次发生。

如果我们创建128K 器件固件(通过使用128K 连接器文件)、并且首先使用此128K 固件对128K 器件进行编程、然后使用64K 器件固件对其进行编程(仅擦除"必要部分")、似乎可以正常工作。 这 意味着128K 固件使用器件运行所需的一些数据对上部64K 闪存进行编程? 当然、64K 固件不会对该空间中的任何内容进行编程。

问题是、如果 ccfg 段已根据链接器文件固定为64K 存储器的最后一个扇区、则器件为何需要/期待128K 存储器的最后一个扇区中具有某些内容? 是在闪存的最后一个扇区中需要 ccfg 数据的芯片还是 TI 代码?

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

    您好 Shoaib、

    您认为.ccfg 放置在相应闪存区域的末尾。
    然而、不能移动此段-在您的情况下、从128KB 的末尾移动到64KB 的末尾。

    其原因是引导加载程序本身存储在 ROM 中、并始终在存储器中的相同位置查找.ccfg。

    您将需要 为每个器件使用不同的链接器文件。  

    此致
    曼努埃尔

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

    您好、Manuel:

    感谢你的消息。 那么、无论引导加载程序引脚状态如何、引导加载程序始终首先运行? 哪个实体实际读取 ccfg 的闪存以对 CCFG 寄存器进行编程? 固件能否直接覆盖这些寄存器?

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

    您好 Shoaib、

    不会、引导加载程序不会独立于引脚状态运行。
    但是、也存储在 ROM 中的启动代码将会运行。 此启动代码读取 ccfg 值并将其存储在寄存器中。

    无法通过固件将数据写入这些寄存器。  

    此致
    曼努埃尔