新增:串口通讯避障功能

​ 1、Launcher中的串口只使用串口0(调试串口)、串口2(主动RS485端口);串口1与串口3不使用,且不初始化。将串口通讯缓冲区修改为1100Byte。

​  目的:CH564由于将Launcher代码搬运到RAM中运行,因此可使用的变量大小只有32Kbyte。不使用的串口将不初始化,同时使用的通讯缓冲区将节约出来,否则RAM空间不够使用。

​ 2、串口2 - 增加RS485使能,同时通讯增加避障功能。
This commit is contained in:
caocong
2026-01-19 16:39:22 +08:00
parent 094fd76a72
commit 5e9338cee4
37 changed files with 37088 additions and 289 deletions

View File

@@ -1,9 +1,5 @@
/*
* launcher_fun.c
* Code Flash<73>ܿռ<DCBF> 0x00000000 ~ 0x00070000 448KB
* Launcher<65><72><EFBFBD><EFBFBD> 0x00000000 ~ 0x00003FFF 16KB
* APP<50><50><EFBFBD><EFBFBD> 0x00004000 ~ 0x0006FFFF 432KB
* Data Flash<73>ܿռ<DCBF> 0x00070000 ~ 0x00077FFF 32KB
*
* Created on: Jul 28, 2025
* Author: cc
@@ -11,13 +7,15 @@
#include "includes.h"
#include <string.h>
G_SYS_FEATURE_T g_app_feature;
G_SYS_FEATURE_T g_mcu_app_feature;
UPDATE_RECORD_T g_update_recode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
G_SYS_FEATURE_T g_app_feature; //SPI Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
G_SYS_FEATURE_T g_mcu_app_feature; //MCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t g_jump_flag = 0; //<2F><>ת<EFBFBD><EFBFBD>־λ
G_SYS_FEATURE_T g_update_flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
UPDATE_RECORD_T g_update_recode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
uint8_t g_jump_flag = 0; //<2F><>ת<EFBFBD><D7AA>־λ
uint32_t g_Boot_Tick = 0; //Bootʱ<74><CAB1><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>ms
uint32_t g_Boot_Time= 0; //Bootʱ<74><CAB1> <20><>λ<EFBFBD><CEBB>ms
uint32_t g_Boot_Time= 30000; //Bootʱ<74><CAB1> <20><>λ<EFBFBD><CEBB>ms
/*******************************************************************************
* Function Name : Boot_Time_Refresh
@@ -40,21 +38,6 @@ void Boot_Timeout_Task(void)
}
}
/*********************************************************************
* @fn Jump_APP
* @brief <20><>ת<EFBFBD><D7AA>APP<50><50><EFBFBD><EFBFBD>
* @param addr - APP<50><50>ʼ<EFBFBD><CABC>ַ
* @return none
*/
void Jump_APP(uint32_t addr)
{
// __asm volatile("jr %0": :"r"(addr));
__asm("li a6, 0x0E000");
__asm("jr a6");
while(1);
}
/*******************************************************************************
* Function Name : SPI_FLASH_APP_Data_Erase
* Description : <20>ⲿFlash APP<50>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
@@ -64,6 +47,8 @@ void SPI_FLASH_APP_Data_Erase(void)
{
for(uint8_t i = 0;i < 7;i++)
{
WDT_Feed();
Flash_Erase_Block(i);
}
}
@@ -77,6 +62,8 @@ void SPI_FLASH_Logic_File_Erase(void)
{
for(uint8_t i = 7;i < 16;i++)
{
WDT_Feed();
Flash_Erase_Block(i);
}
}
@@ -130,10 +117,9 @@ void Boot_Comm_FillReplyPack(UART_t *g_rev)
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"ACKBuff ",g_rev->ackBuffer,data_len);
#endif
g_rev->send_data_cf(g_rev->ackBuffer,data_len);
// memset(g_rev->ackBuffer,0,USART_BUFFER_SIZE);
// g_rev->ackLen = 0x00;
Uartx_Add_Data_To_SendBuff(g_rev,g_rev->ackBuffer,data_len,0x01,500,50);
}
uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
@@ -266,9 +252,9 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x02){
/*<2A><>ת<EFBFBD><D7AA>APP<50><50><EFBFBD><EFBFBD>*/
g_Boot_Time = 200; //<2F><>Boot<6F><74>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ת
g_Boot_Time = 200;
g_Boot_Tick = SysTick_1ms;
g_jump_flag = 0x01; //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ - ȫ<>ָ<EFBFBD>λ
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
}else {
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
@@ -649,6 +635,8 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
for(uint32_t crc_addr = g_app_feature.app_start_addr; crc_addr < g_app_feature.app_end_addr;crc_addr += g_app_feature.app_crc_size)
{
WDT_Feed();
if( g_app_feature.app_end_addr - crc_addr >= g_app_feature.app_crc_size) {
crc_data_len = g_app_feature.app_crc_size;
}else {
@@ -682,6 +670,7 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
g_rev->ackBuffer[BCOMM_FMT_PARAM + 3 + crcResultFlag*4] = ((crc_addr >> 8) & 0xFF);
g_rev->ackBuffer[BCOMM_FMT_PARAM + 2 + crcResultFlag*4] = (crc_addr & 0xFF);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"Flash Data:",g_read_buff,crc_data_len);
DBG_SYS_Printf("App CRC Fail ADDR:%X %X-%X",crc_addr,temp_val,temp_val_2);
crcResultFlag++;
@@ -717,7 +706,6 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
g_rev->ackLen = 1;
}
break;
}
/*<2A>ظ<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>*/
@@ -745,6 +733,7 @@ uint8_t Read_APP_Feature(void)
uint16_t crcVal = 0;
uint8_t crcValH = 0, crcValL = 0;
uint32_t crc_data_len = 0;
uint8_t update_flag = 0;
memset(&g_app_feature,0,sizeof(G_SYS_FEATURE_T));
memset(&g_mcu_app_feature,0,sizeof(G_SYS_FEATURE_T));
@@ -824,7 +813,69 @@ uint8_t Read_APP_Feature(void)
return 1;
}
/*<2A>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡMCU Flash<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͬʱ<EFBFBD><EFBFBD>֤APP<EFBFBD>ĺϷ<EFBFBD><EFBFBD><EFBFBD>*/
/*<2A>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>Flash <EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
rev = SPIFLASH_Read_APP_Update_Flag_Info(&g_update_flag);
if(rev == 0x00)
{
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD>±<EFBFBD>־λ<D6BE>ɹ<EFBFBD>*/
if( (g_update_flag.app_start_addr != g_app_feature.app_start_addr)
|| (g_update_flag.app_end_addr != g_app_feature.app_end_addr)
|| (g_update_flag.app_crc_size != g_app_feature.app_crc_size)
|| (g_update_flag.app_crc_len != g_app_feature.app_crc_len)
)
{
update_flag = 0x01;
}
for(uint32_t i = 0;i < APP_Feature_CRC_Size; i++)
{
if( g_update_flag.app_crc[i] != g_app_feature.app_crc[i] )
{
update_flag = 0x01;
break;
}
}
if( update_flag == 0x01 )
{
/*˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8>µ<EFBFBD>APP<50><50>
* <20><>app_flag <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD>Ϊ0x05<30><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>ΪAPP <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ÿд<C3BF><D0B4>һ<EFBFBD>Σ<EFBFBD>app_flag <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>1<EFBFBD><31>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><E3B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* */
g_update_flag.app_flag = 0x05;
}else {
/**/
if( (g_update_flag.app_flag != 0x00) && (g_update_flag.app_flag <= 0x05) )
{
g_update_flag.app_flag--;
update_flag = 0x02;
}
}
}else {
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD>±<EFBFBD>־λʧ<CEBB><CAA7> - Ҳ<><D2B2>Ϊ<EFBFBD><CEAA><EFBFBD>µĹ̼<C4B9>*/
update_flag = 0x01;
g_update_flag.app_flag = 0x05;
}
if( update_flag == 0x01 )
{
g_update_flag.app_start_addr = g_app_feature.app_start_addr;
g_update_flag.app_end_addr = g_app_feature.app_end_addr;
g_update_flag.app_crc_size = g_app_feature.app_crc_size;
g_update_flag.app_crc_len = g_app_feature.app_crc_len;
for(uint32_t i = 0;i < APP_Feature_CRC_Size; i++)
{
g_update_flag.app_crc[i] = g_app_feature.app_crc[i];
}
DBG_SYS_Printf("--<2D><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>APP<50>̼<EFBFBD>--");
}else if( update_flag == 0x02 ){
DBG_SYS_Printf("--APP<50>̼<EFBFBD><CCBC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d --",g_update_flag.app_flag);
}else{
DBG_SYS_Printf("--APP<50>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%x--",g_update_flag.app_flag);
}
SPIFLASH_Write_APP_Upate_Flag_Info(&g_update_flag);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡMCU Flash<73><68>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͬʱ<CDAC><CAB1>֤APP<50>ĺϷ<C4BA><CFB7><EFBFBD>*/
rev = Read_APP_Feature_Info(0x01,&g_mcu_app_feature);
if(rev == 0x00)
{
@@ -878,35 +929,71 @@ uint8_t Read_APP_Feature(void)
DBG_SYS_Printf("APP ERROR! \r\n");
LOG_Launcher_APP_Check_Record(0x07);
return 2; //У<><D0A3>ʧ<EFBFBD><CAA7>
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
}
}else{
LOG_Launcher_APP_Check_Record(0x08);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
}
}else {
DBG_SYS_Printf("MCU Feature ERROR! \r\n");
LOG_Launcher_APP_Check_Record(0x09);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
}
/*<2A>ж<EFBFBD>MCU Flash<73>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ⲿSPI Flash<73>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>*/
if(g_app_feature.app_crc_len != g_mcu_app_feature.app_crc_len) {
DBG_SYS_Printf("app_crc_len different!\r\n");
LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
}
if(g_app_feature.app_start_addr != g_mcu_app_feature.app_start_addr) {
DBG_SYS_Printf("app_start_addr different!\r\n");
LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
}
if(g_app_feature.app_end_addr != g_mcu_app_feature.app_end_addr) {
DBG_SYS_Printf("app_end_addr different!\r\n");
LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
}
for(uint16_t j = 0;j<g_app_feature.app_crc_len;j++)
@@ -914,10 +1001,26 @@ uint8_t Read_APP_Feature(void)
if(g_mcu_app_feature.app_crc[j] != g_app_feature.app_crc[j])
{
LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
}
}
if(update_flag != 0x00)
{
/*<2A>ⲿ<EFBFBD><EFBFBD><E6B4A2>APP <20><><EFBFBD>µı<C2B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD>
* <20><>ʵMCU Flash<73><68><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>APP<50><50><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* */
DBG_SYS_Printf("<EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD>APP <20><><EFBFBD>µı<C2B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD>!!!");
g_update_flag.app_flag = App_Procedure_Ready;
SPIFLASH_Write_APP_Upate_Flag_Info(&g_update_flag);
}
/*û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ׼<><D7BC> <20><>תAPP*/
LOG_Launcher_APP_Check_Record(0x00);
return 0x00;
@@ -935,7 +1038,11 @@ uint8_t MCU_APP_Write(void)
uint16_t crcVal = 0,crcNumIndex = 0;
uint32_t crc_data_len = 0;
SPIFLASH_Read_Update_Recode(&g_update_recode); //<2F><>ȡAPPд<50><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_update_recode.mcuflash_fw_count++;
DBG_SYS_Printf("MCU Flash <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>");
rev = MCU_APP_Flash_ALLErase(); //<2F>Ȳ<EFBFBD><C8B2><EFBFBD> ȫ<><C8AB>APP<50><50><EFBFBD><EFBFBD>
if(rev != 0) {
DBG_SYS_Printf("MCU Flash <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD> ʧ<><CAA7>");
@@ -1021,7 +1128,7 @@ uint8_t MCU_APP_Write(void)
memset(g_read_buff,0,sizeof(g_read_buff));
rev = MCU_APP_Flash_Read(g_read_buff,crc_data_len,i);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash:", g_read_buff, crc_data_len);
//Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash:", g_read_buff, crc_data_len);
crcVal = CRC16_Check(g_read_buff, crc_data_len);
crcValH = crcVal >> 8;
@@ -1032,7 +1139,7 @@ uint8_t MCU_APP_Write(void)
if( ( g_mcu_app_feature.app_crc[crcNumIndex + 1] != crcValH ) || ( g_mcu_app_feature.app_crc[crcNumIndex] != crcValL ) )
{
DBG_SYS_Printf("Addr:%x app_crc:%x%x crcVal:%x ",i,g_mcu_app_feature.app_crc[crcNumIndex],g_mcu_app_feature.app_crc[1 + crcNumIndex],crcVal);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash:", g_read_buff, crc_data_len);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash CRC Error:", g_read_buff, crc_data_len);
if(crc_data_len > 2048)
{
@@ -1051,12 +1158,23 @@ uint8_t MCU_APP_Write(void)
}
}
/*д<><D0B4>ʧ<EFBFBD><CAA7> - ʧ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD>һ*/
g_update_recode.mcuflash_fw_fail++;
SPIFLASH_Write_Update_Recode(&g_update_recode);
return 0x01;
}
crcNumIndex += 2;
}
/*д<><D0B4><EFBFBD>ɹ<EFBFBD> - <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ*/
g_update_recode.mcuflash_fw_succ++;
SPIFLASH_Write_Update_Recode(&g_update_recode);
/*APP<50><50><EFBFBD>±<EFBFBD>־λ - ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
g_update_flag.app_flag = App_Procedure_Ready;
SPIFLASH_Write_APP_Upate_Flag_Info(&g_update_flag);
/*4<><34>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD>*/
DBG_SYS_Printf("MCU APP Update Succ!!");
LOG_Launcher_Read_App_Record(0x00);
@@ -1090,12 +1208,10 @@ uint8_t SPIFLASH_Read_Update_Recode(UPDATE_RECORD_T *info)
memcpy((uint8_t *)info,&g_flash_buff[EEPROM_Offset_Data],read_len);
DBG_SYS_Printf("spiflash_fw_count:%d",g_mcu_dev.dev_addr);
DBG_SYS_Printf("spiflash_fw_succ:%d",g_mcu_dev.dev_type);
DBG_SYS_Printf("spiflash_fw_fail:%d",g_mcu_dev.dev_boot_ver);
DBG_SYS_Printf("EE DevAppVer:%d",g_mcu_dev.dev_app_ver);
DBG_SYS_Printf("EE DevNameLen:%d",g_mcu_dev.dev_name_len);
DBG_SYS_Printf("EE DevName:%s",g_mcu_dev.dev_name);
DBG_SYS_Printf("mcu flash_fw_count:%d",info->mcuflash_fw_count);
DBG_SYS_Printf("mcu flash_fw_succ:%d",info->mcuflash_fw_succ);
DBG_SYS_Printf("mcu flash_fw_fail:%d",info->mcuflash_fw_fail);
return 0x00; //<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
}else {
DBG_SYS_Printf("%s Check Error !",__func__);
@@ -1107,9 +1223,19 @@ uint8_t SPIFLASH_Read_Update_Recode(UPDATE_RECORD_T *info)
DBG_SYS_Printf("%s Flag Error !",__func__);
}
/*<2A><>ȡʧ<C8A1><CAA7> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
info->mcuflash_fw_count = 0x00;
info->mcuflash_fw_succ = 0x00;
info->mcuflash_fw_fail = 0x00;
return 0x01; //<2F><>ȡʧ<C8A1><CAA7>
}
/*******************************************************************************
* Function Name : SPIFLASH_Write_Update_Recode
* Description : SPI Flash д<><D0B4>APP<50><50><EFBFBD>¼<EFBFBD>¼
* Input :
*******************************************************************************/
uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info)
{
uint16_t save_len = UPDATE_RECORD_INFO_Size;
@@ -1129,7 +1255,150 @@ uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info)
return 0x00;
}
/*******************************************************************************
* Function Name : Read_APP_Update_Flag_Info
* Description : <20><>ȡAPP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>FLash<73><68>SRAM<41>У<EFBFBD>
* 1<><31><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD>ⲿFlash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿFlash<73>ж<EFBFBD>ȡʧ<C8A1>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ⲿSRAM<41>ж<EFBFBD>ȡ<EFBFBD><C8A1>
* 2<><32><EFBFBD>ⲿSRAMҲ<4D><D2B2>ȡʧ<C8A1><CAA7><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD>Ϊ֮ǰû<C7B0><C3BB>APP<50><50><EFBFBD>¼<EFBFBD>¼
* Para :
* flag_info - APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return <20><>
* 0x00 - <20><>ȡ<EFBFBD>ɹ<EFBFBD>
* 0x01 - <20><>ȡʧ<C8A1><CAA7>
*******************************************************************************/
uint8_t SPIFLASH_Read_APP_Update_Flag_Info(G_SYS_FEATURE_T *feature_info)
{
uint16_t crc_val = 0,crc_val2 = 0;
uint32_t temp_val = 0;
memset(g_read_buff,0,sizeof(g_read_buff));
Flash_Read(g_read_buff,APP_FEATURE_SIZE,SPIFLASH_UPDATE_FLAG_Addr);
crc_val = g_read_buff[1];
crc_val <<= 0x08;
crc_val |= g_read_buff[0];
crc_val2 = CRC16_Check(&g_read_buff[2],510);
DBG_SYS_Printf("%s Flash CRC: %x - %x",__func__,crc_val,crc_val2);
if(crc_val != crc_val2)
{
//У<><D0A3>ʧ<EFBFBD><CAA7><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>Ϊ<EFBFBD><CEAA>ȡ<EFBFBD>ⲿSRAM
memset(g_read_buff,0,sizeof(g_read_buff));
SRAM_DMA_Read_Buff(g_read_buff, APP_FEATURE_SIZE, SRAM_APP_Write_Count_Addr);
crc_val = g_read_buff[1];
crc_val <<= 0x08;
crc_val |= g_read_buff[0];
crc_val2 = CRC16_Check(&g_read_buff[2],510);
DBG_SYS_Printf("%s SRAM CRC: %x - %x",__func__,crc_val,crc_val2);
if(crc_val != crc_val2)
{
return 0x01; //<2F><>ȡʧ<C8A1><CAA7>
}
}
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͨ<EFBFBD><CDA8>*/
feature_info->app_flag = g_read_buff[Feature_AppFlag];
temp_val = g_read_buff[Feature_AppStart + 3];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppStart + 2];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppStart + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppStart];
feature_info->app_start_addr = temp_val;
temp_val = g_read_buff[Feature_AppEnd + 3];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppEnd + 2];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppEnd + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppEnd];
feature_info->app_end_addr = temp_val;
temp_val = g_read_buff[Feature_AppCrcSize + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppCrcSize];
feature_info->app_crc_size = temp_val;
temp_val = g_read_buff[Feature_AppCrcLen + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppCrcLen];
feature_info->app_crc_len = temp_val;
memcpy(feature_info->app_crc,&g_read_buff[Feature_AppFlashCrc],APP_Feature_CRC_Size);
/*У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ*/
if( ( feature_info->app_start_addr < MCU_APP_Flash_Start_Addr ) || ( feature_info->app_start_addr > MCU_APP_Data_End_Addr ) ){
DBG_SYS_Printf("%s app_start_addr:0x%x Error",__func__, feature_info->app_start_addr);
return 0x02;
}
if( ( feature_info->app_end_addr > MCU_APP_Data_End_Addr ) || ( feature_info->app_start_addr > feature_info->app_end_addr ) ){
DBG_SYS_Printf("%s app_end_addr:0x%x - 0x%x Error",__func__,feature_info->app_start_addr,feature_info->app_end_addr);
return 0x02;
}
if( feature_info->app_crc_size != MCU_APP_Flash_PageSize ){
DBG_SYS_Printf("%s app_crc_size:%#x Error",__func__,feature_info->app_crc_size);
return 0x02;
}
return 0x00; //<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
}
/*******************************************************************************
* Function Name : SPIFLASH_Write_APP_Upate_Flag_Info
* Description : д<><D0B4>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>FLash<73><68>SRAM<41><4D>
* Para :
* flag_info - APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return <20><>
* 0x00 - д<><D0B4><EFBFBD>ɹ<EFBFBD>
* 0x01 - д<><D0B4>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t SPIFLASH_Write_APP_Upate_Flag_Info(G_SYS_FEATURE_T *flag_info)
{
memset(g_read_buff,0,sizeof(g_read_buff));
g_read_buff[Feature_AppFlag] = flag_info->app_flag;
g_read_buff[Feature_AppStart] = flag_info->app_start_addr & 0xFF;
g_read_buff[Feature_AppStart + 1] = ( flag_info->app_start_addr >> 8 ) & 0xFF;
g_read_buff[Feature_AppStart + 2] = ( flag_info->app_start_addr >> 16 ) & 0xFF;
g_read_buff[Feature_AppStart + 3] = ( flag_info->app_start_addr >> 24 ) & 0xFF;
g_read_buff[Feature_AppEnd] = flag_info->app_end_addr & 0xFF;
g_read_buff[Feature_AppEnd + 1] = ( flag_info->app_end_addr >> 8 ) & 0xFF;
g_read_buff[Feature_AppEnd + 2] = ( flag_info->app_end_addr >> 16 ) & 0xFF;
g_read_buff[Feature_AppEnd + 3] = ( flag_info->app_end_addr >> 24 ) & 0xFF;
g_read_buff[Feature_AppCrcSize] = flag_info->app_crc_size & 0xFF;
g_read_buff[Feature_AppCrcSize + 1] = ( flag_info->app_crc_size >> 8 ) & 0xFF;
g_read_buff[Feature_AppCrcLen] = flag_info->app_crc_len & 0xFF;
g_read_buff[Feature_AppCrcLen + 1] = ( flag_info->app_crc_len >> 8 ) & 0xFF;
memcpy(&g_read_buff[Feature_AppFlashCrc],flag_info->app_crc,APP_Feature_CRC_Size);
flag_info->crc_check = CRC16_Check(&g_read_buff[2], 510);
g_read_buff[Feature_Check] = flag_info->crc_check & 0xFF;
g_read_buff[Feature_Check + 1] = ( flag_info->crc_check >> 8 ) & 0xFF;
/* <20><>Flash<73><68>SRAM<41>ж<EFBFBD>д<EFBFBD><D0B4>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
Flash_Write(g_read_buff,APP_FEATURE_SIZE,SPIFLASH_UPDATE_FLAG_Addr);
SRAM_DMA_Write_Buff(g_read_buff, APP_FEATURE_SIZE, SRAM_APP_Write_Count_Addr);
return 0;
}