第一次上传E3boot

This commit is contained in:
2025-08-22 09:18:17 +08:00
parent 17dcc44980
commit e248b10f07
16 changed files with 2715 additions and 0 deletions

288
IAP_Task.h Normal file
View File

@@ -0,0 +1,288 @@
#ifndef __IAP_TASK_H__
#define __IAP_TASK_H__
#include <stdbool.h>
#include <stdio.h>
#include <sdrv_spi_nor.h>
#include <DLib_Product_string.h>
#include <sdrv_flexcan.h>
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
#define EN_24C02 0
#define UDP_RECE_BUF_LEN 1472
#define TimeOutPeriod 10 /* Timer period, in Ms. */
/*address assignment */
#define BIM_IMAGE_START_ADD ((uint32_t) 0x08000000)
#define BIM_IMAGE_MAX_SIZE 0xA000
#define USER_IMAGE_START_ADD ((uint32_t) 0x0800A000)
#define USER_IMAGE_MAX_SIZE 0x1B000
#define BACKUP_IMAGE_START_ADD ((uint32_t) 0x08025000)
#define BACKUP_IMAGE_MAX_SIZE 0x1B000
#define UPDATA_FLAG_STORAGE_ADD ((uint32_t) 0x0803FF00)
#define FLASH_BLOCK_SIZE 4096
#define READ_DATA_LEN 2048
#define FLASH_PAGE_SIZE 0x1000
#define FLASH_PAGE_Write 4//д<><D0B4>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
/*Flash operation information*/
#define BIN_INF_LEN 512
#define BOOT_DEBUG 1
#define CMD_FAILD 0x0
#define ONLINE_CHECK 0x1
#define ERASE_FLASH 0x3
#define SET_BAUDRATE 0x4
#define BLOCK_WRITE_INFO 0x5
#define WRITE_BLOCK_FLASH 0x6
#define BLOCK_READ_INFO 0x7
#define READ_BLOCK_FLASH 0x8
#define CMD_SUCCESS 0xB
#define RESTART_Soft 0xD
#define ENTER_UPDATE_MODE 0x1
#define READ_VERSION 0x100
#define CRC_UPDATE 0x101
#define Write_VERSION 0x103
#define ENTER_APP 0x102
#define EXCUTE_APP 0x02
#define WDT_Refresh 0x200
#define READ_PSN 0x400
#define WRITE_IP 0x501
#define DELAY_LOST_FRAME 0x304//<2F><>ʱ<EFBFBD><CAB1>֡
#define LOST_FRAME 0x305//<2F><>֡
#define CRC_Pass 0x1 //CRCУ<43><D0A3>ͨ<EFBFBD><CDA8>
#define CRC_Fail 0x2 //CRCУ<43>鲻ͨ<E9B2BB><CDA8>
#define DOWNLOAD_CAN 0x0 //ͨ<><CDA8>can<61><6E><EFBFBD>س<EFBFBD><D8B3><EFBFBD>
#define DOWNLOAD_ETH 0x1 //ͨ<><CDA8><EFBFBD><EFBFBD>̫<EFBFBD><CCAB><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD>
#define BOOT0_index 1
#define BOOT1_index 2
#define APP_index 3
#define BPT_PSN_adr 0xFF0 //PSN<53><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BPT<50>ײ<EFBFBD><D7B2>ĵ<EFBFBD>ַ
#define BPT_IPSN_adr 0xFF4 //IPSN<53><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BPT<50>ײ<EFBFBD><D7B2>ĵ<EFBFBD>ַ <20><EFBFBD><E0B5B1>PSN<53><4E>ȡ<EFBFBD><C8A1>
#define BOOT0_Flash_adr 0x7000 //ע<><D7A2><EFBFBD><EFBFBD>ַҪ4K<34><4B><EFBFBD><EFBFBD>
#define BOOT0_PSN_adr BOOT0_Flash_adr + BPT_PSN_adr //boot0 <20><>PSN
#define BOOT0_IPSN_adr BOOT0_Flash_adr + BPT_IPSN_adr //boot0 <20><>IPSN
#define BOOT1_Flash_adr 0x9C000
#define BOOT1_PSN_adr BOOT1_Flash_adr + BPT_PSN_adr //boot1 <20><>PSN
#define BOOT1_IPSN_adr BOOT1_Flash_adr + BPT_IPSN_adr //boot1 <20><>IPSN
#define APP_Flash_adr 0x140000
#define Update_Flg_E2adr 0x0 //ռ<><D5BC>1<EFBFBD><31><EFBFBD>ֽ<EFBFBD>
#define BOOT0_VERSION_E2adr 0x1 //ռ<><D5BC>5<EFBFBD><35><EFBFBD>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD><><CAB1>+<2B><EFBFBD><E6B1BE> 20 24 08 08 01
#define BOOT1_VERSION_E2adr 0x6 //ռ<><D5BC>5<EFBFBD><35><EFBFBD>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD><><CAB1>+<2B><EFBFBD><E6B1BE> 20 24 08 08 01
#define APP_VERSION_E2adr 0xB //ռ<><D5BC>5<EFBFBD><35><EFBFBD>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD><><CAB1>+<2B><EFBFBD><E6B1BE> 20 24 08 08 01
#define BOOT_DES_IP 0x10 //ռ<><D5BC>4<EFBFBD><34><EFBFBD>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD>IP 192.168.17.3
#define CMD_WIDTH 4
#define CMD_MASK 0xF
#define ADDR_MASK 0x1FFFFFF
#define DATA_SIZE (0x100) /* 256 bytes */
#define DATA_START_ADDR ((uint32_t)0x0803FF00)//0x0803FF00 //<2F><><EFBFBD><EFBFBD>256<35><36><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x0803FF00- 0x0803FFFF 256K
typedef enum{
NORMAL_ON = 0,
CAN_BOOTLOADER_UPGRADE,
}UpgradeFlag;
typedef struct _CBL_CMD_LIST{
volatile uint8_t EraseFlash; //<2F><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
volatile uint8_t WriteBlockFlash; //<2F>Զ<EFBFBD><D4B6>ֽ<EFBFBD><D6BD><EFBFBD>ʽд<CABD><D0B4><EFBFBD><EFBFBD>
volatile uint8_t ReadBlockFlash; //<2F>Զ<EFBFBD><D4B6>ֽ<EFBFBD><D6BD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
volatile uint8_t BlockWriteInfo; //<2F><><EFBFBD>ö<EFBFBD><C3B6>ֽ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
volatile uint8_t BlockReadInfo; //<2F><><EFBFBD>ö<EFBFBD><C3B6>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
volatile uint8_t OnlineCheck; //<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
volatile uint8_t CmdSuccess; //<2F><><EFBFBD><EFBFBD>ִ<EFBFBD>гɹ<D0B3>
volatile uint8_t CmdFaild; //<2F><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>ʧ<EFBFBD><CAA7>
volatile uint8_t SetBaudRate; //<2F><><EFBFBD>ýڵ㲨<DAB5><E3B2A8><EFBFBD><EFBFBD>
volatile uint8_t ExcuteApp; //ִ<><D6B4>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>
volatile uint8_t EnterUpdateMode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
volatile uint8_t EnterAPP; //<2F><><EFBFBD><EFBFBD>APP
volatile uint8_t Restart; //<2F><><EFBFBD><EFBFBD>
volatile uint8_t Undefine2; //δ<><CEB4><EFBFBD><EFBFBD>
volatile uint8_t Undefine3; //δ<><CEB4><EFBFBD><EFBFBD>
} CBL_CMD_LIST,*PCBL_CMD_LIST;
typedef struct _Flash_RxBuf
{
uint8_t Flash_RxBufSta; // flash <20><><EFBFBD><EFBFBD>״̬ 0 <20><><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>1<EFBFBD><31><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>2CRCУ<43>鲻ͨ<E9B2BB><CDA8><EFBFBD><EFBFBD>3CRCУ<43><D0A3>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><34><D0B4><EFBFBD><EFBFBD>
uint16_t Flash_RxBufCRC; //CRC
uint32_t Flash_RxBufLen; //<2F><><EFBFBD><EFBFBD>
uint32_t Flash_RxBufLenNow; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
uint8_t Download_Mode; //<2F><><EFBFBD><EFBFBD>ģʽ 0 can 1<><31>̫<EFBFBD><CCAB>
uint8_t RxData[1024]__attribute__((__aligned__(4))); //ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<><D7A2>4<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD>Ҫ4<D2AA>ֽڶ<D6BD><DAB6>
}Flash_RxBuf,*UnFlash_RxBuf;
typedef struct _Flash_info
{
uint16_t length; //<2F><><EFBFBD><EFBFBD>
uint8_t dataBuffer[1100]; //ƥ<><C6A5>can<61><6E><EFBFBD><EFBFBD>
}Flash_info,*UnFlash_info;
#define FlashBufInitial 0x0//1k<31><6B><EFBFBD>ݳ<EFBFBD>ʼ״̬
#define FlashBufInComplete 0x1//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
#define FlashBufComplete 0x2//1k<31><6B><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FlashBufCRCFail 0x3//CRCУ<43><D0A3><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
#define FlashBufCRCPass 0x4//CRCУ<43><D0A3><EFBFBD>ճɹ<D5B3>
#define FlashBufWrite 0x5//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
//typedef struct
//{
// u8 iapFileFlag[8]; //8-byte IAP flag, fixed as "WCHNET", the extra space is 0
// u32 iapFileLen; //4 bytes IAP file length, which is bin file length + 512 bytes
// u32 iapFileCheckSum; //4-byte checksum
//}iapFileHeader;
//
//typedef struct{
// u16 readIndex;
// u16 writeIndex;
// u16 buffUsedLen;
// u8 *dataBuff;
//}ethDataDeal;
typedef struct _ENET_RxBuf
{
uint8_t readPos; ///< read position in buffer
uint8_t writePos; ///< write position in buffer
uint8_t recvCount; ///< receive message count in buffer
uint8_t RxData[8]; //ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}ENET_RxBuf,*pENET_RxBuf;
typedef struct {
volatile uint8_t canBootloaderUpgrade; //CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint8_t test1;
uint8_t test2;
uint8_t test3;
} SystemDataRecord;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APPͬ<50><CDAC>
extern struct flash_info *flash_info;
extern struct spi_nor flash;
extern flexcan_handle_t *handle;
extern void flexcan_transfer_callback(flexcan_handle_t *handle,
flexcan_status_e status, uint32_t result,
void *userData);
//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD>ݽṹ
extern u8 IPAddr[4];//IP address
extern u8 GWIPAddr[4];//Gateway IP address
extern u8 IPMask[4];//subnet mask
extern u8 DESIP[4];//destination IP address
extern u16 desport;//destination port
extern u16 srcport;//source port
extern SystemDataRecord g_systemDataRecord;
//extern ethDataDeal dataDeal;
//extern iapFileHeader iapPara;
extern u32 fileDataLen;
extern u32 fileCheckSum;
extern ENET_RxBuf ENET_RxBuf_1;
extern CBL_CMD_LIST g_cmdList;
extern volatile uint8_t g_canRxMsgFlag ;//<2F><><EFBFBD>յ<EFBFBD>CAN<41><4E><EFBFBD>ݺ<EFBFBD><DDBA>ı<EFBFBD>־
extern uint16_t g_canAddr;
extern uint8_t g_recvData[1028];
extern uint32_t g_recvLen;
extern uint32_t OTA_CANTxID ;//Ĭ<>Ϸ<EFBFBD><CFB7><EFBFBD>IDΪ0x02
extern uint32_t OTA_CANRxID ;//Ĭ<>Ͻ<EFBFBD><CFBD><EFBFBD>IDΪ0x01
extern uint32_t WDT_CANRxID ;//Ĭ<>Ͻ<EFBFBD><CFBD><EFBFBD>IDΪ0x03
extern Flash_RxBuf Flash_RxBuf_1;
extern Flash_RxBuf Flash_RxBuf_2;
extern bool WDTReFresh_flag;//busoff<66><66>־
extern volatile uint16_t Eth_Rx_Flag;//<2F><><EFBFBD>յ<EFBFBD>CAN<41><4E><EFBFBD>ݺ<EFBFBD><DDBA>ı<EFBFBD>־
extern uint8_t des_ipaddr[4];//<2F><><EFBFBD><EFBFBD>IP
extern uint8_t flash_eth_time;//
extern uint8_t ethCmdSTT;
//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
void goToApp(void);
u8 IAPCopyFlashDeal(void);
void IAPParaInit(void);
void saveUpdatedFile(void);
void receUpdatedFile(u8 id);
void IAPFileParaCheck(u8 id);
uint16_t CAN_BootGetAddrData(void);
void ReadUpgradeFlag(void);
void IAP_EEPROM_ERASE_108k(u32 StartAddr);
void IAP_EEPROM_READ( u32 StartAddr, u8 *Buffer, u32 Length );
void IAP_EEPROM_ERASE(uint32_t Page_Address, u32 Length);
void IAP_EEPROM_WRITE( u32 StartAddr, u8 *Buffer, u32 Length );
int DataRecord_WriteUpgrade(uint8_t upgradeFlag);
void WCHNET_HandleGlobalInt(void);
unsigned char rdbyte_24c02(unsigned int add);
void wrbyte_24c02(unsigned int add,unsigned char dat);
void initSpi();
#endif /* __IAP_TASK_H__ */