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.
通过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); }
App_OADCallback中的消息不应该都执行到吗?
请问您的 msg 是如何定义的,程序需要满足 Switch 语句里面的 case 事件才会执行相应的 case。
去掉了OAD_APP_ONCHIP宏定义,现在APP端显示卡在Starting FW Update
正在跟进此问题,您可以先参考一下这个和您问题相似的旧贴,这边有新进展会立刻回复您。
谢谢您的经验分享!
需要 MCUBoot 和 on-chip OAD image 项目都刷写到设备的 Flash 。
一个是当前正在运行的固件镜像,一个是新的 OAD 的固件镜像。
在 OAD 更新时,设备会下载这个新版本的固件,然后将其存储在另一个区域,等待安装完成后启用。
因此需要两个 NVS 存储空间。
需要 MCUBoot 和 on-chip OAD image 项目都刷写到设备的 Flash 。
有一点比较奇怪,persistent示例中OAD_APP_ONCHIP控制的代码只有一个reset,关掉这个宏完整的OAD流程代码才放开。
您尝试过只在 persistent 关闭 reset 吗?
这个没有尝试
方便看下 OAD_APP_ONCHIP 的代码吗?
你可以直接到SDK中查看ti/bleapp/profiles/oadoad_profile.c
您好,
查看 oad_profile.c 文件,似乎在调用 oadProfileCB() 函数时发生向应用程序传递消息。您可以在调用 oadProfileCB() 且参数不是 OAD_PROFILE_MSG_RESET_REQ 的代码行中添加断点吗?我的猜测是发送了其他消息的代码没有到达应用程序。
理论上OAD_APP_ONCHIP 是不会屏蔽 App_OADCallback 回调的。
basic_ble 就只进行 reset,剩余的 OAD 过程都是在 persistent app 里完成的。
你说的是对的。
我看了下代码,oad_profile.c 里表现出来的就是如果定义了 OAD_APP_ONCHIP 就只有 reset。
关闭 OAD_APP_ONCHIP 才会有 update。