2026-01-05 09:40:42 +08:00
|
|
|
|
/*
|
|
|
|
|
|
* launcher_fun.c
|
|
|
|
|
|
*
|
|
|
|
|
|
* Created on: Jul 28, 2025
|
|
|
|
|
|
* Author: cc
|
|
|
|
|
|
*/
|
|
|
|
|
|
#include "includes.h"
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
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>
|
2026-01-05 09:40:42 +08:00
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
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>־λ
|
2026-01-05 09:40:42 +08:00
|
|
|
|
uint32_t g_Boot_Tick = 0; //Bootʱ<74><CAB1><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>ms
|
2026-01-19 16:39:22 +08:00
|
|
|
|
uint32_t g_Boot_Time= 30000; //Bootʱ<74><CAB1> <20><>λ<EFBFBD><CEBB>ms
|
2026-01-05 09:40:42 +08:00
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : Boot_Time_Refresh
|
|
|
|
|
|
* Description : Bootʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
void Boot_Time_Refresh(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_Boot_Tick = SysTick_1ms;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : Boot_Timeout_Task
|
|
|
|
|
|
* Description : Boot<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
void Boot_Timeout_Task(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(SysTick_1ms - g_Boot_Tick >= g_Boot_Time)
|
|
|
|
|
|
{
|
|
|
|
|
|
while(1); //ִ<>п<EFBFBD><D0BF>Ź<EFBFBD><C5B9><EFBFBD>λ
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : SPI_FLASH_APP_Data_Erase
|
|
|
|
|
|
* Description : <EFBFBD>ⲿFlash APP<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* APP<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>С Size: 0x00070000 <EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>0x00000000 ~ 0x0006FFFF
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
void SPI_FLASH_APP_Data_Erase(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
for(uint8_t i = 0;i < 7;i++)
|
|
|
|
|
|
{
|
2026-01-19 16:39:22 +08:00
|
|
|
|
WDT_Feed();
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
Flash_Erase_Block(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : SPI_FLASH_Logic_File_Erase
|
|
|
|
|
|
* Description : <EFBFBD>ⲿFlash <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* APP<EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>С Size: 0x00090000 <EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>0x00070000 ~ 0x000FFFFF
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
void SPI_FLASH_Logic_File_Erase(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
for(uint8_t i = 7;i < 16;i++)
|
|
|
|
|
|
{
|
2026-01-19 16:39:22 +08:00
|
|
|
|
WDT_Feed();
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
Flash_Erase_Block(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : CRC16_Check
|
|
|
|
|
|
* Description : CRC16У<EFBFBD><EFBFBD><EFBFBD>㷨
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
uint16_t CRC16_Check(uint8_t * aStr, uint16_t len)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t xda , xdapoly ;
|
|
|
|
|
|
uint16_t i, j, xdabit ;
|
|
|
|
|
|
xda = 0xFFFF ;
|
|
|
|
|
|
xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1)
|
|
|
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
xda ^= aStr[i] ;
|
|
|
|
|
|
for (j = 0; j < 8; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
xdabit = (unsigned char)(xda & 0x01) ;
|
|
|
|
|
|
xda >>= 1 ;
|
|
|
|
|
|
if ( xdabit ) xda ^= xdapoly ;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return xda;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : Boot_Comm_FillReplyPack
|
|
|
|
|
|
* Description : BootͨѶЭ<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
void Boot_Comm_FillReplyPack(UART_t *g_rev)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t data_len = g_rev->ackLen + BCOMM_FMT_PARAM;
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_TXAddr] = g_mcu_dev.dev_addr;
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_SN] = g_rev->sn;
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_TYPE] = g_mcu_dev.dev_type;
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_RXAddr] = g_rev->pc_addr;
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_CMD] = g_rev->cmd;
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_LEN_L] = data_len & 0xFF;
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_LEN_H] = (data_len >> 8) & 0xFF;
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_CKS] = 0;
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_CKS] = Data_CheckSum(g_rev->ackBuffer, data_len);
|
|
|
|
|
|
|
|
|
|
|
|
#if DBG_LOG_EN
|
|
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"ACKBuff ",g_rev->ackBuffer,data_len);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
Uartx_Add_Data_To_SendBuff(g_rev,g_rev->ackBuffer,data_len,0x01,500,50);
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t deal_flag = 0,group_flag = 0,reply_flag = 0;
|
|
|
|
|
|
uint16_t crcNumIndex = 0,crcResultFlag = 0;
|
|
|
|
|
|
uint32_t temp_val = 0,temp_val_2 = 0;
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
|
__disable_irq();
|
|
|
|
|
|
memcpy(g_rev->deal_buff,g_rev->RecvBuffer,g_rev->RecvLen);
|
|
|
|
|
|
g_rev->deal_len = g_rev->RecvLen;
|
|
|
|
|
|
g_rev->RecvLen = 0;
|
|
|
|
|
|
memset(g_rev->RecvBuffer,0,USART_BUFFER_SIZE);
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->Receiving = 0x00; //<2F><><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>
|
|
|
|
|
|
g_rev->CommBusy &= ~(UART_COMMBUSY_RECV_Flag); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־λ
|
|
|
|
|
|
|
|
|
|
|
|
__enable_irq();
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("Len %d \r\n",g_rev->deal_len);
|
|
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"UARTx_Buff:",g_rev->deal_buff,g_rev->deal_len);
|
|
|
|
|
|
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_LEN_H];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_LEN_L];
|
|
|
|
|
|
|
|
|
|
|
|
if(temp_val != g_rev->deal_len)
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("Len Fail \r\n");
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(Data_CheckSum(g_rev->deal_buff,g_rev->deal_len) != 0) {
|
|
|
|
|
|
DBG_SYS_Printf("Boot_Comm_CheckSum Fail:%x ",Data_CheckSum(g_rev->deal_buff,g_rev->deal_len));
|
|
|
|
|
|
return 0x02;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if( (g_rev->deal_buff[BCOMM_FMT_SN] & 0x80) == 0x80){
|
|
|
|
|
|
//Ⱥ<><C8BA><EFBFBD><EFBFBD>־λ
|
|
|
|
|
|
group_flag = 0x01;
|
|
|
|
|
|
if( (g_rev->deal_buff[BCOMM_FMT_SN] & 0x0F) != g_rev->sn){
|
|
|
|
|
|
deal_flag = 0x01;
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("Group Data SN Disaffinity,Processing Data");
|
|
|
|
|
|
}else {
|
|
|
|
|
|
deal_flag = 0x00;
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("Group Data SN The Same,No Processing Data");
|
|
|
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
|
|
|
|
|
|
group_flag = 0x00;
|
|
|
|
|
|
if( (g_rev->deal_buff[BCOMM_FMT_SN] & 0x0F) != g_rev->sn){
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD>̫<EFBFBD><CCAB>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
DBG_SYS_Printf("Single Data SN Disaffinity,Processing Data");
|
|
|
|
|
|
|
|
|
|
|
|
deal_flag = 0x01;
|
|
|
|
|
|
reply_flag = 0x01;
|
|
|
|
|
|
}else if( (g_rev->deal_buff[BCOMM_FMT_SN] & 0x40) == 0x40 ){
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־λ<D6BE><CEBB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
deal_flag = 0x00;
|
|
|
|
|
|
reply_flag = 0x01;
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("Single Data SN The Same,No Processing Data");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ҳ<EFBFBD><D2B2>ǹ㲥<C7B9><E3B2A5><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
if( (g_rev->deal_buff[BCOMM_FMT_TYPE] != g_mcu_dev.dev_type) && (g_rev->deal_buff[BCOMM_FMT_TYPE] != 0xFF) ){
|
|
|
|
|
|
DBG_SYS_Printf("Boot_Comm_RecvType %d - %d ",g_mcu_dev.dev_type,g_rev->deal_buff[BCOMM_FMT_TYPE]);
|
|
|
|
|
|
return 0x03;
|
|
|
|
|
|
}
|
|
|
|
|
|
/*<2A>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>㲥<EFBFBD><E3B2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㲥<EFBFBD><E3B2A5>ַ*/
|
|
|
|
|
|
if( (g_rev->deal_buff[BCOMM_FMT_RXAddr] != g_mcu_dev.dev_addr) && (g_rev->deal_buff[BCOMM_FMT_RXAddr] != 0xFF) ){
|
|
|
|
|
|
DBG_SYS_Printf("Boot_Comm_RecvAddr %d - %d ",g_mcu_dev.dev_addr,g_rev->deal_buff[BCOMM_FMT_RXAddr]);
|
|
|
|
|
|
return 0x04;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Boot_Time_Refresh();
|
|
|
|
|
|
g_rev->pc_addr = g_rev->deal_buff[BCOMM_FMT_TXAddr];
|
|
|
|
|
|
g_rev->sn = g_rev->deal_buff[BCOMM_FMT_SN] & 0x0F;
|
|
|
|
|
|
g_rev->cmd = g_rev->deal_buff[BCOMM_FMT_CMD];
|
|
|
|
|
|
|
|
|
|
|
|
switch(g_rev->cmd)
|
|
|
|
|
|
{
|
|
|
|
|
|
case BCOMM_CMD_Handshake:
|
|
|
|
|
|
|
|
|
|
|
|
if( ( deal_flag == 0x01 ) && ( g_rev->deal_len >= ( BCOMM_FMT_PARAM + 4 ) ) ) {
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>Boot <20><>ʱʱ<CAB1><CAB1> <20><>λ<EFBFBD><CEBB>S*/
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM];
|
|
|
|
|
|
|
|
|
|
|
|
if(temp_val != g_Boot_Time)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_Boot_Time = temp_val;
|
|
|
|
|
|
if(g_Boot_Time < 10) g_Boot_Time = 10;
|
|
|
|
|
|
g_Boot_Time = g_Boot_Time * 1000;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>Ч<EFBFBD><D0A7>*/
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
g_rev->ackValidity = temp_val;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>Ҫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
|
|
|
|
|
|
if(reply_flag != 0x01) break; //<2F><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = Project_Area; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Bootload<61><64><EFBFBD><EFBFBD> 0x01<30><31>Boot;0x02<30><32>APP
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + 1] = g_mcu_dev.dev_boot_ver; //Boot <20><><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + 2] = g_mcu_dev.dev_app_ver; //APP <20><><EFBFBD><EFBFBD><EFBFBD>汾<EFBFBD><E6B1BE>
|
|
|
|
|
|
//MCU UID
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + 3] = 0x06; //CH564 <20><>MAC<41><43>ַ<EFBFBD><D6B7>ΪΨһID <20><><EFBFBD><EFBFBD>6Byte
|
|
|
|
|
|
|
|
|
|
|
|
GetMACAddress(&g_rev->ackBuffer[BCOMM_FMT_PARAM + 4]);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD> - 32Byte
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + 10] = g_mcu_dev.dev_name_len;
|
|
|
|
|
|
g_rev->ackLen = 11;
|
|
|
|
|
|
for(uint8_t i=0;i<g_mcu_dev.dev_name_len;i++){
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + i + 11] = g_mcu_dev.dev_name[i];
|
|
|
|
|
|
g_rev->ackLen++;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_Jump: //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x02){
|
|
|
|
|
|
/*<2A><>ת<EFBFBD><D7AA>APP<50><50><EFBFBD><EFBFBD>*/
|
2026-01-19 16:39:22 +08:00
|
|
|
|
g_Boot_Time = 200;
|
2026-01-05 09:40:42 +08:00
|
|
|
|
g_Boot_Tick = SysTick_1ms;
|
2026-01-19 16:39:22 +08:00
|
|
|
|
g_jump_flag = 0x01; //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ - ȫ<>ָ<EFBFBD>λ
|
2026-01-05 09:40:42 +08:00
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("ERR:Jump_boot");
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_SetInfo: //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if(g_rev->deal_len < (BCOMM_FMT_PARAM + 4) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_SetInfo Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_SetInfo Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD>*/
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM];
|
|
|
|
|
|
temp_val *= 100;
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>Boot <20><>ʱʱ<CAB1><CAB1>*/
|
|
|
|
|
|
g_Boot_Time = g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
g_Boot_Time <<= 8;
|
|
|
|
|
|
g_Boot_Time |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
if(g_Boot_Time < 10) g_Boot_Time = 10;
|
|
|
|
|
|
g_Boot_Time = g_Boot_Time * 1000;
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BaudSet: %d",temp_val);
|
|
|
|
|
|
DBG_SYS_Printf("bootTimeout: %d",g_Boot_Time);
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ChangeBaudFlag = 0x01;
|
|
|
|
|
|
g_rev->CommBaud = temp_val;
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_WriteFlash: //дFlash
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 6) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_WriteFlash Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_WriteFlash Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
/*д<><D0B4>Flash<73><68>ַ */
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM];
|
|
|
|
|
|
|
|
|
|
|
|
/*д<><D0B4>Flash<73><68><EFBFBD><EFBFBD> */
|
|
|
|
|
|
temp_val_2 = g_rev->deal_buff[BCOMM_FMT_PARAM + 5];
|
|
|
|
|
|
temp_val_2 <<= 8;
|
|
|
|
|
|
temp_val_2 |= g_rev->deal_buff[BCOMM_FMT_PARAM + 4];
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("WAddr: 0x%x Len:%d",temp_val,temp_val_2);
|
|
|
|
|
|
|
|
|
|
|
|
if (temp_val_2 == ( g_rev->deal_len - BCOMM_FMT_PARAM - 6 )){
|
|
|
|
|
|
/*Flash <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>*/
|
|
|
|
|
|
|
|
|
|
|
|
//g_rev->ackBuffer[BCOMM_FMT_PARAM] = MCU_APP_Flash_Write(&g_rev->deal_buff[BCOMM_FMT_PARAM + 6],temp_val_2,temp_val);
|
|
|
|
|
|
|
|
|
|
|
|
Flash_Write_NoCheck(&g_rev->deal_buff[BCOMM_FMT_PARAM + 6],temp_val_2,temp_val);
|
|
|
|
|
|
|
|
|
|
|
|
Flash_Read(g_read_buff, temp_val_2,temp_val);
|
|
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"App CRC BUFF:",g_read_buff,temp_val_2);
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
/*д<><D0B4>Flash <20><><EFBFBD>ڵ<EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD><CEA7> */
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
}
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_ReadFlash: //<2F><>ȡFlash
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 6) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_ReadFlash Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_ReadFlash Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><>ȡFlash<73><68>ַ */
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM];
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><>ȡFlash<73><68><EFBFBD><EFBFBD> */
|
|
|
|
|
|
temp_val_2 = g_rev->deal_buff[BCOMM_FMT_PARAM + 5];
|
|
|
|
|
|
temp_val_2 <<= 8;
|
|
|
|
|
|
temp_val_2 |= g_rev->deal_buff[BCOMM_FMT_PARAM + 4];
|
|
|
|
|
|
|
|
|
|
|
|
if(temp_val_2 > BCOMM_ParaSize) temp_val_2 = BCOMM_ParaSize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3A4><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>ACK BUFF<46><46>С
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = MCU_APP_Flash_Read(&g_rev->ackBuffer[BCOMM_FMT_PARAM + 1],temp_val_2,temp_val);
|
|
|
|
|
|
if(g_rev->ackBuffer[BCOMM_FMT_PARAM] == BCOMM_CMD_ReplySUCC)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_rev->ackLen = temp_val_2 + 1;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_EraseFlash: //<2F><><EFBFBD><EFBFBD>Flash
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 1) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_ReadFlash Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_EraseFlash Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x01){
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>APP Flash ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 7) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_EraseFlash Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>Flash<73><68>ַ */
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 4];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>Flash <20><><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
temp_val_2 = g_rev->deal_buff[BCOMM_FMT_PARAM + 6];
|
|
|
|
|
|
temp_val_2 <<= 8;
|
|
|
|
|
|
temp_val_2 |= g_rev->deal_buff[BCOMM_FMT_PARAM + 5];
|
|
|
|
|
|
|
|
|
|
|
|
if( (MCU_APP_Flash_Start_Addr <= temp_val) && ( (temp_val + temp_val_2) < MCU_APP_Flash_End_Addr ) ){
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("EraseFlash Addr:%x Len:%d ",temp_val,temp_val_2);
|
|
|
|
|
|
|
|
|
|
|
|
temp_val = temp_val - (temp_val % MCU_APP_Flash_PageSize);
|
|
|
|
|
|
for(uint32_t i = temp_val;i<(temp_val + temp_val_2) ;i+=MCU_APP_Flash_PageSize){
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("PageErase Addr:%x ",i);
|
|
|
|
|
|
|
|
|
|
|
|
//FLASH_ROMA_ERASE(i,MCU_APP_Flash_PageSize);
|
|
|
|
|
|
//Flash_Erase_Sector(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
/*д<><D0B4>Flash <20><><EFBFBD>ڵ<EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD><CEA7> */
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}else if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x02){
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>APP Flash ͬʱҲ<CAB1><D2B2>APP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
SPI_FLASH_APP_Data_Erase();
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_WriteEEPROM: //дEEPROM
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 6) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_WriteEEPROM Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_WriteEEPROM Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
/*д<><D0B4>Flash<73><68>ַ */
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM];
|
|
|
|
|
|
|
|
|
|
|
|
/*д<><D0B4>Flash<73><68><EFBFBD><EFBFBD> */
|
|
|
|
|
|
temp_val_2 = g_rev->deal_buff[BCOMM_FMT_PARAM + 5];
|
|
|
|
|
|
temp_val_2 <<= 8;
|
|
|
|
|
|
temp_val_2 |= g_rev->deal_buff[BCOMM_FMT_PARAM + 4];
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("WAddr: 0x%x Len:%d",temp_val,temp_val_2);
|
|
|
|
|
|
|
|
|
|
|
|
if (temp_val_2 == ( g_rev->deal_len - BCOMM_FMT_PARAM - 6 )){
|
|
|
|
|
|
/*Flash <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>*/
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = MCU_EEPROM_Write(&g_rev->deal_buff[BCOMM_FMT_PARAM + 6],temp_val_2,temp_val);
|
|
|
|
|
|
}else {
|
|
|
|
|
|
/*д<><D0B4>Flash <20><><EFBFBD>ڵ<EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD><CEA7> */
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
}
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_ReadEEPROM: //дEEPROM
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 6) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_ReadFlash Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_ReadFlash Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><>ȡFlash<73><68>ַ */
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM];
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><>ȡFlash<73><68><EFBFBD><EFBFBD> */
|
|
|
|
|
|
temp_val_2 = g_rev->deal_buff[BCOMM_FMT_PARAM + 5];
|
|
|
|
|
|
temp_val_2 <<= 8;
|
|
|
|
|
|
temp_val_2 |= g_rev->deal_buff[BCOMM_FMT_PARAM + 4];
|
|
|
|
|
|
|
|
|
|
|
|
if(temp_val_2 > BCOMM_ParaSize) temp_val_2 = BCOMM_ParaSize; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3A4><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>ACK BUFF<46><46>С
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = MCU_APP_Flash_Read(&g_rev->ackBuffer[BCOMM_FMT_PARAM + 1],temp_val_2,temp_val);
|
|
|
|
|
|
if(g_rev->ackBuffer[BCOMM_FMT_PARAM] == BCOMM_CMD_ReplySUCC)
|
|
|
|
|
|
{
|
|
|
|
|
|
g_rev->ackLen = temp_val_2 + 1;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_EraseEEPROM: //<2F><><EFBFBD><EFBFBD>EEPROM
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 1) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_EraseEEPROM Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_EraseEEPROM Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x01){
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>APP Flash ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 7) ) {
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_EraseEEPROM Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>Flash<73><68>ַ */
|
|
|
|
|
|
temp_val = g_rev->deal_buff[BCOMM_FMT_PARAM + 4];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
temp_val <<= 8;
|
|
|
|
|
|
temp_val |= g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>Flash <20><><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
temp_val_2 = g_rev->deal_buff[BCOMM_FMT_PARAM + 6];
|
|
|
|
|
|
temp_val_2 <<= 8;
|
|
|
|
|
|
temp_val_2 |= g_rev->deal_buff[BCOMM_FMT_PARAM + 5];
|
|
|
|
|
|
|
|
|
|
|
|
if( (MCU_APP_Flash_Start_Addr <= temp_val) && ( (temp_val + temp_val_2) < MCU_APP_Flash_End_Addr ) ){
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("EraseFlash Addr:%x Len:%d ",temp_val,temp_val_2);
|
|
|
|
|
|
|
|
|
|
|
|
temp_val = temp_val - (temp_val % MCU_APP_Flash_PageSize);
|
|
|
|
|
|
for(uint32_t i = temp_val;i<(temp_val + temp_val_2) ;i+=MCU_APP_Flash_PageSize){
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("PageErase Addr:%x ",i);
|
|
|
|
|
|
|
|
|
|
|
|
FLASH_ROMA_ERASE(i,MCU_APP_Flash_PageSize);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
/*д<><D0B4>Flash <20><><EFBFBD>ڵ<EFBFBD>ַ<EFBFBD><D6B7>Χ<EFBFBD><CEA7> */
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}else if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x02){
|
|
|
|
|
|
/*<2A><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>EEPROM*/
|
|
|
|
|
|
MCU_EEPROM_ALLErase();
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case BCOMM_CMD_CheckData: //У<><D0A3>
|
|
|
|
|
|
if(deal_flag != 0x01) break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
if( g_rev->deal_len < (BCOMM_FMT_PARAM + 10) ) {
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_CheckData Para Error ");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("BCOMM_CMD_CheckData Proecessing ");
|
|
|
|
|
|
|
|
|
|
|
|
memset(&g_app_feature,0,sizeof(G_SYS_FEATURE_T));
|
|
|
|
|
|
|
|
|
|
|
|
/* У<><D0A3>CRC <20><>ʼ<EFBFBD><CABC>ַ*/
|
|
|
|
|
|
g_app_feature.app_start_addr = g_rev->deal_buff[BCOMM_FMT_PARAM + 3];
|
|
|
|
|
|
g_app_feature.app_start_addr <<= 8;
|
|
|
|
|
|
g_app_feature.app_start_addr |= g_rev->deal_buff[BCOMM_FMT_PARAM + 2];
|
|
|
|
|
|
g_app_feature.app_start_addr <<= 8;
|
|
|
|
|
|
g_app_feature.app_start_addr |= g_rev->deal_buff[BCOMM_FMT_PARAM + 1];
|
|
|
|
|
|
g_app_feature.app_start_addr <<= 8;
|
|
|
|
|
|
g_app_feature.app_start_addr |= g_rev->deal_buff[BCOMM_FMT_PARAM];
|
|
|
|
|
|
|
|
|
|
|
|
/* У<><D0A3>CRC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ*/
|
|
|
|
|
|
g_app_feature.app_end_addr = g_rev->deal_buff[BCOMM_FMT_PARAM + 7];
|
|
|
|
|
|
g_app_feature.app_end_addr <<= 8;
|
|
|
|
|
|
g_app_feature.app_end_addr |= g_rev->deal_buff[BCOMM_FMT_PARAM + 6];
|
|
|
|
|
|
g_app_feature.app_end_addr <<= 8;
|
|
|
|
|
|
g_app_feature.app_end_addr |= g_rev->deal_buff[BCOMM_FMT_PARAM + 5];
|
|
|
|
|
|
g_app_feature.app_end_addr <<= 8;
|
|
|
|
|
|
g_app_feature.app_end_addr |= g_rev->deal_buff[BCOMM_FMT_PARAM + 4];
|
|
|
|
|
|
|
|
|
|
|
|
/* У<><D0A3>CRC <20><>С*/
|
|
|
|
|
|
g_app_feature.app_crc_size = g_rev->deal_buff[BCOMM_FMT_PARAM + 9];
|
|
|
|
|
|
g_app_feature.app_crc_size <<= 8;
|
|
|
|
|
|
g_app_feature.app_crc_size |= g_rev->deal_buff[BCOMM_FMT_PARAM + 8];
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("App Start_addr :%x ",g_app_feature.app_start_addr);
|
|
|
|
|
|
DBG_SYS_Printf("App End_addr :%x ",g_app_feature.app_end_addr);
|
|
|
|
|
|
DBG_SYS_Printf("App CRC Block_Size :%d ",g_app_feature.app_crc_size);
|
|
|
|
|
|
|
|
|
|
|
|
if( (g_app_feature.app_start_addr >= MCU_APP_Flash_Start_Addr)
|
|
|
|
|
|
&& (g_app_feature.app_end_addr < MCU_APP_Flash_End_Addr)
|
|
|
|
|
|
&& (g_app_feature.app_end_addr > g_app_feature.app_start_addr)
|
|
|
|
|
|
&& (g_app_feature.app_crc_size == MCU_APP_Flash_PageSize) )
|
|
|
|
|
|
{
|
|
|
|
|
|
temp_val = g_app_feature.app_end_addr - g_app_feature.app_start_addr;
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("App Len :%d ",temp_val);
|
|
|
|
|
|
|
|
|
|
|
|
if( (temp_val % g_app_feature.app_crc_size ) != 0x00 ){
|
|
|
|
|
|
g_app_feature.app_crc_len = ((temp_val / g_app_feature.app_crc_size) + 1) * 2;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
g_app_feature.app_crc_len = (temp_val / g_app_feature.app_crc_size) * 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("App CRC BLock:%d ",g_app_feature.app_crc_len);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ȶ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD> <20>Բ<EFBFBD><D4B2><EFBFBD> */
|
|
|
|
|
|
if( (BCOMM_FMT_PARAM + 10 + g_app_feature.app_crc_len ) == g_rev->deal_len ){
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t crc_data_len = 0;
|
|
|
|
|
|
crcNumIndex = 0;
|
|
|
|
|
|
|
|
|
|
|
|
memcpy(g_app_feature.app_crc,&g_rev->deal_buff[BCOMM_FMT_PARAM + 10],(g_rev->deal_len - 10 - BCOMM_FMT_PARAM) );
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
{
|
2026-01-19 16:39:22 +08:00
|
|
|
|
WDT_Feed();
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
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 {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_end_addr - crc_addr;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memset(g_read_buff,0,sizeof(g_read_buff));
|
|
|
|
|
|
|
|
|
|
|
|
if(crc_data_len > 2048)
|
|
|
|
|
|
{
|
|
|
|
|
|
Flash_Read(g_read_buff,2048,crc_addr);
|
|
|
|
|
|
Flash_Read(&g_read_buff[2048],(crc_data_len - 2048),crc_addr+2048);
|
|
|
|
|
|
}else {
|
|
|
|
|
|
Flash_Read(g_read_buff,crc_data_len,crc_addr);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
temp_val = CRC16_Check(g_read_buff,crc_data_len);
|
|
|
|
|
|
temp_val_2 = g_app_feature.app_crc[crcNumIndex + 1];
|
|
|
|
|
|
temp_val_2 <<= 8;
|
|
|
|
|
|
temp_val_2 |= g_app_feature.app_crc[crcNumIndex];
|
|
|
|
|
|
|
|
|
|
|
|
//DBG_SYS_Printf("App CRC ADDR:%x %x-%x",crc_addr,temp_val,temp_val_2);
|
|
|
|
|
|
//Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"App CRC BUFF:",g_read_buff,crc_data_len);
|
|
|
|
|
|
|
|
|
|
|
|
if(temp_val != temp_val_2){
|
|
|
|
|
|
/*У<><D0A3>ʧ<EFBFBD><CAA7> - */
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM ] = BCOMM_CMD_ReplyFAIL;
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + 5 + crcResultFlag*4] = ((crc_addr >> 24) & 0xFF);
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + 4 + crcResultFlag*4] = ((crc_addr >> 16) & 0xFF);
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"Flash Data:",g_read_buff,crc_data_len);
|
2026-01-05 09:40:42 +08:00
|
|
|
|
DBG_SYS_Printf("App CRC Fail ADDR:%X %X-%X",crc_addr,temp_val,temp_val_2);
|
|
|
|
|
|
|
|
|
|
|
|
crcResultFlag++;
|
|
|
|
|
|
if(crcResultFlag >= 20) break;
|
|
|
|
|
|
}
|
|
|
|
|
|
crcNumIndex += 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(crcResultFlag == 0x00){
|
|
|
|
|
|
/*У<><D0A3><EFBFBD>ɹ<EFBFBD> - д<><D0B4>APP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
g_app_feature.app_flag = App_Procedure_Ready;
|
|
|
|
|
|
g_app_feature.crc_check = 0x00;
|
|
|
|
|
|
|
|
|
|
|
|
Write_APP_Feature_Info(0x02,&g_app_feature);
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM + 1] = crcResultFlag;
|
|
|
|
|
|
g_rev->ackLen = 2 + crcResultFlag*4;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
/*<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
DBG_SYS_Printf("App CRC BLock ERROR:%d %d",temp_val,g_rev->deal_len);
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = 0x02;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("App CRC Para ERROR");
|
|
|
|
|
|
|
|
|
|
|
|
g_rev->ackBuffer[BCOMM_FMT_PARAM] = 0x01;
|
|
|
|
|
|
g_rev->ackLen = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ظ<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
if( (group_flag == 0x00) && (reply_flag == 0x01) )
|
|
|
|
|
|
{
|
|
|
|
|
|
Boot_Comm_FillReplyPack(g_rev);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : Read_APP_Feature
|
|
|
|
|
|
* Description : <EFBFBD><EFBFBD>ȡAPP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* Return :
|
|
|
|
|
|
0<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
1<EFBFBD><EFBFBD>Flash<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
2<EFBFBD><EFBFBD>MCU APP<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
uint8_t Read_APP_Feature(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t rev = 0;
|
|
|
|
|
|
uint8_t crcResultFlag = TRUE;
|
|
|
|
|
|
uint16_t crcNumIndex = 0;
|
|
|
|
|
|
uint16_t crcVal = 0;
|
|
|
|
|
|
uint8_t crcValH = 0, crcValL = 0;
|
|
|
|
|
|
uint32_t crc_data_len = 0;
|
2026-01-19 16:39:22 +08:00
|
|
|
|
uint8_t update_flag = 0;
|
2026-01-05 09:40:42 +08:00
|
|
|
|
|
|
|
|
|
|
memset(&g_app_feature,0,sizeof(G_SYS_FEATURE_T));
|
|
|
|
|
|
memset(&g_mcu_app_feature,0,sizeof(G_SYS_FEATURE_T));
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD>ⲿ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(0x02,&g_app_feature);
|
|
|
|
|
|
if(rev == 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("SPIFlash APP Feature Check Succ");
|
|
|
|
|
|
APP_Feature_Info_Printf(&g_app_feature);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ж<EFBFBD>APP <20><>־λ<D6BE>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
if(g_app_feature.app_flag == App_Procedure_Ready)
|
|
|
|
|
|
{
|
|
|
|
|
|
/*<2A>ж<EFBFBD>APP <20><>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Լ<EFBFBD>CRCУ<43><D0A3><EFBFBD><EFBFBD>С<EFBFBD>Ƿ<EFBFBD><C7B7>ڷ<EFBFBD>Χ<EFBFBD><CEA7>*/
|
|
|
|
|
|
if( ( g_app_feature.app_start_addr < MCU_APP_Flash_Start_Addr ) \
|
|
|
|
|
|
|| ( g_app_feature.app_end_addr > MCU_APP_Flash_End_Addr ) \
|
|
|
|
|
|
|| ( g_app_feature.app_crc_size != MCU_APP_Flash_PageSize ) )
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("SPIFlash Flash APP ADDRESS ERROR!");
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x03);
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ⲿflash У<><D0A3>APP<50><50><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
crcNumIndex = 0;
|
|
|
|
|
|
memset(g_read_buff,0,sizeof(g_read_buff));
|
|
|
|
|
|
for(uint32_t i = g_app_feature.app_start_addr; i < g_app_feature.app_end_addr; i += g_app_feature.app_crc_size)
|
|
|
|
|
|
{
|
|
|
|
|
|
if( g_app_feature.app_end_addr - i >= g_app_feature.app_crc_size) {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_crc_size;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_end_addr - i;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memset(g_read_buff,0,sizeof(g_read_buff));
|
|
|
|
|
|
|
|
|
|
|
|
if(crc_data_len > 2048)
|
|
|
|
|
|
{
|
|
|
|
|
|
Flash_Read(g_read_buff,2048,i);
|
|
|
|
|
|
Flash_Read(&g_read_buff[2048],(crc_data_len - 2048),i+2048);
|
|
|
|
|
|
}else {
|
|
|
|
|
|
Flash_Read(g_read_buff,crc_data_len,i);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
crcVal = CRC16_Check(g_read_buff, crc_data_len);
|
|
|
|
|
|
crcValH = crcVal >> 8;
|
|
|
|
|
|
crcValL = crcVal & 0xFF;
|
|
|
|
|
|
if((g_app_feature.app_crc[crcNumIndex + 1] != crcValH) || (g_app_feature.app_crc[ crcNumIndex] != crcValL))
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("block:%d , app_crc:%x%x , crcVal:%X\r\n",crcNumIndex,g_app_feature.app_crc[crcNumIndex],g_app_feature.app_crc[1 + crcNumIndex],crcVal);
|
|
|
|
|
|
|
|
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"Read Flash:",g_read_buff,MCU_APP_Flash_PageSize);
|
|
|
|
|
|
|
|
|
|
|
|
crcResultFlag = FALSE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
crcNumIndex+=2;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(crcResultFlag == FALSE)
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("SPI FLash APP ERROR! - <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>\r\n");
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
Flash_Erase_Pageaddr(SPIFLASH_APP_FEATURE_Addr);
|
|
|
|
|
|
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x04);
|
|
|
|
|
|
return 1; //У<><D0A3>ʧ<EFBFBD><CAA7>
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x05);
|
|
|
|
|
|
return 1; //ûAPP<50><50><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
|
|
|
DBG_SYS_Printf("SPIFlash APP Feature Check Fail \r\n");
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x06);
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
/*<2A>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB>д<EFBFBD><D0B4>Flash <20><>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>¹̼<C2B9><CCBC><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><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>
|
|
|
|
|
|
* <EFBFBD><EFBFBD>app_flag <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0x05<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<EFBFBD><EFBFBD>ΪAPP <EFBFBD>̼<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* ÿд<EFBFBD><EFBFBD>һ<EFBFBD>Σ<EFBFBD>app_flag <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<EFBFBD><EFBFBD><EFBFBD>㲻<EFBFBD><EFBFBD><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>*/
|
2026-01-05 09:40:42 +08:00
|
|
|
|
rev = Read_APP_Feature_Info(0x01,&g_mcu_app_feature);
|
|
|
|
|
|
if(rev == 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("MCU Flash APP Feature Check Succ");
|
|
|
|
|
|
APP_Feature_Info_Printf(&g_mcu_app_feature);
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ж<EFBFBD>APP <20><>־λ<D6BE>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
if(g_mcu_app_feature.app_flag == App_Procedure_Ready)
|
|
|
|
|
|
{
|
|
|
|
|
|
/*<2A>ж<EFBFBD>APP <20><>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>Լ<EFBFBD>CRCУ<43><D0A3><EFBFBD><EFBFBD>С<EFBFBD>Ƿ<EFBFBD><C7B7>ڷ<EFBFBD>Χ<EFBFBD><CEA7>*/
|
|
|
|
|
|
if( ( g_mcu_app_feature.app_start_addr < MCU_APP_Flash_Start_Addr ) \
|
|
|
|
|
|
|| ( g_mcu_app_feature.app_end_addr > MCU_APP_Flash_End_Addr ) \
|
|
|
|
|
|
|| ( g_mcu_app_feature.app_crc_size != MCU_APP_Flash_PageSize ) )
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("MCU Flash APP ADDRESS ERROR!");
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x03);
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<2A>ⲿflash У<><D0A3>APP<50><50><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
crcNumIndex = 0;
|
|
|
|
|
|
memset(g_read_buff,0,sizeof(g_read_buff));
|
|
|
|
|
|
for(uint32_t i = g_mcu_app_feature.app_start_addr; i < g_mcu_app_feature.app_end_addr; i += g_mcu_app_feature.app_crc_size)
|
|
|
|
|
|
{
|
|
|
|
|
|
if( g_app_feature.app_end_addr - i >= g_app_feature.app_crc_size) {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_crc_size;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_end_addr - i;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memset(g_read_buff,0,sizeof(g_read_buff));
|
|
|
|
|
|
|
|
|
|
|
|
MCU_APP_Flash_Read(g_read_buff ,crc_data_len,i);
|
|
|
|
|
|
|
|
|
|
|
|
crcVal = CRC16_Check(g_read_buff, crc_data_len);
|
|
|
|
|
|
crcValH = crcVal >> 8;
|
|
|
|
|
|
crcValL = crcVal & 0xFF;
|
|
|
|
|
|
if((g_mcu_app_feature.app_crc[crcNumIndex + 1] != crcValH) || (g_mcu_app_feature.app_crc[crcNumIndex] != crcValL))
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("block:%d , app_crc:%x%x , crcVal:%X\r\n",crcNumIndex,g_mcu_app_feature.app_crc[crcNumIndex],g_mcu_app_feature.app_crc[1 + crcNumIndex],crcVal);
|
|
|
|
|
|
|
|
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"Read Flash:",g_read_buff,MCU_APP_Flash_PageSize);
|
|
|
|
|
|
|
|
|
|
|
|
crcResultFlag = FALSE;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
crcNumIndex+=2;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(crcResultFlag == FALSE)
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("APP ERROR! \r\n");
|
|
|
|
|
|
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x07);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
|
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x08);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
|
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
|
|
|
DBG_SYS_Printf("MCU Feature ERROR! \r\n");
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x09);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
|
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*<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);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
|
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
|
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
|
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for(uint16_t j = 0;j<g_app_feature.app_crc_len;j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(g_mcu_app_feature.app_crc[j] != g_app_feature.app_crc[j])
|
|
|
|
|
|
{
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x02);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
|
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
if(update_flag != 0x00)
|
|
|
|
|
|
{
|
|
|
|
|
|
/*<2A>ⲿ<EFBFBD>洢<EFBFBD><E6B4A2>APP <20><><EFBFBD>µı<C2B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD>
|
|
|
|
|
|
* <EFBFBD><EFBFBD>ʵMCU Flash<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><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);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
/*û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><D7BC> <20><>תAPP*/
|
|
|
|
|
|
LOG_Launcher_APP_Check_Record(0x00);
|
|
|
|
|
|
return 0x00;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : MCU_APP_Write
|
|
|
|
|
|
* Description : MCU Flash APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뺯<EFBFBD><EFBFBD>
|
|
|
|
|
|
* Input :
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
uint8_t MCU_APP_Write(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t rev = 0;
|
|
|
|
|
|
uint8_t crcValH = 0, crcValL = 0;
|
|
|
|
|
|
uint16_t crcVal = 0,crcNumIndex = 0;
|
|
|
|
|
|
uint32_t crc_data_len = 0;
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
SPIFLASH_Read_Update_Recode(&g_update_recode); //<2F><>ȡAPPд<50><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
g_update_recode.mcuflash_fw_count++;
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
DBG_SYS_Printf("MCU Flash <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>");
|
2026-01-19 16:39:22 +08:00
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
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>");
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if( ( g_app_feature.app_start_addr < MCU_APP_Flash_Start_Addr ) || ( g_app_feature.app_start_addr > MCU_APP_Data_End_Addr ) ){
|
|
|
|
|
|
DBG_SYS_Printf("MCU Flash app_start_addr:0x%x Error",g_app_feature.app_start_addr);
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if( ( g_app_feature.app_end_addr > MCU_APP_Data_End_Addr ) || ( g_app_feature.app_start_addr > g_app_feature.app_end_addr ) ){
|
|
|
|
|
|
DBG_SYS_Printf("MCU Flash app_end_addr:0x%x - 0x%x Error",g_app_feature.app_start_addr,g_app_feature.app_end_addr);
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if( g_app_feature.app_crc_size != MCU_APP_Flash_PageSize ){
|
|
|
|
|
|
DBG_SYS_Printf("MCU Flash app_crc_size:%x Error",g_app_feature.app_crc_size);
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*1<><31>д<EFBFBD><D0B4>APP Flash<73><68><EFBFBD><EFBFBD> - <20><><EFBFBD>տ<EFBFBD><D5BF><EFBFBD>Сд<D0A1><D0B4>APP Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
for(uint32_t i = g_app_feature.app_start_addr;i < g_app_feature.app_end_addr;i += MCU_APP_Flash_PageSize )
|
|
|
|
|
|
{
|
|
|
|
|
|
if( g_app_feature.app_end_addr - i >= g_app_feature.app_crc_size) {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_crc_size;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_end_addr - i;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memset(g_read_buff,0,sizeof(g_read_buff));
|
|
|
|
|
|
|
|
|
|
|
|
if(crc_data_len > 2048)
|
|
|
|
|
|
{
|
|
|
|
|
|
Flash_Read(g_read_buff,2048,i);
|
|
|
|
|
|
Flash_Read(&g_read_buff[2048],(crc_data_len - 2048),i+2048);
|
|
|
|
|
|
}else {
|
|
|
|
|
|
Flash_Read(g_read_buff,crc_data_len,i);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("MCU Write APP Addr:%x",i);
|
|
|
|
|
|
|
|
|
|
|
|
rev = MCU_APP_Flash_Write(g_read_buff,crc_data_len,i);
|
|
|
|
|
|
|
|
|
|
|
|
if(rev != 0x00){
|
|
|
|
|
|
DBG_SYS_Printf("MCU Flash Write:%x Error",i);
|
|
|
|
|
|
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*2<><32>д<EFBFBD><D0B4>APP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
g_mcu_app_feature.app_flag = g_app_feature.app_flag;
|
|
|
|
|
|
g_mcu_app_feature.app_start_addr = g_app_feature.app_start_addr;
|
|
|
|
|
|
g_mcu_app_feature.app_end_addr = g_app_feature.app_end_addr;
|
|
|
|
|
|
g_mcu_app_feature.app_crc_size = g_app_feature.app_crc_size;
|
|
|
|
|
|
g_mcu_app_feature.app_crc_len = g_app_feature.app_crc_len;
|
|
|
|
|
|
g_mcu_app_feature.crc_check = g_app_feature.crc_check;
|
|
|
|
|
|
memcpy(g_mcu_app_feature.app_crc,g_app_feature.app_crc,APP_Feature_CRC_Size);
|
|
|
|
|
|
rev = Write_APP_Feature_Info(0x01,&g_mcu_app_feature);
|
|
|
|
|
|
if(rev != 0x00){
|
|
|
|
|
|
DBG_SYS_Printf("MCU Write APP Feature_Info Error");
|
|
|
|
|
|
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*3<><33><EFBFBD><EFBFBD>ȡAPP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Ҷ<EFBFBD>APP Flash<73><68><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>CRCУ<43><D0A3>*/
|
|
|
|
|
|
rev = Read_APP_Feature_Info(0x01,&g_mcu_app_feature);
|
|
|
|
|
|
if(rev != 0x00){
|
|
|
|
|
|
DBG_SYS_Printf("MCU Read APP Feature_Info Error");
|
|
|
|
|
|
|
|
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for(uint32_t i = g_mcu_app_feature.app_start_addr; i < g_mcu_app_feature.app_end_addr; i += MCU_APP_Flash_PageSize)
|
|
|
|
|
|
{
|
|
|
|
|
|
if( g_app_feature.app_end_addr - i >= g_app_feature.app_crc_size) {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_crc_size;
|
|
|
|
|
|
}else {
|
|
|
|
|
|
crc_data_len = g_app_feature.app_end_addr - i;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memset(g_read_buff,0,sizeof(g_read_buff));
|
|
|
|
|
|
|
|
|
|
|
|
rev = MCU_APP_Flash_Read(g_read_buff,crc_data_len,i);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
//Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash:", g_read_buff, crc_data_len);
|
2026-01-05 09:40:42 +08:00
|
|
|
|
|
|
|
|
|
|
crcVal = CRC16_Check(g_read_buff, crc_data_len);
|
|
|
|
|
|
crcValH = crcVal >> 8;
|
|
|
|
|
|
crcValL = crcVal & 0xFF;
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("MCU Write APP Addr:%x - CRC:%x",i,crcVal);
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
2026-01-19 16:39:22 +08:00
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash CRC Error:", g_read_buff, crc_data_len);
|
2026-01-05 09:40:42 +08:00
|
|
|
|
|
|
|
|
|
|
if(crc_data_len > 2048)
|
|
|
|
|
|
{
|
|
|
|
|
|
Flash_Read(g_read_buff,2048,i);
|
|
|
|
|
|
Flash_Read(&g_read_buff[2048],(crc_data_len - 2048),i+2048);
|
|
|
|
|
|
}else {
|
|
|
|
|
|
Flash_Read(g_read_buff,crc_data_len,i);
|
|
|
|
|
|
}
|
|
|
|
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "SPI Flash:", g_flash_buff, MCU_APP_Flash_PageSize);
|
|
|
|
|
|
|
|
|
|
|
|
for(uint32_t t_addr = 0;t_addr < crc_data_len;t_addr++ )
|
|
|
|
|
|
{
|
|
|
|
|
|
if(g_read_buff[t_addr] != g_flash_buff[t_addr])
|
|
|
|
|
|
{
|
|
|
|
|
|
DBG_SYS_Printf("Different Addr:%x %x - %x",i+t_addr,g_read_buff[t_addr],g_flash_buff[t_addr]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
/*д<><D0B4>ʧ<EFBFBD><CAA7> - ʧ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD>һ*/
|
|
|
|
|
|
g_update_recode.mcuflash_fw_fail++;
|
|
|
|
|
|
SPIFLASH_Write_Update_Recode(&g_update_recode);
|
2026-01-05 09:40:42 +08:00
|
|
|
|
return 0x01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
crcNumIndex += 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
/*д<><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);
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
/*4<><34>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD>*/
|
|
|
|
|
|
DBG_SYS_Printf("MCU APP Update Succ!!");
|
|
|
|
|
|
LOG_Launcher_Read_App_Record(0x00);
|
|
|
|
|
|
|
|
|
|
|
|
return 0x00;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : SPIFLASH_Read_Update_Recode
|
|
|
|
|
|
* Description : MCU Flash APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뺯<EFBFBD><EFBFBD>
|
|
|
|
|
|
* Input :
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
uint8_t SPIFLASH_Read_Update_Recode(UPDATE_RECORD_T *info)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t read_len = 0;
|
|
|
|
|
|
|
|
|
|
|
|
memset(g_flash_buff,0,sizeof(g_flash_buff));
|
|
|
|
|
|
|
|
|
|
|
|
Flash_Read(g_flash_buff, APP_FEATURE_SIZE, SPIFLASH_UPDATE_RECORD_Addr);
|
|
|
|
|
|
|
|
|
|
|
|
if(g_flash_buff[EEPROM_Offset_SaveFlag] == EEPROM_SVAE_FLAG)
|
|
|
|
|
|
{
|
|
|
|
|
|
read_len = g_flash_buff[EEPROM_Offset_Datalen + 1];
|
|
|
|
|
|
read_len <<= 8;
|
|
|
|
|
|
read_len |= g_flash_buff[EEPROM_Offset_Datalen];
|
|
|
|
|
|
|
|
|
|
|
|
DBG_SYS_Printf("%s read_len : %d ",__func__,read_len);
|
|
|
|
|
|
if(read_len == UPDATE_RECORD_INFO_Size)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(EEPROM_CheckSum(&g_flash_buff[EEPROM_Offset_Data],read_len) == g_flash_buff[EEPROM_Offset_Check]){
|
|
|
|
|
|
|
|
|
|
|
|
memcpy((uint8_t *)info,&g_flash_buff[EEPROM_Offset_Data],read_len);
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
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);
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
return 0x00; //<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
}else {
|
|
|
|
|
|
DBG_SYS_Printf("%s Check Error !",__func__);
|
|
|
|
|
|
}
|
|
|
|
|
|
}else {
|
|
|
|
|
|
DBG_SYS_Printf("%s Len Error !",__func__);
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
DBG_SYS_Printf("%s Flag Error !",__func__);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
/*<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;
|
|
|
|
|
|
|
2026-01-05 09:40:42 +08:00
|
|
|
|
return 0x01; //<2F><>ȡʧ<C8A1><CAA7>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : SPIFLASH_Write_Update_Recode
|
|
|
|
|
|
* Description : SPI Flash д<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>¼
|
|
|
|
|
|
* Input :
|
|
|
|
|
|
*******************************************************************************/
|
2026-01-05 09:40:42 +08:00
|
|
|
|
uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint16_t save_len = UPDATE_RECORD_INFO_Size;
|
|
|
|
|
|
memset(g_flash_buff,0,sizeof(g_flash_buff));
|
|
|
|
|
|
|
|
|
|
|
|
g_flash_buff[EEPROM_Offset_SaveFlag] = EEPROM_SVAE_FLAG;
|
|
|
|
|
|
g_flash_buff[EEPROM_Offset_Datalen] = save_len & 0xFF;
|
|
|
|
|
|
g_flash_buff[EEPROM_Offset_Datalen] = (save_len >> 8) & 0xFF;
|
|
|
|
|
|
|
|
|
|
|
|
memcpy(&g_flash_buff[EEPROM_Offset_Data],(uint8_t *)info,save_len);
|
|
|
|
|
|
g_flash_buff[3] = EEPROM_CheckSum(&g_flash_buff[4],save_len);
|
|
|
|
|
|
|
|
|
|
|
|
save_len+=4;
|
|
|
|
|
|
|
|
|
|
|
|
Flash_Write(g_flash_buff, APP_FEATURE_SIZE, SPIFLASH_UPDATE_RECORD_Addr);
|
|
|
|
|
|
|
|
|
|
|
|
return 0x00;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
/*******************************************************************************
|
|
|
|
|
|
* Function Name : Read_APP_Update_Flag_Info
|
|
|
|
|
|
* Description : <EFBFBD><EFBFBD>ȡAPP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD>FLash<EFBFBD><EFBFBD>SRAM<EFBFBD>У<EFBFBD>
|
|
|
|
|
|
* 1<EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD>ⲿFlash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿFlash<EFBFBD>ж<EFBFBD>ȡʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ⲿSRAM<EFBFBD>ж<EFBFBD>ȡ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* 2<EFBFBD><EFBFBD><EFBFBD>ⲿSRAMҲ<EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ֮ǰû<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>¼
|
|
|
|
|
|
* Para :
|
|
|
|
|
|
* flag_info - APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* Return <EFBFBD><EFBFBD>
|
|
|
|
|
|
* 0x00 - <EFBFBD><EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
* 0x01 - <EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD>
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
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 : д<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD>FLash<EFBFBD><EFBFBD>SRAM<EFBFBD><EFBFBD>
|
|
|
|
|
|
* Para :
|
|
|
|
|
|
* flag_info - APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* Return <EFBFBD><EFBFBD>
|
|
|
|
|
|
* 0x00 - д<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
* 0x01 - д<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
|
|
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
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;
|
2026-01-05 09:40:42 +08:00
|
|
|
|
|
2026-01-19 16:39:22 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2026-01-05 09:40:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|