CMD0x08_Request_UpdateSend.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "iap.h"
  2. #include "CommandsDefine.h"
  3. #include "ProjectConfig.h"
  4. #include "usart.h"
  5. #include "string.h"
  6. #include "Helper.h"
  7. /* 进行更新,传送更新代码
  8. 正确的响应:烧写传过来的代码
  9. 发送格式:
  10. 包起始标识
  11. +CMD0x06_Request_UpdateSend
  12. +[2字节的数据长度,=200或最后一帧的数据个数]
  13. +200字节的程序代码
  14. +包尾标识
  15. 返回:握手包。
  16. 包起始标识
  17. +CMD0xC0_Readback_CMDOK
  18. +[2字节的数据长度,=1]
  19. +CMD0x06_Request_UpdateSend
  20. +包尾标识
  21. 异常:如果程序在APP中,可能返回错误 Error0x01_CannotRunAtApp
  22. */
  23. void CMD0x08_Request_UpdateSend_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
  24. {
  25. #ifdef RUNNING_WHERE_AT_BOOT
  26. if(Updating==0)
  27. {
  28. Command_SendbackErrorMessage(Error0x06_CMD_UpdateNotStart,1);
  29. return ;
  30. }
  31. u8 responseResult=0;
  32. //write at
  33. u32 flashContentBytes=dataLen - sizeof(u32)-sizeof(u32);//format data...+offsetBytes[4bytes]+crcCode[4bytes]
  34. u32 offsetStartIndex=flashContentBytes;
  35. u32 offsetBytes=pData[offsetStartIndex] + (pData[offsetStartIndex+1]<<8) + (pData[offsetStartIndex+2]<<16)+ (pData[offsetStartIndex+3]<<24);;
  36. //Crc
  37. u32 CRCStartIndex = flashContentBytes + sizeof(u32);
  38. u32 getCRC32 = pData[CRCStartIndex] + (pData[CRCStartIndex+1]<<8) + (pData[CRCStartIndex+2]<<16)+ (pData[CRCStartIndex+3]<<24);
  39. u32 calcCRC32 = Helper_CRC_CalcBlockCRC8(pData,CRCStartIndex);
  40. if(getCRC32!=calcCRC32)
  41. {
  42. responseResult=0xff;
  43. }
  44. else
  45. {
  46. if (UpdateWhat==RUNNING_AT_APP)
  47. iap_write_appbin_at_tempArea(offsetBytes,pData,flashContentBytes);
  48. else
  49. iap_write_bootbin(offsetBytes,pData,flashContentBytes);
  50. UpdateRecvedContentBytes+=flashContentBytes;
  51. responseResult=0x00;
  52. }
  53. //response!!!
  54. u8 dataBytes=1;
  55. USART_WR_BUF[0]=responseResult;
  56. USART6_Send(CMD0x08_Request_UpdateSend,dataBytes,bIsContentBitInverted_SendBack);
  57. #else
  58. Command_SendbackErrorMessage(Error0x01_CannotRunAtApp,1);
  59. #endif
  60. }