目的:了解wince下AGX平台的mcu升级过程,然后移植到android下升级!(X代表某个代号)
一 App请求升级过程
ARM发送升级请求0xFF00 //NAVI发送升级请求,MCU收到后准备发送数据
↓
ARM收到0x0605 //MCU准备重启
↓
ARM发送0x0606给MCU重启
↓
ARM收到SYS_POWEROFF
↓
重启
↓
ComClsUI::Hand发送握手信息0x0602
↓
收到握手成功0x0604
↓
ARM发送0xFE03 确认导航可以进行CB软件升级 (每次上电都会发送。。如果没有反馈。。就直接进入系统界面)
↓
收到0xFF00 //CB发送升级请求,NAVI收到后准备发送数据
↓
反初始化串口
↓
MCUUpdate()启动升级软件CBUpdate.exe
接下来就是CBUpdate升级过程执行流了
二 CBUpdate升级过程执行流如下
创建CBUpdateThread线程
↓
实例化CUpdateManager对象
↓
实例化ComClsUI对象
↓
打开COM4 波特率设置为115200
↓
创建ComClsUI::Hand,ComClsUI::Work,ComClsUI::CanMsgThread线程处理串口数据
↓
ComClsUI::Hand发送握手信息0x0602
↓
收到 0xDD00 设定6秒定时器请求MCU重启 0x0501 //其中0xDD00 为8900与CB的串口通信异常信息
↓
再次发送ComClsUI::Hand发送握手信息0x0602
↓
收到0x0604 //0x0604给导航握手 表示握手成功
↓
开始CBUpdateStart
↓
创建CUpdateManager::UpdateThread线程
↓
获取RdDnl.upg文件的总帧数GetFileLineTotals
↓
发送帧SendFrameData ->CANSendMsgToCB(m_UpdateFrameID,(char*)frameBuf,len);
↓
mcu反馈0xFF01 (下一帧)取消设定6秒定时器请求MCU重启 0x0501 //CB升级每一帧确认
↓
发送下一帧CANSendMsgToCB(m_UpdateFrameID,(char*)frameBuf,len);
↓
循环
↓
mcu反馈0xFF03 //升级完成信息
↓
ARM收到SYS_POWEROFF 消息
↓
MCU 重启Reset