⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 burn.h.svn-base

📁 vc环境下编译的一个对USB设备进行烧录的驱动程序
💻 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 + -