| | |
| | | board_clock_run(); |
| | | calib_chip(); |
| | | gpio_open(); |
| | | board_pins_config(); |
| | | // board_pins_config(); |
| | | //board_debug_console_open(TRACE_PORT_UART0); |
| | | // Chip calibration |
| | | // calib_chip(); |
| | | sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback); |
| | | sleep_timer_start(__MS_TO_32K_CNT(100));//测试 |
| | | // sleep_timer_open(true, SLEEP_TIMER_MODE_RELOAD, sleep_timer_callback); |
| | | // sleep_timer_start(__MS_TO_32K_CNT(100));//测试 |
| | | // Disable watchdog timer |
| | | wdt_close(WDT_ID0); |
| | | wdt_open(WDT_ID0,&app_wdt_cfg);//30s检测喂狗 |
| | | // wdt_close(WDT_ID0); |
| | | // wdt_open(WDT_ID0,&app_wdt_cfg);//30s检测喂狗 |
| | | //LOG_INFO(TRACE_MODULE_APP, "进入Bootloader串口升级\r\n"); |
| | | // gpio_open(); |
| | | board_configure(); |
| | |
| | | //uart_receive(UART_ID1, trx_buf, 1, uart_receive_callback); |
| | | // SerialPutString("MK8000-BootLoader-V1.1启动\r\n"); |
| | | //Serial0PutString("MK8000-BootLoader-V1.0启动\r\n"); |
| | | delay_ms(200); |
| | | start_timer=time_100ms; |
| | | while(time_100ms<start_timer+5) |
| | | { |
| | | if (Receive_Byte(&c, 0x100000) == 0)//返回0成功收取数据,-1为没收到数据 |
| | | { |
| | | usartdata_process(c); |
| | | } |
| | | } |
| | | // delay_ms(200); |
| | | // start_timer=time_100ms; |
| | | // while(time_100ms<start_timer+5) |
| | | // { |
| | | // if (Receive_Byte(&c, 0x100000) == 0)//返回0成功收取数据,-1为没收到数据 |
| | | // { |
| | | // usartdata_process(c); |
| | | // } |
| | | // } |
| | | // uart_close(UART_ID1); |
| | | // uart1_change_shouhuan(); |
| | | // uart_open(UART_ID1, &test_uart_cfg); |
| | |
| | | // uart_open(UART_ID1, &test_uart_cfg); |
| | | // } |
| | | |
| | | SerialPutString("MK8000-BootLoader-V1.2启动\r\n"); |
| | | // SerialPutString("MK8000-BootLoader-V1.2启动\r\n"); |
| | | while(1) |
| | | { |
| | | wdt_ping(WDT_ID0);//喂狗 |
| | | // wdt_ping(WDT_ID0);//喂狗 |
| | | uint16_t tmp = 0; |
| | | // tmp=0xAAAA;//测试用 |
| | | //flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE); |
| | |
| | | updata_byte = tmp;//读取指定地址的值 |
| | | if(updata_byte == 0xAAAA)//判断此地址的值是否为0xAAAA,如果是则 升级 |
| | | { |
| | | SerialPutString("串口升级启动\r\n"); |
| | | |
| | | Main_Menu(); |
| | | // SerialPutString("串口升级启动\r\n"); |
| | | // |
| | | // Main_Menu(); |
| | | } |
| | | else if(updata_byte == 0xBBBB)//判断此地址的值是否为0xBBBB,如果是则网络升级 |
| | | { |
| | |
| | | SerialPutString("OTA完成,解密文件启动\r\n"); |
| | | SerialPutString("OTA固件解压\r\n"); |
| | | |
| | | aesDecInit(); |
| | | |
| | | flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE);//擦除APP |
| | | flash_read(FLASH_ID0, APP_CONFIG_IAPFLAG_MAP, (uint8_t*)&tmp, 2); |
| | | APP_byte = tmp; |
| | | if(APP_byte==0XBBBB) |
| | | { |
| | | uart_close(UART_ID1); |
| | | delay_ms(200); |
| | | memcpy((void *)SRAM_BASE, (void *)APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE);//size太大导致覆盖没法跳转 |
| | | __set_MSP(*(uint32_t *)SRAM_BASE); |
| | | typedef void (*p_entry_t)(void); |
| | | ((p_entry_t) (*(uint32_t *)(SRAM_BASE + 4) + SRAM_BASE))(); |
| | | } |
| | | SerialPutString("擦除标注位成功\r\n"); |
| | | test1=flash_erase(FLASH_ID0,APP1_ADRESS,APP_CONFIG_APPLICATION_SIZE); |
| | | if(test1==0) |
| | | { |
| | | finalbag=(APP_CONFIG_APPLICATION_SIZE/128)+1; |
| | | // wdt_close(WDT_ID0); |
| | | for(aaa=0;aaa<finalbag;aaa++) |
| | | { |
| | | // time32_reset=0; |
| | | memcpy(&zhongjian_shuju,(void *)(APP2_ADRESS+(aaa*128)),128); |
| | | |
| | | for(ii = 0; ii < sizeof(zhongjian_shuju); ii += 16) |
| | | {aesDecrypt(&zhongjian_shuju[ii],key);} |
| | | |
| | | test1=flash_write_nbytes(FLASH_ID0, (APP1_ADRESS+(aaa*128)), zhongjian_shuju, sizeof(zhongjian_shuju)); |
| | | // aesDecInit(); |
| | | // |
| | | // flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE);//擦除APP |
| | | // flash_read(FLASH_ID0, APP_CONFIG_IAPFLAG_MAP, (uint8_t*)&tmp, 2); |
| | | // APP_byte = tmp; |
| | | // if(APP_byte==0XBBBB) |
| | | // { |
| | | // uart_close(UART_ID1); |
| | | // delay_ms(200); |
| | | // memcpy((void *)SRAM_BASE, (void *)APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE);//size太大导致覆盖没法跳转 |
| | | // __set_MSP(*(uint32_t *)SRAM_BASE); |
| | | // typedef void (*p_entry_t)(void); |
| | | // ((p_entry_t) (*(uint32_t *)(SRAM_BASE + 4) + SRAM_BASE))(); |
| | | // } |
| | | // SerialPutString("擦除标注位成功\r\n"); |
| | | // test1=flash_erase(FLASH_ID0,APP1_ADRESS,APP_CONFIG_APPLICATION_SIZE); |
| | | // if(test1==0) |
| | | // {SerialPutString("解密成功\r\n");} |
| | | // else |
| | | // {SerialPutString("解密失败\r\n");} |
| | | wdt_ping(WDT_ID0);//喂狗 |
| | | shengji_time_100ms=0; |
| | | } |
| | | delay_ms(10); |
| | | SerialPutString("OTA解密成功,准备重启\r\n"); |
| | | delay_ms(500); |
| | | NVIC_SystemReset(); |
| | | } |
| | | // { |
| | | // finalbag=(APP_CONFIG_APPLICATION_SIZE/128)+1; |
| | | //// wdt_close(WDT_ID0); |
| | | // for(aaa=0;aaa<finalbag;aaa++) |
| | | // { |
| | | //// time32_reset=0; |
| | | // memcpy(&zhongjian_shuju,(void *)(APP2_ADRESS+(aaa*128)),128); |
| | | // |
| | | // for(ii = 0; ii < sizeof(zhongjian_shuju); ii += 16) |
| | | // {aesDecrypt(&zhongjian_shuju[ii],key);} |
| | | // |
| | | // test1=flash_write_nbytes(FLASH_ID0, (APP1_ADRESS+(aaa*128)), zhongjian_shuju, sizeof(zhongjian_shuju)); |
| | | //// if(test1==0) |
| | | //// {SerialPutString("解密成功\r\n");} |
| | | //// else |
| | | //// {SerialPutString("解密失败\r\n");} |
| | | // wdt_ping(WDT_ID0);//喂狗 |
| | | // shengji_time_100ms=0; |
| | | // } |
| | | // delay_ms(10); |
| | | // SerialPutString("OTA解密成功,准备重启\r\n"); |
| | | // delay_ms(500); |
| | | // NVIC_SystemReset(); |
| | | // } |
| | | |
| | | } |
| | | else if(updata_byte == 0xCCCC)//OTA |
| | | { |
| | | |
| | | SerialPutString("进入OTA,升级启动\r\n"); |
| | | delay_ms(100); |
| | | // delay_ms(100); |
| | | // uart_close(UART_ID1); |
| | | // gpio_close(); |
| | | // sleep_timer_close(); |
| | | // __disable_irq(); |
| | | // delay_ms(500); |
| | | // memcpy((void *)SRAM_BASE, (void *)OTA_ADRESS, APP_CONFIG_APPLICATION_SIZE);//size太大导致覆盖没法跳转 |
| | | // __set_MSP(*(uint32_t *)SRAM_BASE); |
| | | // typedef void (*p_entry_t)(void); |
| | | // ((p_entry_t) (*(uint32_t *)(SRAM_BASE + 4) + SRAM_BASE))(); |
| | | // delay_ms(100); |
| | | // flash_close(FLASH_ID0); |
| | | // __enable_irq(); |
| | | // Serial0PutString("进入OTA\r\n"); |
| | | } |
| | | else if(updata_byte == 0xDDDD)//跳转LORA升级 |
| | | { |
| | | |
| | | // SerialPutString("进入OTA,升级启动\r\n"); |
| | | // delay_ms(100); |
| | | uart_close(UART_ID1); |
| | | gpio_close(); |
| | | sleep_timer_close(); |
| | | __disable_irq(); |
| | | delay_ms(500); |
| | | // sleep_timer_close(); |
| | | // __disable_irq(); |
| | | // delay_ms(500); |
| | | memcpy((void *)SRAM_BASE, (void *)OTA_ADRESS, APP_CONFIG_APPLICATION_SIZE);//size太大导致覆盖没法跳转 |
| | | __set_MSP(*(uint32_t *)SRAM_BASE); |
| | | typedef void (*p_entry_t)(void); |
| | | ((p_entry_t) (*(uint32_t *)(SRAM_BASE + 4) + SRAM_BASE))(); |
| | | delay_ms(100); |
| | | flash_close(FLASH_ID0); |
| | | __enable_irq(); |
| | | // delay_ms(100); |
| | | // flash_close(FLASH_ID0); |
| | | // __enable_irq(); |
| | | // Serial0PutString("进入OTA\r\n"); |
| | | } |
| | | else // |
| | | { |
| | | SerialPutString("准备跳转app\r\n"); |
| | | delay_ms(100); |
| | | // SerialPutString("准备跳转app\r\n"); |
| | | // delay_ms(100); |
| | | uart_close(UART_ID1); |
| | | gpio_close(); |
| | | sleep_timer_close(); |
| | | __disable_irq(); |
| | | delay_ms(500); |
| | | // sleep_timer_close(); |
| | | // __disable_irq(); |
| | | // delay_ms(500); |
| | | //Delay_ms(1000); |
| | | /* Test if user code is programmed starting from address "APP_CONFIG_APPLICATION_ADDRESS" */ |
| | | //Serial0PutString("跳转APPhehe\r\n"); |
| | |
| | | typedef void (*p_entry_t)(void); |
| | | ((p_entry_t) (*(uint32_t *)(SRAM_BASE + 4) + SRAM_BASE))(); |
| | | |
| | | delay_ms(100); |
| | | // delay_ms(100); |
| | | // flash_close(FLASH_ID0); |
| | | // __enable_irq(); |
| | | //IAP_JumpTo(SRAM_BASE); |