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.

[参考译文] CC2652R7:CC2652R7 -通过 UART 升级固件

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1360212/cc2652r7-cc2652r7---fw-upgrade-through-uart

器件型号:CC2652R7

您好  

请参阅论坛链接、提问是否继续这一问题、

论坛链接: https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1304759/cc2652r7-firmware-upgrade-over-uart

 用于固件升级的 SDK: ti154stack_linux_x64_4_40_00_03

使用的示例代码: cc13xx-sbl

Od 平台: Linux Ubuntu

接口:UART

芯片组 : CC2652R7

用于升级固件的主机: Linux 平台处理器

客户端下载固件: CC2652R7芯片组

在 MCU 侧、我们使用 DIO2作为 Rx、使用 DIO3作为 Tx。 硬件连接正确。 当我们尝试将 FW 从 Linux 处理器上传到 MCU 时、我们会收到一个 NACK 用于擦除本身、如下图所示。

如图所示,我们总是收到51 (十六进制: 0x33 )用于擦除本身。 我们甚至无法 对其进行升级  

这可能是什么原因? 请在此处说明

 在"cc13xx-SBL"代码中检测到错误位置时的程序流程:  

Main -> eraseFlash -> eraseFlash -> CcDnld_flashEraseRange -> getCmdResponse (&devAck)

CcDnld_flashEraseRange 函数防御:  

Dnld_Status CcDnld_flashEraseRange (uint32_t startAddress、uint32_t byteCount、char * deviceType)
{
uint8_t eraseAddress[4];
uint32_t pageIdx;
uint32_t PageCount;
uint32_t retCode = Dnld_Status_Success;
Dnld_Dev_Ack devAck;
uint8_t devStatus;

uint32_t pagesize = CcDnld_getPageSize (deviceType);

PageCount = byteCount / pageSize;
if (byteCount % pagesize) PageCount ++;

for (pageIdx = 0;pageIdx < PageCount;pageIdx++)
{
/*构建有效载荷- 4B 地址(MSB 优先)*/
ui32ToByteArray (startAddress + pageIdx*(pagesize)、&eraseAddress[0]);
/*发送命令*/
if ((retCode = sendCmd (CCDNLD_CMD_SECTOR_ERASE Dnld_Status_Success、eraseAddress、4))!= C52)
{
printf ("E sndCmd %d \r\n、retCode);
返回 RetCode;

/*接收命令响应(ACK/NAK)*/
if ((retCode = getCmdResponse (&devAck))!= Dnld_Status_Success
{
printf ("E GetResp %d \r\n、retCode);
返回 RetCode;

if (devAck!= CCDNLD_DEVICE_ACK)
{
printf ("E devAck %d \r\n",devAck);
CSic Dnld_Status_Cmd_Error 返回案;

/*检查设备状态(如果页面已锁定,则闪存失败)*/
readStatus (&devStatus);
if (devStatus!= CCDNLD_CMD_RET_SUCCESS)
{
printf ("E devSts %d \r\n",devStatus);
CSic Dnld_Status_State_Error 返回案;

返回 RetCode;

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

    您好!

    CC2652R7是否处于引导加载程序模式?

    要进入引导加载程序、有一个应在器件复位时生效的特定引脚、然后器件将进入引导加载程序。
    这假设器件启用了该功能(请参阅 TRM: https://www.ti.com/lit/pdf/swcu192中的"10.1.2引导加载程序后门"部分

    谢谢。
    托比

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

    你好,托比  

    是的、C2652R7处于引导加载程序模式。 我们遵守了它。 我们仍然收到这个 NACK。 请提供相关的有用信息。 这里很棒

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

    你好,托比  

    是的、CC2652R7处于引导加载程序模式。 我们确认了。 我们仍然收到这个 NACK。 请提供相关的有用信息。 我们在这里

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

    我会对此进行研究、并在3个工作日内提供更新。

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

    好的、请尽快提供。 如果您能浏览本次演示的

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

    其他人以前已经注意到 CC2652R7中的此问题(例如: https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1097848/cc2652r7-serial-upgrade-problem)、我认为这与之相关。

    由于代码显示使用连续 SECTOR_ERASE、我想知道其中是否有任何一个成功。

    您是否可以尝试在此处添加额外的 printf 语句?

    if ((retCode = sendCmd (CCDNLD_CMD_SECTOR_ERASE Dnld_Status_Success、eraseAddress、4))!= C52)
    {
    printf ("E sndCmd %d \r\n、retCode);
    返回 RetCode;

    printf ("eraseAddr 是:%d、地址是"、startAddress + pageIdx*(pagesize));