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

📄 avrdevice.h

📁 上位机软件 for avricp 根据功能设定熔丝
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef AVRDEVICE_H
#define AVRDEVICE_H

/*--------------------------------------------------------------------------*/ 
/* device information                                                       */ 
/*--------------------------------------------------------------------------*/ 
#define AT89C1051			0x80 
#define AT89C2051           0x81 
#define AT89S53             0x87 
#define AT89S8252           0x86 
#define AT90C8534           0x70
#define AT90C8544           0x71
#define AT90S1200     		0x13
#define AT90S1200REVA       0x10
#define AT90S1200REVB       0x11
#define AT90S1200REVC       0x12 
#define AT90S2313           0x20
#define AT90S2323           0x48
#define AT90S2333           0x34
#define AT90S2343           0x4C
#define AT90S4414			0x28
#define AT90S4433           0x30
#define AT90S4434           0x6C
#define AT90S8515           0x38
#define AT90S8535           0x68
#define ATMEGA103           0x41
#define ATMEGA128           0x43
#define ATMEGA128BOOT       0x44
#define ATMEGA16			0x74
#define ATMEGA16BOOT        0x75
#define ATMEGA161           0x60
#define ATMEGA161BOOT       0x61
#define ATMEGA163           0x64
#define ATMEGA163BOOT       0x66
#define ATMEGA169           0x78
#define ATMEGA169BOOT       0x79
#define ATMEGA32			0x72
#define ATMEGA32BOOT        0x73
#define ATMEGA603           0x42
#define ATMEGA64            0x45
#define ATMEGA64BOOT        0x46
#define ATMEGA8             0x76
#define ATMEGA8BOOT         0x77
#define ATMEGA83            0x65
#define ATMEGA83BOOT		0x67
#define ATMEGA8515          0x3A
#define ATMEGA8515BOOT      0x3B
#define ATMEGA8535          0x69
#define ATTINY10            0x51
#define ATTINY11            0x50
#define ATTINY12            0x55
#define ATTINY15            0x56
#define ATTINY19			0x58
#define ATTINY26            0x5E
#define ATTINY28            0x5C

#define AT89C51             0x82	  //自定义	
#define AT89C52             0x83	  //自定义	
#define AT89S51             0x84	  //自定义	
#define AT89S52             0x85	  //自定义	

// 0-13位熔丝和ATmega16一样为FuseCompatibleIsATmeaga16
enum {LockCompatibleIsNone,LockCompatibleIsATmeaga16,LockCompatibleIsAT90S1200,LockCompatibleIsAT89C51};
enum {FuseCompatibleIsNone,FuseCompatibleIsATmeaga16,FuseCompatibleIsAT90S1200};

typedef struct _bitmap
{
	DWORD dwNumber;         // 位数
	DWORD dwDefaultMode;	// 默认设置
	DWORD dwProtectMode;	// 不能更改的位
	UCHAR ucCompatible;		// 相似器件
	LPCTSTR bitname[24];	// 位名称
} bitmap;

#define ATTINY11_fuse   { 5,    0x1C,    0x00,FuseCompatibleIsNone     ,"CKSEL0","CKSEL1","CKSEL2","RSTDISBL","FSTRT",}
#define	ATTINY12_fuse   { 8,    0x52,    0x20,FuseCompatibleIsNone     ,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","RSTDISBL","SPIEN","BODEN","BODLEVEL",}
#define	ATTINY15_fuse   { 6,    0x14,    0x08,FuseCompatibleIsNone     ,"CKSEL0","CKSEL1","RSTDISBL","SPIEN","BODEN","BODLEVEL",}

#define	ATTINY26_fuse   {13,  0x17E1,  0x8000,FuseCompatibleIsNone     ,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","CKOPT","PLLCK","BODEN","BODLEVEL","EESAVE","SPIEN","RSTDISBL",}
#define	ATTINY28_fuse   { 5,    0x12,    0x00,FuseCompatibleIsNone     ,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","INTCAP",}
     
