WXK
7 天以前 ec8d487264ac58ebaa00cf99675528e85c6113d0
dualboots_Gai_youhua/src/customboot/customboot.c
@@ -158,15 +158,15 @@
      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();
@@ -191,15 +191,15 @@
       //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);
@@ -247,10 +247,10 @@
//    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);
@@ -264,9 +264,9 @@
    updata_byte = tmp;//读取指定地址的值
    if(updata_byte == 0xAAAA)//判断此地址的值是否为0xAAAA,如果是则 升级 
    {
        SerialPutString("串口升级启动\r\n");
        Main_Menu();
//        SerialPutString("串口升级启动\r\n");
//
//        Main_Menu();
    }
    else if(updata_byte == 0xBBBB)//判断此地址的值是否为0xBBBB,如果是则网络升级
    {       
@@ -279,77 +279,96 @@
        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");
@@ -360,7 +379,7 @@
               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);