From ec8d487264ac58ebaa00cf99675528e85c6113d0 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期三, 13 八月 2025 09:56:46 +0800
Subject: [PATCH] boot开发完成
---
dualboots_Gai_youhua/src/customboot/customboot.c | 273 ++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 192 insertions(+), 81 deletions(-)
diff --git a/dualboots_Gai_youhua/src/customboot/customboot.c b/dualboots_Gai_youhua/src/customboot/customboot.c
index 7df4ab3..e8309c3 100644
--- a/dualboots_Gai_youhua/src/customboot/customboot.c
+++ b/dualboots_Gai_youhua/src/customboot/customboot.c
@@ -15,6 +15,7 @@
#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;
@@ -23,9 +24,11 @@
#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};
@@ -109,15 +112,15 @@
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};
@@ -137,57 +140,119 @@
.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();
- board_pins_config();
+ 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检测喂狗
+// 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.2启动\r\n");
while(1)
{
- wdt_ping(WDT_ID0);//喂狗
+// 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修改
@@ -199,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,如果是则网络升级
{
@@ -214,66 +279,112 @@
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)
- {
- 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;
- 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);//喂狗
- }
- delay_ms(10);
- SerialPutString("OTA解密成功,准备重启\r\n");
- delay_ms(500);
- NVIC_SystemReset();
- }
+// 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));
+//// 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");
+
+ SerialPutString("进入OTA,升级启动\r\n");
+// 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);
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);
+ 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);
/* USER CODE BEGIN 3 */
}
--
Gitblit v1.9.3