Bootloader.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Bootloader.c
  3. *
  4. * Created on: Jul 10, 2019
  5. * Author: parkyj
  6. */
  7. #include "Bootloader.h"
  8. #include "CRC16.h"
  9. #include "flash.h"
  10. //Blueprotocol_t * UpdateFiledata;
  11. extern uint8_t Flash_write(uint8_t* data); // ?占쏙옙湲고븿?占쏙옙
  12. extern etError STH30_CheckCrc(uint8_t *data, uint8_t nbrOfBytes, uint8_t checksum);
  13. uint16_t updatecnt = 0;
  14. /***
  15. * Header Check Function
  16. * ***/
  17. #define Bluecell_BootStart 0x0b
  18. uint8_t BootStartdata[6] = {0xbe,Bluecell_BootStart,0x03,4,0,0xeb};
  19. void Firmware_BootStart_Signal(){
  20. BootStartdata[bluecell_crc] = STH30_CreateCrc(&BootStartdata[bluecell_type],BootStartdata[bluecell_length]);
  21. Uart1_Data_Send(&BootStartdata[bluecell_stx],BootStartdata[bluecell_length] + 3);
  22. }
  23. uint8_t AckData_Buf[6] = {0xbe,FirmwareUpdataAck,0x03,5,0,0xbe};
  24. void FirmwareUpdateStart(uint8_t* data){
  25. uint8_t ret = 0,crccheck = 0;
  26. crccheck = STH30_CheckCrc(&data[bluecell_type],data[bluecell_length],data[data[bluecell_length] + 1]);
  27. if(crccheck == NO_ERROR){
  28. AckData_Buf[bluecell_type] = FirmwareUpdataAck;
  29. if(data[bluecell_type] == 0xDD || data[bluecell_type] == 0xEE)//Start Firmware byte
  30. ret = Flash_write(&data[0]);
  31. if(ret == 1)
  32. AckData_Buf[bluecell_type] = FirmwareUpdataNak;
  33. }else{
  34. for(uint8_t i = 0; i < data[bluecell_length] + 3; i++)
  35. printf("%02x ",data[i]);
  36. printf("Check Sum error \n");
  37. AckData_Buf[bluecell_type] = FirmwareUpdataNak;
  38. }
  39. AckData_Buf[bluecell_crc] = STH30_CreateCrc(&AckData_Buf[bluecell_type],AckData_Buf[bluecell_length]);
  40. if(data[bluecell_type] != 0xEE && data[bluecell_type] != Bluecell_Reset){
  41. Uart1_Data_Send(&AckData_Buf[bluecell_stx],AckData_Buf[bluecell_length] + 3);
  42. }
  43. if(data[bluecell_type] == 0xEE)
  44. printf("update Complete \n");
  45. }