CMD0x05_Request_UpdateStart.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "iap.h"
  2. #include "CommandsDefine.h"
  3. #include "ProjectConfig.h"
  4. #include "Helper.h"
  5. #include "usart.h"
  6. #include "sys.h"
  7. /* 发起开始更新
  8. 正确的响应:从App跳转到Boot.如果已经在Boot中,返回错误Error0x03_AlreadyAtBoot
  9. 发送格式:
  10. 包起始标识
  11. +CMD0x05_Request_UpdateStart
  12. +[2字节的数据长度,=00]
  13. +包尾标识
  14. 返回:无。在发起此命令后,应用端应该在稍后检查是否运行在Boot,然后才开始更新
  15. */
  16. void CMD0x05_Request_UpdateStart_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
  17. {
  18. #ifdef RUNNING_WHERE_AT_BOOT
  19. Updating=0;
  20. u8 bOk=1;
  21. u8 dataBytes=1;
  22. if (bIsContentBitInverted_SendBack)
  23. dataBytes*=2;
  24. if (bIsContentBitInverted_Recv)
  25. {
  26. if (!Helper_CheckInvertBytesIsRegist(pData,dataLen))
  27. {
  28. bOk=0;
  29. goto response;
  30. }
  31. }
  32. if (dataLen<2)
  33. {
  34. bOk=0;
  35. goto response;
  36. }
  37. UpdateWhat=pData[0];//
  38. UpdateVerifyStage1OK=0;
  39. UpdateVerifyStage2OK=0;
  40. UpdateRecvedContentBytes=0;
  41. if (UpdateWhat!=RUNNING_AT_APP)
  42. {
  43. if (pData[1]==0x00)
  44. {
  45. iap_load_app(0x080c0000);//执行FLASH APP代码
  46. }
  47. }
  48. Updating =1;
  49. //response!!!
  50. response:
  51. USART_WR_BUF[0] = bOk;
  52. USART6_Send(CMD0x05_Request_UpdateStart,dataBytes,bIsContentBitInverted_SendBack);
  53. #else
  54. //清除APP有效位
  55. iap_clear_appstate();
  56. //重启
  57. __set_FAULTMASK(1);
  58. NVIC_SystemReset();
  59. #endif
  60. }