📄 burn.h.svn-base
字号:
#ifndef __BURN_H__
#define __BURN_H__
#include "com_class.h"
#include "M3USBFUN.h"
#include "mount.h"
//#define DOWNLOAD_FAT_IMAGE
#define FAT_IMAGE_SAFE_SIZE (5 * 1024 * 1024)
#define MAX_DEVICE_NUM 16
#define REG_NUM 3 //change
#define REG_ADDR_1 0x200b0000
#define REG_ADDR_2 0x20090020
#define REG_ADDR_3 0x20090060
#define MAX_DOWNLOAD_FILES 255
#define ON_BURNFLASH_MESSAGE WM_USER + 100
#define ON_BURNFLASH_DEVICE_ARRIVE WM_USER + 101
#define ON_BURNFLASH_DEVICE_REMOVE WM_USER + 102
#define FS_MAX_PATH_LEN 256
typedef enum
{
CHIP_3223 = 0,
CHIP_3224,
CHIP_3225,
CHIP_36XX,
CHIP_RESERVER
}E_CHIP_TYPE;
typedef enum
{
MESSAGE_START_SET_REGISTER = 0,
MESSAGE_SET_REGISTER_FAIL,
MESSAGE_SET_REGISTER_SUCCESS,
MESSAGE_START_DOWNLOAD_LOADFILE,
MESSAGE_DOWNLOAD_LOADFILE_FAIL,
MESSAGE_DOWNLOAD_LOADFILE_SUCCESS,
MESSAGE_START_INIT_USB,
MESSAGE_INIT_USB_FAIL,
MESSAGE_INIT_USB_SUCCESS,
MESSAGE_START_TEST_TRANSC,
MESSAGE_TEST_TRANSC_FAIL,
MESSAGE_START_ERASE_TRANSC,
MESSAGE_ERASE_TRANSC_FAIL,
MESSAGE_START_FORMAT_TRANSC,
MESSAGE_FORMAT_TRANSC_FAIAL,
MESSAGE_START_DOWNLOAD_FILE,
MESSAGE_DOWNLOAD_FILE_FAIL,
MESSAGE_DOWNLOAD_FILE_SUCCESS,
MESSAGE_TASK_COMPLETE,
MESSAGE_DOWNLOAD_FILE_LEN,
MESSAGE_DOWNLOADING_FILE,
MESSAGE_START_DOWNLOAD_FAT_IMAGE,
MESSAGE_DOWNLOAD_FAT_IMAGE_FAIL,
MESSAGE_DOWNLOADING_FAT_IMAGE,
MESSAGE_DOWNLOAD_FAT_IMAGE_SUCCESS,
MESSAGE_START_DOWNLOAD_RESOURCE,
MESSAGE_DOWNLOAD_RESOURCE_SUCCESS,
MESSAGE_DOWNLOAD_RESOURCE_FAIL,
MESSAGE_COMPARE_FILE,
MESSAGE_COMPARE_FILE_FAIL,
MESSAGE_COMPARE_FILE_SUCCESS,
MESSAGE_GET_CHIP_PARA,
MESSAGE_GET_CHIP_PARA_FAIL,
MESSAGE_GET_CHIP_PARA_SUCCESS,
MESSAGE_SET_CHIP_PARA,
MESSAGE_SET_CHIP_PARA_FAIL,
MESSAGE_SET_CHIP_PARA_SUCCESS,
MESSAGE_CHECK_FORMAT_DATA_FAIL,
}MESSAGE_TYPE;
typedef enum
{
DOWNLOAD_TO_NORFLASH = 0,
DOWNLOAD_TO_NANDFLASH,
DOWNLOAD_TO_SFLASH,
DOWNLOAD_TO_U,
}DOWNLOAD_TYPE;
typedef enum
{
ERASE_NORFLASH = 0,
ERASE_NANDFLASH,
ERASE_SFLASH,
}ERASE_TYPE;
typedef enum
{
MEMORY_TYPE_SDRAM = 0,
MEMORY_TYPE_SRAM ,
}MEMORY_TYPE;
typedef enum
{
INIT_USB_GPIIO = 0,
INIT_USB_REGISTER,
}INIT_USB_TYPE;
typedef struct
{
BOOL compare;
DOWNLOAD_TYPE download_type; //下载位置:flash或u盘
char file_pc_path[255]; //文件的在pc的路径
char file_flash_path[255]; //文件下载到u盘的路径
int start_destination_address; //文件下载到flash的起始位置
int end_destination_address; //文件下载到flash的结束位置
int backup_start_destination_address; //文件备份到flash的起始位置
int backup_end_destination_address; //文件备份到flash的结束位置
UINT file_run_address; //文件被加载到RAM的位置
int file_attribute; //文件属性
}download_file;
typedef struct
{
char Disk_Name;
char file_pc_path[255];
int File_Size;
}download_fat_image;
typedef struct
{
int address; //积存器地址
int value; //积存器值
}set_register;
typedef enum
{
NULL_TRANSC = 0x0,
CONN_TEST_TRANSC,
ERASE_TRANSC,
FORMAT_TRANSC,
WRITE_DATA_TRANSC,
WRITE_FILE_TRANSC,
SET_REGISTER_TRANS,
FAT_TRANS,
COMPARE_TRANS,
WRITE_CONFIG,
GET_CHIPPARA_TRANS,
SET_CHIPPARA_TRANS,
SET_TIME_TRANS,
START_FILE_TRANS,
GET_FILE_TRANS,
END_FILE_TRANS,
}T_TRANSC_TYPE;
typedef enum
{
ACK_FAIL = 0,
ACK_SUCCESS = 1,
ACK_TEST = 0xff
}T_ACK_TYPE;
#define MAX_PACKET_LENGTH 4096
#define MIN_PACKET_LENGTH 64
#define OVER_TIME 10
#pragma pack(1)
typedef struct
{
BYTE type;
WORD packet_length;
char data[MAX_PACKET_LENGTH];
}transc_packet;
//通信测试及应答
typedef struct
{
BYTE Test_Type;//0x00:应答失败,0x01:应答成功,0xFF:通信测试
}T_ACK_DATA;
//擦除事务
typedef struct
{
ERASE_TYPE type;
UINT Start_Address;
UINT End_Address;
}T_ERASE_DATA;
//格式化
typedef struct
{
char Disk_Name;
BOOL bOpenZone;
int ProtectType;
int ZoneType;
UINT Start_Address;
UINT End_Address;
}T_FORMAT_DATA;
//写数据
typedef struct
{
DOWNLOAD_TYPE Download_Type;
int Start_Address;
int End_Address;
int Backup_Start_Address;
int Backup_End_Address;
int Data_Length;
int Backup_Map_Address;
int map_index;
}T_WRITE_DATA_DATA;
//写文件
typedef struct
{
char File_Path[255];
int File_length;
int File_mode;
int File_time;
}T_WRITE_FILE_DATA;
//写寄存器
typedef struct
{
int register_address;
int value;
}T_SET_REGISTER_DATA;
//下磁盘镜象
typedef struct
{
char Disk_Name;
int image_file_size;
}T_FAT_DATA;
typedef struct NandConfig{
UCHAR MainVer; // Main version no,主办本号
UCHAR SubVer; // Subsidiary version no,副版本号
UCHAR Sub1Ver; // Subsidiary version no,副版本号
UINT32 Length; //the length of this structure data,这个结构体的长度
UINT32 FileStart; //the start address of file,file的起始地址
UINT32 *FileLdStart; //the start address of file is loaded to SRAM,file被加载到内存的起始地址
UINT32 FileLen; //the file's length(unit: byte),file的长度(单位:字节)
UINT32 FileEnd; //the end address of file,file的结束地址
UINT32 MapStart; //the start address of backup map
UINT32 CheckBIOSSum; //the xor check sum of BIOS,整个BIOS数据按字节异或的结果。
UCHAR CheckStructSum; //the xor check sum of this struct,一个字节的校验和,是整个结构体前面全部按字节异或的结果。
}T_NAND_CONFIG;
typedef struct DataConfig{
UINT32 FileStart; //the start address of file,file的起始地址
UINT32 FileLdStart; //the start address of file is loaded to SRAM,file被加载到内存的起始地址
UINT32 FileLen; //the file's length(unit: byte),file的长度(单位:字节)
UINT32 FileEnd; //the end address of file,file的结束地址
UINT32 MapStart; //the start address of backup map
ULONG CheckSum; //the xor check sum,一个字节的校验和,是整个文件数据按字节异或的结果。
}T_DATA_CONFIG;
typedef struct Nand_phy_info{
UINT32 chip_id;//chip id
USHORT page_size; //page size
USHORT page_per_blk; //page of one blok
USHORT blk_num;//total block number
USHORT group_blk_num;//if size is 512M, A29 must the same when copy back, we thougt the A29=0 is a group,A29=1 is another group
USHORT plane_blk_num;
UCHAR spare_size;//spare size
UCHAR col_cycle;//column address cycle
UCHAR lst_col_mask;//last column addrress cycle mask bit
UCHAR row_cycle;//row address cycle
UCHAR last_row_mask;//last row address cycle mask bit
UCHAR custom_nd;//if is a custom nandflash(ohter not typicly nandflash),set bit,use this would fast
UINT32 flag;
UINT32 cmd_len;//nandflash command length
UINT32 data_len;//nandflash data length
UCHAR des_str[255];//descriptor string
}T_NAND_PHY_INFO;
typedef struct
{
BYTE bFind;
BYTE count;
T_NAND_PHY_INFO nandflash_parameter;
}T_CHIPPARA_DATA;
typedef struct
{
BYTE b_chip_select_loop;
BYTE b_chip_select[4];
}T_CHIP_SELECT_DATA;
typedef struct
{
UINT8 bFind;
T_U8 filename[FS_MAX_PATH_LEN + 1];
T_U32 filelen;
}T_FILE_CONFIG;
#pragma pack()
typedef struct
{
E_CHIP_TYPE chip_type; //AK芯片型号
bool bUBoot; //是否采用USB Boot
bool bAutoDownload; //是否自动下载
int res_blocks; //文件系统保留区
bool bPiece_Select_Loop; //片选选择控制
bool bOpenCom; //是否打开串口
bool bNandBoot;
char mobile_type[255]; //机型名称
int equipment_count; //设备数
int base_com; //第一个COM口号
int com_count; //串口数
int BaudRate; //波特率
int ByteSize; //数据位
int Parity; //奇偶校验
int StopBits; //停止位
MEMORY_TYPE memory_type; //memory类型
char loadfile_path[255]; //load程序路径
int loadfile_destination_address; //load程序下载的目标地址
int download_file_count; //需下载的文件个数
download_file *download_files; //文件下载列表
int set_register_count; //需设置的寄存器个数
set_register *set_registers; //寄存器设置列表
int erase_count; //需擦除的个数
T_ERASE_DATA *erases; //擦除列表
int format_count; //需格式化个数
T_FORMAT_DATA *formats; //格式化列表
int total_download_file_len; //总共需下载文件字节数
char nandboot_path[255]; //nandboot程序路径
char bios_path[255]; //bios程序路径
int bios_main_version; //NANDBOOT主版本号
int bios_sub_version; //NANDBOOT副版本号
int bios_sub1_version; //NANDBOOT副版本号
int bios_start_address; //BIOS在NANDFLASH起始位置
int bios_end_address; //BIOS在NANDFLASH结束位置
int bios_run_address; //BIOS被加载到RAM的位置
int bios_backup_start_address; //BIOS备份在NANDFLASH起始位置
int bios_backup_end_address; //BIOS备份在NANDFLASH结束位置
//char resource_path[255]; //资源树路径
int download_fat_image_count; //磁盘镜象个数
download_fat_image *images; //镜象下载列表
int system_clock; //系统频率
bool bHaveNandflash;
bool bHavePieceZero; //片选0
bool bHavePieceOne; //片选1
bool bHavePieceTwo; //片选2
bool bHavePieceThree; //片选3
int ram_size; //RAM大小
int ram_banks; //RAM BANKS
int ram_row; //RAM ROW LENGTH
int ram_column; //RAM COLUMN LENGTH
unsigned int set_ram_controller_value; //设置RAM CONTROLLER VALUE
BYTE power_off_gpio;
INIT_USB_TYPE init_usb; //初始化USB
int init_usb_gpio_number; //初始化USB需使用的GPIO口
int init_usb_register; //初始化USB需使用的寄存器
int init_usb_register_bit; //初始化USB需使用的寄存器的BIT位
int nandflash_parameter_count; //NANDFLASH参数个数
T_NAND_PHY_INFO *nandflash_parameter; //NANDFLASH参数列表
}configuration;
class BurnFlash
{
protected:
volatile HANDLE burn_thread_handle; //烧Flash线程
CString usb_dbcc_name; //dbcc name
static DWORD WINAPI burn_thread(LPVOID para);
int download_file_len; //当前文件下载字节数
BOOL bstandby;
int map_index; //下载文件对应的map表的索引
int map_len; //备份数据的MAP表的数组长度
HWND hWnd; //window that receive message
int ID; //ID
T_CHIPPARA_DATA chip_para; //nandflash参数列表
BYTE time_data[512];
T_INFOMATION information;
bool bDownEncryptFile;
download_file encrypt_file;
bool download_data(char *file_path); //通过USB下载数据
public:
HANDLE download_init_event;
_thread_com com; //串口
CM3USBC m_usb; //USB口
public:
BurnFlash();
~BurnFlash();
//////////////////////////////////////////////////////////////////////////
void set_wnd(HWND hwnd);
HWND get_wnd();
void set_id(int id);
int get_id();
bool open_usb();
void set_usb_name(CString dbcc_name);
CString get_usb_name();
bool open_com(int port, int baud_rate, HWND hWnd);//打开串口
void close_com();//关闭串口
bool is_com_open();//判断串口是否打开
bool set_dcb(int BaudRate, int ByteSize = 8, int Parity = NOPARITY, int StopBits = ONESTOPBIT);
//设置串口DCB值
bool set_para();
bool begin_burn_flash();//创建烧录线程
HANDLE get_thread();//得到烧录线程句柄
bool suspend_thread();//挂起烧录线程
bool resume_thread();//恢复烧录线程
void terminate_thread();//终止烧录线程
void close_usb();//关闭USB
int add_download_file_len(int file_len);//增加当前下载字节数
int get_download_file_len();//得到当前文件下载字节数
void set_download_file_len(int len);//设置当前文件下载字节数
HANDLE Get_usb_handle();//得到USB句柄
bool set_registers();
bool is_standby();
void set_standby(BOOL bstandby);
int get_mapindex();
void set_mapindex(int map_index);
int get_maplen();
void set_maplen(int map_len);
bool if_find_chipid();
bool download_file_use_com(char *pc_path, int loadfile_destination_address);
//通过串口下载文件
bool download_file_use_usb(char *pc_path, int loadfile_destination_address);
int com_write(char *buf, int buf_len);//串口写
int com_write(char *buf);//串口写
int com_read(char *buf, int buf_len);//串口读
bool write_transc_packet(T_TRANSC_TYPE transc_type, WORD data_length, BYTE *data);
//通过USB写一个数据包
BYTE read_transc_ack();//读硬件板返回值
bool test_transc();//通讯测试任务
bool erase_transc();//擦除任务
bool format_transc();//格式化任务
bool download_nandboot_data_transc();//下载NANDBOOT任务
bool download_bios_data_transc();//下载bios任务
bool download_data_transc(download_file *download_files, int count );//文件下载任务
bool download_u_transc(download_file *download_files, int count );//资源树下载任务
bool download_u_file(download_file *dFile);
bool fat_transc();//磁盘镜象下载任务
bool compare_transc(char *file_path);//比较下载数据
bool write_config();//写配置数据
bool download_config_data(T_WRITE_DATA_DATA *write_data, BYTE *data, int data_len);
bool download_BIOS_config(int bios_size);
bool get_para_transc();
bool set_para_transc();
bool construct_zone_detail();
bool get_file_trans(T_FILE_CONFIG *pFileCFG);
TP_INFOMATION get_information();
};
#define MAIN_VERSION 1
#define SUB_VERSION 13
#define SUB1_VERSION 10
#define CONFIG_ADDR 0x3000
extern const T_NAND_PHY_INFO SUPPORT_NAND_TABLE[];
#define ERROR_CHIP_ID 0x00000000
bool LoadDefaultCfg();
bool open_config();
bool close_config();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -