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:
很高兴您解决了问题!
可以分享一下您是如何解决的吗?
,
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 。