#define	AT90S1200_fuse  { 2,    0x01,    0x02,FuseCompatibleIsNone     ,"RCEN","SPIEN",}

#define	AT90S2313_fuse  { 2,    0x01,    0x02,FuseCompatibleIsNone     ,"FSTRT","SPIEN",}
#define	AT90S2323_fuse  { 2,    0x01,    0x02,FuseCompatibleIsNone     ,"FSTRT","SPIEN",}
#define	AT90S2333_fuse  { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",}
#define	AT90S2343_fuse  { 2,    0x01,    0x02,FuseCompatibleIsNone     ,"RCEN","SPIEN",}

#define	AT90S4414_fuse  { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",}
#define	AT90S4433_fuse  { 6,    0x1A,    0x20,FuseCompatibleIsNone     ,"CKSEL0","CKSEL1","CKSEL2","BODEN","BODLEVEL","SPIEN",}
#define	AT90S4434_fuse  { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",}

#define	AT90S8515_fuse  { 2,    0x01,    0x02,FuseCompatibleIsNone     ,"FSTRT","SPIEN",}
#define	AT90S8535_fuse  { 2,    0x01,    0x02,FuseCompatibleIsNone     ,"FSTRT","SPIEN",}
#define	AT90C8534_fuse  { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",}

#define	ATMEGA8_fuse    {16,  0xD9E1,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","CKOPT","SPIEN","WDTON","RSTDISBL",}
#define	ATMEGA8515_fuse {16,  0xD9E1,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","CKOPT","SPIEN","WDTON","S8515",}
#define	ATMEGA8535_fuse {16,  0xD9E1,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","CKOPT","SPIEN","WDTON","S8535",}
	
#define	ATMEGA161_fuse  { 6,    0x2A,    0x10,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","SUT","SPIEN","BODTRST",}
#define	ATMEGA163_fuse  {11,   0x3C2,    0x18,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SPIEN?","SPIEN?","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1",}
#define	ATMEGA16_fuse   {16,  0x99E1,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","CKOPT","SPIEN","JTAGEN","OCDEN",}
#define	ATMEGA169_fuse  {12, 0xF9962,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","CKOUT","CKDIV8","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","WDTON","SPIEN","JTAGEN","OCDEN","RSTDISBL","BODLEVEL0","BODLEVEL1","BODLEVEL2",}

#define	ATMEGA32_fuse   {16,  0x99E1,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","CKOPT","SPIEN","JTAGEN","OCDEN",}

#define	ATMEGA64_fuse   {18, 0x199E1,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","CKOPT","SPIEN","JTAGEN","OCDEN","WDTON","M103C",}

#define	ATMEGA103_fuse  { 4,    0x0F,    0x08,FuseCompatibleIsNone     ,"EESAVE","SUT0","SUT1","SPIEN",}
#define	ATMEGA128_fuse  {18, 0x199E1,  0x2000,FuseCompatibleIsATmeaga16,"CKSEL0","CKSEL1","CKSEL2","CKSEL3","SUT0","SUT1","BODEN","BODLEVEL","BOOTRST","BOOTSZ0","BOOTSZ1","EESAVE","CKOPT","SPIEN","JTAGEN","OCDEN","WDTON","M103C",}

#define	AT89S51_fuse    { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",} 
#define	AT89S52_fuse    { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",} 
#define	AT89C51_fuse    { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",} 
#define	AT89C52_fuse    { 0,    0x00,    0x00,FuseCompatibleIsNone     ,"",}


//-------------AT89C51锁定位与别的相反,已编程为1.
#define	AT89C51_lock    {3,0x00,0x00,LockCompatibleIsAT89C51,	"LB1","LB2","LB3",}
#define	AT90S1200_lock  {2,0x03,0x00,LockCompatibleIsAT90S1200,	"LB1","LB2",}
#define	ATMEGA16_lock   {6,0x3F,0x00,LockCompatibleIsATmeaga16,	"LB1","LB2","BLB01","BLB02","BLB11","BLB12",}
#define	NONE_lock       { 0,    0x00,    0x00,LockCompatibleIsNone     ,"",}
/*
*/


