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.

[参考译文] CC2745R10-Q1:跳转到闪存中的特定时隙

Guru**** 2555630 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1570858/cc2745r10-q1-jumping-to-a-particular-slot-in-flash

器件型号:CC2745R10-Q1


工具/软件:

我在 SSB 槽位中刷写了一个用户特定的引导加载程序映像、版本设置为 1.0。 应用程序映像在主槽位中刷写、版本设置为 2.0。 根据安全启动的功能、带有更高版本的映像会启动(在本例中为应用程序映像)。 但是、现在我想进入 SSB 插槽。

我尝试使用以下代码执行从应用程序到引导加载程序的跳转:

/**************************************************************************************************** /

//获取应用程序的初始堆栈指针
uint32_t app_sp =*(volatile uint32_t *) BL_START_ADDR;

//获取应用程序的复位处理程序地址
uint32_t app_reset_handler =*(volatile uint32_t *)(BL_START_ADDR + 4)

//将矢量表偏移寄存器设置为应用程序的基址
SCB->VTOR = BL_START_ADDR;

//存储器和指令同步障碍
//这些确保 VTOR 更新在跳转之前完成。
__ DSB ();
__ isb ();

//禁用所有中断以防止冲突。
__disable_irq()

//将主栈指针 (MSP) 设置为应用程序的栈指针。
__ set_msp(app_sp );

//跳转到应用程序的复位处理程序。
void (* APP_JUMP)(void)=(void (*)(void)) APP_RESET_HANDLER;
app_jump()

/**************************************************************************************************** /

执行此代码时、即使我更改引导加载程序地址的寄存器、器件也会再次重新引导进入应用程序(版本号更高)。

我还尝试使用 ROM API:  

/*************************************************** /
HapiSbSetId (3);//引导至 SSB
/*************************************************** /
但它无法按预期工作。  

您能否回顾此流程并对潜在问题提供任何见解、或建议执行跳跃的替代步骤?
注意:即使从引导加载程序跳转到应用程序也无法按预期工作。

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

    您好:

    为了实现这一点、请参阅随附的工程。  

    您会发现主槽位和辅助槽位实际上不是安全启动映像、从 ROM 的角度来看、这意味着没有有效映像、并且每次都会忽略 SSB。 这意味着您必须自己进行图像验证、但它应该会让您到达一个可以正常工作的地方。 此外、还提供了用于跳转映像的代码(请参阅和阅读工程中包含的 README.md 文件)。 希望这能有所帮助!

    e2e.ti.com/.../6036.SSB_5F00_Always_5F00_Boot.zip

    此致、

    Nima Behmanesh