📄 avrdevice.h
字号:
#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 + -