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.

[参考译文] CC2340R5:CC2340R5引导加载程序问题

Guru**** 2587365 points
Other Parts Discussed in Thread: CC2650, CC2340R5, CC2538, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1257801/cc2340r5-cc2340r5-bootloader-questions

器件型号:CC2340R5
主题中讨论的其他器件: CC2538、CC2650、 UNIFLASH

您好!

我正在尝试使用 ROM 引导加载程序通过 UART 对 CC2340R5进行重新编程。 我正在正确写入应用(通过 CRC 下载并发送所有状态均正确的数据)、但当我尝试对 CCFG 部件进行编程时、在我写入 CCFG 的第一个数据块时收到错误 CMD_RET_FLASH_FAIL。 我将执行 SWCU193 8.5.4第469页描述的步骤。

我的固件为180704字节和 CCFG 2048字节。

这里我有三个问题:

1.-  CMD_RET_FLASH_FAIL 的含义是什么 ?

2.-我 使用以下算法计算180704Bytes 的 CRC:  

//按照 CC2538和 CC2650的方式计算 CRC32校验和。
int calcCrcLikeChip (const unsigned char * pData、unsigned long ulByteCount)
{
unsigned long d、ind;
无符号长整型 ACC = 0xFFFFFFFF;
常量无符号长整型 ulCrcRand32Lut[]=
{
0x00000000、0x1DB71064、0x3B6E20C8、0x26D930AC、
0x76DC4190、0x6B6B51F4、0x4DB26158、0x5005713C、
0xEDB88320、0xF00F9344、0xD6A3E8、0xCB61B38C、
0x9B64C2B0、0x86D3D2D4、0xA00AE278、0xBDBDF21C
};

while ( ulByteCount--)
{
D =*pData++;
IND =(ACC & 0x0F)^(d & 0x0F);
ACC =(ACC >> 4)^ ulCrcRand32Lut[ind];
IND =(ACC & 0x0F)^(d >> 4);
ACC =(ACC >> 4)^ ulCrcRand32Lut[ind];

返回(ACC ^ 0xFFFFFFFF);

是否有任何变化? 我是否必须考虑任何其他注意事项? (内存对齐等)

3.-当我生成固件时、是否必须用额外的零来填充它并执行某种对齐? 请告诉我是否需要考虑其他要求。

感谢您的支持

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

    您好!

    Unknown 说:
    1.-这是  CMD_RET_FLASH_FAIL 的含义 ?

    引用 CC23xx SimpleLink 无线 MCU 的技术参考手册

    BLDR_CMD_RET_FLASH_FAIL 0x44

    这是为了响应
    BLDR_CMD_GET_STATUS
    命令和
    表示尝试编程或擦除
    闪存出现故障。

    如果在尝试擦除后出现、则可能意味着您正在尝试擦除受保护的扇区。

    如果在尝试写入之后出现该错误、则可能是由于某个 CRC 错误、或者您正在写入未擦除的扇区。

    Unknown 说:
    2.-我正在 使用以下算法计算180704Bytes 的 CRC: 

    我必须检查您正在使用的算法的详细信息、但乍一看似乎没问题。

    请问您是如何计算 CCFG 器件的 CRC 的? 目前、我们没有合适的独立工具来计算 CCFG 的 CRC。 我建议您实际使用 CCS 或 Uniflash 刷写 CC2340R5器件。 然后、转储 CCFG 部分的内容、以便正确填充 CCFG 的 CRC。

    或者、您可能希望使用附加的 CCFG bin 文件(具有正确的 CRC)。 /cfs-file/__key/communityserver-discussions-components-files/538/ccfg_5F00_CC2340R5.bin (即使 CCFG 内容不完全符合您的需求、它至少会显示系统是否按预期工作)。

    Unknown 说:
    3.-当我生成固件时、是否必须用额外的零来填充它并进行某种对齐? 请告诉我是否需要考虑其他要求。

    不应需要执行该操作、因为在刷写新映像之前必须擦除整个闪存(即不应保留先前映像的剩余部分)。

    我希望这将有所帮助、

    此致、

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

    您好!

    感谢您的答复。

     在写入尝试之后会出现 BLDR_CMD_RET_FLASH_FAIL 错误、具体来说是在写入 CCFG 字节之后。

    我计算 CCFG 的 CRC 的方式与计算应用部分相同(使用 calcCrcLikeChip 函数)。 您能告诉我如何提取 CCFG 文件的 CRC 吗? 我可以从从 CCS 生成的十六进制文件的 CCFG 部分中提取它、还是必须从已刷写的芯片组中转储 CCFG? 在肯定的情况下、您能否指出如何转储 CCFG 以及我可以找到预期的 CRC 的哪个部分?

    另一个问题是、如果我使用 CMD_DOWNLOAD 命令而不是 donwload_crc、那么芯片组是否期望 CMD CRC32? 或者我能否在没有 CRC 校验的情况下完成重新编程过程?

    感谢您的支持。

    关于

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

    您好!

    感谢您在我离开时的耐心。

     写入尝试后,具体在写入 CCFG 字节后出现 BLDR_CMD_RET_FLASH_FAIL 错误。

    将 CCFG 字节写入哪个地址?

    我正在计算 CCFG 的 CRC,方法与我对应用程序部分的计算方法相同(使用 calcCrcLikeChip 函数)。

    对我来说是对的。

    您能告诉我如何提取 CCFG 文件的 CRC 吗?

    CRC 位于 CCFG 区域的末尾(被存储在4个字节上)。

    我能否从 CCS 生成的十六进制文件的 CCFG 部分中提取它,或者我是否必须从闪存的芯片组中转储 CCFG?

    必须从闪存芯片组中提取它。 实际上、CCS 工具链不会填充前面提到的 CRC (它在闪存时填充)。 我们正在制定一个更好的解决方案以供参考、但该解决方案尚未提供。
    目前、CCFG 范围应为[0x4E020010、0x4E02074B]、其 CRC 应位于 地址0x4E02074C。

    在肯定的情况下,您能指出如何转储 CCFG 以及我可以找到预期 CRC 的哪个部分吗?

    您可以使用 Uniflash 转储器件闪存的内容。 确保选择前面提到的 CCFG 区域。

    另一个问题,如果我使用 CMD_DOWNLOAD 命令而不是 donwwload_crc 芯片组是否期望 CMD CRC32? 或者我是否可以在没有 CRC 校验的情况下完成重新编程过程?

    这取决于具体指的是哪个步骤、但答案可能是否定的。 请参阅 CC23xx SimpleLink 无线 MCU 的技术参考手册

    我希望这将有所帮助、

    此致、