TI中文支持网
TI专业的中文技术问题搜集分享网站

LP-EM-CC2340R5: on-chip OAD卡在Device reset

Part Number:LP-EM-CC2340R5

通过Add local file添加了要更新的firmware,点击update按钮之后打印里只有OAD_PROFILE_MSG_RESET_REQ一条信息。

查看OAD代码,其他的消息都被OAD_APP_ONCHIP屏蔽了。App_OADCallback中的消息不应该都执行到吗?

OADProfile_AppCommand_e App_OADCallback(OADProfile_App_Msg_e msg)
{OADProfile_AppCommand_e cmd = OAD_PROFILE_PROCEED;switch(msg){case OAD_PROFILE_MSG_REVOKE_IMG_HDR:{MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE1, 0, "App_OADCallback: Revoke image header");cmd = OAD_PROFILE_PROCEED;break;}case OAD_PROFILE_MSG_NEW_IMG_IDENDIFY:{MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE1, 0, "App_OADCallback: New image identify");cmd = OAD_PROFILE_PROCEED;break;}case OAD_PROFILE_MSG_START_DOWNLOAD:{MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE1, 0, "App_OADCallback: Download new image");cmd = OAD_PROFILE_PROCEED;break;}case OAD_PROFILE_MSG_FINISH_DOWNLOAD:{MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE1, 0, "App_OADCallback: Download complete");cmd = OAD_PROFILE_PROCEED;break;}case OAD_PROFILE_MSG_RESET_REQ:{MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE1, 0, "App_OADCallback: Reset device");cmd = OAD_PROFILE_PROCEED;break;}}return (cmd);
}

Xuefeng:

去掉了OAD_APP_ONCHIP宏定义,现在APP端显示卡在Starting FW Update。

,

Yolande Wang:

Xuefeng 说:App_OADCallback中的消息不应该都执行到吗?

请问您的 msg 是如何定义的,程序需要满足 Switch 语句里面的 case 事件才会执行相应的 case。

Xuefeng 说:去掉了OAD_APP_ONCHIP宏定义,现在APP端显示卡在Starting FW Update

正在跟进此问题,您可以先参考一下这个和您问题相似的旧贴,这边有新进展会立刻回复您。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1267542/cc2340r5-on-chip-oad/4817969?tisearch=e2e-sitesearch&keymatch=OAD#4817969

,

Xuefeng:

目前已经完成下载和写入,谢谢。

,

Yolande Wang:

Clap很高兴您解决了问题!

可以分享一下您是如何解决的吗?

,

Xuefeng:

因为需要分别保存两部分image,所以需要分派两个NVSINTERNAL,默认的不变,增加一个。

,

Yolande Wang:

谢谢您的经验分享!

需要 MCUBoot 和 on-chip OAD image 项目都刷写到设备的 Flash 。

一个是当前正在运行的固件镜像,一个是新的 OAD 的固件镜像。

在 OAD 更新时,设备会下载这个新版本的固件,然后将其存储在另一个区域,等待安装完成后启用。

因此需要两个 NVS 存储空间。

,

Xuefeng:

Yolande Wang 说:需要 MCUBoot 和 on-chip OAD image 项目都刷写到设备的 Flash 。

有一点比较奇怪,persistent示例中OAD_APP_ONCHIP控制的代码只有一个reset,关掉这个宏完整的OAD流程代码才放开。

,

Yolande Wang:

Xuefeng 说:查看OAD代码,其他的消息都被OAD_APP_ONCHIP屏蔽了。

您尝试过只在 persistent 关闭 reset 吗?

方便看下 OAD_APP_ONCHIP 的代码吗?

,

Xuefeng:

Yolande Wang 说:您尝试过只在 persistent 关闭 reset 吗?

这个没有尝试

Yolande Wang 说:方便看下 OAD_APP_ONCHIP 的代码吗?

你可以直接到SDK中查看ti/bleapp/profiles/oadoad_profile.c

,

Yolande Wang:

您好,

查看 oad_profile.c 文件,似乎在调用 oadProfileCB() 函数时发生向应用程序传递消息。您可以在调用 oadProfileCB() 且参数不是 OAD_PROFILE_MSG_RESET_REQ 的代码行中添加断点吗?我的猜测是发送了其他消息的代码没有到达应用程序。

理论上OAD_APP_ONCHIP 是不会屏蔽 App_OADCallback 回调的。

basic_ble 就只进行 reset,剩余的 OAD 过程都是在 persistent app 里完成的。

,

Xuefeng:

persistent app使用的就是SDK里的oad_profile.c。

OAD_APP_ONCHIP宏控制的内容只有reset,你可以再确认下。

,

Yolande Wang:

对于您的疑惑我需要再确认下

,

Yolande Wang:

你说的是对的。

我看了下代码,oad_profile.c 里表现出来的就是如果定义了 OAD_APP_ONCHIP 就只有 reset。

关闭 OAD_APP_ONCHIP 才会有 update。

,

Xuefeng:

所以我想要update服务只能使用OAD_APP_OFFCHIP吗?

,

Yolande Wang:

是的,看 OAD_APP_ONCHIP 就只有 reset 。

else 就执行 OAD_APP_OFFCHIP ,进行 Update 。

赞(0)
未经允许不得转载:TI中文支持网 » LP-EM-CC2340R5: on-chip OAD卡在Device reset
分享到: 更多 (0)