新增:串口通讯避障功能
1、Launcher中的串口只使用串口0(调试串口)、串口2(主动RS485端口);串口1与串口3不使用,且不初始化。将串口通讯缓冲区修改为1100Byte。 目的:CH564由于将Launcher代码搬运到RAM中运行,因此可使用的变量大小只有32Kbyte。不使用的串口将不初始化,同时使用的通讯缓冲区将节约出来,否则RAM空间不够使用。 2、串口2 - 增加RS485使能,同时通讯增加避障功能。
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user