struct Device
{
	UCHAR ucId;			    // 器件 ID
	LPCTSTR name;			// Device 名称
	LPCTSTR signature;      // 标识

	
	DWORD dwFlashSize;		// FLASH 尺寸
	WORD  wEepromSize;		// EEPROM 尺寸
	WORD  wPageSize;		// Flash 页尺寸
	UCHAR ucEepromPageSize;	// Eeprom 页尺寸
	
	UCHAR ucFuseBytes;		// 熔丝字节数
	UCHAR ucLockBytes;		// 加密锁字节数

	bitmap bFuseMap;
	bitmap bLockMap;
};


const struct Device g_deviceTable[] =
{
//   器件	     器件						 F      E    F   E  熔丝 锁位     
//	 Id	   		 Name         标识			 尺寸   尺寸 页  页 字节 字节     
	{ATTINY11  , "ATtiny11"  ,"\x1E\x90\x04",  1024,   0,  0,0,  1,   1,  ATTINY11_fuse  ,AT90S1200_lock,},
	{ATTINY12  , "ATtiny12"  ,"\x1E\x90\x05",  1024,  64,  0,0,  1,   1,  ATTINY12_fuse  ,AT90S1200_lock,},
	{ATTINY15  , "ATtiny15"  ,"\x1E\x90\x06",  1024,  64,  0,0,  1,   1,  ATTINY15_fuse  ,AT90S1200_lock,},
 
	{ATTINY26  , "ATtiny26"  ,"\x1E\x91\x09",  2048, 128, 32,4,  2,   1,  ATTINY26_fuse  ,AT90S1200_lock,},
	{ATTINY28  , "ATtiny28"  ,"\x1E\x91\x07",  2048,   0,  0,0,  1,   1,  ATTINY28_fuse  ,AT90S1200_lock,},

	{AT90S1200 , "AT90S1200" ,"\x1E\x90\x01",  1024,  64,  0,0,  1,   1,  AT90S1200_fuse ,AT90S1200_lock,},

	{AT90S2313 , "AT90S2313" ,"\x1E\x91\x01",  2048, 128,  0,0,  1,   1,  AT90S2313_fuse ,AT90S1200_lock,},
	{AT90S2323 , "AT90S2323" ,"\x1E\x91\x02",  2048, 128,  0,0,  1,   1,  AT90S2323_fuse ,AT90S1200_lock,},
	{AT90S2333 , "AT90S2333" ,"\x1E\x91\x05",  2048, 128,  0,0,  1,   1,  AT90S2333_fuse ,AT90S1200_lock,},
	{AT90S2343 , "AT90S2343" ,"\x1E\x91\x03",  2048, 128,  0,0,  1,   1,  AT90S2343_fuse ,AT90S1200_lock,},

	{AT90S4414 , "AT90S4414" ,"\x1E\x92\x01",  4096, 256,  0,0,  1,   1,  AT90S4414_fuse ,AT90S1200_lock,},
	{AT90S4433 , "AT90S4433" ,"\x1E\x92\x03",  4096, 128,  0,0,  1,   1,  AT90S4433_fuse ,AT90S1200_lock,},
	{AT90S4434 , "AT90S4434" ,"\x1E\x92\x02",  4096, 256,  0,0,  1,   1,  AT90S4434_fuse ,AT90S1200_lock,},

	{AT90S8515 , "AT90S8515" ,"\x1E\x93\x01",  8192, 256,  0,0,  1,   1,  AT90S8515_fuse ,ATMEGA16_lock ,},
	{AT90S8535 , "AT90S8535" ,"\x1E\x93\x03",  8192, 512,  0,0,  1,   1,  AT90S8535_fuse ,ATMEGA16_lock ,},
	{AT90C8534 , "AT90C8534" ,"\x1E\x93\x04",  8192, 512,  0,0,  0,   1,  AT90C8534_fuse ,ATMEGA16_lock ,},

	{ATMEGA8   , "ATmega8"   ,"\x1E\x93\x07",  8192, 512, 64,4,  2,   1,  ATMEGA8_fuse   ,ATMEGA16_lock ,},
	{ATMEGA8515, "ATmega8515","\x1E\x93\x06",  8192, 512, 64,4,  2,   1,  ATMEGA8515_fuse,ATMEGA16_lock ,},
	{ATMEGA8535, "ATmega8535","\x1E\x93\x08",  8192, 512, 64,4,  2,   1,  ATMEGA8535_fuse,ATMEGA16_lock ,},
	
	{ATMEGA161 , "ATmega161" ,"\x1E\x94\x01", 16384, 512,128,0,  1,   1,  ATMEGA161_fuse ,ATMEGA16_lock ,},
	{ATMEGA163 , "ATmega163" ,"\x1E\x94\x02", 16384, 512,128,0,  2,   1,  ATMEGA163_fuse ,ATMEGA16_lock ,},
	{ATMEGA16  , "ATmega16"  ,"\x1E\x94\x03", 16384, 512,128,4,  2,   1,  ATMEGA16_fuse  ,ATMEGA16_lock ,},
	{ATMEGA169 , "ATmega169" ,"\x1E\x94\x05", 16384, 512,128,4,  3,   1,  ATMEGA169_fuse ,ATMEGA16_lock ,},

	{ATMEGA32  , "ATmega32"  ,"\x1E\x95\x02", 32768,1024,128,4,  2,   1,  ATMEGA32_fuse  ,ATMEGA16_lock ,},

	{ATMEGA64  , "ATmega64"  ,"\x1E\x96\x02", 65536,2048,128,8,  3,   1,  ATMEGA64_fuse  ,ATMEGA16_lock ,},

	{ATMEGA103 , "ATmega103" ,"\x1E\x97\x01",131072,4096,256,0,  1,   1,  ATMEGA103_fuse ,AT90S1200_lock,},
	{ATMEGA128 , "ATmega128" ,"\x1E\x97\x02",131072,4096,256,8,  3,   1,  ATMEGA128_fuse ,ATMEGA16_lock ,},
// 以下为自定义	
	{AT89S51   , "AT89S51"   ,"\x1E\x51\x06",  4096,   0,  0,0,  0,   1,  AT89S51_fuse   ,AT89C51_lock  ,},
	{AT89S52   , "AT89S52"   ,"\x1E\x52\x06",  8192,   0,  0,0,  0,   1,  AT89S52_fuse   ,AT89C51_lock  ,},
	{AT89C51   , "AT89C51"   ,"\x1E\x51\xff",  4096,   0,  0,0,  0,   1,  AT89C51_fuse   ,AT89C51_lock  ,},
	{AT89C52   , "AT89C52"   ,"\x1E\x52\xff",  8192,   0,  0,0,  0,   1,  AT89C52_fuse   ,AT89C51_lock  ,},
//   器件	     器件						 F      E    F   E  熔丝 锁位     
//	 Id	   		 Name         标识			 尺寸   尺寸 页  页 字节 字节     
	
	{0,0,}
};


class AVRDevice
{
protected:
	unsigned char deviceCode; // 器件代码
	char deviceName[16];      // 器件名称,如. ATmega128.

	long signature0;
	long signature1;
	long signature2;		  // 3字节器件标识

	long flashSize;           // FLASH 尺寸
	long eepromSize;          // EEPROM 尺寸
	long pagesize;            // Flash 页尺寸
	
	char FuseBytes;		      // 熔丝字节数
	char LockBytes;		      // 加密锁字节数
	
	bitmap FuseMap;
	bitmap LockMap;
	
public:
	long LockBits;
    long FuseBits;
	long ExtendedFuseBits;
public:
	/* Constructor */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -