Source file: /~heha/hsn/avrpp.zip/src/devprop.cpp

/*--- Device Properties ---*/
#include "avrpp.h"

/* Info previously in fuse.txt */

const char*const FuseNames[]={
 0,
 "RSTDISBL [Normal RESET pin|Disable RESET]",			//1
 "SPIEN [Disable|Enable] ISP",					//2	// Extra text: *Available only in parallel/HVS mode
 "EESAVE [Erase|Retain] EEPROM at chip erase",			//3	// wichtig für's Überschreiben des EEPROMs
 "FSTRT [Slow|Fast] start",					//4
 "SUT Startup time",						//5	// Extra Fuse calculator (TODO)
 "RCEN [External|Internal] CLK",				//6
 "CKSEL Clock source",						//7	// Extra Fuse calculator (TODO)
 "WDTON Watchdog Timer [controlled by firmware|always on]",	//8
 "CKOUT [no clock-out|CLKO overrides port function]",		//9
 "BODEN [Disable|Enable] Brown-Out Detector",			//10
 "BODLEVEL [disabled|1.8 V|2.7 V|4.3 V]",			//11
 "BODLEVEL [1.8 V|2.7 V]",					//12
 "BODLEVEL [2.7 V|4.0 V]",					//13
 "BODLEVEL [disabled|1.8 V|2.7 V|4.3 V|2.7 V]",			//14
 "CKOPT [Disabled|Enabled]",					//15
 "CKDIV8 Clock division ratio [1/1|1/8]",			//16
 "DWEN On-Chip Debugging via RESET pin [Disable|Enable]",	//17
 "SELFPRGEN SPM instruction [Disable|Enable]",			//18	// same as SPMEN
 "BODACT BOD mode in active/idle state",			//19
 "BODPD BOD mode in powerdown state",				//20
 "BOOTRST Reset jumps to [Address 0|Boot Area]",		//21
 "BOOTSZ Boot Area Size",					//22
 "PLLCK Activate High-Speed PLL",				//23
 "INTCAP [Disable|Enable] CAP",					//24
 "JTAGEN [Disable|Enable] JTAG",				//25
 "OCDEN On chip debugging [Disable|Enable]",			//26
 "M161C [Native|ATmega161 compatible] mode",			//27
 "S85x5C [Native|90S compatible] mode",				//28
 "M103C [Native|ATmega603/103 compatible] mode",		//29
 "TA0SEL (Must be 1)",						//30
 "BODLEVEL [Off|4.1 V|4 V|3.9 V|3.8 V|2.7 V|2.6 V|2.5 V]",	//31	// for AT90CAN...
 "BODLEVEL [Off|4.5 V|2.7 V|4.3 V|4.4 V|4.2 V|2.8 V|2.6 V]",	//32	// for AT90PWM...
 "PSCRV PSCOUT Reset Value",					//33
 "PSCRB PSCn Reset Behaviour",					//34
 "CKSEL Clock Source [Crystal >8 MHz|Ceramic >8 MHz|Crystal 3..8 MHz|Ceramic 3..8 MHz|Crystal 0.9..3 MHz|Ceramic 0.9..3 MHz|Crystal 0.4..0.9 MHz|Ceramic 0.4..0.9 MHz|reserved|Crystal 32768 Hz|reserved|Internal 128 kHz|Internal 1.6 MHz ATtiny15 compatible|Internal 8 MHz|Internal PLL 16 MHz|External]",	//35
 "BOOTSZ Boot Area Size [0.25|0.5|1|2] KByte",			//36
 "BOOTSZ Boot Area Size [0.5|1|2|4] KByte",			//37
 "HWBE Reset && PE2=Low jumps to [address 0|boot area]",	//38
 "CFD Clock Failure Detection [Enable|Disable]",		//39	// for ATmega328PB
};

enum{
 AT90S1200,
 AT90S2313,
 AT90S4434,
 AT90S2333,
 AT90S2323,
 AT90S2343,
 ATtiny4,
 ATtiny20,
 ATtiny11,
 ATtiny12,
 ATtiny15,
 ATtiny22,
 ATtiny13,
 ATtiny25,
 ATtiny2313,
 ATtiny1634,
 ATtiny828,
 ATtiny26,
 ATtiny261,
 ATtiny28,
 ATmega161,
 ATmega162,
 ATmega165,
 ATmega169,
 ATmega8515,
 ATmega163,
 ATmega323,
 ATmega8,
 ATmega16,
 ATmega48,
 ATtiny87,
 ATtiny48,
 ATmega88,
 ATmega328,
 ATmega328B,
 ATmega325,
 ATmega64,
 ATmega603,
 AT90CAN32,
 ATmega406,
 AT90PWM2,
 AT90USB8,
 ATmega640,
 ATmega16u4,
};

static const FUSEPROP FuseProps[]={
// EW=EEPROM-Wait, FW=Flash-Wait, LD=LockDefault, Cal=Number of OSCCAL
			   /* EW,FW, LD,Cal, FuseDefault[]	  LowFuse		| HighFuse		 | ExtFuse */
/*AT90S1200 */{           Par,10, 2,0xF9, 0,{0xDF,0xFF,0xFF},	{ 6, 0, 0, 0, 0, 2}},
/*AT90S2313 */{           Par,10, 2,0xF9, 0,{0xDF,0xFF,0xFF},	{ 4, 0, 0, 0, 0, 2}},
/*AT90S4434 */{       ISP|Par,10, 2,0xF9, 0,{0xDF,0xFF,0xFF},	{ 4, 0, 0, 0, 0, 2}},
/*AT90S2333 */{       ISP|Par,10, 2,0xF9, 0,{0xDA,0xFF,0xFF},	{ 7, 7, 7,10,13, 2}},
/*AT90S2323 */{       ISP|HVS,10, 2,0xF9, 0,{0xDF,0xFF,0xFF},	{ 4, 0, 0, 0, 0, 2}},
/*AT90S2343 */{       ISP|HVS,10, 2,0xF9, 0,{0xDF,0xFF,0xFF},	{ 6, 0, 0, 0, 0, 2}},
/*ATtiny4   */{           TPI, 0, 2,0x00, 0,{0xFF,0xFF,0xFF},	{ 1, 8, 9}},
/*ATtiny20  */{           TPI, 0, 2,0x00, 0,{0xFF,0xFF,0xFF},	{ 1, 8, 9, 0,11,11,11}},
/*ATtiny11  */{           HVS, 0, 2,0x00, 0,{0xFC,0xFF,0xFF},	{ 7, 7, 7, 1, 4}},
/*ATtiny12  */{       ISP|HVS, 0, 0,0x00, 1,{0xD2,0xFF,0xFF},	{ 7, 7, 7, 7, 1, 2,10,12}},
/*ATtiny15  */{       ISP|H15, 0, 0,0xF9, 1,{0x5C,0xFF,0xFF},	{ 7, 7, 0, 0, 1, 2,10,13}},
/*ATtiny22  */{       ISP|HVS,10, 2,0xF9, 0,{0xDE,0xFF,0xFF},	{ 6, 0, 0, 0, 0, 2}},
/*ATtiny13  */{dW|    ISP|HVS, 0, 0,0x00, 1,{0x6A,0xFF,0xFF},	{ 7, 7, 5, 5,16, 8, 3, 2,  1,11,11,17,18}},
/*ATtiny25  */{dW|    ISP|HVS, 0, 0,0x00, 1,{0x62,0xDF,0xFF},	{35,35,35,35, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 18}},
/*ATtiny2313*/{dW|    ISP|Par, 0, 0,0xFC, 2,{0x64,0xDF,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16,  1,11,11,11, 8, 2, 3,17, 18}},
/*ATtiny1634*/{dW|    ISP|Par, 0, 0,0xFC, 1,{0x62,0xDF,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 18,19,19,20,20}},
/*ATtiny828 */{       ISP|Par, 0, 0,0xFC, 1,{0x6E,0xDF,0xFF},	{ 7, 7, 0, 0, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 21,22,22, 0,19,19,20,20}},
/*ATtiny26  */{       ISP    , 0, 0,0xFC, 4,{0xE1,0xF7,0xFF},	{ 7, 7, 7, 7, 5, 5,15,23, 10,13, 3, 2, 1}},
/*ATtiny261 */{dW|    ISP|Par, 0, 0,0xFC, 1,{0x62,0xDF,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 18}},
/*ATtiny28  */{           Par, 0, 0,0xF9, 1,{0xF2,0xFF,0xFF},	{ 7, 7, 7, 7,24}},
/*ATmega161 */{       ISP|Par, 0, 0,0xFC, 0,{0xDA,0xFF,0xFF},	{ 7, 7, 7,10,13, 2,21}},
/*ATmega162 */{    JT|ISP|Par, 0, 0,0xFC, 1,{0x62,0x99,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 21,22,22, 3, 8, 2,25,26,  0,14,14,14,27}},
/*ATmega165 */{       ISP|Par, 0, 0,0xFC, 1,{0x62,0x99,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 21,22,22, 3, 8, 2,25,26,  0,14,14,14}},
/*ATmega169 */{    JT|ISP|Par, 0, 0,0xFC, 1,{0x62,0x99,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 21,22,22, 3, 8, 2,25,26,  1,14,14,14}},
/*ATmega8515*/{       ISP|Par, 0, 0,0xFC, 4,{0xE1,0xD9,0xFF},	{ 7, 7, 7, 7, 5, 5,10,13, 21,22,22, 3,15, 2, 8,28}},
/*ATmega163 */{       ISP|Par, 0, 0,0xFC, 1,{0xD2,0xFF,0xFF},	{ 7, 7, 7, 7, 0, 2,10,13, 21,22,22}},
/*ATmega323 */{       ISP|Par, 0, 0,0xFC, 1,{0xF2,0x9F,0xFF},	{ 7, 7, 7, 7, 0, 2,10,13, 21,22,22, 3, 0, 0,25,26}},
/*ATmega8   */{       ISP|Par, 0, 0,0xFC, 4,{0xE1,0xD9,0xFF},	{ 7, 7, 7, 7, 5, 5,10,13, 21,22,22, 3,15, 2, 8, 1}},
/*ATmega16  */{    JT|ISP|Par, 0, 0,0xFC, 4,{0xE1,0x99,0xFF},	{ 7, 7, 7, 7, 5, 5,10,13, 21,22,22, 3,15, 2,25,26}},
/*ATmega48  */{dW|    ISP|Par, 0, 0,0xFF, 1,{0x62,0xDF,0xFF},	{35,35,35,35, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 18}},
/*ATtiny87  */{dW|    ISP|Par, 0, 0,0x00, 1,{0x62,0xDF,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 18}},
/*ATtiny48  */{dW|    ISP|Par, 0, 0,0x00, 1,{0x6E,0xDF,0xFF},	{ 7, 7, 0, 0, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 18}},
/*ATmega88  */{dW|    ISP|Par, 0, 0,0xFF, 1,{0x62,0xDF,0xF9},	{35,35,35,35, 5, 5, 9,16, 11,11,11, 3, 8, 2,17, 1, 21,36,36}},
/*ATmega328 */{dW|    ISP|Par, 0, 0,0xFF, 1,{0x62,0xD9,0xFF},	{35,35,35,35, 5, 5, 9,16, 21,37,37, 3, 8, 2,17, 1, 11,11,11}},
/*ATmega328B*/{dW|    ISP|Par, 0, 0,0xFF, 1,{0x62,0xD9,0xF7},	{35,35,35,35, 5, 5, 9,16, 21,37,37, 3, 8, 2,17, 1, 11,11,11,39}},
/*ATmega325 */{    JT|ISP|Par, 0, 0,0xFC, 1,{0x62,0x99,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 21,22,22, 3, 8, 2,25,26,  1,11,11}},
/*ATmega64  */{    JT|ISP|Par, 0, 0,0xFC, 4,{0xE1,0x99,0xFD},	{ 7, 7, 7, 7, 5, 5,10,13, 21,22,22, 3,15, 2,25,26,  8,29}},
/*ATmega603 */{       ISP|Par, 0, 0,0xF9, 0,{0xDF,0xFF,0xFF},	{ 5, 5, 0, 3}},
/*AT90CAN32 */{    JT|ISP|Par, 0, 0,0xFC, 1,{0x62,0x99,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 21,22,22, 3, 8, 2,25,26, 30,31,31,31}},
/*ATmega406 */{       ISP|Par, 0, 0,0xFC,11,{0xCD,0xFE,0xFF},	{ 7, 5, 5,21,22,22, 3, 8, 26,27}},
/*AT90PWM2  */{dW|    ISP|Par, 0, 0,0xFC, 1,{0x62,0xDF,0xF9},	{ 7, 7, 7, 7, 5, 5, 9,16, 32,32,32, 3, 8, 2,17, 1, 21,22,22, 0,33,34,34,34}},
/*AT90USB8  */{dW|USB|ISP|Par, 0, 0,0xFC, 1,{0x62,0xDF,0xF9},	{ 7, 7, 7, 7, 5, 5, 9,16, 32,32,32, 3, 8, 2,17, 1, 21,22,22, 0,33,34,34,34}},	// todo!!
/*ATmega640 */{    JT|ISP|Par, 0, 0,0xFC, 1,{0x62,0x99,0xFF},	{ 7, 7, 7, 7, 5, 5, 9,16, 21,22,22, 3, 8, 2,25,26, 11,11,11}},
/*ATmega16u4*/{USB|JT|ISP|Par, 0, 0,0xEC, 1,{0x5E,0x99,0xF3},	{35,35,35,35, 5, 5, 9,16, 21,22,22, 3, 8, 2,25,26, 11,11,11,38}},
};

