| | |
| | | #include "menu.h" |
| | | #include "aes.h" |
| | | #include "AppConfig.h" |
| | | #include "mk_sleep_timer.h" |
| | | static const uint32_t fw_addr = 0x04004000; |
| | | static const uint32_t fw_bytes = 14712; |
| | | |
| | |
| | | #define TEST_UART_INTERUPT_MODE 1 |
| | | #define TEST_UART_DMA_MODE 2 |
| | | #define TEST_UART_MODE TEST_UART_DMA_MODE |
| | | |
| | | volatile unsigned long time_100ms; |
| | | volatile unsigned long shengji_time_100ms; |
| | | volatile unsigned long time32_incr; |
| | | volatile unsigned long time32_reset = 0; |
| | | volatile unsigned long start_timer; |
| | | static unsigned char buff[100]; |
| | | uint8_t key[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; |
| | | |
| | |
| | | if(data==0xFF) |
| | | { |
| | | uint16_t tmp = 0xAAAA,result; |
| | | // SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP,2, SPI_FLASH_SECTOR_ERASE_MODE_4K); MK8000修改 |
| | | // SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, (HIDO_UINT8*)&tmp, sizeof(tmp)); |
| | | flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE);//擦除APP |
| | | flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2); |
| | | state = 0; |
| | | |
| | | } |
| | | break; |
| | | } |
| | | |
| | | } |
| | | uint8_t state111; |
| | | unsigned short int APP_byte = 0; |
| | | unsigned short int updata_byte = 0; |
| | | uint8_t trx_buf[10] = {0}; |
| | |
| | | .int_en = true, |
| | | .callback = app_wdt_callback, |
| | | }; |
| | | |
| | | static void sleep_timer_callback(void *dev, uint32_t time) |
| | | { |
| | | time_100ms++; |
| | | shengji_time_100ms++; |
| | | if(shengji_time_100ms>300) |
| | | { |
| | | NVIC_SystemReset(); |
| | | } |
| | | } |
| | | uint8_t flagmode;/*0是工卡,1是手环*/ |
| | | //uint8_t flagshouhuan; |
| | | int main(void) |
| | | { uint8_t c; |
| | | |
| | | //sys_tick_callback_set(systic_time_callback); |
| | | board_clock_run(); |
| | | calib_chip(); |
| | | gpio_open(); |
| | | board_pins_config(); |
| | | //board_debug_console_open(TRACE_PORT_UART0); |
| | | // Chip calibration |
| | | calib_chip(); |
| | | // calib_chip(); |
| | | 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检测喂狗 |
| | | //LOG_INFO(TRACE_MODULE_APP, "进入Bootloader串口升级\r\n"); |
| | | gpio_open(); |
| | | // gpio_open(); |
| | | board_configure(); |
| | | |
| | | struct UART_CFG_T test_uart_cfg = |
| | | { |
| | | .parity = UART_PARITY_NONE, |
| | | .stop = UART_STOP_BITS_1, |
| | | .data = UART_DATA_BITS_8, |
| | | .flow = UART_FLOW_CONTROL_NONE, |
| | | .rx_level = UART_RXFIFO_CHAR_1, |
| | | .tx_level = UART_TXFIFO_EMPTY, |
| | | .baud = BAUD_115200, |
| | | #if (TEST_UART_MODE == TEST_UART_POLL_MODE) |
| | | .dma_en = false, |
| | | .int_rx = false, |
| | | .int_tx = false, |
| | | #elif (TEST_UART_MODE == TEST_UART_INTERUPT_MODE) |
| | | .dma_en = false, |
| | | .int_rx = true, |
| | | .int_tx = true, |
| | | #elif (TEST_UART_MODE == TEST_UART_DMA_MODE) |
| | | .dma_en = true, |
| | | .int_rx = false, |
| | | .int_tx = false, |
| | | #endif |
| | | }; |
| | | // struct UART_CFG_T test_uart_cfg = |
| | | // { |
| | | // .parity = UART_PARITY_NONE, |
| | | // .stop = UART_STOP_BITS_1, |
| | | // .data = UART_DATA_BITS_8, |
| | | // .flow = UART_FLOW_CONTROL_NONE, |
| | | // .rx_level = UART_RXFIFO_CHAR_1, |
| | | // .tx_level = UART_TXFIFO_EMPTY, |
| | | // .baud = BAUD_115200, |
| | | |
| | | // .dma_en = true, |
| | | // .int_rx = false, |
| | | // .int_tx = false, |
| | | // }; |
| | | flash_open(FLASH_ID0, NULL); |
| | | uart_open(UART_ID1, &test_uart_cfg); |
| | | // uart_open(UART_ID1, &test_uart_cfg); |
| | | //uart_open(UART_ID0, &test_uart_cfg); |
| | | //uart_receive(UART_ID1, trx_buf, 1, uart_receive_callback); |
| | | SerialPutString("MK8000-BootLoader-V1.1启动\r\n"); |
| | | // 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); |
| | | } |
| | | } |
| | | // uart_close(UART_ID1); |
| | | // uart1_change_shouhuan(); |
| | | // uart_open(UART_ID1, &test_uart_cfg); |
| | | // start_timer=time_100ms; |
| | | // while(time_100ms<start_timer+5) |
| | | // { |
| | | // if (Receive_Byte(&c, 0x100000) == 0)//返回0成功收取数据,-1为没收到数据 |
| | | // { |
| | | // switch(state111) |
| | | // { |
| | | // case 0: |
| | | // if(c==0x55) |
| | | // { |
| | | // state111 = 1; |
| | | // } |
| | | // break; |
| | | // case 1: |
| | | // if(c==0x55) |
| | | // { |
| | | // state111 = 2; |
| | | // }else{ |
| | | // state111 = 0; |
| | | // } |
| | | // break; |
| | | // case 2: |
| | | // if(c==0x55) |
| | | // { |
| | | // flagmode=1; |
| | | // }else{ |
| | | // state111 = 0; |
| | | // } |
| | | // break; |
| | | // } |
| | | // usartdata_process(c); |
| | | // } |
| | | // } |
| | | // if(flagmode) |
| | | // { |
| | | // |
| | | // } |
| | | // else |
| | | // { |
| | | // uart_close(UART_ID1); |
| | | // uart1_change_gongka(); |
| | | // uart_open(UART_ID1, &test_uart_cfg); |
| | | // } |
| | | |
| | | SerialPutString("MK8000-BootLoader-V1.1启动\r\n"); |
| | | while(1) |
| | | { |
| | | wdt_ping(WDT_ID0);//喂狗 |
| | | uint16_t tmp = 0; |
| | | tmp=0xAAAA;//测试用 |
| | | // tmp=0xAAAA;//测试用 |
| | | //flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE); |
| | | //flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2);//测试用 |
| | | // SPIFlash_Read(SPI_FLASH_ID_0, (HIDO_UINT8*)&tmp, APP_CONFIG_IAPFLAG_MAP, sizeof(tmp)); MK8000修改 |
| | |
| | | if(test1==0) |
| | | { |
| | | finalbag=(APP_CONFIG_APPLICATION_SIZE/128)+1; |
| | | // wdt_close(WDT_ID0); |
| | | for(aaa=0;aaa<finalbag;aaa++) |
| | | { |
| | | // time32_reset=0; |
| | |
| | | // else |
| | | // {SerialPutString("解密失败\r\n");} |
| | | wdt_ping(WDT_ID0);//喂狗 |
| | | shengji_time_100ms=0; |
| | | } |
| | | delay_ms(10); |
| | | SerialPutString("OTA解密成功,准备重启\r\n"); |
| | |
| | | { |
| | | |
| | | SerialPutString("进入OTA,升级启动\r\n"); |
| | | delay_ms(100); |
| | | uart_close(UART_ID1); |
| | | delay_ms(1000); |
| | | 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 //不是则跳转到APP,注意F0和其他系列的跳转有些不一样,跳转部分可参考原子哥代码 |
| | | else // |
| | | { |
| | | SerialPutString("准备跳转app\r\n"); |
| | | delay_ms(100); |
| | | uart_close(UART_ID1); |
| | | delay_ms(200); |
| | | gpio_close(); |
| | | 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"); |
| | | memcpy((void *)SRAM_BASE, (void *)APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE);//size太大导致覆盖没法跳转 |
| | | __set_MSP(*(uint32_t *)SRAM_BASE); |
| | | |
| | | |
| | | __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(); |
| | | //IAP_JumpTo(SRAM_BASE); |
| | | } |
| | | delay_ms(200); |
| | | // delay_ms(200); |
| | | /* USER CODE BEGIN 3 */ |
| | | |
| | | } |