123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #include "iap.h"
- #include "CommandsDefine.h"
- #include "ProjectConfig.h"
- #include "usart.h"
- #include "string.h"
- #include "Helper.h"
- /* 进行更新,传送更新代码
- 正确的响应:烧写传过来的代码
- 发送格式:
- 包起始标识
- +CMD0x06_Request_UpdateSend
- +[2字节的数据长度,=200或最后一帧的数据个数]
- +200字节的程序代码
- +包尾标识
-
- 返回:握手包。
- 包起始标识
- +CMD0xC0_Readback_CMDOK
- +[2字节的数据长度,=1]
- +CMD0x06_Request_UpdateSend
- +包尾标识
- 异常:如果程序在APP中,可能返回错误 Error0x01_CannotRunAtApp
- */
- void CMD0x0C_Request_UpdateSwitch_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
- {
- #ifdef RUNNING_WHERE_AT_BOOT
- u8 responseResult=0;
- //Check point 1
- if(Updating==0)
- {
- responseResult=1;
- }
- //check point 2
- if ((responseResult==0) && (UpdateVerifyStage1OK==0))
- responseResult=1;
- if (responseResult==0)
- {
- u32 data;
- u32 u32Count=(UpdateRecvedContentBytes+sizeof(u32)-1)/sizeof(u32);
- for(int i=0;i<u32Count;i++)
- {
- data=(*(vu32*)(FLASH_ADDR_UPDATE_TEMP_AREA+i*sizeof(u32)));
- STMFLASH_Write((FLASH_ADDR_APP+i*sizeof(u32)),&data,1);
- }
- }
- //response!!!
- u8 dataBytes=1;
- USART_WR_BUF[0]=responseResult;
- USART6_Send(CMD0x0C_Request_UpdateSwitch,dataBytes,bIsContentBitInverted_SendBack);
- #else
- Command_SendbackErrorMessage(Error0x01_CannotRunAtApp,1);
- #endif
- }
|