/*  Device properties */

const DEVPROP DevLst[] = {	/* Device property list
FS = Flash Size in Pages: Shift value (<16), direct value (>=16)
FP = Flash Page Size Shift in Bytes
ES, EP: Same for EEPROM
   Name,         Signature,  FS,FP,ES,EP, fusepropindex*/
{ "90S1200",     {0x90,0x01},10, 0, 6, 0, AT90S1200},
{ "90S2313",     {0x91,0x01},11, 0, 7, 0, AT90S2313},
{ "90S4414",     {0x92,0x01},12, 0, 8, 0, AT90S2313},
{ "90S8515",     {0x93,0x01},13, 0, 9, 0, AT90S2313},
{ "90S2333",     {0x91,0x05},11, 0, 7, 0, AT90S2333},
{ "90S4433",     {0x92,0x03},12, 0, 8, 0, AT90S2333},
{ "90S4434",     {0x92,0x02},12, 0, 8, 0, AT90S4434},
{ "90S8535",     {0x93,0x03},13, 0, 9, 0, AT90S4434},
{ "90S2323",     {0x91,0x02},11, 0, 7, 0, AT90S2323},
{ "90S2343",     {0x91,0x03},11, 0, 7, 0, AT90S2343},
{ "tiny4",       {0x8F,0x0A}, 9, 0, 0, 0, ATtiny4},
{ "tiny5",       {0x8F,0x09}, 9, 0, 0, 0, ATtiny4},
{ "tiny9",       {0x90,0x08},10, 0, 0, 0, ATtiny4},
{ "tiny10",      {0x90,0x03},10, 0, 0, 0, ATtiny4},
{ "tiny20",      {0x91,0x0F},11, 0, 0, 0, ATtiny20},
{ "tiny40",      {0x92,0x0E},12, 0, 0, 0, ATtiny20},
{ "tiny11",      {0x90,0x04},10, 0, 0, 0, ATtiny11},
{ "tiny12",      {0x90,0x05},10, 0, 6, 0, ATtiny12},
{ "tiny15",      {0x90,0x06},10, 0, 6, 0, ATtiny15},
{ "tiny22",      {0x91,0x06},11, 0, 7, 0, ATtiny22},
{ "tiny26",      {0x91,0x09}, 6, 5, 7, 2, ATtiny26},
{ "tiny261",     {0x91,0x0C}, 6, 5, 7, 2, ATtiny261},
{ "tiny461",     {0x92,0x08}, 6, 6, 8, 2, ATtiny261},
{ "tiny861",     {0x93,0x0D}, 7, 6, 9, 2, ATtiny261},
{ "tiny28",      {0x91,0x07},11, 0, 0, 0, ATtiny28},
{ "tiny13",      {0x90,0x07}, 5, 5, 6, 2, ATtiny13},
{ "tiny25",      {0x91,0x08}, 6, 5, 7, 2, ATtiny25},
{ "tiny45",      {0x92,0x06}, 6, 6, 8, 2, ATtiny25},
{ "tiny85",      {0x93,0x0B}, 7, 6, 9, 2, ATtiny25},
{ "tiny24",      {0x91,0x0B}, 6, 5, 7, 2, ATtiny25},
{ "tiny44",      {0x92,0x07}, 6, 6, 8, 2, ATtiny25},
{ "tiny84",      {0x93,0x0C}, 7, 6, 9, 2, ATtiny25},
{ "tiny441",     {0x92,0x15}, 8, 4, 8, 2, ATtiny25},
{ "tiny841",     {0x93,0x15}, 9, 4, 8, 2, ATtiny25},
{ "tiny87",      {0x93,0x87}, 6, 7, 9, 2, ATtiny87},
{ "tiny167",     {0x94,0x87}, 7, 7, 9, 2, ATtiny87},
{ "tiny43U",     {0x92,0x0C}, 6, 6, 6, 2, ATtiny87},
{ "tiny48",      {0x92,0x09}, 6, 6, 6, 2, ATtiny48},
{ "tiny88",      {0x93,0x11}, 7, 6, 6, 2, ATtiny48},
{ "tiny828",     {0x93,0x14}, 7, 6, 8, 2, ATtiny828},
{ "tiny2313",    {0x91,0x0A}, 6, 5, 7, 2, ATtiny2313},
{ "tiny4313",    {0x92,0x0D}, 6, 6, 8, 2, ATtiny2313},
{ "tiny1634",    {0x94,0x12}, 9, 5, 8, 2, ATtiny1634},
{ "mega161",     {0x94,0x01}, 7, 7, 9, 0, ATmega161},
{ "mega162",     {0x94,0x04}, 7, 7, 9, 2, ATmega162},
{ "mega8515",    {0x93,0x06}, 7, 6, 9, 2, ATmega8515},
{ "mega8535",    {0x93,0x08}, 7, 6, 9, 2, ATmega8515},
{ "mega163",     {0x94,0x02}, 7, 7, 9, 0, ATmega163},
{ "mega323",     {0x95,0x01}, 8, 7,10, 0, ATmega323},
{ "mega48",      {0x92,0x05}, 6, 6, 8, 2, ATmega48},
{ "mega48P",     {0x92,0x0A}, 6, 6, 8, 2, ATmega48},
{ "mega48PB",    {0x92,0x10}, 6, 6, 8, 2, ATmega48},
{ "mega88",      {0x93,0x0A}, 7, 6, 9, 2, ATmega88},
{ "mega88P",     {0x93,0x0F}, 7, 6, 9, 2, ATmega88},
{ "mega88PB",    {0x93,0x16}, 7, 6, 9, 2, ATmega88},
{ "mega168",     {0x94,0x06}, 7, 7, 9, 2, ATmega88},
{ "mega168P",    {0x94,0x0B}, 7, 7, 9, 2, ATmega88},
{ "mega168PB",   {0x94,0x15}, 7, 7, 9, 2, ATmega88},
{ "mega328",     {0x95,0x14}, 8, 7,10, 2, ATmega328},
{ "mega328P",    {0x95,0x0F}, 8, 7,10, 2, ATmega328},
{ "mega328PB",   {0x95,0x16}, 8, 7,10, 2, ATmega328B},
{ "mega8",       {0x93,0x07}, 7, 6, 9, 2, ATmega8},
{ "mega16",      {0x94,0x03}, 7, 7, 9, 2, ATmega16},
{ "mega32",      {0x95,0x02}, 8, 7,10, 2, ATmega16},
{ "mega164P",    {0x94,0x0A}, 7, 7, 9, 3, ATmega640},
{ "mega324P",    {0x95,0x08}, 8, 7,10, 3, ATmega640},
{ "mega324PA",   {0x95,0x11}, 8, 7,10, 3, ATmega640},
{ "mega644P",    {0x96,0x0A}, 8, 8,11, 3, ATmega640},
{ "mega1284P",   {0x97,0x05}, 9, 8,12, 3, ATmega640},
{ "mega644",     {0x96,0x09}, 8, 8,11, 3, ATmega640},
{ "mega165",     {0x94,0x07}, 7, 7, 9, 2, ATmega165},
{ "mega169",     {0x94,0x05}, 7, 7, 9, 2, ATmega169},
{ "mega329",     {0x95,0x03}, 8, 7,10, 2, ATmega169},
{ "mega325P",    {0x95,0x0D}, 8, 7,10, 2, ATmega325},
{ "mega3250P",   {0x95,0x0E}, 8, 7,10, 2, ATmega325},
{ "mega325/9",   {0x95,0x03}, 8, 7,10, 2, ATmega325},
{ "mega3250/90", {0x95,0x04}, 8, 7,10, 2, ATmega325},
{ "mega645/9",   {0x96,0x03}, 8, 8,11, 3, ATmega325},
{ "mega6450/90", {0x96,0x04}, 8, 8,11, 3, ATmega325},
{ "mega603",     {0x96,0x01}, 8, 8,11, 0, ATmega603},
{ "mega103",     {0x97,0x01}, 9, 8,12, 0, ATmega603},
{ "mega64",      {0x96,0x02}, 8, 8,11, 3, ATmega64},
{ "mega128",     {0x97,0x02}, 9, 8,12, 3, ATmega64},
{ "mega640",     {0x96,0x07}, 8, 8,12, 3, ATmega640},
{ "mega1280",    {0x97,0x03}, 9, 8,12, 3, ATmega640},
{ "mega1281",    {0x97,0x04}, 9, 8,12, 3, ATmega640},
{ "mega2560",    {0x98,0x01},10, 8,12, 3, ATmega640},
{ "mega2561",    {0x98,0x02},10, 8,12, 3, ATmega640},
{ "mega406",     {0x95,0x07},80, 7, 9, 2, ATmega406},
{ "mega8u2",     {0x93,0x89}, 6, 7, 7, 2, AT90USB8},	// unsure pointer
{ "mega16u2",    {0x94,0x89}, 7, 7, 7, 2, AT90USB8},	// unsure pointer
{ "mega32u2",    {0x95,0x8A}, 8, 7, 8, 2, AT90USB8},	// unsure pointer
{ "mega16u4",    {0x94,0x88}, 6, 8, 6, 3, ATmega16u4},
{ "mega32u4",    {0x95,0x87}, 7, 8, 7, 3, ATmega16u4},
{ "90PWM2/3",    {0x93,0x81}, 7, 6, 9, 2, AT90PWM2},
{ "90PWM216/316",{0x94,0x83}, 7, 7, 9, 2, AT90PWM2},
{ "90CAN32",     {0x95,0x81}, 7, 8,10, 3, AT90CAN32},
{ "90CAN64",     {0x96,0x81}, 8, 8,11, 2, AT90CAN32},
{ "90CAN128",    {0x97,0x81}, 9, 8,12, 3, AT90CAN32},
{ "90USB82",	 {0x93,0x82}, 6, 7, 7, 2, AT90USB8},
{ "90USB162",	 {0x94,0x82}, 7, 7, 7, 2, AT90USB8},
{ "90USB646",	 {0x96,0x82}, 8, 8,10, 3, AT90PWM2},	// unsure pointer
{ "90USB1286",	 {0x97,0x82}, 9, 8,11, 3, AT90PWM2},	// unsure pointer
{ ""}
};
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded