MBIC_Bootloader.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. /*
  2. * MBIC_Bootloader.c
  3. *
  4. * Created on: 2020. 5. 18.
  5. * Author: parkyj
  6. */
  7. #include <stdio.h>
  8. #include <stdint.h>
  9. #include <stdbool.h>
  10. #include "main.h"
  11. #include "MBIC_Bootloader.h"
  12. #include "flash.h"
  13. #include "CRC.h"
  14. #include "uart.h"
  15. #include "eeprom.h"
  16. extern bool EraseInit;
  17. extern uint8_t Bank_Flash_write(uint8_t* data,uint32_t StartBankAddress);
  18. extern void MBIC_DataErase_Func(uint8_t bank_num);
  19. extern uint8_t MBIC_APIFLASH_Func(uint8_t* data,uint32_t size,uint8_t bank_num);
  20. extern void MBIC_DataBankWrite(uint8_t BankNum);
  21. extern void DLI_FRBT_ONOFF_Set(bool);
  22. extern uint8_t DataWrite[sizeof(BLUESTATUS_st)];
  23. BootLoaderDataCheck_st MBIC_FileDataCheck(uint8_t* data){
  24. BootLoaderDataCheck_st ret = {0,0,false};
  25. int8_t MBIC_Mark[9] = "JT-NRDAS ";
  26. int8_t MBIC_FileName1[] = "jhfs-mbic-nrdas-v";
  27. int8_t MBIC_FileName2[] = "v00.00.04.mbc";
  28. uint8_t MBIC_type = 0x20;
  29. uint8_t MBIC_FileType = 0x00;
  30. int i = 0;
  31. /***
  32. MARK Check
  33. ***/
  34. for(i = MARK_START_POSITION; i < TYPE_START_POSITION; i++){
  35. if(MBIC_Mark[i] != data[i]){
  36. printf("Data Diff \r\n");
  37. return ret;
  38. }else{
  39. printf("MARK Data Success \r\n");
  40. }
  41. }
  42. /***
  43. TYPE Check
  44. ***/
  45. for(i = TYPE_START_POSITION; i < FILE_TYPE_START_POSITION; i++){
  46. if(MBIC_type != data[i]){
  47. printf("Data Diff \r\n");
  48. return ret;
  49. }
  50. else
  51. printf("Type Data Success \r\n");
  52. }
  53. /***
  54. File Type Check
  55. ***/
  56. for(i = FILE_TYPE_START_POSITION; i < VERSION_START_POSITION; i++){
  57. if(MBIC_FileType != data[i]){
  58. printf("Data Diff \r\n");
  59. return ret;
  60. }
  61. else
  62. printf("File Type Data Success \r\n");
  63. }
  64. /***
  65. Version Check
  66. ***/
  67. for(i = VERSION_START_POSITION; i < FILENAME_START_POSITION; i++){
  68. printf("Version Data Success Version %x\r\n",data[i]);
  69. }
  70. /***
  71. File Name Check
  72. ***/
  73. for(i = FILENAME_START_POSITION; i < 30; i++){
  74. if(MBIC_FileName1[i-14] != data[i]){
  75. printf("Data Diff \r\n");
  76. printf("MBIC_FileName1[%d] : %x, data[%d] : %x\r\n",i - 14,MBIC_FileName1[i - 14],i,data[i]);
  77. return ret;
  78. }
  79. else
  80. printf("File Name Data Success %c\r\n",data[i]);
  81. }
  82. for(i = i; i < 43; i++){
  83. if(MBIC_FileName2[i-30] != data[i]){
  84. // printf("Data Diff %c\r\n",data[i]);
  85. // printf("MBIC_FileName2[%d] : %x, data[%d] : %x\r\n",i - 30,MBIC_FileName2[i - 30],i,data[i]);
  86. // return ret;
  87. }
  88. else
  89. printf("File Name Data Success %c\r\n",data[i]);
  90. }
  91. for(i = i; i < 49; i++){
  92. printf("Creation Success %x\r\n",data[i]);
  93. }
  94. for(i = i; i < 55; i++){
  95. printf("Creation Success data[%d] : %x\r\n",i,data[i]);
  96. }
  97. printf(" %d",data[i++]);
  98. printf(" -%02d",data[i++]);
  99. printf(" -%02d",data[i++]);
  100. printf(" -%02d",data[i++]);
  101. printf(" -%02d",data[i++]);
  102. printf(" -%02d\r\n",data[i++]);
  103. ret.Length = ((data[i++] << 8) & 0xFF00);
  104. ret.Length += (data[i++]);
  105. printf("data[%d] : %d\r\n",i - 1,ret.Length);
  106. printf("data[%d] : %d\r\n",i - 1,ret.Length);
  107. ret.Crcchk = ((data[i++] << 8) & 0xFF00);
  108. ret.Crcchk += (data[i++]);
  109. /*ONLY DATA CRC*/
  110. printf("CRC_H[%d] : %x\r\n",i,ret.Crcchk);
  111. printf("CRC_L[%d] : %x\r\n",i,ret.Crcchk);
  112. ret.FileChk = true;
  113. return ret;
  114. }
  115. /*
  116. MBIC Basic Header merge function
  117. Data : Response Data
  118. Length : Response Data Length
  119. CRCINDEX : CRC INDEX Number
  120. */
  121. uint8_t* MBIC_HeaderMergeFunction(uint8_t* data,uint16_t Length )
  122. {
  123. uint8_t ret[Length + 22 + 3];/*Data Length + Header Length + Tail Length*/
  124. uint16_t CRCData = CRC16_Generate(data,Length);
  125. /*CRC Create*/
  126. ret[MBIC_PAYLOADSTART + Length + 0] = ((CRCData & 0xFF00) >> 8);
  127. ret[MBIC_PAYLOADSTART + Length + 1] = ((CRCData & 0x00FF));
  128. ret[MBIC_PAYLOADSTART + Length + 2] = 0x03;
  129. /*Data Mark Create*/
  130. ret[MBIC_PREAMBLE_0] = MBIC_PREAMBLE0;
  131. ret[MBIC_PREAMBLE_1] = MBIC_PREAMBLE1;
  132. ret[MBIC_PREAMBLE_2] = MBIC_PREAMBLE2;
  133. ret[MBIC_PREAMBLE_3] = MBIC_PREAMBLE3;
  134. /*Data Subid Create*/
  135. ret[MBIC_SUBUID_0] = MBIC_SUBUID0;
  136. ret[MBIC_SUBUID_1] = MBIC_SUBUID1;
  137. ret[MBIC_RCODE_0] = data[MBIC_RCODE_0];
  138. ret[MBIC_TRID_0] = data[MBIC_TRID_0];
  139. ret[MBIC_TRID_1] = data[MBIC_TRID_1];
  140. ret[MBIC_SEQSUM_0] = data[MBIC_SEQSUM_0];
  141. ret[MBIC_TTL_0] = data[MBIC_TTL_0];
  142. ret[MBIC_TIME_0] = data[MBIC_TIME_0];
  143. ret[MBIC_TIME_1] = data[MBIC_TIME_1];
  144. ret[MBIC_TIME_2] = data[MBIC_TIME_2];
  145. ret[MBIC_TIME_3] = data[MBIC_TIME_3];
  146. ret[MBIC_TIME_4] = data[MBIC_TIME_4];
  147. ret[MBIC_TIME_5] = data[MBIC_TIME_5];
  148. ret[MBIC_ERRRESPONSE_0] = MBIC_ERRRESPONSE;
  149. ret[MBIC_CMD_0] = data[MBIC_CMD_0];
  150. ret[MBIC_LENGTH_0] = (Length & 0xFF00) >> 8;
  151. ret[MBIC_LENGTH_1] = Length & 0x00FF;
  152. ret[MBIC_HEADERCHECKSUM_0] = Chksum_Create(ret);
  153. /*Data Move*/
  154. // for(int i = 0; i < Length; i++){
  155. // data[MBIC_PAYLOADSTART + i] = data[i];
  156. // }
  157. /*
  158. MBIC Header Data input
  159. */
  160. for(int i = 0; i < MBIC_HEADER_SIZE; i++){
  161. if(i == MBIC_CMD_0) /*cmd exception*/
  162. continue;
  163. data[i] = ret[i];
  164. }
  165. /*
  166. MBIC Tail Data input
  167. */
  168. for(int i = MBIC_HEADER_SIZE + Length; i < MBIC_HEADER_SIZE + MBIC_TAIL_SIZE + Length; i++){
  169. data[i] = ret[i];
  170. }
  171. // for(uint16_t i = 0; i < Length; i ++)
  172. // ret[MBIC_PAYLOADSTART + i] = data[i];
  173. // for(int i = 0; i < Length; i++)
  174. // printf("MBIC : %x \r\n",data[i]);
  175. return data;
  176. }
  177. extern uint32_t MBIC_Address;
  178. uint8_t MBIC_Resp[2048];
  179. void MBIC_Bootloader_FirmwareUpdate(uint8_t* data){
  180. uint8_t MBIC_DownLoadData[0xFFFF];
  181. uint8_t cmd = data[MBIC_CMD_0];
  182. static uint8_t Download_Option = 0;
  183. uint16_t index = 0;
  184. static uint32_t Curr_Download_DataIndex = 0;
  185. static uint32_t Prev_Download_DataIndex = 0;
  186. uint32_t TotalFrame = 0;
  187. uint32_t CurrFrame = 0;
  188. static uint32_t prevFrame = 0xFF;
  189. uint8_t* tmpstr;
  190. uint16_t DataLength = 0;
  191. uint16_t Crcret = 0;
  192. uint16_t RecvCrc = 0;
  193. uint32_t i = 0 ;
  194. int32_t FirmFile_Length = 0;
  195. uint32_t CurrApiAddress = 0,Bank1Address=0,Bank2Address = 0;
  196. static uint8_t BankNum = 0;
  197. static bool CRCERR = false;
  198. CurrApiAddress = FLASH_MBICUSER_START_ADDR;
  199. Bank1Address = FLASH_USER_BANK1_START_ADDR;
  200. Bank2Address = FLASH_USER_BANK2_START_ADDR;
  201. uint8_t* Currdata = (uint8_t*)CurrApiAddress;
  202. uint8_t* Bank1data = (uint8_t*)Bank1Address;
  203. uint8_t* Bank2data = (uint8_t*)Bank2Address;
  204. uint8_t* pdata;
  205. // printf("RX");
  206. // for(int i = 0; i < 128; i++)
  207. // printf("%c",*data++);
  208. switch(cmd){
  209. case MBIC_Notice_REQ:
  210. EraseInit = false;
  211. CRCERR = false;
  212. Download_Option = 0;
  213. Curr_Download_DataIndex = 0;
  214. Prev_Download_DataIndex = 0;
  215. prevFrame = 0xFF;
  216. printf("MBIC DOWNLOAD REQUEST \r\n");
  217. cmd = MBIC_Notice_RSP;
  218. CRCERR = false;
  219. bluecell_Currdatastatus.MBIC_Download_Auto_Restart_Set
  220. = Download_Option
  221. = data[MBIC_PAYLOADSTART + 4];
  222. printf("bluecell_Currdatastatus.MBIC_Download_Auto_Restart_Set : %d \r\n",bluecell_Currdatastatus.MBIC_Download_Auto_Restart_Set );
  223. /*TOTAL FRAME NUMBER*/
  224. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
  225. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 1];
  226. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
  227. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
  228. /*DOWNLOAD OPTION*/
  229. data[MBIC_PAYLOADSTART + index++] = 1;
  230. // data[MBIC_PAYLOADSTART + index++] = 0;//data[MBIC_PAYLOADSTART + 4];
  231. // for(int i =0; i < 33; i++)
  232. // printf("%x ",data[i]);
  233. // printf("\r\n");
  234. /*DOWNLOAD DELAY REQUEST*/
  235. data[MBIC_PAYLOADSTART + index++] = 3;
  236. /*DOWNLOAD Reserve*/
  237. data[MBIC_PAYLOADSTART + index++] = 0;
  238. data[MBIC_PAYLOADSTART + index++] = 0;
  239. data[MBIC_PAYLOADSTART + index++] = 0;
  240. data[MBIC_PAYLOADSTART + index++] = 0;
  241. data[MBIC_PAYLOADSTART + index++] = 0;
  242. data[MBIC_PAYLOADSTART + index++] = 0;
  243. if(bluecell_Currdatastatus.CPU_Current_Bank == HFR_BANK1){
  244. BankNum = HFR_BANK2;
  245. pdata = & bluecell_Currdatastatus.CPU_Bank2_Image_Version1;
  246. for(int i = 0; i < 41; i++)
  247. pdata[i] = 0xFF;
  248. }else{
  249. BankNum = HFR_BANK1;
  250. pdata = & bluecell_Currdatastatus.CPU_Bank1_Image_Version1;
  251. for(int i = 0; i < 41; i++)
  252. pdata[i] = 0xFF;
  253. }
  254. if(bluecell_Currdatastatus.MBIC_Download_Auto_Restart_Set != false){
  255. // printf("MBIC_Download_Auto_Restart_Set == true\r\n");
  256. if(bluecell_Currdatastatus.CPU_Current_Bank == HFR_BANK1_SEL){
  257. bluecell_Currdatastatus.CPU_Bank_Select = HFR_BANK2_SEL;
  258. // printf("Download Bank sel = Bank 2 \r\n");
  259. }else{
  260. bluecell_Currdatastatus.CPU_Bank_Select = HFR_BANK1_SEL;
  261. // printf("Download Bank sel = Bank 1 \r\n");
  262. }
  263. }
  264. // MBIC_DataBankWrite(1);
  265. //if()
  266. // MBIC_DataErase_Func(bluecell_Currdatastatus.CPU_Bank_Select);
  267. // HAL_Delay(10);
  268. // printf("ccc\r\n");
  269. break;
  270. case MBIC_Download_DATA_REQ:
  271. TotalFrame = data[MBIC_PAYLOADSTART + 0] << 24
  272. |data[MBIC_PAYLOADSTART + 1] << 16
  273. |data[MBIC_PAYLOADSTART + 2] << 8
  274. |data[MBIC_PAYLOADSTART + 3] << 0;
  275. CurrFrame = data[MBIC_PAYLOADSTART + 4] << 24
  276. |data[MBIC_PAYLOADSTART + 5] << 16
  277. |data[MBIC_PAYLOADSTART + 6] << 8
  278. |data[MBIC_PAYLOADSTART + 7] << 0;
  279. // MBIC_FileDataCheck(data);
  280. cmd = MBIC_Download_DATA_RSP;
  281. /*TOTAL FRAME NUMBER*/
  282. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
  283. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 1];
  284. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
  285. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
  286. /*Current Download Frame Number*/
  287. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
  288. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 5];
  289. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 6];
  290. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 7];
  291. Curr_Download_DataIndex = data[MBIC_PAYLOADSTART + 4] << 24;
  292. Curr_Download_DataIndex += data[MBIC_PAYLOADSTART + 5] << 16;
  293. Curr_Download_DataIndex += data[MBIC_PAYLOADSTART + 6] << 8;
  294. Curr_Download_DataIndex += data[MBIC_PAYLOADSTART + 7];
  295. /*DOWNLOAD Reserve*/
  296. data[MBIC_PAYLOADSTART + index++] = 0;
  297. data[MBIC_PAYLOADSTART + index++] = 0;
  298. data[MBIC_PAYLOADSTART + index++] = 0;
  299. data[MBIC_PAYLOADSTART + index++] = 0;
  300. #if 0 // PYJ.2020.06.24_BEGIN --
  301. for(i = 0; i < Curr_Download_DataIndex - Prev_Download_DataIndex; i++){
  302. MBIC_DownLoadData[i] = ;
  303. // printf("%02x ",MBIC_DownLoadData[i]);
  304. }
  305. #endif // PYJ.2020.06.24_END --
  306. // printf("Data End\r\n");
  307. // Bank_Flash_write(data,FLASH_USER_BANK1_START_ADDR);
  308. if(prevFrame != CurrFrame){
  309. MBIC_APIFLASH_Func(&data[MBIC_PAYLOADSTART + 12],1024,BankNum);
  310. }else{
  311. if(MBIC_Address < FLASH_USER_BANK2_START_ADDR)
  312. MBIC_Address = FLASH_USER_BANK2_START_ADDR + (CurrFrame * 1024);
  313. else
  314. MBIC_Address = FLASH_USER_BANK1_START_ADDR + (CurrFrame * 1024);
  315. printf("Frame Retry \r\n");
  316. }
  317. #if 0 // PYJ.2020.06.29_BEGIN --
  318. if(BankNum == HFR_BANK1){
  319. printf("Bank1data[MBIC_BOOT_MARK] : %d \r\n",Bank1data[MBIC_BOOT_MARK]);
  320. }else{
  321. printf("Bank1data[MBIC_BOOT_MARK] : %d \r\n",Bank2data[MBIC_BOOT_MARK]);
  322. }
  323. #endif // PYJ.2020.06.29_END --
  324. // if(BankNum == HFR_BANK1)
  325. // Crcret = CRC16_Generate(&Bank1data[MBIC_BOOT_MARK], TotalFrame);
  326. // else
  327. // Crcret = CRC16_Generate(&Bank2data[MBIC_BOOT_MARK], TotalFrame);
  328. // printf("CurrFrame : %d ,FirmFile_Length : %d \r\n",CurrFrame,TotalFrame - 1);
  329. // printf("FILE CRC RET : %x \r\n",Crcret);
  330. // HAL_Delay(100);
  331. Prev_Download_DataIndex = Curr_Download_DataIndex + 1;
  332. prevFrame = CurrFrame;
  333. break;
  334. case MBIC_Download_Confirm_REQ:
  335. // printf("MBIC_Download_Confirm_REQ \r\n");
  336. cmd = MBIC_Download_Confirm_RSP;
  337. /*TOTAL FRAME NUMBER*/
  338. if(BankNum == HFR_BANK1){
  339. FirmFile_Length = (Bank1data[MBIC_BOOT_LENGTH + 0] << 24)
  340. | Bank1data[MBIC_BOOT_LENGTH + 1] << 16
  341. | Bank1data[MBIC_BOOT_LENGTH + 2] << 8
  342. | Bank1data[MBIC_BOOT_LENGTH + 3];
  343. Crcret = CRC16_Generate(&Bank1data[MBIC_BOOT_MARK], FirmFile_Length + 128);
  344. // printf("Bank 1 CRC Calc\r\n");
  345. }
  346. else {
  347. FirmFile_Length = (Bank2data[MBIC_BOOT_LENGTH + 0] << 24)
  348. | Bank2data[MBIC_BOOT_LENGTH + 1] << 16
  349. | Bank2data[MBIC_BOOT_LENGTH + 2] << 8
  350. | Bank2data[MBIC_BOOT_LENGTH + 3];
  351. Crcret = CRC16_Generate(&Bank2data[MBIC_BOOT_MARK], FirmFile_Length + 128);
  352. // printf("Bank 2 CRC Calc\r\n");
  353. }
  354. RecvCrc = data[MBIC_PAYLOADSTART + 4] << 8 | data[MBIC_PAYLOADSTART + 5];
  355. // printf("FirmFile_Length : %d Byte \r\n",((FirmFile_Length * 1024) + 128));
  356. // printf("FILE CRC RET : %x : Recv CRC : %x \r\n",Crcret,RecvCrc);
  357. if(RecvCrc != Crcret){
  358. CRCERR = true; // CRC ERR Occur
  359. }
  360. data[MBIC_PAYLOADSTART + index++] = ((Crcret & 0xFF00) >> 8);
  361. data[MBIC_PAYLOADSTART + index++] = ((Crcret & 0x00FF));
  362. #if 0 // PYJ.2020.06.29_BEGIN --
  363. if(Crcret != RecvCrc){
  364. CRCERR = true;
  365. printf("CRC ERROR : MBIC : %x / MDOC : %x \r\n",Crcret,RecvCrc);
  366. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2] = 0;
  367. }else{
  368. CRCERR = false;
  369. printf("CRC Success : MBIC : %x / MDOC : %x \r\n",Crcret,RecvCrc);
  370. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2] = 1;
  371. }
  372. #endif // PYJ.2020.06.29_END --
  373. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3] = 1;
  374. /*DOWNLOAD OPTION*/
  375. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4] = 0;
  376. data[MBIC_PAYLOADSTART + index++] = 0;
  377. data[MBIC_PAYLOADSTART + index++] = 0;
  378. data[MBIC_PAYLOADSTART + index++] = 0;
  379. // if(BankNum == HFR_BANK1){
  380. // bluecell_Currdatastatus.CPUVERSION1 = Bank1data[MBIC_BOOT_VERSION];
  381. // bluecell_Currdatastatus.CPUVERSION2 = Bank1data[MBIC_BOOT_VERSION + 1];
  382. // bluecell_Currdatastatus.CPUVERSION3 = Bank1data[MBIC_BOOT_VERSION + 2];
  383. // printf("Bank1data[MBIC_BOOT_VERSION] : %d \r\n",Bank1data[MBIC_BOOT_VERSION + 2]);
  384. // }else{
  385. // bluecell_Currdatastatus.CPUVERSION1 = Bank2data[MBIC_BOOT_VERSION];
  386. // bluecell_Currdatastatus.CPUVERSION2 = Bank2data[MBIC_BOOT_VERSION + 1];
  387. // bluecell_Currdatastatus.CPUVERSION3 = Bank2data[MBIC_BOOT_VERSION + 2];
  388. // printf("Bank2data[MBIC_BOOT_VERSION] : %d \r\n",Bank2data[MBIC_BOOT_VERSION + 2]);
  389. // }
  390. bluecell_Currdatastatus.CPU_Bank1_Image_Version1 = Bank1data[MBIC_BOOT_VERSION];
  391. bluecell_Currdatastatus.CPU_Bank1_Image_Version2 = Bank1data[MBIC_BOOT_VERSION + 1];
  392. bluecell_Currdatastatus.CPU_Bank1_Image_Version3 = Bank1data[MBIC_BOOT_VERSION + 2];
  393. bluecell_Currdatastatus.CPU_Bank2_Image_Version1 = Bank2data[MBIC_BOOT_VERSION];
  394. bluecell_Currdatastatus.CPU_Bank2_Image_Version2 = Bank2data[MBIC_BOOT_VERSION + 1];
  395. bluecell_Currdatastatus.CPU_Bank2_Image_Version3 = Bank2data[MBIC_BOOT_VERSION + 2];
  396. bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime1 = Bank1data[MBIC_BOOT_CREATION_TIME];
  397. bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime2 = Bank1data[MBIC_BOOT_CREATION_TIME + 1];
  398. bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime3 = Bank1data[MBIC_BOOT_CREATION_TIME + 2];
  399. bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime4 = Bank1data[MBIC_BOOT_CREATION_TIME + 3];
  400. bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime5 = Bank1data[MBIC_BOOT_CREATION_TIME + 4];
  401. bluecell_Currdatastatus.CPU_Bank1_Image_BuildTime6 = Bank1data[MBIC_BOOT_CREATION_TIME + 5];
  402. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime1 = Bank2data[MBIC_BOOT_CREATION_TIME];
  403. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime2 = Bank2data[MBIC_BOOT_CREATION_TIME + 1];
  404. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime3 = Bank2data[MBIC_BOOT_CREATION_TIME + 2];
  405. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime4 = Bank2data[MBIC_BOOT_CREATION_TIME + 3];
  406. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime5 = Bank2data[MBIC_BOOT_CREATION_TIME + 4];
  407. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime6 = Bank2data[MBIC_BOOT_CREATION_TIME + 5];
  408. tmpstr = &bluecell_Currdatastatus.CPU_Bank1_Image_Name;
  409. for(int i = 0 ; i< 32; i++){
  410. tmpstr[i] = Bank1data[MBIC_BOOT_FILENAME + i];
  411. }
  412. tmpstr = &bluecell_Currdatastatus.CPU_Bank2_Image_Name;
  413. for(int i = 0 ; i< 32; i++){
  414. tmpstr[i] = Bank2data[MBIC_BOOT_FILENAME + i];
  415. // printf("%x",tmpstr[i]);
  416. }
  417. // printf("Curr Version : %02x.%02x.%02x \r\n",bluecell_Currdatastatus.CPUVERSION1,bluecell_Currdatastatus.CPUVERSION2,bluecell_Currdatastatus.CPUVERSION3);
  418. // printf("Bank1data Version : %02x.%02x.%02x \r\n", Bank1data[MBIC_BOOT_VERSION + 0], Bank1data[MBIC_BOOT_VERSION + 1], Bank1data[MBIC_BOOT_VERSION + 2]);
  419. // printf("Bank2data Version : %02x.%02x.%02x \r\n", Bank2data[MBIC_BOOT_VERSION + 0], Bank2data[MBIC_BOOT_VERSION + 1], Bank2data[MBIC_BOOT_VERSION + 2]);
  420. break;
  421. case MBIC_Complete_Notice_REQ_REQ:
  422. // printf("MBIC_Complete_Notice_REQ_REQ \r\n");
  423. cmd = MBIC_Complete_Notice_RSP;
  424. if(CRCERR == false){
  425. data[MBIC_PAYLOADSTART + index++] = 1;
  426. printf("Crc Success \r\n");
  427. }else{
  428. data[MBIC_PAYLOADSTART + index++] = 0;
  429. }
  430. data[MBIC_PAYLOADSTART + index++] = 1;
  431. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime1 = Bank2data[MBIC_BOOT_CREATION_TIME + 0];
  432. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime2 = Bank2data[MBIC_BOOT_CREATION_TIME + 1];
  433. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime3 = Bank2data[MBIC_BOOT_CREATION_TIME + 2];
  434. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime4 = Bank2data[MBIC_BOOT_CREATION_TIME + 3];
  435. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime5 = Bank2data[MBIC_BOOT_CREATION_TIME + 4];
  436. bluecell_Currdatastatus.CPU_Bank2_Image_BuildTime6 = Bank2data[MBIC_BOOT_CREATION_TIME + 5];
  437. bluecell_Currdatastatus.CPU_Bank2_Image_Version1 = Bank2data[MBIC_BOOT_VERSION + 0];
  438. bluecell_Currdatastatus.CPU_Bank2_Image_Version2 = Bank2data[MBIC_BOOT_VERSION + 1];
  439. bluecell_Currdatastatus.CPU_Bank2_Image_Version3 = Bank2data[MBIC_BOOT_VERSION + 2];
  440. // if(BankNum == HFR_BANK1){
  441. // bluecell_Currdatastatus.CPUVERSION1 = Bank1data[MBIC_BOOT_VERSION];
  442. // bluecell_Currdatastatus.CPUVERSION2 = Bank1data[MBIC_BOOT_VERSION + 1];
  443. // bluecell_Currdatastatus.CPUVERSION3 = Bank1data[MBIC_BOOT_VERSION + 2];
  444. // printf("Bank1data[MBIC_BOOT_VERSION] : %d \r\n",Bank1data[MBIC_BOOT_VERSION]);
  445. // }else{
  446. // bluecell_Currdatastatus.CPUVERSION1 = Bank2data[MBIC_BOOT_VERSION];
  447. // bluecell_Currdatastatus.CPUVERSION2 = Bank2data[MBIC_BOOT_VERSION + 1];
  448. // bluecell_Currdatastatus.CPUVERSION3 = Bank2data[MBIC_BOOT_VERSION + 2];
  449. //
  450. // printf("Bank1data[MBIC_BOOT_VERSION] : %d \r\n",Bank2data[MBIC_BOOT_VERSION]);
  451. // }
  452. // printf("Curr Version : %02x.%02x.%02x \r\n",bluecell_Currdatastatus.CPUVERSION1,bluecell_Currdatastatus.CPUVERSION2,bluecell_Currdatastatus.CPUVERSION3);
  453. // printf("Bank1data Version : %02x.%02x.%02x \r\n", Bank1data[MBIC_BOOT_VERSION + 0], Bank1data[MBIC_BOOT_VERSION + 1], Bank1data[MBIC_BOOT_VERSION + 2]);
  454. // printf("Bank2data Version : %02x.%02x.%02x \r\n", Bank2data[MBIC_BOOT_VERSION + 0], Bank2data[MBIC_BOOT_VERSION + 1], Bank2data[MBIC_BOOT_VERSION + 2]);
  455. break;
  456. #if 0 // PYJ.2020.06.30_BEGIN --
  457. case MBIC_Reboot_Notice_REQ:
  458. printf("MBIC_Reboot_Notice_REQ\r\n");
  459. cmd = MBIC_Reboot_Notice_RSP;
  460. /*TOTAL FRAME NUMBER*/
  461. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 0];
  462. data[MBIC_PAYLOADSTART + index++] = 0;
  463. /*DOWNLOAD OPTION*/
  464. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 2];
  465. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 3];
  466. data[MBIC_PAYLOADSTART + index++] = data[MBIC_PAYLOADSTART + 4];
  467. break;
  468. #endif // PYJ.2020.06.30_END --
  469. default:
  470. return;
  471. }
  472. data[MBIC_CMD_0] = cmd;
  473. data = MBIC_HeaderMergeFunction(data,index); // reponse
  474. for(int i =0; i < 22 + 3 + index; i++){
  475. MBIC_Resp[i] = data[i];
  476. }
  477. DataLength = 22 + 3 + index;
  478. Crcret =CRC16_Generate(&data[MBIC_PAYLOADSTART], DataLength - 25);
  479. MBIC_Resp[(DataLength - 1) - 2] = (Crcret & 0xFF00) >> 8;
  480. MBIC_Resp[(DataLength - 1) - 1] = (Crcret & 0x00FF);
  481. Uart1_Data_Send(MBIC_Resp ,22 + 3 + index);
  482. if( cmd == MBIC_Complete_Notice_RSP
  483. &&bluecell_Currdatastatus.MBIC_Download_Auto_Restart_Set != false)
  484. {
  485. printf("Reset Start \r\n");
  486. HAL_Delay(100);
  487. NVIC_SystemReset();
  488. }
  489. MBIC_DataErase_Func(BankNum);
  490. }