633 lines
23 KiB
C
633 lines
23 KiB
C
|
|
/*
|
|||
|
|
* mcu_flash.c
|
|||
|
|
*
|
|||
|
|
* Created on: Dec 8, 2025
|
|||
|
|
* Author: cc
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#include "includes.h"
|
|||
|
|
#include <string.h>
|
|||
|
|
|
|||
|
|
E_MCU_DEV_INFO g_mcu_dev;
|
|||
|
|
G_SYS_FEATURE_T g_app_feature; //APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
uint8_t g_flash_buff[570] = {0};
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : EEPROM_Init
|
|||
|
|
* Description : EEPROM <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void EEPROM_Init(void)
|
|||
|
|
{
|
|||
|
|
uint8_t rev = 0;
|
|||
|
|
|
|||
|
|
rev = EEPROM_ReadMCUDevInfo(&g_mcu_dev);
|
|||
|
|
if(rev == 0x00){
|
|||
|
|
//<2F><>ȡ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>ʼУ<CABC><D0A3><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
|||
|
|
EEPROM_Validate_MCUDevInfo(&g_mcu_dev);
|
|||
|
|
}else{
|
|||
|
|
//<2F><>ȡʧ<C8A1>ܣ<EFBFBD><DCA3>ָ<EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE Use Defalut Para");
|
|||
|
|
EEPROM_Default_MCUDevInfo(&g_mcu_dev);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevBootVer:%d",g_mcu_dev.dev_boot_ver);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevNameLen:%d",g_mcu_dev.dev_name_len);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevName:%s",g_mcu_dev.dev_name);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_Flash_Write
|
|||
|
|
* Description : MCU Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뺯<EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
pBuffer<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
NumByteToWrite<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> -- д<EFBFBD>볤<EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
writeAddr<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ 0x00004000 ~ 0x0006FFFF 432KB
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_APP_Flash_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t writeAddr)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
/* У<><D0A3>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ַ<EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - д<><D0B4><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>APP Flash<73><68>Χ<EFBFBD><CEA7><EFBFBD>Լ<EFBFBD>д<EFBFBD>볤<EFBFBD><EBB3A4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>4Byte<74><65><EFBFBD><EFBFBD>*/
|
|||
|
|
if( ( writeAddr < MCU_APP_Flash_Start_Addr ) || ( ( writeAddr + NumByteToWrite ) > MCU_EEPROM_Start_Addr ) || ((NumByteToWrite % 4) != 0x00) ) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU APP Flash Addr Error:%x - %x\r\n", writeAddr, NumByteToWrite);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FLASH_Unlock();
|
|||
|
|
sta = FLASH_ROMA_WRITE(writeAddr, pBuffer, NumByteToWrite);
|
|||
|
|
FLASH_Lock();
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_WRITE failed %#x!! Err Code %x\r\n", writeAddr, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sta = FLASH_ROMA_VERIFY(writeAddr, pBuffer, NumByteToWrite);
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_VERIFY failed %#x!! Err Code %x\r\n", writeAddr, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_Flash_Read
|
|||
|
|
* Description : MCU Flash<EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
pBuffer<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
NumByteToWrite<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> -- д<EFBFBD>볤<EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
readAddr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ַ 0x00004000 ~ 0x0006FFFF 432KB
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_APP_Flash_Read(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t readAddr)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
/* У<><D0A3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>APP Flash<73><68>Χ<EFBFBD><CEA7>*/
|
|||
|
|
if( ( readAddr < MCU_APP_Flash_Start_Addr ) || ( ( readAddr + NumByteToWrite ) > MCU_EEPROM_Start_Addr ) ) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU APP Flash Addr Error:%x - %x\r\n", readAddr, NumByteToWrite);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sta = FLASH_ROMA_READ(readAddr, pBuffer, NumByteToWrite);
|
|||
|
|
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_READ failed %x!! Err Code %x\r\n", readAddr, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_APP_Flash_Erase
|
|||
|
|
* Description : MCU Flash<EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
pBuffer<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
NumByteToWrite<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> -- д<EFBFBD>볤<EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
readAddr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ַ 0x00004000 ~ 0x0006FFFF 432KB
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_APP_Flash_Erase(uint32_t readAddr,uint16_t NumByteToWrite)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
/* У<><D0A3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>APP Flash<73><68>Χ<EFBFBD><CEA7>*/
|
|||
|
|
if( ( readAddr < MCU_APP_Flash_Start_Addr ) || ( ( readAddr + NumByteToWrite ) > MCU_EEPROM_Start_Addr ) ) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU EEPROM Addr Error:%x - %x\r\n", readAddr, NumByteToWrite);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FLASH_Unlock();
|
|||
|
|
sta = FLASH_ROMA_ERASE(readAddr, NumByteToWrite);
|
|||
|
|
FLASH_Lock();
|
|||
|
|
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", readAddr, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_APP_Flash_ALLErase
|
|||
|
|
* Description : MCU Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_APP_Flash_ALLErase(void)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
for(uint32_t i=MCU_APP_Flash_Start_Addr;i<MCU_APP_Flash_End_Addr;i+=MCU_APP_Flash_PageSize)
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_ERASE - %x!! \r\n", i);
|
|||
|
|
FLASH_Unlock();
|
|||
|
|
sta = FLASH_ROMA_ERASE(i, MCU_APP_Flash_PageSize);
|
|||
|
|
FLASH_Lock();
|
|||
|
|
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", i, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_EEPROM_Write
|
|||
|
|
* Description : MCU EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뺯<EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
pBuffer<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
NumByteToWrite<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> -- д<EFBFBD>볤<EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
writeAddr<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ 0x00004000 ~ 0x0006FFFF 432KB
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_EEPROM_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t writeAddr)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
/* У<><D0A3>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ַ<EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - д<><D0B4><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>APP Flash<73><68>Χ<EFBFBD><CEA7><EFBFBD>Լ<EFBFBD>д<EFBFBD>볤<EFBFBD><EBB3A4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>4Byte<74><65><EFBFBD><EFBFBD>*/
|
|||
|
|
if( ( writeAddr < MCU_EEPROM_Start_Addr ) || ( ( writeAddr + NumByteToWrite ) > MCU_EEPROM_End_Addr ) || ((NumByteToWrite % 4) != 0x00)) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU EEPROM Addr Error:%x - %x\r\n", writeAddr, NumByteToWrite);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FLASH_Unlock();
|
|||
|
|
sta = EEPROM_WRITE(writeAddr, pBuffer, NumByteToWrite);
|
|||
|
|
FLASH_Lock();
|
|||
|
|
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_WRITE failed %x!! Err Code %x\r\n", writeAddr, sta);
|
|||
|
|
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_EEPROM_Read
|
|||
|
|
* Description : MCU EEPROM<EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
pBuffer<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
NumByteToWrite<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> -- д<EFBFBD>볤<EFBFBD>ȱ<EFBFBD><EFBFBD><EFBFBD>Ϊ4<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
readAddr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ַ 0x00004000 ~ 0x0006FFFF 432KB
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_EEPROM_Read(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t readAddr)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
/* У<><D0A3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>APP Flash<73><68>Χ<EFBFBD><CEA7>*/
|
|||
|
|
if( ( readAddr < MCU_EEPROM_Start_Addr ) || ( ( readAddr + NumByteToWrite ) > MCU_EEPROM_End_Addr ) ) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU EEPROM Addr Error:%x - %x\r\n", readAddr, NumByteToWrite);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sta = EEPROM_READ(readAddr, pBuffer, NumByteToWrite);
|
|||
|
|
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_READ failed %x!! Err Code %x\r\n", readAddr, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_EEPROM_Erase
|
|||
|
|
* Description : MCU EEPROM<EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* Input :
|
|||
|
|
eraseAddr<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ 0x70000 -- 0x77FFF
|
|||
|
|
length<EFBFBD><EFBFBD>ֻ<EFBFBD>ܰ<EFBFBD><EFBFBD>տ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ4096
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_EEPROM_Erase(uint32_t eraseAddr,uint16_t length)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
/* У<><D0A3><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>APP Flash<73><68>Χ<EFBFBD><CEA7> */
|
|||
|
|
if( ( eraseAddr < MCU_EEPROM_Start_Addr ) || ( ( eraseAddr + length ) > MCU_EEPROM_End_Addr ) ) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU EEPROM Addr Error:%x - %x\r\n", eraseAddr, length);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FLASH_Unlock();
|
|||
|
|
sta = EEPROM_ERASE(eraseAddr, length);
|
|||
|
|
FLASH_Lock();
|
|||
|
|
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation MCU_EEPROM_Erase failed %x!! Err Code %x\r\n", eraseAddr, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : MCU_EEPROM_ALLErase
|
|||
|
|
* Description : MCU Flash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - EEPROM<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t MCU_EEPROM_ALLErase(void)
|
|||
|
|
{
|
|||
|
|
FLASH_Status sta;
|
|||
|
|
|
|||
|
|
for(uint32_t i=MCU_EEPROM_Start_Addr;i<MCU_EEPROM_End_Addr;i+=MCU_APP_Flash_PageSize)
|
|||
|
|
{
|
|||
|
|
FLASH_Unlock();
|
|||
|
|
sta = EEPROM_ERASE(i, MCU_APP_Flash_PageSize);
|
|||
|
|
FLASH_Lock();
|
|||
|
|
|
|||
|
|
if (sta != FLASH_COMPLETE){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Operation FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", i, sta);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : EEPROM_CheckSum
|
|||
|
|
* Description : EEPROM У<EFBFBD>麯<EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t EEPROM_CheckSum(uint8_t *data,uint16_t len)
|
|||
|
|
{
|
|||
|
|
uint8_t data_sum = 0;
|
|||
|
|
|
|||
|
|
for(uint16_t i = 0;i<len;i++)
|
|||
|
|
{
|
|||
|
|
data_sum += data[i];
|
|||
|
|
}
|
|||
|
|
return data_sum;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : EEPROM_ReadMCUDevInfo
|
|||
|
|
* Description : <EFBFBD><EFBFBD>EEPROM<EFBFBD>ж<EFBFBD>ȡ<EFBFBD>豸<EFBFBD><EFBFBD>Ϣ
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info)
|
|||
|
|
{
|
|||
|
|
uint16_t read_len = 0;
|
|||
|
|
uint32_t read_addr = MCU_EEPROM_MCUDevInfo_Address;
|
|||
|
|
|
|||
|
|
memset(Temp_Flash_Buff,0,sizeof(Temp_Flash_Buff));
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EEPROM_READ : %x ",read_addr);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EEPROM_READ 1");
|
|||
|
|
|
|||
|
|
// FLASH_Unlock();
|
|||
|
|
// EEPROM_ERASE(read_addr , 0x1000);
|
|||
|
|
// FLASH_Lock();
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EEPROM_READ 2");
|
|||
|
|
|
|||
|
|
EEPROM_READ(read_addr,Temp_Flash_Buff,1024);
|
|||
|
|
|
|||
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"Dev Info:",Temp_Flash_Buff,4);
|
|||
|
|
|
|||
|
|
if(Temp_Flash_Buff[0] == EEPROM_SVAE_FLAG){
|
|||
|
|
read_len = Temp_Flash_Buff[2];
|
|||
|
|
read_len <<= 8;
|
|||
|
|
read_len |= Temp_Flash_Buff[1];
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"read_len : %d ",read_len);
|
|||
|
|
|
|||
|
|
if(read_len <= EEPROM_DATA_Size_Max){
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"read_para %0x%x\r\n",MCU_EEPROM_MCUDevInfo_Address);
|
|||
|
|
|
|||
|
|
//EEPROM_READ(MCU_EEPROM_MCUDevInfo_Address,g_read_buff,1024);
|
|||
|
|
|
|||
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"Dev Info Para:",&Temp_Flash_Buff[4],read_len);
|
|||
|
|
|
|||
|
|
if(EEPROM_CheckSum(&Temp_Flash_Buff[4],sizeof(E_MCU_DEV_INFO)) == Temp_Flash_Buff[3]){
|
|||
|
|
//У<><D0A3><EFBFBD>ɹ<EFBFBD>
|
|||
|
|
memcpy((uint8_t *)info,Temp_Flash_Buff,sizeof(E_MCU_DEV_INFO));
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevAddr:%d",info->dev_addr);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevType:%d",info->dev_type);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevBootVer:%d",info->dev_boot_ver);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevAppVer:%d",info->dev_app_ver);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevNameLen:%d",info->dev_name_len);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"EE DevName:%s",info->dev_name);
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : EEPROM_WriteMCUDevInfo
|
|||
|
|
* Description : <EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>Ϣд<EFBFBD>뵽EEPROM<EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t EEPROM_WriteMCUDevInfo(E_MCU_DEV_INFO *info)
|
|||
|
|
{
|
|||
|
|
uint8_t save_data[EEPROM_DATA_Size_Max + 6];
|
|||
|
|
uint16_t save_len = sizeof(E_MCU_DEV_INFO);
|
|||
|
|
|
|||
|
|
if(save_len >= EEPROM_DATA_Size_Max) save_len = EEPROM_DATA_Size_Max;
|
|||
|
|
|
|||
|
|
save_data[0] = EEPROM_SVAE_FLAG;
|
|||
|
|
save_data[1] = save_len & 0xFF;
|
|||
|
|
save_data[2] = (save_len >> 8) & 0xFF;
|
|||
|
|
|
|||
|
|
memcpy(&save_data[4],(uint8_t *)info,save_len);
|
|||
|
|
|
|||
|
|
save_data[3] = EEPROM_CheckSum(&save_data[4],save_len);
|
|||
|
|
|
|||
|
|
save_len+=4;
|
|||
|
|
|
|||
|
|
MCU_EEPROM_Write(save_data,save_len,MCU_EEPROM_MCUDevInfo_Address);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : EEPROM_Default_MCUDevInfo
|
|||
|
|
* Description : EEPROM<EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>Ĭ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void EEPROM_Default_MCUDevInfo(E_MCU_DEV_INFO *info)
|
|||
|
|
{
|
|||
|
|
#if (Project_Area == 0x01)
|
|||
|
|
/*Boot <20><><EFBFBD><EFBFBD>*/
|
|||
|
|
info->dev_addr = 0x00;
|
|||
|
|
info->dev_type = 0x00;
|
|||
|
|
info->dev_app_ver = 0x00;
|
|||
|
|
info->dev_boot_ver = Project_FW_Version;
|
|||
|
|
info->dev_name_len = sizeof(Peoject_Name);
|
|||
|
|
|
|||
|
|
memset((char *)info->dev_name,0,EEPROM_DEV_NAME_Size);
|
|||
|
|
memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len);
|
|||
|
|
|
|||
|
|
//EEPROM_WriteMCUDevInfo(info);
|
|||
|
|
#elif (Project_Area == 0x02)
|
|||
|
|
/*APP <20><><EFBFBD><EFBFBD>*/
|
|||
|
|
info->dev_addr = 0x00;
|
|||
|
|
info->dev_type = Project_Type;
|
|||
|
|
info->dev_app_ver = Project_FW_Version;
|
|||
|
|
info->dev_name_len = sizeof(Peoject_Name);
|
|||
|
|
|
|||
|
|
memset((char *)info->dev_name,0,EEPROM_DEV_NAME_Size);
|
|||
|
|
memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len);
|
|||
|
|
|
|||
|
|
EEPROM_WriteMCUDevInfo(info);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : EEPROM_Validate_MCUDevInfo
|
|||
|
|
* Description : У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM <EFBFBD>ж<EFBFBD>ȡ<EFBFBD>IJ<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>ȷ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>
|
|||
|
|
APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ж<EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<EFBFBD>м<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
Boot<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ж<EFBFBD>Boot<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM<EFBFBD>м<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void EEPROM_Validate_MCUDevInfo(E_MCU_DEV_INFO *info)
|
|||
|
|
{
|
|||
|
|
#if (Project_Area == 0x01)
|
|||
|
|
/*Boot <20><><EFBFBD><EFBFBD>*/
|
|||
|
|
uint8_t save_flag = 0;
|
|||
|
|
|
|||
|
|
if(info->dev_boot_ver != Project_FW_Version)
|
|||
|
|
{
|
|||
|
|
info->dev_boot_ver = Project_FW_Version;
|
|||
|
|
save_flag = 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(save_flag == 0x01)
|
|||
|
|
{
|
|||
|
|
EEPROM_WriteMCUDevInfo(info);
|
|||
|
|
}
|
|||
|
|
#elif (Project_Area == 0x02)
|
|||
|
|
/*APP <20><><EFBFBD><EFBFBD>*/
|
|||
|
|
U8_T save_flag = 0;
|
|||
|
|
|
|||
|
|
if(info->dev_app_ver != Project_FW_Version)
|
|||
|
|
{
|
|||
|
|
info->dev_app_ver = Project_FW_Version;
|
|||
|
|
save_flag = 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(info->dev_type != Project_Type)
|
|||
|
|
{
|
|||
|
|
info->dev_type = Project_Type;
|
|||
|
|
save_flag = 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(info->dev_name_len != sizeof(Peoject_Name))
|
|||
|
|
{
|
|||
|
|
info->dev_name_len = sizeof(Peoject_Name);
|
|||
|
|
save_flag = 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(strncmp((char *)info->dev_name,(char *)Peoject_Name,sizeof(Peoject_Name)))
|
|||
|
|
{
|
|||
|
|
memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len);
|
|||
|
|
save_flag = 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(save_flag == 0x01)
|
|||
|
|
{
|
|||
|
|
EEPROM_WriteMCUDevInfo(info);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : Read_APP_Feature_Info
|
|||
|
|
* Description : <EFBFBD><EFBFBD>ȡAPP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t Read_APP_Feature_Info(uint8_t option,G_SYS_FEATURE_T *feature_info)
|
|||
|
|
{
|
|||
|
|
uint16_t crc_val = 0,crc_val2 = 0;
|
|||
|
|
uint32_t temp_val = 0;
|
|||
|
|
memset(Temp_Flash_Buff,0,sizeof(Temp_Flash_Buff));
|
|||
|
|
|
|||
|
|
if(option == 0x01){
|
|||
|
|
//<2F><>ȡMCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MCU_APP_Flash_Read(Temp_Flash_Buff,APP_FEATURE_SIZE,MCU_APP_Feature_Addr);
|
|||
|
|
}else if(option == 0x02){
|
|||
|
|
//<2F><>ȡ<EFBFBD>ⲿ Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Flash_Read(Temp_Flash_Buff,APP_FEATURE_SIZE,SPIFLASH_APP_FEATURE_Addr);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"APP Feature :",Temp_Flash_Buff,APP_FEATURE_SIZE);
|
|||
|
|
|
|||
|
|
crc_val = Temp_Flash_Buff[1];
|
|||
|
|
crc_val <<= 0x08;
|
|||
|
|
crc_val |= Temp_Flash_Buff[0];
|
|||
|
|
|
|||
|
|
crc_val2 = NetCRC16_2(&Temp_Flash_Buff[2],510);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%s CRC: %x - %x",__func__,crc_val,crc_val2);
|
|||
|
|
|
|||
|
|
if(crc_val == crc_val2)
|
|||
|
|
{
|
|||
|
|
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͨ<EFBFBD><CDA8>*/
|
|||
|
|
feature_info->app_flag = Temp_Flash_Buff[Feature_AppFlag];
|
|||
|
|
|
|||
|
|
temp_val = Temp_Flash_Buff[Feature_AppStart + 3];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppStart + 2];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppStart + 1];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppStart];
|
|||
|
|
feature_info->app_start_addr = temp_val;
|
|||
|
|
|
|||
|
|
temp_val = Temp_Flash_Buff[Feature_AppEnd + 3];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppEnd + 2];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppEnd + 1];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppEnd];
|
|||
|
|
feature_info->app_end_addr = temp_val;
|
|||
|
|
|
|||
|
|
temp_val = Temp_Flash_Buff[Feature_AppCrcSize + 1];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppCrcSize];
|
|||
|
|
feature_info->app_crc_size = temp_val;
|
|||
|
|
|
|||
|
|
temp_val = Temp_Flash_Buff[Feature_AppCrcLen + 1];
|
|||
|
|
temp_val <<= 8;
|
|||
|
|
temp_val |= Temp_Flash_Buff[Feature_AppCrcLen];
|
|||
|
|
feature_info->app_crc_len = temp_val;
|
|||
|
|
|
|||
|
|
memcpy(feature_info->app_crc,&Temp_Flash_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_Println(DBG_BIT_SYS_STATUS_bit,"%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_Println(DBG_BIT_SYS_STATUS_bit,"%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_Println(DBG_BIT_SYS_STATUS_bit,"%s app_crc_size:%#x Error",__func__,feature_info->app_crc_size);
|
|||
|
|
return 0x02;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : Write_APP_Feature_Info
|
|||
|
|
* Description : д<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) uint8_t Write_APP_Feature_Info(uint8_t option,G_SYS_FEATURE_T *feature_info)
|
|||
|
|
{
|
|||
|
|
uint8_t rev = 0;
|
|||
|
|
|
|||
|
|
memset(Temp_Flash_Buff,0,sizeof(Temp_Flash_Buff));
|
|||
|
|
memset(g_flash_buff,0,sizeof(g_flash_buff));
|
|||
|
|
|
|||
|
|
g_flash_buff[Feature_AppFlag] = feature_info->app_flag;
|
|||
|
|
|
|||
|
|
g_flash_buff[Feature_AppStart] = feature_info->app_start_addr & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppStart + 1] = ( feature_info->app_start_addr >> 8 ) & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppStart + 2] = ( feature_info->app_start_addr >> 16 ) & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppStart + 3] = ( feature_info->app_start_addr >> 24 ) & 0xFF;
|
|||
|
|
|
|||
|
|
g_flash_buff[Feature_AppEnd] = feature_info->app_end_addr & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppEnd + 1] = ( feature_info->app_end_addr >> 8 ) & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppEnd + 2] = ( feature_info->app_end_addr >> 16 ) & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppEnd + 3] = ( feature_info->app_end_addr >> 24 ) & 0xFF;
|
|||
|
|
|
|||
|
|
g_flash_buff[Feature_AppCrcSize] = feature_info->app_crc_size & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppCrcSize + 1] = ( feature_info->app_crc_size >> 8 ) & 0xFF;
|
|||
|
|
|
|||
|
|
g_flash_buff[Feature_AppCrcLen] = feature_info->app_crc_len & 0xFF;
|
|||
|
|
g_flash_buff[Feature_AppCrcLen + 1] = ( feature_info->app_crc_len >> 8 ) & 0xFF;
|
|||
|
|
|
|||
|
|
memcpy(&g_flash_buff[Feature_AppFlashCrc],feature_info->app_crc,APP_Feature_CRC_Size);
|
|||
|
|
|
|||
|
|
feature_info->crc_check = NetCRC16_2(&g_flash_buff[2], 510);
|
|||
|
|
|
|||
|
|
g_flash_buff[Feature_Check] = feature_info->crc_check & 0xFF;
|
|||
|
|
g_flash_buff[Feature_Check + 1] = ( feature_info->crc_check >> 8 ) & 0xFF;
|
|||
|
|
|
|||
|
|
if(option == 0x01){
|
|||
|
|
//<2F><>ȡMCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ512Byte<74><65>mcu flash ÿ<><C3BF>д<EFBFBD>붼<EFBFBD><EBB6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4096byte
|
|||
|
|
/*д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 1<><31><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
|
|||
|
|
MCU_APP_Flash_Read(Temp_Flash_Buff,MCU_APP_Flash_PageSize,MCU_APP_Feature_PageAddr);
|
|||
|
|
|
|||
|
|
memcpy(&Temp_Flash_Buff[MCU_APP_Feature_PageOffset],g_flash_buff,512);
|
|||
|
|
|
|||
|
|
/*д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
rev = MCU_APP_Flash_Erase(MCU_APP_Feature_PageAddr,MCU_APP_Flash_PageSize);
|
|||
|
|
|
|||
|
|
if(rev != 0x00) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU_APP_Flash_Erase Fail:%d %x - %x",rev,MCU_APP_Feature_PageAddr,MCU_APP_Flash_PageSize);
|
|||
|
|
return 0x01;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 3<><33>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
rev = MCU_APP_Flash_Write(Temp_Flash_Buff,MCU_APP_Flash_PageSize,MCU_APP_Feature_PageAddr);
|
|||
|
|
|
|||
|
|
if(rev != 0x00) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU_APP_Flash_Write Fail:%d %#x - %#x",rev,MCU_APP_Feature_PageAddr,MCU_APP_Flash_PageSize);
|
|||
|
|
return 0x02;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 4<><34>У<EFBFBD><D0A3>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
|
rev = FLASH_ROMA_VERIFY(MCU_APP_Feature_PageAddr,Temp_Flash_Buff,MCU_APP_Flash_PageSize);
|
|||
|
|
if(rev != 0x00) {
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"FLASH_ROMA_VERIFY Fail:%d %#x - %#x",rev,MCU_APP_Feature_PageAddr,MCU_APP_Flash_PageSize);
|
|||
|
|
return 0x03;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}else if(option == 0x02){
|
|||
|
|
//<2F><>ȡ<EFBFBD>ⲿ Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"SPI Flash Para:",g_flash_buff,APP_FEATURE_SIZE);
|
|||
|
|
|
|||
|
|
Flash_Write(g_flash_buff,APP_FEATURE_SIZE,SPIFLASH_APP_FEATURE_Addr);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0x00;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*******************************************************************************
|
|||
|
|
* Function Name : APP_Feature_Info_Printf
|
|||
|
|
* Description : APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>ӡ
|
|||
|
|
*******************************************************************************/
|
|||
|
|
__attribute__((section(".non_0_wait"))) void APP_Feature_Info_Printf(G_SYS_FEATURE_T *feature_info)
|
|||
|
|
{
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Feature crc_check: %x \r\n",feature_info->crc_check);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Feature app_flag: %x \r\n",feature_info->app_flag);
|
|||
|
|
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Feature app_start_addr: %x \r\n",feature_info->app_start_addr);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Feature app_end_addr: %x \r\n",feature_info->app_end_addr);
|
|||
|
|
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Feature app_crc_len: %d \r\n",feature_info->app_crc_len);
|
|||
|
|
Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"Feature app_crc:",feature_info->app_crc,471);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|