工具/软件:
尊敬的 E2E 团队:
我们正在尝试修改 usb_tick_update 示例代码、以无线升级固件(FOTA)、但遗憾的是、应用程序代码未在执行
请在下面找到我们设置的详细信息、
->在引导加载程序代码中 、以下端口被激活、
- UART6. :调试
- SSI3 :串行闪存(8 MB)
->串行闪存用于存储从 FTP 服务器下载的固件二进制文件
->在应用程序中成功地将固件存储在串行闪存中
->然后在应用 程序中使用以下代码执行复位操作
HWREG (FORCE_UPDATE_ADDR)= u32_updateResource;//此处提供了固件升级资源信息
HWREG (NVIC_APINT)= NVIC_APINT_VECTKEY | NVIC_APINT_SYSRESETREQ;
(*(void (*)(void))(*(uint32_t *) 0x2C)))();
->在引导加载程序代码中、串行闪存数据(用于固件升级)读取以以下方式完成
uint32_t ui32Data = 0;
int16_t i16_dataByte = 0;
static int i32_bytesReadCount = firmware_file_size;
for (i16_dataByte = 0;i16_dataByte < sf_data_chunk;i16_dataByte++)
{
SSIDataPut (SSI3_BASE、(uint32_t) 0xFF);
SSIDataGet (SSI3_BASE、&ui32Data);
G_ui8SectorBuf[i16_dataByte]=(uint8_t)(ui32Data & 0xFF);
}
G_ui8SectorBuf[sf_data_Block]= 0;
i32_bytesReadCount -> sf_data_chunk;
if (i32_bytesReadCount <= 0)
返回0;
暴露
返回 i32_bytesReadCount;
通过 UART 调试我们观察到的结果、
->所有必要的外设初始化都成功
-> 栈指针 和 程序计数器 发现值有效
-> 调用 CallApplication (ui32StartAddr) API 时、
- 程序被卡住
- 不执行应用代码、即使在控制器复位和电源重启操作后也是如此
- 应用代码起始地址 : 0x00008000
- 固件文件名 : PROJECTBIN
- 固件最大文件大小 : 9000000
- 强制更新 ADDR : 0x20004000
- 闪存大小 : 1 MB (1024 * 1024)
请通过在固件升级后运行应用程序代码来帮助解决此问题
谢谢