diff --git a/Arduino/hardware/tools/avr/bin/avrdude.exe b/Arduino/hardware/tools/avr/bin/avrdude.exe
index 00a31336e..84cc8ce40 100644
Binary files a/Arduino/hardware/tools/avr/bin/avrdude.exe and b/Arduino/hardware/tools/avr/bin/avrdude.exe differ
diff --git a/Arduino/hardware/tools/avr/etc/avrdude.conf b/Arduino/hardware/tools/avr/etc/avrdude.conf
index 2a1312512..2ba9fa575 100644
--- a/Arduino/hardware/tools/avr/etc/avrdude.conf
+++ b/Arduino/hardware/tools/avr/etc/avrdude.conf
@@ -335,14 +335,10 @@
#
# Overall avrdude defaults; suitable for ~/.avrduderc
#
-default_parallel = "lpt1";
-default_serial = "com1";
+default_parallel = "";
+default_serial = "";
# default_bitclock = 2.5;
-# Turn off safemode by default
-#default_safemode = no;
-
-
#
# PROGRAMMER DEFINITIONS
#
@@ -363,6 +359,14 @@ programmer
type = "arduino";
connection_type = serial;
;
+
+programmer
+ id = "xbee";
+ desc = "XBee Series 2 Over-The-Air (XBeeBoot)";
+ type = "xbee";
+ connection_type = serial;
+;
+
# this will interface with the chips on these programmers:
#
# http://real.kiev.ua/old/avreal/en/adapters
@@ -468,63 +472,47 @@ programmer
# from Amontec
;
-# UM232H module from FTDI and Glyn.com.au.
-# See helix.air.net.au for detailed usage information.
-# J1: Connect pin 2 and 3 for USB power.
-# J2: Connect pin 2 and 3 for USB power.
-# J2: Pin 7 is SCK
-# : Pin 8 is MOSI
-# : Pin 9 is MISO
-# : Pin 11 is RST
-# : Pin 6 is ground
-# Use the -b flag to set the SPI clock rate eg -b 3750000 is the fastest I could get
-# a 16MHz Atmega1280 to program reliably. The 232H is conveniently 5V tolerant.
programmer
- id = "UM232H";
- desc = "FT232H based module from FTDI and Glyn.com.au";
+ id = "ft232h";
+ desc = "FT232H in MPSSE mode";
type = "avrftdi";
+ connection_type = usb;
usbvid = 0x0403;
-# Note: This PID is reserved for generic 232H devices and
-# should be programmed into the EEPROM
usbpid = 0x6014;
usbdev = "A";
usbvendor = "";
usbproduct = "";
usbsn = "";
#ISP-signals
- sck = 0;
- mosi = 1;
- miso = 2;
- reset = 3;
+ sck = 0; # AD0 (TCK)
+ mosi = 1; # AD1 (TDI)
+ miso = 2; # AD2 (TDO)
+ reset = 3; # AD3 (TMS)
;
-# C232HM module from FTDI and Glyn.com.au.
-# : Orange is SCK
-# : Yellow is MOSI
-# : Green is MISO
-# : Brown is RST
-# : Black is ground
+# Pin J2-7 (AD0) is SCK
+# Pin J2-8 (AD1) is MOSI
+# Pin J2-9 (AD2) is MISO
+# Pin J2-10 (AD3) is RESET
+# Pin J2-6 is GND
# Use the -b flag to set the SPI clock rate eg -b 3750000 is the fastest I could get
# a 16MHz Atmega1280 to program reliably. The 232H is conveniently 5V tolerant.
-programmer
- id = "C232HM";
- desc = "FT232H based module from FTDI and Glyn.com.au";
- type = "avrftdi";
- usbvid = 0x0403;
-# Note: This PID is reserved for generic 232H devices and
-# should be programmed into the EEPROM
- usbpid = 0x6014;
- usbdev = "A";
- usbvendor = "";
- usbproduct = "";
- usbsn = "";
-#ISP-signals
- sck = 0;
- mosi = 1;
- miso = 2;
- reset = 3;
+programmer parent "ft232h"
+ id = "um232h";
+ desc = "UM232H module from FTDI";
;
+# Orange (Pin 2) is SCK
+# Yellow (Pin 3) is MOSI
+# Green (Pin 4) is MISO
+# Brown (Pin 5) is RESET
+# Black (Pin 10) is GND
+# Use the -b flag to set the SPI clock rate eg -b 3750000 is the fastest I could get
+# a 16MHz Atmega1280 to program reliably. The 232H is conveniently 5V tolerant.
+programmer parent "ft232h"
+ id = "c232hm";
+ desc = "C232HM cable from FTDI";
+;
# On the adapter you can read "O-Link". On the PCB is printed "OpenJTAG v3.1"
# You can find it as "OpenJTAG ARM JTAG USB" in the internet.
@@ -605,6 +593,45 @@ programmer
reset = 3; # TMS 7
;
+# Kristech KT-LINK FT2232H interface with IO switching and voltage buffers.
+# Created on 20220410 by CeDeROM Tomasz CEDRO (www.cederom.io).
+# Interface DataSheet: https://kristech.pl/files/KT-LINK-UM-ENG.pdf
+# AVRDUDE FT2232H PIN NUMBER DECODE:
+# | 0 | 1 | .. | 7 | 8 | 9 | .. | 15 |
+# | ADBUS0 | ADBUS1 | .. | ADBUS7 | ACBUS0 | ACBUS1 | .. | ACBUS7 |
+# KT-LINK JTAG CONN:
+# 1=Vsense(->EXT13), 19=5V(EXT1->EXT3), 20=GND, 3=TPIRST, 9=TPICLK, 7=TPIDATA.
+# INTERNALS CONFIGURATION ("~" MEANS ACTIVE LOW):
+# ~TRST_EN=10(ACBUS2), ~CLK_EN=14(ACBUS6), ~MOSI_EN=13(ACBUS5),
+# TMS_SEL=5(ADBUS5), ~TMS_EN=12(ACBUS4), LED=~15(ACBUS7).
+# CONNECTION NOTES:
+# * Connect EXT connector pin 1 with 3 to get 5V on JTAG connector pin 19.
+# * Connect JTAG connector pin 1 to 5V (i.e. EXT pin 13 or JTAG pin 19).
+# * For TPI connection use resistors: TDO --[470R]-- TPIDATA --[470R]-- TDI.
+# * Powering target from JTAG pin 19 allows KT-LINK current measurement.
+programmer
+ id = "ktlink";
+ desc = "KT-LINK FT2232H interface with IO switching and voltage buffers.";
+ type = "avrftdi";
+ connection_type = usb;
+ usbvid= 0x0403;
+ usbpid= 0xBBE2;
+ usbdev= "A";
+ reset = 8;
+ sck = 0;
+ mosi = 1;
+ miso = 2;
+ buff = ~10,~14,~13,5;
+ rdyled = ~15;
+;
+
+programmer
+ id = "serialupdi";
+ desc = "SerialUPDI";
+ type = "serialupdi";
+ connection_type = serial;
+;
+
programmer
id = "avrisp";
desc = "Atmel AVR ISP";
@@ -772,6 +799,18 @@ programmer
reset = 7; # RI X3(4)
;
+programmer
+ id = "tc2030";
+ desc = "Tag-Connect TC2030";
+ type = "ftdi_syncbb";
+ connection_type = usb;
+ # FOR TPI devices:
+ mosi = 0; # TxD = D0 (wire to TPIDATA via 1k resistor)
+ miso = 1; # RxD = D1 (wire to TPIDATA directly)
+ sck = 2; # RTS = D2 (wire to SCK)
+ reset = 3; # CTS = D3 (wire to ~RESET)
+;
+
# website mentioned above uses this id
programmer parent "arduino-ft232r"
id = "diecimila";
@@ -879,6 +918,24 @@ programmer
usbpid = 0x0c9f;
;
+programmer
+ id = "arduinoisp";
+ desc = "Arduino ISP Programmer";
+ type = "usbtiny";
+ connection_type = usb;
+ usbvid = 0x2341;
+ usbpid = 0x0049;
+;
+
+programmer
+ id = "arduinoisporg";
+ desc = "Arduino ISP Programmer";
+ type = "usbtiny";
+ connection_type = usb;
+ usbvid = 0x2A03;
+ usbpid = 0x0049;
+;
+
# commercial version of USBtiny, using a separate VID/PID
programmer
id = "ehajo-isp";
@@ -889,22 +946,32 @@ programmer
usbpid = 0x0BA5;
;
+# commercial version of USBtiny, using a separate VID/PID
programmer
- id = "arduinoisp";
- desc = "Arduino ISP Programmer";
+ id = "iseavrprog";
+ desc = "USBtiny-based USB programmer, https://github.com/IowaScaledEngineering/ckt-avrprogrammer";
type = "usbtiny";
connection_type = usb;
- usbvid = 0x2341;
- usbpid = 0x0049;
+ usbvid = 0x1209;
+ usbpid = 0x6570;
;
programmer
- id = "arduinoisporg";
- desc = "Arduino ISP Programmer";
- type = "usbtiny";
+ id = "micronucleus";
+ desc = "Micronucleus Bootloader";
+ type = "micronucleus";
connection_type = usb;
- usbvid = 0x2A03;
- usbpid = 0x0049;
+ usbvid = 0x16D0;
+ usbpid = 0x0753;
+;
+
+programmer
+ id = "teensy";
+ desc = "Teensy Bootloader";
+ type = "teensy";
+ connection_type = usb;
+ usbvid = 0x16C0;
+ usbpid = 0x0478;
;
programmer
@@ -1103,6 +1170,14 @@ programmer
usbpid = 0x2110, 0x2140;
;
+programmer
+ id = "jtag3updi";
+ desc = "Atmel AVR JTAGICE3 in UPDI mode";
+ type = "jtagice3_updi";
+ connection_type = usb;
+ usbpid = 0x2110, 0x2140;
+;
+
programmer
id = "jtag3dw";
desc = "Atmel AVR JTAGICE3 in debugWIRE mode";
@@ -1240,273 +1315,95 @@ programmer
;
programmer
- id = "pavr";
- desc = "Jason Kyle's pAVR Serial Programmer";
- type = "avr910";
- connection_type = serial;
-;
-
-programmer
- id = "pickit2";
- desc = "MicroChip's PICkit2 Programmer";
- type = "pickit2";
- connection_type = usb;
-;
-
-programmer
- id = "flip1";
- desc = "FLIP USB DFU protocol version 1 (doc7618)";
- type = "flip1";
+ id = "pickit4_updi";
+ desc = "MPLAB(R) PICkit 4 in UPDI mode";
+ type = "jtagice3_updi";
connection_type = usb;
+ usbpid = 0x2177, 0x2178, 0x2179;
;
programmer
- id = "flip2";
- desc = "FLIP USB DFU protocol version 2 (AVR4023)";
- type = "flip2";
+ id = "pickit4_pdi";
+ desc = "MPLAB(R) PICkit 4 in PDI mode";
+ type = "jtagice3_pdi";
connection_type = usb;
+ usbpid = 0x2177, 0x2178, 0x2179;
;
-# Parallel port programmers.
-
programmer
- id = "bsd";
- desc = "Brian Dean's Programmer, http://www.bsdhome.com/avrdude/";
- type = "par";
- connection_type = parallel;
- vcc = 2, 3, 4, 5;
- reset = 7;
- sck = 8;
- mosi = 9;
- miso = 10;
+ id = "pickit4_isp";
+ desc = "MPLAB(R) PICkit 4 in ISP mode";
+ type = "jtagice3_isp";
+ connection_type = usb;
+ usbpid = 0x2177, 0x2178, 0x2179;
;
programmer
- id = "stk200";
- desc = "STK200";
- type = "par";
- connection_type = parallel;
- buff = 4, 5;
- sck = 6;
- mosi = 7;
- reset = 9;
- miso = 10;
-;
-
-# The programming dongle used by the popular Ponyprog
-# utility. It is almost similar to the STK200 one,
-# except that there is a LED indicating that the
-# programming is currently in progress.
-
-programmer parent "stk200"
- id = "pony-stk200";
- desc = "Pony Prog STK200";
- pgmled = 8;
+ id = "snap_updi";
+ desc = "MPLAB(R) SNAP in UPDI mode";
+ type = "jtagice3_updi";
+ connection_type = usb;
+ usbpid = 0x217F, 0x2180, 0x2181;
;
programmer
- id = "dt006";
- desc = "Dontronics DT006";
- type = "par";
- connection_type = parallel;
- reset = 4;
- sck = 5;
- mosi = 2;
- miso = 11;
-;
-
-programmer parent "dt006"
- id = "bascom";
- desc = "Bascom SAMPLE programming cable";
+ id = "snap_pdi";
+ desc = "MPLAB(R) SNAP in PDI mode";
+ type = "jtagice3_pdi";
+ connection_type = usb;
+ usbpid = 0x217F, 0x2180, 0x2181;
;
programmer
- id = "alf";
- desc = "Nightshade ALF-PgmAVR, http://nightshade.homeip.net/";
- type = "par";
- connection_type = parallel;
- vcc = 2, 3, 4, 5;
- buff = 6;
- reset = 7;
- sck = 8;
- mosi = 9;
- miso = 10;
- errled = 1;
- rdyled = 14;
- pgmled = 16;
- vfyled = 17;
+ id = "snap_isp";
+ desc = "MPLAB(R) SNAP in ISP mode";
+ type = "jtagice3_isp";
+ connection_type = usb;
+ usbpid = 0x217F, 0x2180, 0x2181;
;
programmer
- id = "sp12";
- desc = "Steve Bolt's Programmer";
- type = "par";
- connection_type = parallel;
- vcc = 4,5,6,7,8;
- reset = 3;
- sck = 2;
- mosi = 9;
- miso = 11;
+ id = "pkobn_updi";
+ desc = "Curiosity nano (nEDBG) in UPDI mode";
+ type = "jtagice3_updi";
+ connection_type = usb;
+ usbpid = 0x2175;
;
programmer
- id = "picoweb";
- desc = "Picoweb Programming Cable, http://www.picoweb.net/";
- type = "par";
- connection_type = parallel;
- reset = 2;
- sck = 3;
- mosi = 4;
- miso = 13;
+ id = "pavr";
+ desc = "Jason Kyle's pAVR Serial Programmer";
+ type = "avr910";
+ connection_type = serial;
;
programmer
- id = "abcmini";
- desc = "ABCmini Board, aka Dick Smith HOTCHIP";
- type = "par";
- connection_type = parallel;
- reset = 4;
- sck = 3;
- mosi = 2;
- miso = 10;
+ id = "pickit2";
+ desc = "MicroChip's PICkit2 Programmer";
+ type = "pickit2";
+ connection_type = usb;
;
programmer
- id = "futurlec";
- desc = "Futurlec.com programming cable.";
- type = "par";
- connection_type = parallel;
- reset = 3;
- sck = 2;
- mosi = 1;
- miso = 10;
+ id = "flip1";
+ desc = "FLIP USB DFU protocol version 1 (doc7618)";
+ type = "flip1";
+ connection_type = usb;
;
-
-# From the contributor of the "xil" jtag cable:
-# The "vcc" definition isn't really vcc (the cable gets its power from
-# the programming circuit) but is necessary to switch one of the
-# buffer lines (trying to add it to the "buff" lines doesn't work in
-# avrdude versions before 5.5j).
-# With this, TMS connects to RESET, TDI to MOSI, TDO to MISO and TCK
-# to SCK (plus vcc/gnd of course)
programmer
- id = "xil";
- desc = "Xilinx JTAG cable";
- type = "par";
- connection_type = parallel;
- mosi = 2;
- sck = 3;
- reset = 4;
- buff = 5;
- miso = 13;
- vcc = 6;
+ id = "flip2";
+ desc = "FLIP USB DFU protocol version 2 (AVR4023)";
+ type = "flip2";
+ connection_type = usb;
;
-programmer
- id = "dapa";
- desc = "Direct AVR Parallel Access cable";
- type = "par";
- connection_type = parallel;
- vcc = 3;
- reset = 16;
- sck = 1;
- mosi = 2;
- miso = 11;
-;
-programmer
- id = "atisp";
- desc = "AT-ISP V1.1 programming cable for AVR-SDK1 from micro-research.co.th";
- type = "par";
- connection_type = parallel;
- reset = ~6;
- sck = ~8;
- mosi = ~7;
- miso = ~10;
-;
-programmer
- id = "ere-isp-avr";
- desc = "ERE ISP-AVR ";
- type = "par";
- connection_type = parallel;
- reset = ~4;
- sck = 3;
- mosi = 2;
- miso = 10;
-;
-programmer
- id = "blaster";
- desc = "Altera ByteBlaster";
- type = "par";
- connection_type = parallel;
- sck = 2;
- miso = 11;
- reset = 3;
- mosi = 8;
- buff = 14;
-;
-
-# It is almost same as pony-stk200, except vcc on pin 5 to auto
-# disconnect port (download on http://electropol.free.fr/spip/spip.php?article27)
-programmer parent "pony-stk200"
- id = "frank-stk200";
- desc = "Frank STK200";
- buff = ; # delete buff pin assignment
- vcc = 5;
-;
-
-# The AT98ISP Cable is a simple parallel dongle for AT89 family.
-# http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2877
-programmer
- id = "89isp";
- desc = "Atmel at89isp cable";
- type = "par";
- connection_type = parallel;
- reset = 17;
- sck = 1;
- mosi = 2;
- miso = 10;
-;
-#This programmer bitbangs GPIO lines using the Linux sysfs GPIO interface
-#
-#To enable it set the configuration below to match the GPIO lines connected to the
-#relevant ISP header pins and uncomment the entry definition. In case you don't
-#have the required permissions to edit this system wide config file put the
-#entry in a separate .conf file and use it with -C+.conf
-#on the command line.
-#
-#To check if your avrdude build has support for the linuxgpio programmer compiled in,
-#use -c?type on the command line and look for linuxgpio in the list. If it's not available
-#you need pass the --enable-linuxgpio=yes option to configure and recompile avrdude.
-#
-#programmer
-# id = "linuxgpio";
-# desc = "Use the Linux sysfs interface to bitbang GPIO lines";
-# type = "linuxgpio";
-# reset = ?;
-# sck = ?;
-# mosi = ?;
-# miso = ?;
-#;
-
-
-#This programmer uses the built in linux SPI bus devices to program an
-#attached AVR. A GPIO accessed through the sysfs GPIO interface needs to
-#be specified for a reset pin since the linux SPI userspace functions do
-#not allow for control over the slave select/chip select signal.
-#
-programmer
- id = "linuxspi";
- desc = "Use Linux SPI device in /dev/spidev*";
- type = "linuxspi";
- reset = 25;
-;
# some ultra cheap programmers use bitbanging on the
# serialport.
@@ -1590,6 +1487,17 @@ programmer
miso = ~8;
;
+# JTAG2UPDI
+# https://github.com/ElTangas/jtag2updi
+
+programmer
+ id = "jtag2updi";
+ desc = "JTAGv2 to UPDI bridge";
+ type = "jtagmkii_pdi";
+ connection_type = serial;
+ baudrate = 115200;
+;
+
#
# PART DEFINITIONS
#
@@ -1929,7 +1837,7 @@ part
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -1964,9 +1872,16 @@ part
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
;
-
;
+#------------------------------------------------------------
+# ATtiny13A
+#------------------------------------------------------------
+
+part parent "t13"
+ id = "t13a";
+ desc = "ATtiny13A";
+ ;
#------------------------------------------------------------
# ATtiny15
@@ -3436,7 +3351,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -3457,8 +3372,14 @@ part
;
;
+#------------------------------------------------------------
+# ATmega64A
+#------------------------------------------------------------
-
+part parent "m64"
+ id = "m64a";
+ desc = "ATmega64A";
+ ;
#------------------------------------------------------------
# ATmega128
@@ -3619,7 +3540,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -3640,6 +3561,15 @@ part
;
;
+#------------------------------------------------------------
+# ATmega128A
+#------------------------------------------------------------
+
+part parent "m128"
+ id = "m128a";
+ desc = "ATmega128A";
+ ;
+
#------------------------------------------------------------
# AT90CAN128
#------------------------------------------------------------
@@ -3811,7 +3741,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -4003,7 +3933,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -4195,7 +4125,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -4352,7 +4282,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -4394,36 +4324,19 @@ part
;
;
-
#------------------------------------------------------------
-# ATmega164P
+# ATmega16A
#------------------------------------------------------------
-# close to ATmega16
-
part parent "m16"
- id = "m164p";
- desc = "ATmega164P";
- signature = 0x1e 0x94 0x0a;
-
- progmodedelay = 0;
- latchcycles = 5;
- togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
- allowfullpagebitstream = no;
- chip_erase_delay = 55000;
-
- ocdrev = 3;
+ id = "m16a";
+ desc = "ATmega16A";
;
-
#------------------------------------------------------------
# ATmega324P
#------------------------------------------------------------
-# similar to ATmega164P
-
part
id = "m324p";
desc = "ATmega324P";
@@ -4554,7 +4467,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -4610,108 +4523,42 @@ part
;
;
-
#------------------------------------------------------------
-# ATmega324PA
+# ATmega164P
#------------------------------------------------------------
-# similar to ATmega324P
-
part parent "m324p"
- id = "m324pa";
- desc = "ATmega324PA";
- signature = 0x1e 0x95 0x11;
+ id = "m164p";
+ desc = "ATmega164P";
+ signature = 0x1e 0x94 0x0a;
- ocdrev = 3;
- ;
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ size = 512;
+ page_size = 4;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
-#------------------------------------------------------------
-# ATmega644
-#------------------------------------------------------------
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
-# similar to ATmega164
-
-part
- id = "m644";
- desc = "ATmega644";
- has_jtag = yes;
- stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one
- avr910_devcode = 0x74;
- signature = 0x1e 0x96 0x09;
- pagel = 0xd7;
- bs2 = 0xa0;
- chip_erase_delay = 55000;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
-
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
-
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 0;
-
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02;
- hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 6;
- togglevtg = 0;
- poweroffdelay = 0;
- resetdelayms = 0;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
-
- idr = 0x31;
- spmcr = 0x57;
- allowfullpagebitstream = no;
-
- ocdrev = 3;
-
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 2048;
- min_write_delay = 9000;
- max_write_delay = 9000;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = " 1 0 1 0 0 0 0 0",
- " 0 0 x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- write = " 1 1 0 0 0 0 0 0",
- " 0 0 x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
-
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
- " i i i i i i i i";
-
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
- " x x x x x x x x";
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
mode = 0x41;
delay = 10;
@@ -4721,132 +4568,106 @@ part
memory "flash"
paged = yes;
- size = 65536;
- page_size = 256;
- num_pages = 256;
+ size = 16384;
+ page_size = 128;
+ num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 x x x x x x x",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
" x x x x x x x x";
mode = 0x21;
delay = 6;
blocksize = 256;
readsize = 256;
- ;
-
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "lfuse"
- size = 1;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "hfuse"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "efuse"
- size = 1;
+ ;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ ;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x 1 1 1 1 1 i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+#------------------------------------------------------------
+# ATmega164PA
+#------------------------------------------------------------
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 x x x x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
+part parent "m164p"
+ id = "m164pa";
+ desc = "ATmega164PA";
+ ;
- memory "calibration"
- size = 1;
+#------------------------------------------------------------
+# ATmega164A
+#------------------------------------------------------------
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
+part parent "m164p"
+ id = "m164a";
+ desc = "ATmega164A";
+ signature = 0x1e 0x94 0x0f;
;
#------------------------------------------------------------
-# ATmega644P
+# ATmega324PB
#------------------------------------------------------------
-# similar to ATmega164p
+part parent "m324p"
+ id = "m324pb";
+ desc = "ATmega324PB";
+ signature = 0x1e 0x95 0x17;
+ ;
-part parent "m644"
- id = "m644p";
- desc = "ATmega644P";
- signature = 0x1e 0x96 0x0a;
+#------------------------------------------------------------
+# ATmega324PA
+#------------------------------------------------------------
- ocdrev = 3;
+part parent "m324p"
+ id = "m324pa";
+ desc = "ATmega324PA";
+ signature = 0x1e 0x95 0x11;
;
+#------------------------------------------------------------
+# ATmega324A
+#------------------------------------------------------------
+part parent "m324p"
+ id = "m324a";
+ desc = "ATmega324A";
+ signature = 0x1e 0x95 0x15;
+ ;
#------------------------------------------------------------
-# ATmega1284
+# ATmega644
#------------------------------------------------------------
-# similar to ATmega164
-
part
- id = "m1284";
- desc = "ATmega1284";
+ id = "m644";
+ desc = "ATmega644";
has_jtag = yes;
stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one
avr910_devcode = 0x74;
- signature = 0x1e 0x97 0x06;
+ signature = 0x1e 0x96 0x09;
pagel = 0xd7;
bs2 = 0xa0;
chip_erase_delay = 55000;
@@ -4865,7 +4686,7 @@ part
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
- pollmethod = 1;
+ pollmethod = 0;
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
@@ -4875,9 +4696,9 @@ part
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 6;
- togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
+ togglevtg = 0;
+ poweroffdelay = 0;
+ resetdelayms = 0;
resetdelayus = 0;
hvleavestabdelay = 15;
chiperasepulsewidth = 0;
@@ -4896,7 +4717,7 @@ part
memory "eeprom"
paged = no; /* leave this "no" */
page_size = 8; /* for parallel programming */
- size = 4096;
+ size = 2048;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0xff;
@@ -4929,9 +4750,9 @@ part
memory "flash"
paged = yes;
- size = 131072;
+ size = 65536;
page_size = 256;
- num_pages = 512;
+ num_pages = 256;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
@@ -4961,8 +4782,8 @@ part
" a7 x x x x x x x",
" x x x x x x x x";
- mode = 0x41;
- delay = 10;
+ mode = 0x21;
+ delay = 6;
blocksize = 256;
readsize = 256;
;
@@ -4970,7 +4791,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -5026,21 +4847,46 @@ part
;
;
+#------------------------------------------------------------
+# ATmega644A
+#------------------------------------------------------------
+
+part parent "m644"
+ id = "m644a";
+ desc = "ATmega644A";
+ ;
+
+#------------------------------------------------------------
+# ATmega644P
+#------------------------------------------------------------
+part parent "m644"
+ id = "m644p";
+ desc = "ATmega644P";
+ signature = 0x1e 0x96 0x0a;
+ ;
#------------------------------------------------------------
-# ATmega1284P
+# ATmega644PA
#------------------------------------------------------------
-# similar to ATmega164p
+part parent "m644"
+ id = "m644pa";
+ desc = "ATmega644PA";
+ signature = 0x1e 0x96 0x0a;
+ ;
+
+#------------------------------------------------------------
+# ATmega1284
+#------------------------------------------------------------
part
- id = "m1284p";
- desc = "ATmega1284P";
+ id = "m1284";
+ desc = "ATmega1284";
has_jtag = yes;
stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one
avr910_devcode = 0x74;
- signature = 0x1e 0x97 0x05;
+ signature = 0x1e 0x97 0x06;
pagel = 0xd7;
bs2 = 0xa0;
chip_erase_delay = 55000;
@@ -5164,7 +5010,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -5220,7 +5066,15 @@ part
;
;
+#------------------------------------------------------------
+# ATmega1284P
+#------------------------------------------------------------
+part parent "m1284"
+ id = "m1284p";
+ desc = "ATmega1284P";
+ signature = 0x1e 0x97 0x05;
+ ;
#------------------------------------------------------------
# ATmega162
@@ -5397,7 +5251,7 @@ part
max_write_delay = 16000;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -5559,7 +5413,7 @@ part
min_write_delay = 2000;
max_write_delay = 2000;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x 0 x x x x x o o o o o o";
+ "x x x x 0 x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -5741,7 +5595,7 @@ part
min_write_delay = 2000;
max_write_delay = 2000;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -5761,17 +5615,47 @@ part
;
#------------------------------------------------------------
-# ATmega329
+# ATmega169A
#------------------------------------------------------------
-part
- id = "m329";
- desc = "ATmega329";
- has_jtag = yes;
-# stk500_devcode = 0x85; # no STK500 support, only STK500v2
-# avr910_devcode = 0x?; # try the ATmega169 one:
- avr910_devcode = 0x75;
- signature = 0x1e 0x95 0x03;
+part parent "m169"
+ id = "m169a";
+ desc = "ATmega169A";
+ signature = 0x1E 0x94 0x11;
+ ;
+
+#------------------------------------------------------------
+# ATmega169P
+#------------------------------------------------------------
+
+part parent "m169"
+ id = "m169p";
+ desc = "ATmega169P";
+ signature = 0x1E 0x94 0x05;
+ ;
+
+#------------------------------------------------------------
+# ATmega169PA
+#------------------------------------------------------------
+
+part parent "m169"
+ id = "m169pa";
+ desc = "ATmega169PA";
+ signature = 0x1E 0x94 0x05;
+ ;
+
+#------------------------------------------------------------
+# ATmega329
+#------------------------------------------------------------
+
+part
+ id = "m329";
+ desc = "ATmega329";
+ has_jtag = yes;
+# stk500_devcode = 0x85; # no STK500 support, only STK500v2
+# avr910_devcode = 0x?; # try the ATmega169 one:
+ avr910_devcode = 0x75;
+ signature = 0x1e 0x95 0x03;
chip_erase_delay = 9000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
@@ -5878,7 +5762,7 @@ part
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
- " x x x a12 a11 a10 a9 a8",
+ " x a14 a13 a12 a11 a10 a9 a8",
" a7 a6 x x x x x x",
" x x x x x x x x";
@@ -5926,7 +5810,7 @@ part
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -5945,45 +5829,73 @@ part
;
;
+#------------------------------------------------------------
+# ATmega329A
+#------------------------------------------------------------
+
+part parent "m329"
+ id = "m329a";
+ desc = "ATmega329A";
+ ;
+
#------------------------------------------------------------
# ATmega329P
#------------------------------------------------------------
-# Identical to ATmega329 except of the signature
part parent "m329"
id = "m329p";
desc = "ATmega329P";
signature = 0x1e 0x95 0x0b;
+ ;
- ocdrev = 3;
+#------------------------------------------------------------
+# ATmega329PA
+#------------------------------------------------------------
+
+part parent "m329"
+ id = "m329pa";
+ desc = "ATmega329PA";
+ signature = 0x1e 0x95 0x0b;
;
#------------------------------------------------------------
# ATmega3290
#------------------------------------------------------------
-# identical to ATmega329
-
part parent "m329"
id = "m3290";
desc = "ATmega3290";
signature = 0x1e 0x95 0x04;
+ ;
- ocdrev = 3;
+#------------------------------------------------------------
+# ATmega3290A
+#------------------------------------------------------------
+
+part parent "m329"
+ id = "m3290a";
+ desc = "ATmega3290A";
+ signature = 0x1e 0x95 0x04;
;
#------------------------------------------------------------
# ATmega3290P
#------------------------------------------------------------
-# identical to ATmega3290 except of the signature
-
-part parent "m3290"
+part parent "m329"
id = "m3290p";
desc = "ATmega3290P";
signature = 0x1e 0x95 0x0c;
+ ;
- ocdrev = 3;
+#------------------------------------------------------------
+# ATmega3290PA
+#------------------------------------------------------------
+
+part parent "m329"
+ id = "m3290pa";
+ desc = "ATmega3290PA";
+ signature = 0x1e 0x95 0x0c;
;
#------------------------------------------------------------
@@ -6104,7 +6016,7 @@ part
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
- " x x x a12 a11 a10 a9 a8",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
" a7 x x x x x x x",
" x x x x x x x x";
@@ -6152,7 +6064,7 @@ part
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -6172,17 +6084,52 @@ part
;
#------------------------------------------------------------
-# ATmega6490
+# ATmega649A
+#------------------------------------------------------------
+
+part parent "m649"
+ id = "m649a";
+ desc = "ATmega649A";
+ ;
+
#------------------------------------------------------------
+# ATmega649P
+#------------------------------------------------------------
+
+part parent "m649"
+ id = "m649p";
+ desc = "ATmega649P";
+ signature = 0x1e 0x96 0x0b;
+ ;
-# identical to ATmega649
+#------------------------------------------------------------
+# ATmega6490
+#------------------------------------------------------------
part parent "m649"
id = "m6490";
desc = "ATmega6490";
signature = 0x1e 0x96 0x04;
+ ;
- ocdrev = 3;
+#------------------------------------------------------------
+# ATmega6490A
+#------------------------------------------------------------
+
+part parent "m649"
+ id = "m6490a";
+ desc = "ATmega6490A";
+ signature = 0x1e 0x96 0x04;
+ ;
+
+#------------------------------------------------------------
+# ATmega6490P
+#------------------------------------------------------------
+
+part parent "m649"
+ id = "m6490p";
+ desc = "ATmega6490P";
+ signature = 0x1e 0x96 0x0C;
;
#------------------------------------------------------------
@@ -6343,7 +6290,7 @@ part
min_write_delay = 2000;
max_write_delay = 2000;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -6489,7 +6436,7 @@ part
min_write_delay = 2000;
max_write_delay = 2000;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -6501,6 +6448,14 @@ part
;
;
+#------------------------------------------------------------
+# ATmega32A
+#------------------------------------------------------------
+
+part parent "m32"
+ id = "m32a";
+ desc = "ATmega32A";
+ ;
#------------------------------------------------------------
# ATmega8
@@ -6637,19 +6592,12 @@ part
"x x x x x x x x i i i i i i i i";
;
- # Required for Arduino IDE
- # see: https://github.com/arduino/Arduino/issues/2075
- # https://github.com/arduino/Arduino/issues/2075#issuecomment-238031689
- memory "efuse"
- size = 0;
- ;
-
memory "lock"
size = 1;
min_write_delay = 2000;
max_write_delay = 2000;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -6670,6 +6618,15 @@ part
+#------------------------------------------------------------
+# ATmega8A
+#------------------------------------------------------------
+
+part parent "m8"
+ id = "m8a";
+ desc = "ATmega8A";
+ ;
+
#------------------------------------------------------------
# ATmega8515
#------------------------------------------------------------
@@ -6806,7 +6763,7 @@ part
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -6966,7 +6923,7 @@ part
min_write_delay = 2000;
max_write_delay = 2000;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -7138,14 +7095,11 @@ part
read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 a1 a0 o o o o o o o o";
;
-
;
-
#------------------------------------------------------------
# ATtiny261
#------------------------------------------------------------
-# Close to ATtiny26
part
id = "t261";
@@ -7329,14 +7283,20 @@ part
read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
-
;
+#------------------------------------------------------------
+# ATtiny261A
+#------------------------------------------------------------
+
+part parent "t261"
+ id = "t261a";
+ desc = "ATtiny261A";
+ ;
#------------------------------------------------------------
# ATtiny461
#------------------------------------------------------------
-# Close to ATtiny261
part
id = "t461";
@@ -7520,14 +7480,20 @@ part
read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
-
;
+#------------------------------------------------------------
+# ATtiny461A
+#------------------------------------------------------------
+
+part parent "t461"
+ id = "t461a";
+ desc = "ATtiny461A";
+ ;
#------------------------------------------------------------
# ATtiny861
#------------------------------------------------------------
-# Close to ATtiny461
part
id = "t861";
@@ -7711,9 +7677,16 @@ part
read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
-
;
+#------------------------------------------------------------
+# ATtiny861A
+#------------------------------------------------------------
+
+part parent "t861"
+ id = "t861a";
+ desc = "ATtiny861A";
+ ;
#------------------------------------------------------------
# ATtiny28
@@ -7944,7 +7917,7 @@ part
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -7963,6 +7936,15 @@ part
;
;
+#------------------------------------------------------------
+# ATmega48A
+#------------------------------------------------------------
+
+part parent "m48"
+ id = "m48a";
+ desc = "ATmega48A";
+ ;
+
#------------------------------------------------------------
# ATmega48P
#------------------------------------------------------------
@@ -7971,8 +7953,16 @@ part parent "m48"
id = "m48p";
desc = "ATmega48P";
signature = 0x1e 0x92 0x0a;
+ ;
- ocdrev = 1;
+#------------------------------------------------------------
+# ATmega48PA
+#------------------------------------------------------------
+
+part parent "m48"
+ id = "m48pa";
+ desc = "ATmega48PA";
+ signature = 0x1e 0x92 0x0a;
;
#------------------------------------------------------------
@@ -7983,8 +7973,6 @@ part parent "m48"
id = "m48pb";
desc = "ATmega48PB";
signature = 0x1e 0x92 0x10;
-
- ocdrev = 1;
;
#------------------------------------------------------------
@@ -8156,7 +8144,7 @@ part
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -8175,6 +8163,15 @@ part
;
;
+#------------------------------------------------------------
+# ATmega88A
+#------------------------------------------------------------
+
+part parent "m88"
+ id = "m88a";
+ desc = "ATmega88A";
+ ;
+
#------------------------------------------------------------
# ATmega88P
#------------------------------------------------------------
@@ -8183,8 +8180,16 @@ part parent "m88"
id = "m88p";
desc = "ATmega88P";
signature = 0x1e 0x93 0x0f;
+ ;
- ocdrev = 1;
+#------------------------------------------------------------
+# ATmega88PA
+#------------------------------------------------------------
+
+part parent "m88"
+ id = "m88pa";
+ desc = "ATmega88PA";
+ signature = 0x1e 0x93 0x0f;
;
#------------------------------------------------------------
@@ -8195,8 +8200,6 @@ part parent "m88"
id = "m88pb";
desc = "ATmega88PB";
signature = 0x1e 0x93 0x16;
-
- ocdrev = 1;
;
#------------------------------------------------------------
@@ -8370,7 +8373,7 @@ part
min_write_delay = 4500;
max_write_delay = 4500;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -8389,6 +8392,15 @@ part
;
;
+#------------------------------------------------------------
+# ATmega168A
+#------------------------------------------------------------
+
+part parent "m168"
+ id = "m168a";
+ desc = "ATmega168A";
+ ;
+
#------------------------------------------------------------
# ATmega168P
#------------------------------------------------------------
@@ -8397,9 +8409,17 @@ part parent "m168"
id = "m168p";
desc = "ATmega168P";
signature = 0x1e 0x94 0x0b;
+ ;
- ocdrev = 1;
-;
+#------------------------------------------------------------
+# ATmega168PA
+#------------------------------------------------------------
+
+part parent "m168"
+ id = "m168pa";
+ desc = "ATmega168PA";
+ signature = 0x1e 0x94 0x0b;
+ ;
#------------------------------------------------------------
# ATmega168PB
@@ -8409,50 +8429,48 @@ part parent "m168"
id = "m168pb";
desc = "ATmega168PB";
signature = 0x1e 0x94 0x15;
-
- ocdrev = 1;
-;
+ ;
#------------------------------------------------------------
-# ATtiny88
+# ATtiny828
#------------------------------------------------------------
part
- id = "t88";
- desc = "ATtiny88";
+ id = "t828";
+ desc = "ATtiny828";
has_debugwire = yes;
flash_instr = 0xB6, 0x01, 0x11;
eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
- 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
- 0x99, 0xF9, 0xBB, 0xAF;
- stk500_devcode = 0x73;
-# avr910_devcode = 0x;
- signature = 0x1e 0x93 0x11;
- pagel = 0xd7;
- bs2 = 0xc2;
- chip_erase_delay = 9000;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
+ 0x99, 0xF9, 0xBB, 0xAF;
+ stk500_devcode = 0x86;
+ # avr910_devcode = 0x;
+ signature = 0x1e 0x93 0x14;
+ pagel = 0xd7;
+ bs2 = 0xc2;
+ chip_erase_delay = 15000;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
@@ -8469,41 +8487,40 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- ocdrev = 1;
-
memory "eeprom"
paged = no;
page_size = 4;
- size = 64;
+ size = 256;
min_write_delay = 3600;
max_write_delay = 3600;
readback_p1 = 0xff;
readback_p2 = 0xff;
- read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 x x x x a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x x",
- " x a6 a5 a4 a3 a2 0 0",
- " x x x x x x x x";
+writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 5;
+ blocksize = 4;
+ readsize = 256;
+ ;
- mode = 0x41;
- delay = 20;
- blocksize = 4;
- readsize = 64;
- ;
memory "flash"
paged = yes;
size = 8192;
@@ -8513,364 +8530,310 @@ part
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 x x x x x",
- " x x x x x x x x";
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
- mode = 0x41;
- delay = 6;
- blocksize = 64;
- readsize = 256;
- ;
+ mode = 0x41;
+ delay = 6;
+ blocksize = 128;
+ readsize = 256;
+
+ ;
memory "lfuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
- ;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
memory "hfuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
- ;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
memory "efuse"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x x x i";
- ;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x 1 1 1 i i i i i";
+ ;
memory "lock"
size = 1;
min_write_delay = 4500;
max_write_delay = 4500;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- ;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ ;
memory "calibration"
size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
memory "signature"
size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+;
+
+#------------------------------------------------------------
+# ATtiny828R
+#------------------------------------------------------------
+
+part parent "t828"
+ id = "t828r";
+ desc = "ATtiny828R";
;
#------------------------------------------------------------
-# ATmega328
+# ATtiny87
#------------------------------------------------------------
part
- id = "m328";
- desc = "ATmega328";
- has_debugwire = yes;
- flash_instr = 0xB6, 0x01, 0x11;
- eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
- 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
- 0x99, 0xF9, 0xBB, 0xAF;
- stk500_devcode = 0x86;
- # avr910_devcode = 0x;
- signature = 0x1e 0x95 0x14;
- pagel = 0xd7;
- bs2 = 0xc2;
- chip_erase_delay = 9000;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ id = "t87";
+ desc = "ATtiny87";
+ has_debugwire = yes;
+ flash_instr = 0xB6, 0x01, 0x11;
+ eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4,
+ 0x00, 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB,
+ 0xBF, 0x99, 0xF9, 0xBB, 0xAF;
+## no STK500 devcode in XML file, use the ATtiny45 one
+ stk500_devcode = 0x14;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x93 0x87;
+ reset = io;
+ chip_erase_delay = 15000;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
- hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 5;
- togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- resetdelay = 15;
- chiperasepulsewidth = 0;
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 0;
+
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
+ 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
+ 0x06, 0x16, 0x46, 0x56, 0x0A, 0x1A, 0x4A, 0x5A,
+ 0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 20;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- ocdrev = 1;
+ idr = 0x00;
+ spmcr = 0x57;
+ allowfullpagebitstream = no;
- memory "eeprom"
- paged = no;
- page_size = 4;
- size = 1024;
- min_write_delay = 3600;
- max_write_delay = 3600;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 x x x a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "eeprom"
+ size = 512;
+ paged = no;
+ page_size = 4;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 x x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 x x x a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ write = "1 1 0 0 0 0 0 0 0 0 x x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x a9 a8",
- " a7 a6 a5 a4 a3 a2 0 0",
- " x x x x x x x x";
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
- mode = 0x41;
- delay = 20;
- blocksize = 4;
- readsize = 256;
- ;
+ mode = 0x41;
+ delay = 10;
+ blocksize = 4;
+ readsize = 256;
+ ;
+ memory "flash"
+ paged = yes;
+ size = 8192;
+ page_size = 128;
+ num_pages = 64;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- memory "flash"
- paged = yes;
- size = 32768;
- page_size = 128;
- num_pages = 256;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
-
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
-
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 a13 a12 a11 a10 a9 a8",
- " a7 a6 x x x x x x",
- " x x x x x x x x";
-
- mode = 0x41;
- delay = 6;
- blocksize = 128;
- readsize = 256;
-
- ;
-
- memory "lfuse"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
- ;
-
- memory "hfuse"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
- ;
-
- memory "efuse"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x i i i";
- ;
-
- memory "lock"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- ;
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
-;
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
-part parent "m328"
- id = "m328p";
- desc = "ATmega328P";
- signature = 0x1e 0x95 0x0F;
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
- ocdrev = 1;
-;
+ mode = 0x41;
+ delay = 10;
+ blocksize = 64;
+ readsize = 256;
+ ;
+# ATtiny87 has Signature Bytes: 0x1E 0x93 0x87.
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
-part parent "m328"
- id = "m328pb";
- desc = "ATmega328PB";
- signature = 0x1e 0x95 0x16;
+ memory "lock"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x x x x x x x i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
- ocdrev = 1;
-;
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
-#------------------------------------------------------------
-# ATmega32m1
-#------------------------------------------------------------
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
-part parent "m328"
- id = "m32m1";
- desc = "ATmega32M1";
- # stk500_devcode = 0x;
- # avr910_devcode = 0x;
- signature = 0x1e 0x95 0x84;
- bs2 = 0xe2;
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- memory "efuse"
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x i i i i i i";
- ;
-;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
-#------------------------------------------------------------
-# ATmega64m1
-#------------------------------------------------------------
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x x x i";
-part parent "m328"
- id = "m64m1";
- desc = "ATmega64M1";
- # stk500_devcode = 0x;
- # avr910_devcode = 0x;
- signature = 0x1e 0x96 0x84;
- bs2 = 0xe2;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
- memory "efuse"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x i i i i i i";
- ;
-;
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ ;
+ ;
#------------------------------------------------------------
-# ATtiny2313
+# ATtiny167
#------------------------------------------------------------
part
- id = "t2313";
- desc = "ATtiny2313";
+ id = "t167";
+ desc = "ATtiny167";
has_debugwire = yes;
- flash_instr = 0xB2, 0x0F, 0x1F;
- eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
- stk500_devcode = 0x23;
-## Use the ATtiny26 devcode:
- avr910_devcode = 0x5e;
- signature = 0x1e 0x91 0x0a;
- pagel = 0xD4;
- bs2 = 0xD6;
+ flash_instr = 0xB6, 0x01, 0x11;
+ eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4,
+ 0x00, 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB,
+ 0xBF, 0x99, 0xF9, 0xBB, 0xAF;
+## no STK500 devcode in XML file, use the ATtiny45 one
+ stk500_devcode = 0x14;
+## avr910_devcode = ?;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x94 0x87;
reset = io;
- chip_erase_delay = 9000;
+ chip_erase_delay = 15000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
@@ -8878,27 +8841,27 @@ part
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 0;
pp_controlstack =
0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
- 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
- 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ 0x06, 0x16, 0x46, 0x56, 0x0A, 0x1A, 0x4A, 0x5A,
+ 0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
togglevtg = 1;
- poweroffdelay = 15;
+ poweroffdelay = 20;
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
@@ -8909,91 +8872,91 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- ocdrev = 0;
+ idr = 0x00;
+ spmcr = 0x57;
+ allowfullpagebitstream = no;
memory "eeprom"
- size = 128;
+ size = 512;
paged = no;
page_size = 4;
min_write_delay = 4000;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
- "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+ read = "1 0 1 0 0 0 0 0 0 0 x x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
- "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+ write = "1 1 0 0 0 0 0 0 0 0 x x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x x",
- " x a6 a5 a4 a3 a2 0 0",
- " x x x x x x x x";
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
- mode = 0x41;
- delay = 6;
- blocksize = 4;
- readsize = 256;
+ mode = 0x41;
+ delay = 10;
+ blocksize = 4;
+ readsize = 256;
;
memory "flash"
paged = yes;
- size = 2048;
- page_size = 32;
- num_pages = 64;
+ size = 16384;
+ page_size = 128;
+ num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
+ " 0 0 0 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
+ " 0 0 0 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
-# The information in the data sheet of April/2004 is wrong, this works:
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
- " x x x x a3 a2 a1 a0",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
-# The information in the data sheet of April/2004 is wrong, this works:
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
- " x x x x a3 a2 a1 a0",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
-# The information in the data sheet of April/2004 is wrong, this works:
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 x x x x",
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
" x x x x x x x x";
- mode = 0x41;
- delay = 6;
- blocksize = 32;
- readsize = 256;
+ mode = 0x41;
+ delay = 10;
+ blocksize = 64;
+ readsize = 256;
;
-# ATtiny2313 has Signature Bytes: 0x1E 0x91 0x0A.
+# ATtiny167 has Signature Bytes: 0x1E 0x94 0x87.
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
+
memory "lock"
size = 1;
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x x x x x x x i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
@@ -9030,59 +8993,54 @@ part
min_write_delay = 9000;
max_write_delay = 9000;
;
-# The Tiny2313 has calibration data for both 4 MHz and 8 MHz.
-# The information in the data sheet of April/2004 is wrong, this works:
memory "calibration"
- size = 2;
+ size = 1;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 a0 o o o o o o o o";
;
;
#------------------------------------------------------------
-# ATtiny4313
+# ATtiny48
#------------------------------------------------------------
part
- id = "t4313";
- desc = "ATtiny4313";
+ id = "t48";
+ desc = "ATtiny48";
has_debugwire = yes;
- flash_instr = 0xB2, 0x0F, 0x1F;
- eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
- stk500_devcode = 0x23;
-## Use the ATtiny26 devcode:
- avr910_devcode = 0x5e;
- signature = 0x1e 0x92 0x0d;
- pagel = 0xD4;
- bs2 = 0xD6;
- reset = io;
- chip_erase_delay = 9000;
-
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ flash_instr = 0xB6, 0x01, 0x11;
+ eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
+ 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
+ 0x99, 0xF9, 0xBB, 0xAF;
+ stk500_devcode = 0x73;
+# avr910_devcode = 0x;
+ signature = 0x1e 0x92 0x09;
+ pagel = 0xd7;
+ bs2 = 0xc2;
+ chip_erase_delay = 15000;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
pp_controlstack =
- 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
- 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
- 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
- 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
@@ -9091,6 +9049,7 @@ part
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
+ resetdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
@@ -9098,157 +9057,161 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- ocdrev = 0;
+ ocdrev = 1;
- memory "eeprom"
- size = 256;
+ memory "eeprom"
paged = no;
page_size = 4;
- min_write_delay = 4000;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
- "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
-
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
- "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+ size = 64;
+ min_write_delay = 3600;
+ max_write_delay = 3600;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
- " i i i i i i i i";
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x x",
- " a7 a6 a5 a4 a3 a2 0 0",
- " x x x x x x x x";
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
- mode = 0x41;
- delay = 6;
- blocksize = 4;
- readsize = 256;
- ;
- memory "flash"
- paged = yes;
- size = 4096;
- page_size = 64;
- num_pages = 64;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x x",
+ " x a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ mode = 0x41;
+ delay = 20;
+ blocksize = 4;
+ readsize = 64;
+ ;
+ memory "flash"
+ paged = yes;
+ size = 4096;
+ page_size = 64;
+ num_pages = 64;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 x x x x x",
- " x x x x x x x x";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- mode = 0x41;
- delay = 6;
- blocksize = 32;
- readsize = 256;
- ;
-# ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D.
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- memory "lock"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ mode = 0x41;
+ delay = 6;
+ blocksize = 64;
+ readsize = 256;
+ ;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "lfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "hfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x x x i";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "efuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "calibration"
- size = 2;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 a0 o o o o o o o o";
- ;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x 1 1 1 1 1 1 1 i";
+ ;
+
+ memory "lock"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
;
#------------------------------------------------------------
-# AT90PWM2
+# ATtiny88
#------------------------------------------------------------
part
- id = "pwm2";
- desc = "AT90PWM2";
+ id = "t88";
+ desc = "ATtiny88";
has_debugwire = yes;
flash_instr = 0xB6, 0x01, 0x11;
eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
0x99, 0xF9, 0xBB, 0xAF;
- stk500_devcode = 0x65;
-## avr910_devcode = ?;
- signature = 0x1e 0x93 0x81;
- pagel = 0xD8;
- bs2 = 0xE2;
- reset = io;
- chip_erase_delay = 9000;
-
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ stk500_devcode = 0x73;
+# avr910_devcode = 0x;
+ signature = 0x1e 0x93 0x11;
+ pagel = 0xd7;
+ bs2 = 0xc2;
+ chip_erase_delay = 9000;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
@@ -9262,10 +9225,10 @@ part
pollmethod = 1;
pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
@@ -9274,6 +9237,7 @@ part
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
+ resetdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
@@ -9281,19 +9245,25 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- memory "eeprom"
- size = 512;
+ ocdrev = 1;
+
+ memory "eeprom"
paged = no;
page_size = 4;
- min_write_delay = 4000;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8",
- "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+ size = 64;
+ min_write_delay = 3600;
+ max_write_delay = 3600;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8",
- "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
@@ -9302,270 +9272,511 @@ part
writepage = " 1 1 0 0 0 0 1 0",
" 0 0 x x x x x x",
- " a7 a6 a5 a4 a3 a2 0 0",
+ " x a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 6;
+ delay = 20;
blocksize = 4;
- readsize = 256;
- ;
- memory "flash"
- paged = yes;
- size = 8192;
- page_size = 64;
- num_pages = 128;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ readsize = 64;
+ ;
+ memory "flash"
+ paged = yes;
+ size = 8192;
+ page_size = 64;
+ num_pages = 128;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 x x x x x",
- " x x x x x x x x";
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 64;
readsize = 256;
- ;
-# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81.
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 x x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- memory "lock"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
+ ;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "lfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "hfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "efuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x i i i i i i i i";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x x x i";
+ ;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "lock"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
- ;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ ;
-#------------------------------------------------------------
-# AT90PWM3
-#------------------------------------------------------------
-
-# Completely identical to AT90PWM2 (including the signature!)
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
-part parent "pwm2"
- id = "pwm3";
- desc = "AT90PWM3";
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
;
#------------------------------------------------------------
-# AT90PWM2B
+# ATmega328
#------------------------------------------------------------
-# Same as AT90PWM2 but different signature.
-
-part parent "pwm2"
- id = "pwm2b";
- desc = "AT90PWM2B";
- signature = 0x1e 0x93 0x83;
- ocdrev = 1;
- ;
+part
+ id = "m328";
+ desc = "ATmega328";
+ has_debugwire = yes;
+ flash_instr = 0xB6, 0x01, 0x11;
+ eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
+ 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
+ 0x99, 0xF9, 0xBB, 0xAF;
+ stk500_devcode = 0x86;
+ # avr910_devcode = 0x;
+ signature = 0x1e 0x95 0x14;
+ pagel = 0xd7;
+ bs2 = 0xc2;
+ chip_erase_delay = 9000;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
-#------------------------------------------------------------
-# AT90PWM3B
-#------------------------------------------------------------
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
-# Completely identical to AT90PWM2B (including the signature!)
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
-part parent "pwm2b"
- id = "pwm3b";
- desc = "AT90PWM3B";
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ resetdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
ocdrev = 1;
- ;
-#------------------------------------------------------------
-# AT90PWM316
-#------------------------------------------------------------
+ memory "eeprom"
+ paged = no;
+ page_size = 4;
+ size = 1024;
+ min_write_delay = 3600;
+ max_write_delay = 3600;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 x x x a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
-# Similar to AT90PWM3B, but with 16 kiB flash, 512 B EEPROM, and 1024 B SRAM.
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 x x x a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
-part parent "pwm3b"
- id = "pwm316";
- desc = "AT90PWM316";
- signature = 0x1e 0x94 0x83;
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
- ocdrev = 1;
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x a9 a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 4;
+ readsize = 256;
+ ;
memory "flash"
- paged = yes;
- size = 16384;
- page_size = 128;
- num_pages = 128;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ paged = yes;
+ size = 32768;
+ page_size = 128;
+ num_pages = 256;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 a13 a12 a11 a10 a9 a8",
- " a7 a6 x x x x x x",
- " x x x x x x x x";
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 a13 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
+ " x x x x x x x x";
- mode = 0x21;
+ mode = 0x41;
delay = 6;
blocksize = 128;
readsize = 256;
- ;
- ;
-#------------------------------------------------------------
-# AT90PWM216
-#------------------------------------------------------------
-# Completely identical to AT90PWM316 (including the signature!)
+ ;
-part parent "pwm316"
- id = "pwm216";
- desc = "AT90PWM216";
- ;
+ memory "lfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
-#------------------------------------------------------------
-# ATtiny25
-#------------------------------------------------------------
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
-part
- id = "t25";
- desc = "ATtiny25";
- has_debugwire = yes;
- flash_instr = 0xB4, 0x02, 0x12;
- eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
-## no STK500 devcode in XML file, use the ATtiny45 one
- stk500_devcode = 0x14;
-## avr910_devcode = ?;
-## Try the AT90S2313 devcode:
- avr910_devcode = 0x20;
- signature = 0x1e 0x91 0x08;
- reset = io;
- chip_erase_delay = 4500;
+ memory "hfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+ memory "efuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x i i i";
+ ;
- hvsp_controlstack =
- 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
- 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
- 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
- 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
+ memory "lock"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+;
+
+#------------------------------------------------------------
+# ATmega328P
+#------------------------------------------------------------
+
+part parent "m328"
+ id = "m328p";
+ desc = "ATmega328P";
+ signature = 0x1e 0x95 0x0f;
+;
+
+#------------------------------------------------------------
+# ATmega328PB
+#------------------------------------------------------------
+
+part parent "m328"
+ id = "m328pb";
+ desc = "ATmega328PB";
+ signature = 0x1e 0x95 0x16;
+
+ memory "efuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x i i i i";
+ ;
+;
+
+#------------------------------------------------------------
+# ATmega32m1
+#------------------------------------------------------------
+
+part parent "m328"
+ id = "m32m1";
+ desc = "ATmega32M1";
+ # stk500_devcode = 0x;
+ # avr910_devcode = 0x;
+ signature = 0x1e 0x95 0x84;
+ bs2 = 0xe2;
+
+ memory "efuse"
+ size = 1;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x i i i i i i";
+ ;
+;
+
+#------------------------------------------------------------
+# ATmega64m1
+#------------------------------------------------------------
+
+part parent "m328"
+ id = "m64m1";
+ desc = "ATmega64M1";
+ # stk500_devcode = 0x;
+ # avr910_devcode = 0x;
+ signature = 0x1e 0x96 0x84;
+ bs2 = 0xe2;
+
+ memory "eeprom"
+ paged = no;
+ size = 2048;
+ page_size = 8;
+ min_write_delay = 3600;
+ max_write_delay = 3600;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 4;
+ readsize = 256;
+ ;
+
+ memory "flash"
+ paged = yes;
+ size = 65536;
+ page_size = 256;
+ num_pages = 256;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 x x x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 6;
+ blocksize = 128;
+ readsize = 256;
+
+ ;
+
+ memory "efuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x i i i i i i";
+ ;
+;
+
+#------------------------------------------------------------
+# ATtiny2313
+#------------------------------------------------------------
+
+part
+ id = "t2313";
+ desc = "ATtiny2313";
+ has_debugwire = yes;
+ flash_instr = 0xB2, 0x0F, 0x1F;
+ eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+ stk500_devcode = 0x23;
+## Use the ATtiny26 devcode:
+ avr910_devcode = 0x5e;
+ signature = 0x1e 0x91 0x0a;
+ pagel = 0xD4;
+ bs2 = 0xD6;
+ reset = io;
+ chip_erase_delay = 9000;
+
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
+ 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
+ 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
+ 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
- hvspcmdexedelay = 0;
- synchcycles = 6;
- latchcycles = 1;
+ progmodedelay = 0;
+ latchcycles = 5;
togglevtg = 1;
- poweroffdelay = 25;
+ poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
- hvleavestabdelay = 100;
- resetdelay = 25;
- chiperasepolltimeout = 40;
- chiperasetime = 0;
- programfusepolltimeout = 25;
- programlockpolltimeout = 25;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
- ocdrev = 1;
+ ocdrev = 0;
memory "eeprom"
size = 128;
@@ -9615,16 +9826,19 @@ part
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
+# The information in the data sheet of April/2004 is wrong, this works:
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
" x x x x a3 a2 a1 a0",
" i i i i i i i i";
+# The information in the data sheet of April/2004 is wrong, this works:
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
" x x x x a3 a2 a1 a0",
" i i i i i i i i";
+# The information in the data sheet of April/2004 is wrong, this works:
writepage = " 0 1 0 0 1 1 0 0",
" 0 0 0 0 0 0 a9 a8",
" a7 a6 a5 a4 x x x x",
@@ -9635,7 +9849,7 @@ part
blocksize = 32;
readsize = 256;
;
-# ATtiny25 has Signature Bytes: 0x1E 0x91 0x08.
+# ATtiny2313 has Signature Bytes: 0x1E 0x91 0x0A.
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
@@ -9645,8 +9859,8 @@ part
size = 1;
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
@@ -9683,33 +9897,45 @@ part
min_write_delay = 9000;
max_write_delay = 9000;
;
+# The Tiny2313 has calibration data for both 4 MHz and 8 MHz.
+# The information in the data sheet of April/2004 is wrong, this works:
memory "calibration"
- size = 1;
+ size = 2;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 a0 o o o o o o o o";
;
;
#------------------------------------------------------------
-# ATtiny45
+# ATtiny2313A
+#------------------------------------------------------------
+
+part parent "t2313"
+ id = "t2313a";
+ desc = "ATtiny2313A";
+ ;
+
+#------------------------------------------------------------
+# ATtiny4313
#------------------------------------------------------------
part
- id = "t45";
- desc = "ATtiny45";
+ id = "t4313";
+ desc = "ATtiny4313";
has_debugwire = yes;
- flash_instr = 0xB4, 0x02, 0x12;
- eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
+ flash_instr = 0xB2, 0x0F, 0x1F;
+ eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC,
0x99, 0xE1, 0xBB, 0xAC;
- stk500_devcode = 0x14;
-## avr910_devcode = ?;
-## Try the AT90S2313 devcode:
- avr910_devcode = 0x20;
- signature = 0x1e 0x92 0x06;
+ stk500_devcode = 0x23;
+## Use the ATtiny26 devcode:
+ avr910_devcode = 0x5e;
+ signature = 0x1e 0x92 0x0d;
+ pagel = 0xD4;
+ bs2 = 0xD6;
reset = io;
- chip_erase_delay = 4500;
+ chip_erase_delay = 9000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
@@ -9728,40 +9954,40 @@ part
postdelay = 1;
pollmethod = 1;
- hvsp_controlstack =
- 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
- 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
- 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
- 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
+ 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
+ 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
+ 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
- hvspcmdexedelay = 0;
- synchcycles = 6;
- latchcycles = 1;
+ latchcycles = 5;
togglevtg = 1;
- poweroffdelay = 25;
+ poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
- hvleavestabdelay = 100;
- resetdelay = 25;
- chiperasepolltimeout = 40;
- chiperasetime = 0;
- programfusepolltimeout = 25;
- programlockpolltimeout = 25;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
- ocdrev = 1;
+ ocdrev = 0;
memory "eeprom"
size = 256;
- page_size = 4;
+ paged = no;
+ page_size = 4;
min_write_delay = 4000;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
"a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
"a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
@@ -9789,12 +10015,12 @@ part
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
+ " 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
+ " 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
@@ -9808,17 +10034,17 @@ part
" x x x a4 a3 a2 a1 a0",
" i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
+ writepage = " 0 1 0 0 1 1 0 0",
" 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 x x x x x",
- " x x x x x x x x";
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 32;
readsize = 256;
;
-# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!)
+# ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D.
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
@@ -9828,8 +10054,8 @@ part
size = 1;
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
@@ -9868,32 +10094,31 @@ part
;
memory "calibration"
- size = 1;
+ size = 2;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
"0 0 0 0 0 0 0 a0 o o o o o o o o";
;
;
#------------------------------------------------------------
-# ATtiny85
+# AT90PWM2
#------------------------------------------------------------
part
- id = "t85";
- desc = "ATtiny85";
+ id = "pwm2";
+ desc = "AT90PWM2";
has_debugwire = yes;
- flash_instr = 0xB4, 0x02, 0x12;
- eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
-## no STK500 devcode in XML file, use the ATtiny45 one
- stk500_devcode = 0x14;
+ flash_instr = 0xB6, 0x01, 0x11;
+ eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
+ 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
+ 0x99, 0xF9, 0xBB, 0xAF;
+ stk500_devcode = 0x65;
## avr910_devcode = ?;
-## Try the AT90S2313 devcode:
- avr910_devcode = 0x20;
- signature = 0x1e 0x93 0x0b;
+ signature = 0x1e 0x93 0x81;
+ pagel = 0xD8;
+ bs2 = 0xE2;
reset = io;
- chip_erase_delay = 400000;
+ chip_erase_delay = 9000;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
@@ -9912,27 +10137,25 @@ part
postdelay = 1;
pollmethod = 1;
- hvsp_controlstack =
- 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
- 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
- 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
- 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
- hvspcmdexedelay = 0;
- synchcycles = 6;
- latchcycles = 1;
+ progmodedelay = 0;
+ latchcycles = 5;
togglevtg = 1;
- poweroffdelay = 25;
+ poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
- hvleavestabdelay = 100;
- resetdelay = 25;
- chiperasepolltimeout = 40;
- chiperasetime = 0;
- programfusepolltimeout = 25;
- programlockpolltimeout = 25;
-
- ocdrev = 1;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
memory "eeprom"
size = 512;
@@ -9942,11 +10165,11 @@ part
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8",
- "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8",
- "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
@@ -9959,7 +10182,7 @@ part
" x x x x x x x x";
mode = 0x41;
- delay = 12;
+ delay = 6;
blocksize = 4;
readsize = 256;
;
@@ -9968,17 +10191,17 @@ part
size = 8192;
page_size = 64;
num_pages = 128;
- min_write_delay = 30000;
- max_write_delay = 30000;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
+ " 0 0 0 0 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
+ " 0 0 0 0 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
@@ -9992,28 +10215,29 @@ part
" x x x a4 a3 a2 a1 a0",
" i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 x x x x x",
- " x x x x x x x x";
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
mode = 0x41;
delay = 6;
- blocksize = 32;
+ blocksize = 64;
readsize = 256;
;
-# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08.
+# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81.
memory "signature"
size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ read = "0 0 1 1 0 0 0 0 0 0 x x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
memory "lock"
size = 1;
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
+
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
@@ -10043,7 +10267,7 @@ part
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x x x i";
+ "x x x x x x x x i i i i i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
@@ -10054,221 +10278,137 @@ part
memory "calibration"
size = 1;
read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
;
;
#------------------------------------------------------------
-# ATmega640
+# AT90PWM3
#------------------------------------------------------------
-# Almost same as ATmega1280, except for different memory sizes
-part
- id = "m640";
- desc = "ATmega640";
- signature = 0x1e 0x96 0x08;
- has_jtag = yes;
-# stk500_devcode = 0xB2;
-# avr910_devcode = 0x43;
- chip_erase_delay = 9000;
- pagel = 0xD7;
- bs2 = 0xA0;
- reset = dedicated;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+# Completely identical to AT90PWM2 (including the signature!)
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
- "x x x x x x x x x x x x x x x x";
+part parent "pwm2"
+ id = "pwm3";
+ desc = "AT90PWM3";
+ ;
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+#------------------------------------------------------------
+# AT90PWM2B
+#------------------------------------------------------------
+# Same as AT90PWM2 but different signature.
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
- hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 5;
- togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
+part parent "pwm2"
+ id = "pwm2b";
+ desc = "AT90PWM2B";
+ signature = 0x1e 0x93 0x83;
- idr = 0x31;
- spmcr = 0x57;
- rampz = 0x3b;
- allowfullpagebitstream = no;
+ ocdrev = 1;
+ ;
- ocdrev = 3;
+#------------------------------------------------------------
+# AT90PWM3B
+#------------------------------------------------------------
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 4096;
- min_write_delay = 9000;
- max_write_delay = 9000;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read = " 1 0 1 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+# Completely identical to AT90PWM2B (including the signature!)
- write = " 1 1 0 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+part parent "pwm2b"
+ id = "pwm3b";
+ desc = "AT90PWM3B";
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
- " i i i i i i i i";
+ ocdrev = 1;
+ ;
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
- " x x x x x x x x";
+#------------------------------------------------------------
+# AT90PWM316
+#------------------------------------------------------------
- mode = 0x41;
- delay = 10;
- blocksize = 8;
- readsize = 256;
- ;
+# Similar to AT90PWM3B, but with 16 kiB flash, 512 B EEPROM, and 1024 B SRAM.
+
+part parent "pwm3b"
+ id = "pwm316";
+ desc = "AT90PWM316";
+ signature = 0x1e 0x94 0x83;
+
+ ocdrev = 1;
memory "flash"
paged = yes;
- size = 65536;
- page_size = 256;
- num_pages = 256;
+ size = 16384;
+ page_size = 128;
+ num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
+ " 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
+ " 0 0 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
+ " 0 0 x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
+ " 0 0 x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 x x x x x x x",
+ " 0 0 a13 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
" x x x x x x x x";
- mode = 0x41;
- delay = 10;
- blocksize = 256;
+ mode = 0x21;
+ delay = 6;
+ blocksize = 128;
readsize = 256;
;
+ ;
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
-
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
-
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x i i i";
-
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 x x x x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
+#------------------------------------------------------------
+# AT90PWM216
+#------------------------------------------------------------
+# Completely identical to AT90PWM316 (including the signature!)
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 x x x x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- ;
+part parent "pwm316"
+ id = "pwm216";
+ desc = "AT90PWM216";
+ ;
#------------------------------------------------------------
-# ATmega1280
+# ATtiny25
#------------------------------------------------------------
part
- id = "m1280";
- desc = "ATmega1280";
- signature = 0x1e 0x97 0x03;
- has_jtag = yes;
-# stk500_devcode = 0xB2;
-# avr910_devcode = 0x43;
- chip_erase_delay = 9000;
- pagel = 0xD7;
- bs2 = 0xA0;
- reset = dedicated;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ id = "t25";
+ desc = "ATtiny25";
+ has_debugwire = yes;
+ flash_instr = 0xB4, 0x02, 0x12;
+ eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+## no STK500 devcode in XML file, use the ATtiny45 one
+ stk500_devcode = 0x14;
+## avr910_devcode = ?;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x91 0x08;
+ reset = io;
+ chip_erase_delay = 4500;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
- "x x x x x x x x x x x x x x x x";
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
@@ -10281,197 +10421,177 @@ part
postdelay = 1;
pollmethod = 1;
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hvsp_controlstack =
+ 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
+ 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
+ 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
+ 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 5;
+ hvspcmdexedelay = 0;
+ synchcycles = 6;
+ latchcycles = 1;
togglevtg = 1;
- poweroffdelay = 15;
+ poweroffdelay = 25;
resetdelayms = 1;
resetdelayus = 0;
- hvleavestabdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
-
- idr = 0x31;
- spmcr = 0x57;
- rampz = 0x3b;
- allowfullpagebitstream = no;
+ hvleavestabdelay = 100;
+ resetdelay = 25;
+ chiperasepolltimeout = 40;
+ chiperasetime = 0;
+ programfusepolltimeout = 25;
+ programlockpolltimeout = 25;
- ocdrev = 3;
+ ocdrev = 1;
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 4096;
- min_write_delay = 9000;
- max_write_delay = 9000;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read = " 1 0 1 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "eeprom"
+ size = 128;
+ paged = no;
+ page_size = 4;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
+ "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- write = " 1 1 0 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
+ "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
+ " 0 0 0 0 0 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
+ " 0 0 x x x x x x",
+ " x a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 10;
- blocksize = 8;
+ delay = 6;
+ blocksize = 4;
readsize = 256;
- ;
-
- memory "flash"
- paged = yes;
- size = 131072;
- page_size = 256;
- num_pages = 512;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read_lo = " 0 0 1 0 0 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ ;
+ memory "flash"
+ paged = yes;
+ size = 2048;
+ page_size = 32;
+ num_pages = 64;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- read_hi = " 0 0 1 0 1 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x a3 a2 a1 a0",
+ " i i i i i i i i";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 x x x x x x x",
- " x x x x x x x x";
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 x x x x",
+ " x x x x x x x x";
mode = 0x41;
- delay = 10;
- blocksize = 256;
+ delay = 6;
+ blocksize = 32;
readsize = 256;
- ;
-
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
-
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ ;
+# ATtiny25 has Signature Bytes: 0x1E 0x91 0x08.
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ memory "lock"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x i i i";
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x x x i";
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
-
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 x x x x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
-
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 x x x x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- ;
-
-#------------------------------------------------------------
-# ATmega1281
-#------------------------------------------------------------
-# Identical to ATmega1280
-
-part parent "m1280"
- id = "m1281";
- desc = "ATmega1281";
- signature = 0x1e 0x97 0x04;
+ ;
- ocdrev = 3;
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ ;
;
#------------------------------------------------------------
-# ATmega2560
+# ATtiny45
#------------------------------------------------------------
part
- id = "m2560";
- desc = "ATmega2560";
- signature = 0x1e 0x98 0x01;
- has_jtag = yes;
- stk500_devcode = 0xB2;
-# avr910_devcode = 0x43;
- chip_erase_delay = 9000;
- pagel = 0xD7;
- bs2 = 0xA0;
- reset = dedicated;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ id = "t45";
+ desc = "ATtiny45";
+ has_debugwire = yes;
+ flash_instr = 0xB4, 0x02, 0x12;
+ eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+ stk500_devcode = 0x14;
+## avr910_devcode = ?;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x92 0x06;
+ reset = io;
+ chip_erase_delay = 4500;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
- "x x x x x x x x x x x x x x x x";
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
@@ -10484,263 +10604,412 @@ part
postdelay = 1;
pollmethod = 1;
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02;
+ hvsp_controlstack =
+ 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
+ 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
+ 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
+ 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
- latchcycles = 5;
+ hvspcmdexedelay = 0;
+ synchcycles = 6;
+ latchcycles = 1;
togglevtg = 1;
- poweroffdelay = 15;
+ poweroffdelay = 25;
resetdelayms = 1;
resetdelayus = 0;
- hvleavestabdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
-
- idr = 0x31;
- spmcr = 0x57;
- rampz = 0x3b;
- allowfullpagebitstream = no;
+ hvleavestabdelay = 100;
+ resetdelay = 25;
+ chiperasepolltimeout = 40;
+ chiperasetime = 0;
+ programfusepolltimeout = 25;
+ programlockpolltimeout = 25;
- ocdrev = 4;
+ ocdrev = 1;
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 4096;
- min_write_delay = 9000;
- max_write_delay = 9000;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read = " 1 0 1 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "eeprom"
+ size = 256;
+ page_size = 4;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
+ "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- write = " 1 1 0 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
+ "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
+ " 0 0 0 0 0 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
+ " 0 0 x x x x x x",
+ " a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 10;
- blocksize = 8;
+ delay = 6;
+ blocksize = 4;
readsize = 256;
- ;
+ ;
+ memory "flash"
+ paged = yes;
+ size = 4096;
+ page_size = 64;
+ num_pages = 64;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- memory "flash"
- paged = yes;
- size = 262144;
- page_size = 256;
- num_pages = 1024;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read_lo = " 0 0 1 0 0 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 x x x x x x x",
- " x x x x x x x x";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- load_ext_addr = " 0 1 0 0 1 1 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 0 a16",
- " 0 0 0 0 0 0 0 0";
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
mode = 0x41;
- delay = 10;
- blocksize = 256;
+ delay = 6;
+ blocksize = 32;
readsize = 256;
- ;
-
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
-
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ ;
+# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!)
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ memory "lock"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x i i i";
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x x x i";
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
-
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 x x x x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
+ ;
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 x x x x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ ;
;
#------------------------------------------------------------
-# ATmega2561
+# ATtiny85
#------------------------------------------------------------
-part parent "m2560"
- id = "m2561";
- desc = "ATmega2561";
- signature = 0x1e 0x98 0x02;
+part
+ id = "t85";
+ desc = "ATtiny85";
+ has_debugwire = yes;
+ flash_instr = 0xB4, 0x02, 0x12;
+ eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+## no STK500 devcode in XML file, use the ATtiny45 one
+ stk500_devcode = 0x14;
+## avr910_devcode = ?;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x93 0x0b;
+ reset = io;
+ chip_erase_delay = 4500;
- ocdrev = 4;
- ;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
-#------------------------------------------------------------
-# ATmega128RFA1
-#------------------------------------------------------------
-# Identical to ATmega2561 but half the ROM
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
-part parent "m2561"
- id = "m128rfa1";
- desc = "ATmega128RFA1";
- signature = 0x1e 0xa7 0x01;
- chip_erase_delay = 55000;
- bs2 = 0xE2;
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
- ocdrev = 3;
+ hvsp_controlstack =
+ 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
+ 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
+ 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
+ 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
+ hventerstabdelay = 100;
+ hvspcmdexedelay = 0;
+ synchcycles = 6;
+ latchcycles = 1;
+ togglevtg = 1;
+ poweroffdelay = 25;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 100;
+ resetdelay = 25;
+ chiperasepolltimeout = 40;
+ chiperasetime = 0;
+ programfusepolltimeout = 25;
+ programlockpolltimeout = 25;
- memory "flash"
- paged = yes;
- size = 131072;
- page_size = 256;
- num_pages = 512;
- min_write_delay = 50000;
- max_write_delay = 50000;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read_lo = " 0 0 1 0 0 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ ocdrev = 1;
- read_hi = " 0 0 1 0 1 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "eeprom"
+ size = 512;
+ paged = no;
+ page_size = 4;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 x x x x x x x",
- " x x x x x x x x";
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
mode = 0x41;
- delay = 20;
- blocksize = 256;
+ delay = 6;
+ blocksize = 4;
readsize = 256;
- ;
- ;
-
-#------------------------------------------------------------
-# ATmega256RFR2
-#------------------------------------------------------------
-
-part parent "m2561"
- id = "m256rfr2";
- desc = "ATmega256RFR2";
- signature = 0x1e 0xa8 0x02;
- chip_erase_delay = 18500;
- bs2 = 0xE2;
+ ;
+ memory "flash"
+ paged = yes;
+ size = 8192;
+ page_size = 64;
+ num_pages = 128;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 6;
+ blocksize = 32;
+ readsize = 256;
+ ;
+# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08.
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ memory "lock"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x x x i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega640
+#------------------------------------------------------------
+# Almost same as ATmega1280, except for different memory sizes
+
+part
+ id = "m640";
+ desc = "ATmega640";
+ signature = 0x1e 0x96 0x08;
+ has_jtag = yes;
+# stk500_devcode = 0xB2;
+# avr910_devcode = 0x43;
+ chip_erase_delay = 9000;
+ pagel = 0xD7;
+ bs2 = 0xA0;
+ reset = dedicated;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
+ "x x x x x x x x x x x x x x x x";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+
+ idr = 0x31;
+ spmcr = 0x57;
+ rampz = 0x3b;
+ allowfullpagebitstream = no;
+
+ ocdrev = 3;
memory "eeprom"
paged = no; /* leave this "no" */
page_size = 8; /* for parallel programming */
- size = 8192;
- min_write_delay = 13000;
- max_write_delay = 13000;
+ size = 4096;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
readback_p1 = 0x00;
readback_p2 = 0x00;
read = " 1 0 1 0 0 0 0 0",
- " x x x a12 a11 a10 a9 a8",
+ " x x x x a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
- " x x x a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
+ " x x x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
@@ -10749,7 +11018,7 @@ part parent "m2561"
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x a12 a11 a10 a9 a8",
+ " 0 0 x x a11 a10 a9 a8",
" a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
@@ -10759,42 +11028,13 @@ part parent "m2561"
readsize = 256;
;
-
- ocdrev = 4;
- ;
-
-#------------------------------------------------------------
-# ATmega128RFR2
-#------------------------------------------------------------
-
-part parent "m128rfa1"
- id = "m128rfr2";
- desc = "ATmega128RFR2";
- signature = 0x1e 0xa7 0x02;
-
-
- ocdrev = 3;
- ;
-
-#------------------------------------------------------------
-# ATmega64RFR2
-#------------------------------------------------------------
-
-part parent "m128rfa1"
- id = "m64rfr2";
- desc = "ATmega64RFR2";
- signature = 0x1e 0xa6 0x02;
-
-
- ocdrev = 3;
-
memory "flash"
paged = yes;
size = 65536;
page_size = 256;
num_pages = 256;
- min_write_delay = 50000;
- max_write_delay = 50000;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
readback_p1 = 0x00;
readback_p2 = 0x00;
read_lo = " 0 0 1 0 0 0 0 0",
@@ -10823,104 +11063,88 @@ part parent "m128rfa1"
" x x x x x x x x";
mode = 0x41;
- delay = 20;
+ delay = 10;
blocksize = 256;
readsize = 256;
;
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 2048;
- min_write_delay = 13000;
- max_write_delay = 13000;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read = " 1 0 1 0 0 0 0 0",
- " x x x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- write = " 1 1 0 0 0 0 0 0",
- " x x x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
- " i i i i i i i i";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
- " x x x x x x x x";
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- mode = 0x41;
- delay = 10;
- blocksize = 8;
- readsize = 256;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
;
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x i i i";
- ;
-
-#------------------------------------------------------------
-# ATmega2564RFR2
-#------------------------------------------------------------
-
-part parent "m256rfr2"
- id = "m2564rfr2";
- desc = "ATmega2564RFR2";
- signature = 0x1e 0xa8 0x03;
- ;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
-#------------------------------------------------------------
-# ATmega1284RFR2
-#------------------------------------------------------------
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
-part parent "m128rfr2"
- id = "m1284rfr2";
- desc = "ATmega1284RFR2";
- signature = 0x1e 0xa7 0x03;
- ;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
-#------------------------------------------------------------
-# ATmega644RFR2
-#------------------------------------------------------------
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 x x x x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
-part parent "m64rfr2"
- id = "m644rfr2";
- desc = "ATmega644RFR2";
- signature = 0x1e 0xa6 0x03;
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 x x x x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
;
#------------------------------------------------------------
-# ATtiny24
+# ATmega1280
#------------------------------------------------------------
part
- id = "t24";
- desc = "ATtiny24";
- has_debugwire = yes;
- flash_instr = 0xB4, 0x07, 0x17;
- eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
-## no STK500 devcode in XML file, use the ATtiny45 one
- stk500_devcode = 0x14;
-## avr910_devcode = ?;
-## Try the AT90S2313 devcode:
- avr910_devcode = 0x20;
- signature = 0x1e 0x91 0x0b;
- reset = io;
- chip_erase_delay = 4500;
-
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ id = "m1280";
+ desc = "ATmega1280";
+ signature = 0x1e 0x97 0x03;
+ has_jtag = yes;
+# stk500_devcode = 0xB2;
+# avr910_devcode = 0x43;
+ chip_erase_delay = 9000;
+ pagel = 0xD7;
+ bs2 = 0xA0;
+ reset = dedicated;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
+ "x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
@@ -10933,178 +11157,197 @@ part
postdelay = 1;
pollmethod = 1;
- hvsp_controlstack =
- 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
- 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
- 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
- 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F;
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
- hvspcmdexedelay = 0;
- synchcycles = 6;
- latchcycles = 1;
+ progmodedelay = 0;
+ latchcycles = 5;
togglevtg = 1;
- poweroffdelay = 25;
- resetdelayms = 0;
- resetdelayus = 70;
- hvleavestabdelay = 100;
- resetdelay = 25;
- chiperasepolltimeout = 40;
- chiperasetime = 0;
- programfusepolltimeout = 25;
- programlockpolltimeout = 25;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
- ocdrev = 1;
+ idr = 0x31;
+ spmcr = 0x57;
+ rampz = 0x3b;
+ allowfullpagebitstream = no;
- memory "eeprom"
- size = 128;
- paged = no;
- page_size = 4;
- min_write_delay = 4000;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
- "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+ ocdrev = 3;
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
- "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 8; /* for parallel programming */
+ size = 4096;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " x x x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " x x x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
+ " 0 0 0 0 0 a2 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x x",
- " x a6 a5 a4 a3 a2 0 0",
+ " 0 0 x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 6;
- blocksize = 4;
+ delay = 10;
+ blocksize = 8;
readsize = 256;
- ;
- memory "flash"
- paged = yes;
- size = 2048;
- page_size = 32;
- num_pages = 64;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ ;
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "flash"
+ paged = yes;
+ size = 131072;
+ page_size = 256;
+ num_pages = 512;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x x x a3 a2 a1 a0",
- " i i i i i i i i";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x x x a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 x x x x",
- " x x x x x x x x";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 x x x x x x x",
+ " x x x x x x x x";
mode = 0x41;
- delay = 6;
- blocksize = 32;
+ delay = 10;
+ blocksize = 256;
readsize = 256;
- ;
-# ATtiny24 has Signature Bytes: 0x1E 0x91 0x0B.
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- memory "lock"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x x x x x x x i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x x x i";
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 a0 o o o o o o o o";
- ;
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 x x x x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 x x x x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
;
#------------------------------------------------------------
-# ATtiny44
+# ATmega1281
#------------------------------------------------------------
+# Identical to ATmega1280
-part
- id = "t44";
- desc = "ATtiny44";
- has_debugwire = yes;
- flash_instr = 0xB4, 0x07, 0x17;
- eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
-## no STK500 devcode in XML file, use the ATtiny45 one
- stk500_devcode = 0x14;
-## avr910_devcode = ?;
-## Try the AT90S2313 devcode:
- avr910_devcode = 0x20;
- signature = 0x1e 0x92 0x07;
- reset = io;
- chip_erase_delay = 4500;
+part parent "m1280"
+ id = "m1281";
+ desc = "ATmega1281";
+ signature = 0x1e 0x97 0x04;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ ocdrev = 3;
+ ;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+#------------------------------------------------------------
+# ATmega2560
+#------------------------------------------------------------
+
+part
+ id = "m2560";
+ desc = "ATmega2560";
+ signature = 0x1e 0x98 0x01;
+ has_jtag = yes;
+ stk500_devcode = 0xB2;
+# avr910_devcode = 0x43;
+ chip_erase_delay = 9000;
+ pagel = 0xD7;
+ bs2 = 0xA0;
+ reset = dedicated;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
+ "x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
@@ -11117,273 +11360,538 @@ part
postdelay = 1;
pollmethod = 1;
- hvsp_controlstack =
- 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
- 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
- 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
- 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F;
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02;
hventerstabdelay = 100;
- hvspcmdexedelay = 0;
- synchcycles = 6;
- latchcycles = 1;
+ progmodedelay = 0;
+ latchcycles = 5;
togglevtg = 1;
- poweroffdelay = 25;
- resetdelayms = 0;
- resetdelayus = 70;
- hvleavestabdelay = 100;
- resetdelay = 25;
- chiperasepolltimeout = 40;
- chiperasetime = 0;
- programfusepolltimeout = 25;
- programlockpolltimeout = 25;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
- ocdrev = 1;
+ idr = 0x31;
+ spmcr = 0x57;
+ rampz = 0x3b;
+ allowfullpagebitstream = no;
- memory "eeprom"
- size = 256;
- paged = no;
- page_size = 4;
- min_write_delay = 4000;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
- "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+ ocdrev = 4;
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
- "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 8; /* for parallel programming */
+ size = 4096;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " x x x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " x x x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
+ " 0 0 0 0 0 a2 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x x",
- " x a6 a5 a4 a3 a2 0 0",
+ " 0 0 x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 6;
- blocksize = 4;
+ delay = 10;
+ blocksize = 8;
readsize = 256;
- ;
- memory "flash"
- paged = yes;
- size = 4096;
- page_size = 64;
- num_pages = 64;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ ;
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "flash"
+ paged = yes;
+ size = 262144;
+ page_size = 256;
+ num_pages = 1024;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 x x x x x",
- " x x x x x x x x";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 x x x x x x x",
+ " x x x x x x x x";
+
+ load_ext_addr = " 0 1 0 0 1 1 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 0 a16",
+ " 0 0 0 0 0 0 0 0";
mode = 0x41;
- delay = 6;
- blocksize = 32;
+ delay = 10;
+ blocksize = 256;
readsize = 256;
- ;
-# ATtiny44 has Signature Bytes: 0x1E 0x92 0x07.
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- memory "lock"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x x x x x x x i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x x x i";
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 a0 o o o o o o o o";
- ;
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 x x x x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 x x x x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
;
#------------------------------------------------------------
-# ATtiny84
+# ATmega2561
#------------------------------------------------------------
-part
- id = "t84";
- desc = "ATtiny84";
- has_debugwire = yes;
- flash_instr = 0xB4, 0x07, 0x17;
- eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
-## no STK500 devcode in XML file, use the ATtiny45 one
- stk500_devcode = 0x14;
-## avr910_devcode = ?;
-## Try the AT90S2313 devcode:
- avr910_devcode = 0x20;
- signature = 0x1e 0x93 0x0c;
- reset = io;
- chip_erase_delay = 4500;
+part parent "m2560"
+ id = "m2561";
+ desc = "ATmega2561";
+ signature = 0x1e 0x98 0x02;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+ ocdrev = 4;
+ ;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+#------------------------------------------------------------
+# ATmega128RFA1
+#------------------------------------------------------------
+# Identical to ATmega2561 but half the ROM
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+part parent "m2561"
+ id = "m128rfa1";
+ desc = "ATmega128RFA1";
+ signature = 0x1e 0xa7 0x01;
+ chip_erase_delay = 55000;
+ bs2 = 0xE2;
- hvsp_controlstack =
- 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
- 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
- 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
- 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F;
- hventerstabdelay = 100;
- hvspcmdexedelay = 0;
- synchcycles = 6;
- latchcycles = 1;
- togglevtg = 1;
- poweroffdelay = 25;
- resetdelayms = 0;
- resetdelayus = 70;
- hvleavestabdelay = 100;
- resetdelay = 25;
- chiperasepolltimeout = 40;
- chiperasetime = 0;
- programfusepolltimeout = 25;
- programlockpolltimeout = 25;
+ ocdrev = 3;
- ocdrev = 1;
+ memory "flash"
+ paged = yes;
+ size = 131072;
+ page_size = 256;
+ num_pages = 512;
+ min_write_delay = 50000;
+ max_write_delay = 50000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- memory "eeprom"
- size = 512;
- paged = no;
- page_size = 4;
- min_write_delay = 4000;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8",
- "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8",
- "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 x x x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 256;
+ readsize = 256;
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega256RFR2
+#------------------------------------------------------------
+
+part parent "m2561"
+ id = "m256rfr2";
+ desc = "ATmega256RFR2";
+ signature = 0x1e 0xa8 0x02;
+ chip_erase_delay = 18500;
+ bs2 = 0xE2;
+
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 8; /* for parallel programming */
+ size = 8192;
+ min_write_delay = 13000;
+ max_write_delay = 13000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " x x x a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " x x x a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
+ " 0 0 0 0 0 a2 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x x",
- " x a6 a5 a4 a3 a2 0 0",
+ " 0 0 x a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 6;
- blocksize = 4;
+ delay = 10;
+ blocksize = 8;
readsize = 256;
- ;
- memory "flash"
- paged = yes;
- size = 8192;
- page_size = 64;
- num_pages = 128;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ ;
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
+
+ ocdrev = 4;
+ ;
+
+#------------------------------------------------------------
+# ATmega128RFR2
+#------------------------------------------------------------
+
+part parent "m128rfa1"
+ id = "m128rfr2";
+ desc = "ATmega128RFR2";
+ signature = 0x1e 0xa7 0x02;
+
+
+ ocdrev = 3;
+ ;
+
+#------------------------------------------------------------
+# ATmega64RFR2
+#------------------------------------------------------------
+
+part parent "m128rfa1"
+ id = "m64rfr2";
+ desc = "ATmega64RFR2";
+ signature = 0x1e 0xa6 0x02;
+
+
+ ocdrev = 3;
+
+ memory "flash"
+ paged = yes;
+ size = 65536;
+ page_size = 256;
+ num_pages = 256;
+ min_write_delay = 50000;
+ max_write_delay = 50000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " x x x x x x x x",
+ " x a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 x x x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 256;
+ readsize = 256;
+ ;
+
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 8; /* for parallel programming */
+ size = 2048;
+ min_write_delay = 13000;
+ max_write_delay = 13000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " x x x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " x x x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 10;
+ blocksize = 8;
+ readsize = 256;
+ ;
+
+
+ ;
+
+#------------------------------------------------------------
+# ATmega2564RFR2
+#------------------------------------------------------------
+
+part parent "m256rfr2"
+ id = "m2564rfr2";
+ desc = "ATmega2564RFR2";
+ signature = 0x1e 0xa8 0x03;
+ ;
+
+#------------------------------------------------------------
+# ATmega1284RFR2
+#------------------------------------------------------------
+
+part parent "m128rfr2"
+ id = "m1284rfr2";
+ desc = "ATmega1284RFR2";
+ signature = 0x1e 0xa7 0x03;
+ ;
+
+#------------------------------------------------------------
+# ATmega644RFR2
+#------------------------------------------------------------
+
+part parent "m64rfr2"
+ id = "m644rfr2";
+ desc = "ATmega644RFR2";
+ signature = 0x1e 0xa6 0x03;
+ ;
+
+#------------------------------------------------------------
+# ATtiny24
+#------------------------------------------------------------
+
+part
+ id = "t24";
+ desc = "ATtiny24";
+ has_debugwire = yes;
+ flash_instr = 0xB4, 0x07, 0x17;
+ eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+## no STK500 devcode in XML file, use the ATtiny45 one
+ stk500_devcode = 0x14;
+## avr910_devcode = ?;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x91 0x0b;
+ reset = io;
+ chip_erase_delay = 4500;
+
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+
+ hvsp_controlstack =
+ 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
+ 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
+ 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
+ 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F;
+ hventerstabdelay = 100;
+ hvspcmdexedelay = 0;
+ synchcycles = 6;
+ latchcycles = 1;
+ togglevtg = 1;
+ poweroffdelay = 25;
+ resetdelayms = 0;
+ resetdelayus = 70;
+ hvleavestabdelay = 100;
+ resetdelay = 25;
+ chiperasepolltimeout = 40;
+ chiperasetime = 0;
+ programfusepolltimeout = 25;
+ programlockpolltimeout = 25;
+
+ ocdrev = 1;
+
+ memory "eeprom"
+ size = 128;
+ paged = no;
+ page_size = 4;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
+ "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
+ "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x x",
+ " x a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 6;
+ blocksize = 4;
+ readsize = 256;
+ ;
+ memory "flash"
+ paged = yes;
+ size = 2048;
+ page_size = 32;
+ num_pages = 64;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 0 0 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
+ " x x x x a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
+ " x x x x a3 a2 a1 a0",
" i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 x x x x x",
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 x x x x",
" x x x x x x x x";
mode = 0x41;
@@ -11391,13 +11899,12 @@ part
blocksize = 32;
readsize = 256;
;
-# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C.
+# ATtiny24 has Signature Bytes: 0x1E 0x91 0x0B.
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
-
memory "lock"
size = 1;
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
@@ -11449,328 +11956,234 @@ part
;
#------------------------------------------------------------
-# ATtiny441
+# ATtiny24A
#------------------------------------------------------------
-part parent "t44"
- id = "t441";
- desc = "ATtiny441";
- signature = 0x1e 0x92 0x15;
+part parent "t24"
+ id = "t24a";
+ desc = "ATtiny24A";
+ ;
+
+#------------------------------------------------------------
+# ATtiny44
+#------------------------------------------------------------
+
+part
+ id = "t44";
+ desc = "ATtiny44";
+ has_debugwire = yes;
+ flash_instr = 0xB4, 0x07, 0x17;
+ eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+## no STK500 devcode in XML file, use the ATtiny45 one
+ stk500_devcode = 0x14;
+## avr910_devcode = ?;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x92 0x07;
+ reset = io;
+ chip_erase_delay = 4500;
+
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+
+ hvsp_controlstack =
+ 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
+ 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
+ 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
+ 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F;
+ hventerstabdelay = 100;
+ hvspcmdexedelay = 0;
+ synchcycles = 6;
+ latchcycles = 1;
+ togglevtg = 1;
+ poweroffdelay = 25;
+ resetdelayms = 0;
+ resetdelayus = 70;
+ hvleavestabdelay = 100;
+ resetdelay = 25;
+ chiperasepolltimeout = 40;
+ chiperasetime = 0;
+ programfusepolltimeout = 25;
+ programlockpolltimeout = 25;
+
+ ocdrev = 1;
+
+ memory "eeprom"
+ size = 256;
+ paged = no;
+ page_size = 4;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
+ "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
+ "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x x",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+ mode = 0x41;
+ delay = 6;
+ blocksize = 4;
+ readsize = 256;
+ ;
memory "flash"
paged = yes;
size = 4096;
- page_size = 16;
- num_pages = 256;
+ page_size = 64;
+ num_pages = 64;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
+ " 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
+ " 0 0 0 0 0 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" 0 0 0 x x x x x",
- " x x x x x a2 a1 a0",
+ " x x x a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" 0 0 0 x x x x x",
- " x x x x x a2 a1 a0",
+ " x x x a4 a3 a2 a1 a0",
" i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
+ writepage = " 0 1 0 0 1 1 0 0",
" 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 x x x",
+ " a7 a6 a5 x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
- blocksize = 16;
+ blocksize = 32;
readsize = 256;
- ;
+ ;
+# ATtiny44 has Signature Bytes: 0x1E 0x92 0x07.
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ memory "lock"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x x x x x x x i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
- memory "efuse"
+ memory "lfuse"
size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
-;
-
-#------------------------------------------------------------
-# ATtiny841
-#------------------------------------------------------------
-
-part parent "t84"
- id = "t841";
- desc = "ATtiny841";
- signature = 0x1e 0x93 0x15;
-
- memory "flash"
- paged = yes;
- size = 8192;
- page_size = 16;
- num_pages = 512;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x x x x a2 a1 a0",
- " i i i i i i i i";
-
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x x x x a2 a1 a0",
- " i i i i i i i i";
+ ;
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 x x x",
- " x x x x x x x x";
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- mode = 0x41;
- delay = 6;
- blocksize = 16;
- readsize = 256;
- ;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x i i i i i i i i";
+ "x x x x x x x x x x x x x x x i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
-;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ ;
+ ;
#------------------------------------------------------------
-# ATtiny43U
+# ATtiny44A
+#------------------------------------------------------------
+
+part parent "t44"
+ id = "t44a";
+ desc = "ATtiny44A";
+ ;
+
+#------------------------------------------------------------
+# ATtiny84
#------------------------------------------------------------
part
- id = "t43u";
- desc = "ATtiny43u";
- has_debugwire = yes;
- flash_instr = 0xB4, 0x07, 0x17;
- eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
- 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
- 0x99, 0xE1, 0xBB, 0xAC;
- stk500_devcode = 0x14;
+ id = "t84";
+ desc = "ATtiny84";
+ has_debugwire = yes;
+ flash_instr = 0xB4, 0x07, 0x17;
+ eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+## no STK500 devcode in XML file, use the ATtiny45 one
+ stk500_devcode = 0x14;
## avr910_devcode = ?;
## Try the AT90S2313 devcode:
- avr910_devcode = 0x20;
- signature = 0x1e 0x92 0x0C;
- reset = io;
- chip_erase_delay = 1000;
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x93 0x0c;
+ reset = io;
+ chip_erase_delay = 4500;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
"x x x x x x x x x x x x x x x x";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
- pp_controlstack = 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, 0x4E, 0x5E,
- 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, 0x06, 0x16, 0x46, 0x56,
- 0x0A, 0x1A, 0x4A, 0x5A, 0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x00;
- hventerstabdelay = 100;
- progmodedelay = 0;
- hvspcmdexedelay = 0;
- latchcycles = 5;
- togglevtg = 1;
- poweroffdelay = 20;
- resetdelayms = 1;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- resetdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
- memory "eeprom"
- size = 64;
- paged = yes;
- page_size = 4;
- num_pages = 16;
- min_write_delay = 4000;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
- "0 0 a4 a3 a2 a1 a0 o o o o o o o o";
-
- write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
- "0 0 a5 a4 a3 a2 a1 a0 i i i i i i i i";
-
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
- " i i i i i i i i";
-
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x x",
- " 0 0 a5 a4 a3 a2 0 0",
- " x x x x x x x x";
-
- mode = 0x41;
- delay = 5;
- blocksize = 4;
- readsize = 256;
- ;
- memory "flash"
- paged = yes;
- size = 4096;
- page_size = 64;
- num_pages = 64;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
-
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
-
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x x a4 a3 a2 a1 a0",
- " i i i i i i i i";
-
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 x x x x x",
- " x x x x x x x x";
-
- mode = 0x41;
- delay = 10;
- blocksize = 64;
- readsize = 256;
- ;
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- memory "lock"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- min_write_delay = 4500;
- max_write_delay = 4500;
- ;
-
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
-
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 4500;
- max_write_delay = 4500;
- ;
-
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
-
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 4500;
- max_write_delay = 4500;
- ;
-
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x x x x i";
-
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 4500;
- max_write_delay = 4500;
- ;
-
- memory "calibration"
- size = 2;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 a0 o o o o o o o o";
- ;
-;
-
-#------------------------------------------------------------
-# ATmega32u4
-#------------------------------------------------------------
-
-part
- id = "m32u4";
- desc = "ATmega32U4";
- signature = 0x1e 0x95 0x87;
- usbpid = 0x2ff4;
- has_jtag = yes;
-# stk500_devcode = 0xB2;
-# avr910_devcode = 0x43;
- chip_erase_delay = 9000;
- pagel = 0xD7;
- bs2 = 0xA0;
- reset = dedicated;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
-
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
- "x x x x x x x x x x x x x x x x";
-
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
@@ -11782,297 +12195,424 @@ part
postdelay = 1;
pollmethod = 1;
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hvsp_controlstack =
+ 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
+ 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
+ 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
+ 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F;
hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 5;
+ hvspcmdexedelay = 0;
+ synchcycles = 6;
+ latchcycles = 1;
togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
-
- idr = 0x31;
- spmcr = 0x57;
- rampz = 0x3b;
- allowfullpagebitstream = no;
+ poweroffdelay = 25;
+ resetdelayms = 0;
+ resetdelayus = 70;
+ hvleavestabdelay = 100;
+ resetdelay = 25;
+ chiperasepolltimeout = 40;
+ chiperasetime = 0;
+ programfusepolltimeout = 25;
+ programlockpolltimeout = 25;
- ocdrev = 3;
+ ocdrev = 1;
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 4; /* for parallel programming */
- size = 1024;
- min_write_delay = 9000;
- max_write_delay = 9000;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read = " 1 0 1 0 0 0 0 0",
- " x x x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "eeprom"
+ size = 512;
+ paged = no;
+ page_size = 4;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o";
- write = " 1 1 0 0 0 0 0 0",
- " x x x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8",
+ "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
+ " 0 0 0 0 0 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
+ " 0 0 x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 20;
+ delay = 6;
blocksize = 4;
readsize = 256;
- ;
+ ;
+ memory "flash"
+ paged = yes;
+ size = 8192;
+ page_size = 64;
+ num_pages = 128;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- memory "flash"
- paged = yes;
- size = 32768;
- page_size = 128;
- num_pages = 256;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " x x x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " x x x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 x x x x x x",
- " x x x x x x x x";
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
mode = 0x41;
delay = 6;
- blocksize = 128;
+ blocksize = 32;
readsize = 256;
- ;
-
- memory "lfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ ;
+# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C.
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ memory "lock"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x x x x x x x i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "hfuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x i i i i";
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x x x x i";
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- ;
+ ;
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 x x x x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ ;
+ ;
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 x x x x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
+#------------------------------------------------------------
+# ATtiny84A
+#------------------------------------------------------------
+
+part parent "t84"
+ id = "t84a";
+ desc = "ATtiny84A";
;
#------------------------------------------------------------
-# AT90USB646
+# ATtiny441
#------------------------------------------------------------
-part
- id = "usb646";
- desc = "AT90USB646";
- signature = 0x1e 0x96 0x82;
- usbpid = 0x2ff9;
- has_jtag = yes;
-# stk500_devcode = 0xB2;
-# avr910_devcode = 0x43;
- chip_erase_delay = 9000;
- pagel = 0xD7;
- bs2 = 0xA0;
- reset = dedicated;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+part parent "t44"
+ id = "t441";
+ desc = "ATtiny441";
+ signature = 0x1e 0x92 0x15;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
- "x x x x x x x x x x x x x x x x";
+ memory "flash"
+ paged = yes;
+ size = 4096;
+ page_size = 16;
+ num_pages = 256;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
- hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 5;
- togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x x a2 a1 a0",
+ " i i i i i i i i";
- idr = 0x31;
- spmcr = 0x57;
- rampz = 0x3b;
- allowfullpagebitstream = no;
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x x a2 a1 a0",
+ " i i i i i i i i";
- ocdrev = 3;
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 x x x",
+ " x x x x x x x x";
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 2048;
+ mode = 0x41;
+ delay = 6;
+ blocksize = 16;
+ readsize = 256;
+ ;
+
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read = " 1 0 1 0 0 0 0 0",
- " x x x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ ;
+;
- write = " 1 1 0 0 0 0 0 0",
- " x x x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+#------------------------------------------------------------
+# ATtiny841
+#------------------------------------------------------------
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
- " i i i i i i i i";
+part parent "t84"
+ id = "t841";
+ desc = "ATtiny841";
+ signature = 0x1e 0x93 0x15;
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
- " x x x x x x x x";
+ memory "flash"
+ paged = yes;
+ size = 8192;
+ page_size = 16;
+ num_pages = 512;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x x a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x x a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 x x x",
+ " x x x x x x x x";
mode = 0x41;
- delay = 10;
- blocksize = 8;
+ delay = 6;
+ blocksize = 16;
readsize = 256;
- ;
+ ;
+
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+;
+
+#------------------------------------------------------------
+# ATtiny43U
+#------------------------------------------------------------
+
+part
+ id = "t43u";
+ desc = "ATtiny43U";
+ has_debugwire = yes;
+ flash_instr = 0xB4, 0x07, 0x17;
+ eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
+ 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC,
+ 0x99, 0xE1, 0xBB, 0xAC;
+ stk500_devcode = 0x14;
+## avr910_devcode = ?;
+## Try the AT90S2313 devcode:
+ avr910_devcode = 0x20;
+ signature = 0x1e 0x92 0x0C;
+ reset = io;
+ chip_erase_delay = 1000;
+
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+ pp_controlstack = 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, 0x4E, 0x5E,
+ 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, 0x06, 0x16, 0x46, 0x56,
+ 0x0A, 0x1A, 0x4A, 0x5A, 0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ hvspcmdexedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 20;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ resetdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+ memory "eeprom"
+ size = 64;
+ paged = yes;
+ page_size = 4;
+ num_pages = 16;
+ min_write_delay = 4000;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x",
+ "0 0 a5 a4 a3 a2 a1 a0 o o o o o o o o";
+
+ write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x",
+ "0 0 a5 a4 a3 a2 a1 a0 i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x x",
+ " 0 0 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+ mode = 0x41;
+ delay = 5;
+ blocksize = 4;
+ readsize = 256;
+ ;
memory "flash"
paged = yes;
- size = 65536;
- page_size = 256;
- num_pages = 256;
+ size = 4096;
+ page_size = 64;
+ num_pages = 64;
min_write_delay = 4500;
max_write_delay = 4500;
- readback_p1 = 0x00;
- readback_p2 = 0x00;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 x x x x x x x",
- " x x x x x x x x";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- mode = 0x41;
- delay = 6;
- blocksize = 256;
- readsize = 256;
- ;
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 10;
+ blocksize = 64;
+ readsize = 256;
+ ;
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ memory "lock"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ ;
memory "lfuse"
size = 1;
@@ -12081,9 +12621,9 @@ part
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ ;
memory "hfuse"
size = 1;
@@ -12092,67 +12632,37 @@ part
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ ;
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x i i i i";
+ "x x x x x x x x x x x x x x x i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
-
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ ;
memory "calibration"
size = 1;
- read = "0 0 1 1 1 0 0 0 x x x x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
-
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 x x x x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- ;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 a0 o o o o o o o o";
+ ;
+;
#------------------------------------------------------------
-# AT90USB647
-#------------------------------------------------------------
-# identical to AT90USB646
-
-part parent "usb646"
- id = "usb647";
- desc = "AT90USB647";
- signature = 0x1e 0x96 0x82;
-
- ocdrev = 3;
- ;
-
-#------------------------------------------------------------
-# AT90USB1286
+# ATmega16u4
#------------------------------------------------------------
part
- id = "usb1286";
- desc = "AT90USB1286";
- signature = 0x1e 0x97 0x82;
- usbpid = 0x2ffb;
+ id = "m16u4";
+ desc = "ATmega16U4";
+ signature = 0x1e 0x94 0x88;
+ usbpid = 0x2ff4;
has_jtag = yes;
# stk500_devcode = 0xB2;
# avr910_devcode = 0x43;
@@ -12206,75 +12716,75 @@ part
memory "eeprom"
paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 4096;
+ page_size = 4; /* for parallel programming */
+ size = 512;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0x00;
readback_p2 = 0x00;
read = " 1 0 1 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
+ " x x x x x x x a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
- " x x x x a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
+ " x x x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
+ " 0 0 0 0 0 0 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
+ " 0 0 x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 10;
- blocksize = 8;
+ delay = 20;
+ blocksize = 4;
readsize = 256;
;
memory "flash"
paged = yes;
- size = 131072;
- page_size = 256;
- num_pages = 512;
+ size = 16384;
+ page_size = 128;
+ num_pages = 128;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0x00;
readback_p2 = 0x00;
read_lo = " 0 0 1 0 0 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" x x x x x x x x",
- " x a6 a5 a4 a3 a2 a1 a0",
+ " x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 x x x x x x x",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
- blocksize = 256;
+ blocksize = 128;
readsize = 256;
;
@@ -12303,7 +12813,7 @@ part
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x x i i i i";
+ "x x x x x x x x 1 1 1 1 i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
@@ -12314,7 +12824,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x 0 0 o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -12336,37 +12846,26 @@ part
;
#------------------------------------------------------------
-# AT90USB1287
-#------------------------------------------------------------
-# identical to AT90USB1286
-
-part parent "usb1286"
- id = "usb1287";
- desc = "AT90USB1287";
- signature = 0x1e 0x97 0x82;
-
- ocdrev = 3;
- ;
-
-#------------------------------------------------------------
-# AT90USB162
+# ATmega32u4
#------------------------------------------------------------
part
- id = "usb162";
- desc = "AT90USB162";
- has_jtag = no;
- has_debugwire = yes;
- signature = 0x1e 0x94 0x82;
- usbpid = 0x2ffa;
+ id = "m32u4";
+ desc = "ATmega32U4";
+ signature = 0x1e 0x95 0x87;
+ usbpid = 0x2ff4;
+ has_jtag = yes;
+# stk500_devcode = 0xB2;
+# avr910_devcode = 0x43;
chip_erase_delay = 9000;
- reset = io;
+ pagel = 0xD7;
+ bs2 = 0xA0;
+ reset = dedicated;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
"x x x x x x x x x x x x x x x x";
- pagel = 0xD7;
- bs2 = 0xC6;
timeout = 200;
stabdelay = 100;
@@ -12378,6 +12877,7 @@ part
predelay = 1;
postdelay = 1;
pollmethod = 1;
+
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
@@ -12398,25 +12898,29 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- ocdrev = 1;
+ idr = 0x31;
+ spmcr = 0x57;
+ rampz = 0x3b;
+ allowfullpagebitstream = no;
+
+ ocdrev = 3;
memory "eeprom"
paged = no; /* leave this "no" */
page_size = 4; /* for parallel programming */
- size = 512;
- num_pages = 128;
+ size = 1024;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0x00;
readback_p2 = 0x00;
read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
+ " x x x x x a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
+ " x x x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
@@ -12425,8 +12929,8 @@ part
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 0 0",
+ " 0 0 x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
" x x x x x x x x";
mode = 0x41;
@@ -12437,20 +12941,20 @@ part
memory "flash"
paged = yes;
- size = 16384;
+ size = 32768;
page_size = 128;
- num_pages = 128;
+ num_pages = 256;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0x00;
readback_p2 = 0x00;
read_lo = " 0 0 1 0 0 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
@@ -12465,7 +12969,7 @@ part
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 x x x x x x",
" x x x x x x x x";
@@ -12500,7 +13004,7 @@ part
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x i i i i i i i i";
+ "x x x x x x x x 1 1 1 1 i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
@@ -12511,7 +13015,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -12521,39 +13025,38 @@ part
memory "calibration"
size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
+
memory "signature"
size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ read = "0 0 1 1 0 0 0 0 x x x x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;
#------------------------------------------------------------
-# AT90USB82
+# AT90USB646
#------------------------------------------------------------
-# Changes against AT90USB162 (beside IDs)
-# memory "flash"
-# size = 8192;
-# num_pages = 64;
part
- id = "usb82";
- desc = "AT90USB82";
- has_jtag = no;
- has_debugwire = yes;
- signature = 0x1e 0x93 0x82;
- usbpid = 0x2ff7;
+ id = "usb646";
+ desc = "AT90USB646";
+ signature = 0x1e 0x96 0x82;
+ usbpid = 0x2ff9;
+ has_jtag = yes;
+# stk500_devcode = 0xB2;
+# avr910_devcode = 0x43;
chip_erase_delay = 9000;
- reset = io;
+ pagel = 0xD7;
+ bs2 = 0xA0;
+ reset = dedicated;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
"x x x x x x x x x x x x x x x x";
- pagel = 0xD7;
- bs2 = 0xC6;
timeout = 200;
stabdelay = 100;
@@ -12565,6 +13068,7 @@ part
predelay = 1;
postdelay = 1;
pollmethod = 1;
+
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
@@ -12585,80 +13089,84 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- ocdrev = 1;
+ idr = 0x31;
+ spmcr = 0x57;
+ rampz = 0x3b;
+ allowfullpagebitstream = no;
+
+ ocdrev = 3;
memory "eeprom"
paged = no; /* leave this "no" */
- page_size = 4; /* for parallel programming */
- size = 512;
- num_pages = 128;
+ page_size = 8; /* for parallel programming */
+ size = 2048;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0x00;
readback_p2 = 0x00;
read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
+ " x x x x x a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
+ " x x x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
+ " 0 0 0 0 0 a2 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 0 0",
+ " 0 0 x x x a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 20;
- blocksize = 4;
+ delay = 10;
+ blocksize = 8;
readsize = 256;
;
memory "flash"
paged = yes;
- size = 8192;
- page_size = 128;
- num_pages = 64;
+ size = 65536;
+ page_size = 256;
+ num_pages = 256;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0x00;
readback_p2 = 0x00;
read_lo = " 0 0 1 0 0 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" x x x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
+ " x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" x x x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
+ " x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
- "a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 x x x x x x",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 x x x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
- blocksize = 128;
+ blocksize = 256;
readsize = 256;
;
@@ -12687,7 +13195,7 @@ part
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x i i i i i i i i";
+ "x x x x x x x x x x x x i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
@@ -12698,7 +13206,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -12708,52 +13216,63 @@ part
memory "calibration"
size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
+
memory "signature"
size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ read = "0 0 1 1 0 0 0 0 x x x x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;
#------------------------------------------------------------
-# ATmega32U2
+# AT90USB647
#------------------------------------------------------------
-# Changes against AT90USB162 (beside IDs)
-# memory "flash"
-# size = 32768;
-# num_pages = 256;
-# memory "eeprom"
-# size = 1024;
-# num_pages = 256;
-part
- id = "m32u2";
- desc = "ATmega32U2";
- has_jtag = no;
- has_debugwire = yes;
- signature = 0x1e 0x95 0x8a;
- usbpid = 0x2ff0;
- chip_erase_delay = 9000;
- reset = io;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
- pagel = 0xD7;
- bs2 = 0xC6;
+# identical to AT90USB646
+
+part parent "usb646"
+ id = "usb647";
+ desc = "AT90USB647";
+ signature = 0x1e 0x96 0x82;
+
+ ocdrev = 3;
+ ;
+
+#------------------------------------------------------------
+# AT90USB1286
+#------------------------------------------------------------
+
+part
+ id = "usb1286";
+ desc = "AT90USB1286";
+ signature = 0x1e 0x97 0x82;
+ usbpid = 0x2ffb;
+ has_jtag = yes;
+# stk500_devcode = 0xB2;
+# avr910_devcode = 0x43;
+ chip_erase_delay = 9000;
+ pagel = 0xD7;
+ bs2 = 0xA0;
+ reset = dedicated;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
+ "x x x x x x x x x x x x x x x x";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
@@ -12774,48 +13293,52 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- ocdrev = 1;
+ idr = 0x31;
+ spmcr = 0x57;
+ rampz = 0x3b;
+ allowfullpagebitstream = no;
+
+ ocdrev = 3;
memory "eeprom"
paged = no; /* leave this "no" */
- page_size = 4; /* for parallel programming */
- size = 1024;
- num_pages = 256;
+ page_size = 8; /* for parallel programming */
+ size = 4096;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0x00;
readback_p2 = 0x00;
read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
+ " x x x x a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
+ " x x x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
+ " 0 0 0 0 0 a2 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 0 0 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 0 0",
+ " 0 0 x x a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
mode = 0x41;
- delay = 20;
- blocksize = 4;
+ delay = 10;
+ blocksize = 8;
readsize = 256;
;
memory "flash"
paged = yes;
- size = 32768;
- page_size = 128;
- num_pages = 256;
+ size = 131072;
+ page_size = 256;
+ num_pages = 512;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0x00;
@@ -12832,22 +13355,22 @@ part
loadpage_lo = " 0 1 0 0 0 0 0 0",
" x x x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
+ " x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" x x x x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
+ " x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
"a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 x x x x x x",
+ " a7 x x x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
- blocksize = 128;
+ blocksize = 256;
readsize = 256;
;
@@ -12876,7 +13399,7 @@ part
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x i i i i i i i i";
+ "x x x x x x x x x x x x i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
@@ -12887,7 +13410,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -12897,32 +13420,41 @@ part
memory "calibration"
size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
+
memory "signature"
size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ read = "0 0 1 1 0 0 0 0 x x x x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;
+
#------------------------------------------------------------
-# ATmega16U2
+# AT90USB1287
#------------------------------------------------------------
-# Changes against ATmega32U2 (beside IDs)
-# memory "flash"
-# size = 16384;
-# num_pages = 128;
-# memory "eeprom"
-# size = 512;
-# num_pages = 128;
+# identical to AT90USB1286
+
+part parent "usb1286"
+ id = "usb1287";
+ desc = "AT90USB1287";
+ signature = 0x1e 0x97 0x82;
+
+ ocdrev = 3;
+ ;
+
+#------------------------------------------------------------
+# AT90USB162
+#------------------------------------------------------------
+
part
- id = "m16u2";
- desc = "ATmega16U2";
+ id = "usb162";
+ desc = "AT90USB162";
has_jtag = no;
has_debugwire = yes;
- signature = 0x1e 0x94 0x89;
- usbpid = 0x2fef;
+ signature = 0x1e 0x94 0x82;
+ usbpid = 0x2ffa;
chip_erase_delay = 9000;
reset = io;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
@@ -13075,7 +13607,7 @@ part
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ "x x x x x x x x o o o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
@@ -13096,21 +13628,20 @@ part
;
#------------------------------------------------------------
-# ATmega8U2
+# AT90USB82
#------------------------------------------------------------
-# Changes against ATmega16U2 (beside IDs)
+# Changes against AT90USB162 (beside IDs)
# memory "flash"
# size = 8192;
-# page_size = 64;
-# blocksize = 64;
+# num_pages = 64;
part
- id = "m8u2";
- desc = "ATmega8U2";
+ id = "usb82";
+ desc = "AT90USB82";
has_jtag = no;
has_debugwire = yes;
- signature = 0x1e 0x93 0x89;
- usbpid = 0x2fee;
+ signature = 0x1e 0x93 0x82;
+ usbpid = 0x2ff7;
chip_erase_delay = 9000;
reset = io;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
@@ -13249,84 +13780,2558 @@ part
max_write_delay = 9000;
;
- memory "efuse"
- size = 1;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x i i i i i i i i";
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega32U2
+#------------------------------------------------------------
+# Changes against AT90USB162 (beside IDs)
+# memory "flash"
+# size = 32768;
+# num_pages = 256;
+# memory "eeprom"
+# size = 1024;
+# num_pages = 256;
+part
+ id = "m32u2";
+ desc = "ATmega32U2";
+ has_jtag = no;
+ has_debugwire = yes;
+ signature = 0x1e 0x95 0x8a;
+ usbpid = 0x2ff0;
+ chip_erase_delay = 9000;
+ reset = io;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+ pagel = 0xD7;
+ bs2 = 0xC6;
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+
+ ocdrev = 1;
+
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 4; /* for parallel programming */
+ size = 1024;
+ num_pages = 256;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 4;
+ readsize = 256;
+ ;
+
+ memory "flash"
+ paged = yes;
+ size = 32768;
+ page_size = 128;
+ num_pages = 256;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " x x x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " x x x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 6;
+ blocksize = 128;
+ readsize = 256;
+ ;
+
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ ;
+#------------------------------------------------------------
+# ATmega16U2
+#------------------------------------------------------------
+# Changes against ATmega32U2 (beside IDs)
+# memory "flash"
+# size = 16384;
+# num_pages = 128;
+# memory "eeprom"
+# size = 512;
+# num_pages = 128;
+part
+ id = "m16u2";
+ desc = "ATmega16U2";
+ has_jtag = no;
+ has_debugwire = yes;
+ signature = 0x1e 0x94 0x89;
+ usbpid = 0x2fef;
+ chip_erase_delay = 9000;
+ reset = io;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+ pagel = 0xD7;
+ bs2 = 0xC6;
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+
+ ocdrev = 1;
+
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 4; /* for parallel programming */
+ size = 512;
+ num_pages = 128;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 4;
+ readsize = 256;
+ ;
+
+ memory "flash"
+ paged = yes;
+ size = 16384;
+ page_size = 128;
+ num_pages = 128;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " x x x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " x x x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 6;
+ blocksize = 128;
+ readsize = 256;
+ ;
+
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega8U2
+#------------------------------------------------------------
+# Changes against ATmega16U2 (beside IDs)
+# memory "flash"
+# size = 8192;
+# page_size = 64;
+# blocksize = 64;
+
+part
+ id = "m8u2";
+ desc = "ATmega8U2";
+ has_jtag = no;
+ has_debugwire = yes;
+ signature = 0x1e 0x93 0x89;
+ usbpid = 0x2fee;
+ chip_erase_delay = 9000;
+ reset = io;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+ pagel = 0xD7;
+ bs2 = 0xC6;
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+
+ ocdrev = 1;
+
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 4; /* for parallel programming */
+ size = 512;
+ num_pages = 128;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 0 0 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 4;
+ readsize = 256;
+ ;
+
+ memory "flash"
+ paged = yes;
+ size = 8192;
+ page_size = 128;
+ num_pages = 64;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " x x x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " x x x x x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ "a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 6;
+ blocksize = 128;
+ readsize = 256;
+ ;
+
+ memory "lfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "hfuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "efuse"
+ size = 1;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x i i i i i i i i";
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega165
+#------------------------------------------------------------
+
+part
+ id = "m165";
+ desc = "ATmega165";
+ signature = 0x1e 0x94 0x10;
+ has_jtag = yes;
+# stk500_devcode = 0x??;
+# avr910_devcode = 0x??;
+ chip_erase_delay = 9000;
+ reset = io;
+ pagel = 0xd7;
+ bs2 = 0xa0;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 6;
+ togglevtg = 0;
+ poweroffdelay = 0;
+ resetdelayms = 0;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ resetdelay = 15;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+
+ idr = 0x31;
+ spmcr = 0x57;
+ eecr = 0x3f;
+ allowfullpagebitstream = no;
+
+ ocdrev = 3;
+
+ memory "eeprom"
+ paged = no;
+ page_size = 4;
+ size = 512;
+ num_pages = 128;
+ min_write_delay = 3600;
+ max_write_delay = 3600;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 0 x a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 x a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 0 0 0 0 x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 20;
+ blocksize = 4;
+ readsize = 256;
+ ;
+
+ memory "flash"
+ paged = yes;
+ size = 16384;
+ page_size = 128;
+ num_pages = 128;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0x00;
+ readback_p2 = 0x00;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " x x x a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " x x x a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 0 x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 0 x x x x",
+ " x x a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ " x x x a12 a11 a10 a9 a8",
+ " a7 a6 x x x x x x",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 10;
+ blocksize = 128;
+ readsize = 256;
+ ;
+
+ memory "lfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
+
+ memory "hfuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
+
+ memory "efuse"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x x i i i i";
+ ;
+
+ memory "lock"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 i i i i i i";
+ ;
+
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x a1 a0 o o o o o o o o";
+ ;
+
+ memory "calibration"
+ size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega165A
+#------------------------------------------------------------
+
+part parent "m165"
+ id = "m165a";
+ desc = "ATmega165A";
+ signature = 0x1e 0x94 0x10;
+ ;
+
+#------------------------------------------------------------
+# ATmega165P
+#------------------------------------------------------------
+
+part parent "m165"
+ id = "m165p";
+ desc = "ATmega165P";
+ signature = 0x1e 0x94 0x07;
+ ;
+
+#------------------------------------------------------------
+# ATmega165PA
+#------------------------------------------------------------
+
+part parent "m165"
+ id = "m165pa";
+ desc = "ATmega165PA";
+ signature = 0x1e 0x94 0x07;
+ ;
+
+#------------------------------------------------------------
+# ATmega325
+#------------------------------------------------------------
+
+part
+ id = "m325";
+ desc = "ATmega325";
+ signature = 0x1e 0x95 0x05;
+ has_jtag = yes;
+# stk500_devcode = 0x??; # No STK500v1 support?
+# avr910_devcode = 0x??; # Try the ATmega16 one
+ avr910_devcode = 0x74;
+ pagel = 0xd7;
+ bs2 = 0xa0;
+ chip_erase_delay = 9000;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+
+ idr = 0x31;
+ spmcr = 0x57;
+ allowfullpagebitstream = no;
+
+ ocdrev = 3;
+
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 4; /* for parallel programming */
+ size = 1024;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 0 0 0 0 a9 a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 10;
+ blocksize = 4;
+ readsize = 256;
+ ;
+
+ memory "flash"
+ paged = yes;
+ size = 32768;
+ page_size = 128;
+ num_pages = 256;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 0 0",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 0 0 0 0 0",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 10;
+ blocksize = 128;
+ readsize = 256;
+ ;
+
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 1 1 i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "lfuse"
+ size = 1;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 i i i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "hfuse"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "0 0 0 0 0 0 0 0 i i i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "efuse"
+ size = 1;
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 a1 a0 o o o o o o o o";
+ ;
+
+ memory "calibration"
+ size = 1;
+
+ read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega325A
+#------------------------------------------------------------
+
+part parent "m325"
+ id = "m325a";
+ desc = "ATmega325A";
+ ;
+
+#------------------------------------------------------------
+# ATmega325P
+#------------------------------------------------------------
+
+part parent "m325"
+ id = "m325p";
+ desc = "ATmega325P";
+ signature = 0x1e 0x95 0x0d;
+ ;
+
+#------------------------------------------------------------
+# ATmega325PA
+#------------------------------------------------------------
+
+part parent "m325"
+ id = "m325pa";
+ desc = "ATmega325PA";
+ signature = 0x1e 0x95 0x0d;
+ ;
+
+#------------------------------------------------------------
+# ATmega645
+#------------------------------------------------------------
+
+part
+ id = "m645";
+ desc = "ATmega645";
+ signature = 0x1E 0x96 0x05;
+ has_jtag = yes;
+# stk500_devcode = 0x??; # No STK500v1 support?
+# avr910_devcode = 0x??; # Try the ATmega16 one
+ avr910_devcode = 0x74;
+ pagel = 0xd7;
+ bs2 = 0xa0;
+ chip_erase_delay = 9000;
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
+
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
+
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
+
+ pp_controlstack =
+ 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+ 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+ 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+ 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ hventerstabdelay = 100;
+ progmodedelay = 0;
+ latchcycles = 5;
+ togglevtg = 1;
+ poweroffdelay = 15;
+ resetdelayms = 1;
+ resetdelayus = 0;
+ hvleavestabdelay = 15;
+ chiperasepulsewidth = 0;
+ chiperasepolltimeout = 10;
+ programfusepulsewidth = 0;
+ programfusepolltimeout = 5;
+ programlockpulsewidth = 0;
+ programlockpolltimeout = 5;
+
+ idr = 0x31;
+ spmcr = 0x57;
+ allowfullpagebitstream = no;
+
+ ocdrev = 3;
+
+ memory "eeprom"
+ paged = no; /* leave this "no" */
+ page_size = 8; /* for parallel programming */
+ size = 2048;
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 0 0 0 a10 a9 a8",
+ " a7 a6 a5 a4 a3 0 0 0",
+ " x x x x x x x x";
+
+ mode = 0x41;
+ delay = 10;
+ blocksize = 8;
+ readsize = 256;
+ ;
+
+ memory "flash"
+ paged = yes;
+ size = 65536;
+ page_size = 256;
+ num_pages = 256;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ readback_p1 = 0xff;
+ readback_p2 = 0xff;
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
+
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 0 0",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 0 0 0 0 0",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
+
+ writepage = " 0 1 0 0 1 1 0 0",
+ " a15 a14 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " 0 0 0 0 0 0 0 0";
+
+ mode = 0x41;
+ delay = 10;
+ blocksize = 128;
+ readsize = 256;
+ ;
+
+ memory "lock"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 1 1 i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "lfuse"
+ size = 1;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 i i i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "hfuse"
+ size = 1;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "0 0 0 0 0 0 0 0 i i i i i i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "efuse"
+ size = 1;
+
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i";
+ min_write_delay = 9000;
+ max_write_delay = 9000;
+ ;
+
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 a1 a0 o o o o o o o o";
+ ;
+
+ memory "calibration"
+ size = 1;
+
+ read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
+ ;
+
+#------------------------------------------------------------
+# ATmega645A
+#------------------------------------------------------------
+
+part parent "m645"
+ id = "m645a";
+ desc = "ATmega645A";
+ ;
+
+#------------------------------------------------------------
+# ATmega645P
+#------------------------------------------------------------
+
+part parent "m645"
+ id = "m645p";
+ desc = "ATmega645P";
+ signature = 0x1e 0x96 0x0d;
+ ;
+
+#------------------------------------------------------------
+# ATmega3250
+#------------------------------------------------------------
+
+part parent "m325"
+ id = "m3250";
+ desc = "ATmega3250";
+ signature = 0x1E 0x95 0x06;
+ ;
+
+#------------------------------------------------------------
+# ATmega3250A
+#------------------------------------------------------------
+
+part parent "m325"
+ id = "m3250a";
+ desc = "ATmega3250A";
+ signature = 0x1E 0x95 0x06;
+ ;
+
+#------------------------------------------------------------
+# ATmega3250P
+#------------------------------------------------------------
+
+part parent "m325"
+ id = "m3250p";
+ desc = "ATmega3250P";
+ signature = 0x1E 0x95 0x0e;
+ ;
+
+#------------------------------------------------------------
+# ATmega3250PA
+#------------------------------------------------------------
+
+part parent "m325"
+ id = "m3250pa";
+ desc = "ATmega3250PA";
+ signature = 0x1E 0x95 0x0e;
+ ;
+
+#------------------------------------------------------------
+# ATmega6450
+#------------------------------------------------------------
+
+part parent "m645"
+ id = "m6450";
+ desc = "ATmega6450";
+ signature = 0x1E 0x96 0x06;
+ ;
+
+#------------------------------------------------------------
+# ATmega6450A
+#------------------------------------------------------------
+
+part parent "m645"
+ id = "m6450a";
+ desc = "ATmega6450A";
+ signature = 0x1E 0x96 0x06;
+ ;
+
+#------------------------------------------------------------
+# ATmega6450P
+#------------------------------------------------------------
+
+part parent "m645"
+ id = "m6450p";
+ desc = "ATmega6450P";
+ signature = 0x1E 0x96 0x0e;
+ ;
+
+#------------------------------------------------------------
+# AVR XMEGA family common values
+#------------------------------------------------------------
+
+part
+ id = ".xmega";
+ desc = "AVR XMEGA family common values";
+ has_pdi = yes;
+ nvm_base = 0x01c0;
+ mcu_base = 0x0090;
+
+ memory "signature"
+ size = 3;
+ offset = 0x1000090;
+ ;
+
+ memory "prodsig"
+ size = 0x32;
+ offset = 0x8e0200;
+ page_size = 0x32;
+ readsize = 0x32;
+ ;
+
+ memory "fuse1"
+ size = 1;
+ offset = 0x8f0021;
+ ;
+
+ memory "fuse2"
+ size = 1;
+ offset = 0x8f0022;
+ ;
+
+ memory "fuse4"
+ size = 1;
+ offset = 0x8f0024;
+ ;
+
+ memory "fuse5"
+ size = 1;
+ offset = 0x8f0025;
+ ;
+
+ memory "lock"
+ size = 1;
+ offset = 0x8f0027;
+ ;
+
+ memory "data"
+ # SRAM, only used to supply the offset
+ offset = 0x1000000;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega16A4U
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x16a4u";
+ desc = "ATxmega16A4U";
+ signature = 0x1e 0x94 0x41;
+ usbpid = 0x2fe3;
+
+ memory "eeprom"
+ size = 0x400;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x4000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x1000;
+ offset = 0x803000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x1000;
+ offset = 0x804000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x5000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x100;
+ offset = 0x8e0400;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega16C4
+#------------------------------------------------------------
+
+part parent "x16a4u"
+ id = "x16c4";
+ desc = "ATxmega16C4";
+ signature = 0x1e 0x94 0x43;
+;
+
+#------------------------------------------------------------
+# ATxmega16D4
+#------------------------------------------------------------
+
+part parent "x16a4u"
+ id = "x16d4";
+ desc = "ATxmega16D4";
+ signature = 0x1e 0x94 0x42;
+;
+
+#------------------------------------------------------------
+# ATxmega16A4
+#------------------------------------------------------------
+
+part parent "x16a4u"
+ id = "x16a4";
+ desc = "ATxmega16A4";
+ signature = 0x1e 0x94 0x41;
+ has_jtag = yes;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega32A4U
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x32a4u";
+ desc = "ATxmega32A4U";
+ signature = 0x1e 0x95 0x41;
+ usbpid = 0x2fe4;
+
+ memory "eeprom"
+ size = 0x400;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x1000;
+ offset = 0x807000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x1000;
+ offset = 0x808000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x9000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x100;
+ offset = 0x8e0400;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega32C4
+#------------------------------------------------------------
+
+part parent "x32a4u"
+ id = "x32c4";
+ desc = "ATxmega32C4";
+ signature = 0x1e 0x95 0x44;
+;
+
+#------------------------------------------------------------
+# ATxmega32D4
+#------------------------------------------------------------
+
+part parent "x32a4u"
+ id = "x32d4";
+ desc = "ATxmega32D4";
+ signature = 0x1e 0x95 0x42;
+;
+
+#------------------------------------------------------------
+# ATxmega32A4
+#------------------------------------------------------------
+
+part parent "x32a4u"
+ id = "x32a4";
+ desc = "ATxmega32A4";
+ signature = 0x1e 0x95 0x41;
+ has_jtag = yes;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega64A4U
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x64a4u";
+ desc = "ATxmega64A4U";
+ signature = 0x1e 0x96 0x46;
+ usbpid = 0x2fe5;
+
+ memory "eeprom"
+ size = 0x800;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x1000;
+ offset = 0x80f000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x1000;
+ offset = 0x810000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x11000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x100;
+ offset = 0x8e0400;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega64C3
+#------------------------------------------------------------
+
+part parent "x64a4u"
+ id = "x64c3";
+ desc = "ATxmega64C3";
+ signature = 0x1e 0x96 0x49;
+ usbpid = 0x2fd6;
+;
+
+#------------------------------------------------------------
+# ATxmega64D3
+#------------------------------------------------------------
+
+part parent "x64a4u"
+ id = "x64d3";
+ desc = "ATxmega64D3";
+ signature = 0x1e 0x96 0x4a;
+;
+
+#------------------------------------------------------------
+# ATxmega64D4
+#------------------------------------------------------------
+
+part parent "x64a4u"
+ id = "x64d4";
+ desc = "ATxmega64D4";
+ signature = 0x1e 0x96 0x47;
+;
+
+#------------------------------------------------------------
+# ATxmega64A1
+#------------------------------------------------------------
+
+part parent "x64a4u"
+ id = "x64a1";
+ desc = "ATxmega64A1";
+ signature = 0x1e 0x96 0x4e;
+ has_jtag = yes;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega64A1U
+#------------------------------------------------------------
+
+part parent "x64a1"
+ id = "x64a1u";
+ desc = "ATxmega64A1U";
+ signature = 0x1e 0x96 0x4e;
+ usbpid = 0x2fe8;
+;
+
+#------------------------------------------------------------
+# ATxmega64A3
+#------------------------------------------------------------
+
+part parent "x64a1"
+ id = "x64a3";
+ desc = "ATxmega64A3";
+ signature = 0x1e 0x96 0x42;
+;
+
+#------------------------------------------------------------
+# ATxmega64A3U
+#------------------------------------------------------------
+
+part parent "x64a1"
+ id = "x64a3u";
+ desc = "ATxmega64A3U";
+ signature = 0x1e 0x96 0x42;
+ usbpid = 0x2fe5;
+;
+
+#------------------------------------------------------------
+# ATxmega64A4
+#------------------------------------------------------------
+
+part parent "x64a1"
+ id = "x64a4";
+ desc = "ATxmega64A4";
+ signature = 0x1e 0x96 0x46;
+;
+
+#------------------------------------------------------------
+# ATxmega64B1
+#------------------------------------------------------------
+
+part parent "x64a1"
+ id = "x64b1";
+ desc = "ATxmega64B1";
+ signature = 0x1e 0x96 0x52;
+ usbpid = 0x2fe1;
+;
+
+#------------------------------------------------------------
+# ATxmega64B3
+#------------------------------------------------------------
+
+part parent "x64a1"
+ id = "x64b3";
+ desc = "ATxmega64B3";
+ signature = 0x1e 0x96 0x51;
+ usbpid = 0x2fdf;
+;
+
+#------------------------------------------------------------
+# ATxmega128C3
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x128c3";
+ desc = "ATxmega128C3";
+ signature = 0x1e 0x97 0x52;
+ usbpid = 0x2fd7;
+
+ memory "eeprom"
+ size = 0x800;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x2000;
+ offset = 0x81e000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x2000;
+ offset = 0x820000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x22000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x200;
+ offset = 0x8e0400;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega128D3
+#------------------------------------------------------------
+
+part parent "x128c3"
+ id = "x128d3";
+ desc = "ATxmega128D3";
+ signature = 0x1e 0x97 0x48;
+;
+
+#------------------------------------------------------------
+# ATxmega128D4
+#------------------------------------------------------------
+
+part parent "x128c3"
+ id = "x128d4";
+ desc = "ATxmega128D4";
+ signature = 0x1e 0x97 0x47;
+
+ memory "flash"
+ size = 0x22000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega128A1
+#------------------------------------------------------------
+
+part parent "x128c3"
+ id = "x128a1";
+ desc = "ATxmega128A1";
+ signature = 0x1e 0x97 0x4c;
+ has_jtag = yes;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega128A1 revision D
+#------------------------------------------------------------
+
+part parent "x128a1"
+ id = "x128a1d";
+ desc = "ATxmega128A1revD";
+ signature = 0x1e 0x97 0x41;
+;
+
+#------------------------------------------------------------
+# ATxmega128A1U
+#------------------------------------------------------------
+
+part parent "x128a1"
+ id = "x128a1u";
+ desc = "ATxmega128A1U";
+ signature = 0x1e 0x97 0x4c;
+ usbpid = 0x2fed;
+;
+
+#------------------------------------------------------------
+# ATxmega128A3
+#------------------------------------------------------------
+
+part parent "x128a1"
+ id = "x128a3";
+ desc = "ATxmega128A3";
+ signature = 0x1e 0x97 0x42;
+;
+
+#------------------------------------------------------------
+# ATxmega128A3U
+#------------------------------------------------------------
+
+part parent "x128a1"
+ id = "x128a3u";
+ desc = "ATxmega128A3U";
+ signature = 0x1e 0x97 0x42;
+ usbpid = 0x2fe6;
+;
+
+#------------------------------------------------------------
+# ATxmega128A4
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x128a4";
+ desc = "ATxmega128A4";
+ signature = 0x1e 0x97 0x46;
+ has_jtag = yes;
+
+ memory "eeprom"
+ size = 0x800;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x1000;
+ offset = 0x81f000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x2000;
+ offset = 0x820000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x22000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x200;
+ offset = 0x8e0400;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega128A4U
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x128a4u";
+ desc = "ATxmega128A4U";
+ signature = 0x1e 0x97 0x46;
+ usbpid = 0x2fde;
+
+ memory "eeprom"
+ size = 0x800;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x1000;
+ offset = 0x81f000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x2000;
+ offset = 0x820000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x22000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x100;
+ offset = 0x8e0400;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega128B1
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x128b1";
+ desc = "ATxmega128B1";
+ signature = 0x1e 0x97 0x4d;
+ usbpid = 0x2fea;
+ has_jtag = yes;
+
+ memory "eeprom"
+ size = 0x800;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x2000;
+ offset = 0x81e000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x2000;
+ offset = 0x820000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x22000;
+ offset = 0x800000;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x100;
+ offset = 0x8e0400;
+ page_size = 0x100;
+ readsize = 0x100;
+ ;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega128B3
+#------------------------------------------------------------
+
+part parent "x128b1"
+ id = "x128b3";
+ desc = "ATxmega128B3";
+ signature = 0x1e 0x97 0x4b;
+ usbpid = 0x2fe0;
+;
+
+#------------------------------------------------------------
+# ATxmega192C3
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x192c3";
+ desc = "ATxmega192C3";
+ signature = 0x1e 0x97 0x51;
+ # usbpid = 0x2f??;
+
+ memory "eeprom"
+ size = 0x800;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x30000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x2000;
+ offset = 0x82e000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x2000;
+ offset = 0x830000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x32000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x200;
+ offset = 0x8e0400;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega192D3
+#------------------------------------------------------------
+
+part parent "x192c3"
+ id = "x192d3";
+ desc = "ATxmega192D3";
+ signature = 0x1e 0x97 0x49;
+;
+
+#------------------------------------------------------------
+# ATxmega192A1
+#------------------------------------------------------------
+
+part parent "x192c3"
+ id = "x192a1";
+ desc = "ATxmega192A1";
+ signature = 0x1e 0x97 0x4e;
+ has_jtag = yes;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega192A3
+#------------------------------------------------------------
+
+part parent "x192a1"
+ id = "x192a3";
+ desc = "ATxmega192A3";
+ signature = 0x1e 0x97 0x44;
+;
+
+#------------------------------------------------------------
+# ATxmega192A3U
+#------------------------------------------------------------
+
+part parent "x192a1"
+ id = "x192a3u";
+ desc = "ATxmega192A3U";
+ signature = 0x1e 0x97 0x44;
+ usbpid = 0x2fe7;
+;
+
+#------------------------------------------------------------
+# ATxmega256C3
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x256c3";
+ desc = "ATxmega256C3";
+ signature = 0x1e 0x98 0x46;
+ usbpid = 0x2fda;
+
+ memory "eeprom"
+ size = 0x1000;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x40000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x2000;
+ offset = 0x83e000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x2000;
+ offset = 0x840000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x42000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x200;
+ offset = 0x8e0400;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega256D3
+#------------------------------------------------------------
+
+part parent "x256c3"
+ id = "x256d3";
+ desc = "ATxmega256D3";
+ signature = 0x1e 0x98 0x44;
+;
+
+#------------------------------------------------------------
+# ATxmega256A1
+#------------------------------------------------------------
+
+part parent "x256c3"
+ id = "x256a1";
+ desc = "ATxmega256A1";
+ signature = 0x1e 0x98 0x46;
+ has_jtag = yes;
+
+ memory "fuse0"
+ size = 1;
+ offset = 0x8f0020;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega256A3
+#------------------------------------------------------------
+
+part parent "x256a1"
+ id = "x256a3";
+ desc = "ATxmega256A3";
+ signature = 0x1e 0x98 0x42;
+;
+
+#------------------------------------------------------------
+# ATxmega256A3U
+#------------------------------------------------------------
+
+part parent "x256a1"
+ id = "x256a3u";
+ desc = "ATxmega256A3U";
+ signature = 0x1e 0x98 0x42;
+ usbpid = 0x2fec;
+;
+
+#------------------------------------------------------------
+# ATxmega256A3B
+#------------------------------------------------------------
+
+part parent "x256a1"
+ id = "x256a3b";
+ desc = "ATxmega256A3B";
+ signature = 0x1e 0x98 0x43;
+;
+
+#------------------------------------------------------------
+# ATxmega256A3BU
+#------------------------------------------------------------
+
+part parent "x256a1"
+ id = "x256a3bu";
+ desc = "ATxmega256A3BU";
+ signature = 0x1e 0x98 0x43;
+ usbpid = 0x2fe2;
+;
+
+#------------------------------------------------------------
+# ATxmega384C3
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x384c3";
+ desc = "ATxmega384C3";
+ signature = 0x1e 0x98 0x45;
+ usbpid = 0x2fdb;
+
+ memory "eeprom"
+ size = 0x1000;
+ offset = 0x8c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x60000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x2000;
+ offset = 0x85e000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x2000;
+ offset = 0x860000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x62000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x200;
+ offset = 0x8e0400;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega384D3
+#------------------------------------------------------------
+
+part parent "x384c3"
+ id = "x384d3";
+ desc = "ATxmega384D3";
+ signature = 0x1e 0x98 0x47;
+;
+
+#------------------------------------------------------------
+# ATxmega8E5
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x8e5";
+ desc = "ATxmega8E5";
+ signature = 0x1e 0x93 0x41;
+
+ memory "eeprom"
+ size = 0x0200;
+ offset = 0x08c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x2000;
+ offset = 0x0800000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x800;
+ offset = 0x00801800;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x800;
+ offset = 0x00802000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x2800;
+ offset = 0x0800000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x80;
+ offset = 0x8e0400;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega16E5
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x16e5";
+ desc = "ATxmega16E5";
+ signature = 0x1e 0x94 0x45;
+
+ memory "eeprom"
+ size = 0x0200;
+ offset = 0x08c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x4000;
+ offset = 0x0800000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x1000;
+ offset = 0x00803000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x1000;
+ offset = 0x00804000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x5000;
+ offset = 0x0800000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x80;
+ offset = 0x8e0400;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# ATxmega32E5
+#------------------------------------------------------------
+
+part parent ".xmega"
+ id = "x32e5";
+ desc = "ATxmega32E5";
+ signature = 0x1e 0x95 0x4c;
+
+ memory "eeprom"
+ size = 0x0400;
+ offset = 0x08c0000;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
+
+ memory "application"
+ size = 0x8000;
+ offset = 0x0800000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "apptable"
+ size = 0x1000;
+ offset = 0x00807000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "boot"
+ size = 0x1000;
+ offset = 0x00808000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "flash"
+ size = 0x9000;
+ offset = 0x0800000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "usersig"
+ size = 0x80;
+ offset = 0x8e0400;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+;
+
+#------------------------------------------------------------
+# AVR32UC3A0512
+#------------------------------------------------------------
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+part
+ id = "uc3a0512";
+ desc = "AT32UC3A0512";
+ signature = 0xED 0xC0 0x3F;
+ has_jtag = yes;
+ is_avr32 = yes;
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ memory "flash"
+ paged = yes;
+ page_size = 512; # bytes
+ readsize = 512; # bytes
+ num_pages = 1024; # could be set dynamicly
+ size = 0x00080000; # could be set dynamicly
+ offset = 0x80000000;
+ ;
+;
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+part parent "uc3a0512"
+ id = "ucr2";
+ desc = "deprecated, use 'uc3a0512'";
+;
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
- ;
#------------------------------------------------------------
-# ATmega325
+# ATtiny1634
#------------------------------------------------------------
part
- id = "m325";
- desc = "ATmega325";
- signature = 0x1e 0x95 0x05;
- has_jtag = yes;
-# stk500_devcode = 0x??; # No STK500v1 support?
-# avr910_devcode = 0x??; # Try the ATmega16 one
- avr910_devcode = 0x74;
- pagel = 0xd7;
- bs2 = 0xa0;
+ id = "t1634";
+ desc = "ATtiny1634";
+ has_debugwire = yes;
+ flash_instr = 0xB6, 0x01, 0x11;
+ eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
+ 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
+ 0x99, 0xF9, 0xBB, 0xAF;
+ stk500_devcode = 0x86;
+ # avr910_devcode = 0x;
+ signature = 0x1e 0x94 0x12;
+ pagel = 0xB3;
+ bs2 = 0xB1;
+ reset = io;
chip_erase_delay = 9000;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
+ pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
+ "x x x x x x x x x x x x x x x x";
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
+ chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
+ "x x x x x x x x x x x x x x x x";
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ timeout = 200;
+ stabdelay = 100;
+ cmdexedelay = 25;
+ synchloops = 32;
+ bytedelay = 0;
+ pollindex = 3;
+ pollvalue = 0x53;
+ predelay = 1;
+ postdelay = 1;
+ pollmethod = 1;
pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
+ 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
+ 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
+ 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
- latchcycles = 5;
+ latchcycles = 0;
togglevtg = 1;
poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
+ resetdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
@@ -13334,2744 +16339,2940 @@ part
programlockpulsewidth = 0;
programlockpolltimeout = 5;
- idr = 0x31;
- spmcr = 0x57;
- allowfullpagebitstream = no;
-
- ocdrev = 3;
-
memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 4; /* for parallel programming */
- size = 1024;
- min_write_delay = 9000;
- max_write_delay = 9000;
+ paged = no;
+ page_size = 4;
+ size = 256;
+ min_write_delay = 3600;
+ max_write_delay = 3600;
readback_p1 = 0xff;
readback_p2 = 0xff;
- read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read = " 1 0 1 0 0 0 0 0",
+ " 0 0 0 x x x x a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ write = " 1 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " i i i i i i i i";
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 1 1 0 0 0 0 0 1",
+ " 0 0 0 0 0 0 0 0",
+ " 0 0 0 0 0 0 a1 a0",
+ " i i i i i i i i";
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 0 0 0 0 a9 a8",
- " a7 a6 a5 a4 a3 a2 0 0",
- " x x x x x x x x";
+ writepage = " 1 1 0 0 0 0 1 0",
+ " 0 0 x x x x x a8",
+ " a7 a6 a5 a4 a3 a2 0 0",
+ " x x x x x x x x";
- mode = 0x41;
- delay = 10;
- blocksize = 4;
- readsize = 256;
- ;
+ mode = 0x41;
+ delay = 5;
+ blocksize = 4;
+ readsize = 256;
+ ;
memory "flash"
paged = yes;
- size = 32768;
- page_size = 128;
- num_pages = 256;
+ size = 16384;
+ page_size = 32;
+ num_pages = 512;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0xff;
readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ read_lo = " 0 0 1 0 0 0 0 0",
+ " 0 0 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 0 0 0 0 0",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ read_hi = " 0 0 1 0 1 0 0 0",
+ " 0 0 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 a3 a2 a1 a0",
+ " o o o o o o o o";
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 0 0 0 0 0",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ loadpage_lo = " 0 1 0 0 0 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x a3 a2 a1 a0",
+ " i i i i i i i i";
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " x x x x x x x x";
+ loadpage_hi = " 0 1 0 0 1 0 0 0",
+ " 0 0 0 x x x x x",
+ " x x x x a3 a2 a1 a0",
+ " i i i i i i i i";
- mode = 0x41;
- delay = 10;
- blocksize = 128;
- readsize = 256;
- ;
+ writepage = " 0 1 0 0 1 1 0 0",
+ " 0 0 a13 a12 a11 a10 a9 a8",
+ " a7 a6 a5 a4 x x x x",
+ " x x x x x x x x";
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+ mode = 0x41;
+ delay = 6;
+ blocksize = 128;
+ readsize = 256;
- write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 1 1 i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ ;
memory "lfuse"
size = 1;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 i i i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
memory "hfuse"
size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
-
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "0 0 0 0 0 0 0 0 i i i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
+
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
+ "x x x x x x x x i i i i i i i i";
+ ;
memory "efuse"
size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
+ "x x x x x x x x x x x i i i i i";
+ ;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+ memory "lock"
+ size = 1;
+ min_write_delay = 4500;
+ max_write_delay = 4500;
+ read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
+ "x x x x x x x x o o o o o o o o";
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 a1 a0 o o o o o o o o";
- ;
+ write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
+ "x x x x x x x x 1 1 1 1 1 1 i i";
+ ;
memory "calibration"
size = 1;
+ read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
+ "0 0 0 0 0 0 0 0 o o o o o o o o";
+ ;
- read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ memory "signature"
+ size = 3;
+ read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
+ "x x x x x x a1 a0 o o o o o o o o";
;
- ;
+;
#------------------------------------------------------------
-# ATmega645
+# ATtiny1634R
#------------------------------------------------------------
-part
- id = "m645";
- desc = "ATmega645";
- signature = 0x1E 0x96 0x05;
- has_jtag = yes;
-# stk500_devcode = 0x??; # No STK500v1 support?
-# avr910_devcode = 0x??; # Try the ATmega16 one
- avr910_devcode = 0x74;
- pagel = 0xd7;
- bs2 = 0xa0;
- chip_erase_delay = 9000;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
-
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
-
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+part parent "t1634"
+ id = "t1634r";
+ desc = "ATtiny1634R";
+ ;
- pp_controlstack =
- 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
- 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
- 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
- 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
- hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 5;
- togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
+#------------------------------------------------------------
+# Common values for reduced core tinys (4/5/9/10/20/40)
+#------------------------------------------------------------
- idr = 0x31;
- spmcr = 0x57;
- allowfullpagebitstream = no;
+part
+ id = ".reduced_core_tiny";
+ desc = "Common values for reduced core tinys";
+ has_tpi = yes;
- ocdrev = 3;
+ memory "signature"
+ size = 3;
+ offset = 0x3fc0;
+ page_size = 16;
+ ;
- memory "eeprom"
- paged = no; /* leave this "no" */
- page_size = 8; /* for parallel programming */
- size = 2048;
- min_write_delay = 9000;
- max_write_delay = 9000;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ memory "fuse"
+ size = 1;
+ offset = 0x3f40;
+ page_size = 16;
+ blocksize = 4;
+ ;
- write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ memory "calibration"
+ size = 1;
+ offset = 0x3f80;
+ page_size = 16;
+ ;
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 a2 a1 a0",
- " i i i i i i i i";
+ memory "lockbits"
+ size = 1;
+ offset = 0x3f00;
+ page_size = 16;
+ ;
+;
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 0 0 0 a10 a9 a8",
- " a7 a6 a5 a4 a3 0 0 0",
- " x x x x x x x x";
+#------------------------------------------------------------
+# ATtiny4
+#------------------------------------------------------------
- mode = 0x41;
- delay = 10;
- blocksize = 8;
- readsize = 256;
- ;
+part parent ".reduced_core_tiny"
+ id = "t4";
+ desc = "ATtiny4";
+ signature = 0x1e 0x8f 0x0a;
memory "flash"
- paged = yes;
- size = 65536;
- page_size = 256;
- num_pages = 256;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- " a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 0 0 0 0 0",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
-
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 0 0 0 0 0",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
-
- writepage = " 0 1 0 0 1 1 0 0",
- " a15 a14 a13 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " 0 0 0 0 0 0 0 0";
-
- mode = 0x41;
- delay = 10;
- blocksize = 128;
- readsize = 256;
- ;
+ size = 512;
+ offset = 0x4000;
+ page_size = 16;
+ blocksize = 128;
+ ;
+;
- memory "lock"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x o o o o o o";
+#------------------------------------------------------------
+# ATtiny5
+#------------------------------------------------------------
- write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 1 1 i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+part parent "t4"
+ id = "t5";
+ desc = "ATtiny5";
+ signature = 0x1e 0x8f 0x09;
+;
- memory "lfuse"
- size = 1;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+#------------------------------------------------------------
+# ATtiny9
+#------------------------------------------------------------
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 i i i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+part parent ".reduced_core_tiny"
+ id = "t9";
+ desc = "ATtiny9";
+ signature = 0x1e 0x90 0x08;
- memory "hfuse"
- size = 1;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+ memory "flash"
+ size = 1024;
+ offset = 0x4000;
+ page_size = 16;
+ blocksize = 128;
+ ;
+;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "0 0 0 0 0 0 0 0 i i i i i i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+#------------------------------------------------------------
+# ATtiny10
+#------------------------------------------------------------
- memory "efuse"
- size = 1;
+part parent "t9"
+ id = "t10";
+ desc = "ATtiny10";
+ signature = 0x1e 0x90 0x03;
+;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
+#------------------------------------------------------------
+# ATtiny20
+#------------------------------------------------------------
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i";
- min_write_delay = 9000;
- max_write_delay = 9000;
- ;
+part parent ".reduced_core_tiny"
+ id = "t20";
+ desc = "ATtiny20";
+ signature = 0x1e 0x91 0x0F;
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 a1 a0 o o o o o o o o";
- ;
+ memory "flash"
+ size = 2048;
+ offset = 0x4000;
+ page_size = 16;
+ blocksize = 128;
+ ;
+;
- memory "calibration"
- size = 1;
+#------------------------------------------------------------
+# ATtiny40
+#------------------------------------------------------------
- read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
- ;
+part parent ".reduced_core_tiny"
+ id = "t40";
+ desc = "ATtiny40";
+ signature = 0x1e 0x92 0x0E;
+
+ memory "flash"
+ size = 4096;
+ offset = 0x4000;
+ page_size = 64;
+ blocksize = 128;
+ ;
+;
#------------------------------------------------------------
-# ATmega3250
+# ATtiny102
#------------------------------------------------------------
-part parent "m325"
- id = "m3250";
- desc = "ATmega3250";
- signature = 0x1E 0x95 0x06;
+part parent ".reduced_core_tiny"
+ id = "t102";
+ desc = "ATtiny102";
+ signature = 0x1e 0x90 0x0C;
- ocdrev = 3;
- ;
+ memory "flash"
+ size = 1024;
+ offset = 0x4000;
+ page_size = 16;
+ blocksize = 128;
+ ;
+;
#------------------------------------------------------------
-# ATmega6450
+# ATtiny104
#------------------------------------------------------------
-part parent "m645"
- id = "m6450";
- desc = "ATmega6450";
- signature = 0x1E 0x96 0x06;
+part parent ".reduced_core_tiny"
+ id = "t104";
+ desc = "ATtiny104";
+ signature = 0x1e 0x90 0x0B;
- ocdrev = 3;
- ;
+ memory "flash"
+ size = 1024;
+ offset = 0x4000;
+ page_size = 16;
+ blocksize = 128;
+ ;
+;
#------------------------------------------------------------
-# AVR XMEGA family common values
+# ATmega406
#------------------------------------------------------------
part
- id = ".xmega";
- desc = "AVR XMEGA family common values";
- has_pdi = yes;
- nvm_base = 0x01c0;
- mcu_base = 0x0090;
+ id = "m406";
+ desc = "ATmega406";
+ has_jtag = yes;
+ signature = 0x1e 0x95 0x07;
- memory "signature"
- size = 3;
- offset = 0x1000090;
- ;
+ # STK500 parameters (parallel programming IO lines)
+ pagel = 0xa7;
+ bs2 = 0xa0;
+ serial = no;
+ parallel = yes;
- memory "prodsig"
- size = 0x32;
- offset = 0x8e0200;
- page_size = 0x32;
- readsize = 0x32;
- ;
+ # STK500v2 HV programming parameters, from XML
+ pp_controlstack = 0x0e, 0x1e, 0x0f, 0x1f, 0x2e, 0x3e, 0x2f, 0x3f,
+ 0x4e, 0x5e, 0x4f, 0x5f, 0x6e, 0x7e, 0x6f, 0x7f,
+ 0x66, 0x76, 0x67, 0x77, 0x6a, 0x7a, 0x6b, 0x7b,
+ 0xbe, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
- memory "fuse1"
- size = 1;
- offset = 0x8f0021;
+ # JTAG ICE mkII parameters, also from XML files
+ allowfullpagebitstream = no;
+ enablepageprogramming = yes;
+ idr = 0x51;
+ rampz = 0x00;
+ spmcr = 0x57;
+ eecr = 0x3f;
+
+ memory "eeprom"
+ paged = no;
+ size = 512;
+ page_size = 4;
+ blocksize = 4;
+ readsize = 4;
+ num_pages = 128;
;
- memory "fuse2"
- size = 1;
- offset = 0x8f0022;
+ memory "flash"
+ paged = yes;
+ size = 40960;
+ page_size = 128;
+ blocksize = 128;
+ readsize = 128;
+ num_pages = 320;
;
- memory "fuse4"
- size = 1;
- offset = 0x8f0024;
+ memory "hfuse"
+ size = 1;
;
- memory "fuse5"
- size = 1;
- offset = 0x8f0025;
+ memory "lfuse"
+ size = 1;
;
- memory "lock"
+ memory "lockbits"
size = 1;
- offset = 0x8f0027;
;
- memory "data"
- # SRAM, only used to supply the offset
- offset = 0x1000000;
+ memory "signature"
+ size = 3;
;
;
#------------------------------------------------------------
-# ATxmega16A4U
+# AVR8X family common values
#------------------------------------------------------------
-part parent ".xmega"
- id = "x16a4u";
- desc = "ATxmega16A4U";
- signature = 0x1e 0x94 0x41;
- usbpid = 0x2fe3;
+part
+ id = ".avr8x";
+ desc = "AVR8X family common values";
+ has_updi = yes;
+ nvm_base = 0x1000;
+ ocd_base = 0x0F80;
- memory "eeprom"
- size = 0x400;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "signature"
+ size = 3;
+ offset = 0x1100;
+ readsize = 0x3;
;
- memory "application"
- size = 0x4000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "prodsig"
+ size = 0x3D;
+ offset = 0x1103;
+ page_size = 0x3D;
+ readsize = 0x3D;
;
- memory "apptable"
- size = 0x1000;
- offset = 0x803000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "sernum"
+ size = 10;
+ offset = 0x1104;
+ readsize = 1;
;
- memory "boot"
- size = 0x1000;
- offset = 0x804000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "osccal16"
+ size = 2;
+ offset = 0x1118;
+ readsize = 1;
;
- memory "flash"
- size = 0x5000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "osccal20"
+ size = 2;
+ offset = 0x111A;
+ readsize = 1;
;
- memory "usersig"
- size = 0x100;
- offset = 0x8e0400;
- page_size = 0x100;
- readsize = 0x100;
+ memory "tempsense"
+ size = 2;
+ offset = 0x1120;
+ readsize = 1;
;
-;
-
-#------------------------------------------------------------
-# ATxmega16C4
-#------------------------------------------------------------
-part parent "x16a4u"
- id = "x16c4";
- desc = "ATxmega16C4";
- signature = 0x1e 0x94 0x43;
-;
+ memory "osc16err"
+ size = 2;
+ offset = 0x1122;
+ readsize = 1;
+ ;
-#------------------------------------------------------------
-# ATxmega16D4
-#------------------------------------------------------------
+ memory "osc20err"
+ size = 2;
+ offset = 0x1124;
+ readsize = 1;
+ ;
-part parent "x16a4u"
- id = "x16d4";
- desc = "ATxmega16D4";
- signature = 0x1e 0x94 0x42;
-;
+ memory "fuses"
+ size = 9;
+ offset = 0x1280;
+ page_size = 0x0A;
+ readsize = 0x0A;
+ ;
-#------------------------------------------------------------
-# ATxmega16A4
-#------------------------------------------------------------
+ memory "fuse0"
+ size = 1;
+ offset = 0x1280;
+ readsize = 1;
+ ;
-part parent "x16a4u"
- id = "x16a4";
- desc = "ATxmega16A4";
- signature = 0x1e 0x94 0x41;
- has_jtag = yes;
+ memory "wdtcfg"
+ alias "fuse0";
+ ;
- memory "fuse0"
+ memory "fuse1"
size = 1;
- offset = 0x8f0020;
+ offset = 0x1281;
+ readsize = 1;
;
-;
-#------------------------------------------------------------
-# ATxmega32A4U
-#------------------------------------------------------------
+ memory "bodcfg"
+ alias "fuse1";
+ ;
+
+ memory "fuse2"
+ size = 1;
+ offset = 0x1282;
+ readsize = 1;
+ ;
-part parent ".xmega"
- id = "x32a4u";
- desc = "ATxmega32A4U";
- signature = 0x1e 0x95 0x41;
- usbpid = 0x2fe4;
+ memory "osccfg"
+ alias "fuse2";
+ ;
- memory "eeprom"
- size = 0x400;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "fuse4"
+ size = 1;
+ offset = 0x1284;
+ readsize = 1;
;
- memory "application"
- size = 0x8000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "tcd0cfg"
+ alias "fuse4";
;
- memory "apptable"
- size = 0x1000;
- offset = 0x807000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "fuse5"
+ size = 1;
+ offset = 0x1285;
+ readsize = 1;
;
- memory "boot"
- size = 0x1000;
- offset = 0x808000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "syscfg0"
+ alias "fuse5";
;
- memory "flash"
- size = 0x9000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "fuse6"
+ size = 1;
+ offset = 0x1286;
+ readsize = 1;
;
- memory "usersig"
- size = 0x100;
- offset = 0x8e0400;
- page_size = 0x100;
- readsize = 0x100;
+ memory "syscfg1"
+ alias "fuse6";
;
-;
-#------------------------------------------------------------
-# ATxmega32C4
-#------------------------------------------------------------
+ memory "fuse7"
+ size = 1;
+ offset = 0x1287;
+ readsize = 1;
+ ;
-part parent "x32a4u"
- id = "x32c4";
- desc = "ATxmega32C4";
- signature = 0x1e 0x95 0x44;
-;
+ memory "append"
+ alias "fuse7";
+ ;
-#------------------------------------------------------------
-# ATxmega32D4
-#------------------------------------------------------------
+ memory "codesize"
+ alias "fuse7";
+ ;
-part parent "x32a4u"
- id = "x32d4";
- desc = "ATxmega32D4";
- signature = 0x1e 0x95 0x42;
-;
+ memory "fuse8"
+ size = 1;
+ offset = 0x1288;
+ readsize = 1;
+ ;
-#------------------------------------------------------------
-# ATxmega32A4
-#------------------------------------------------------------
+ memory "bootend"
+ alias "fuse8";
+ ;
-part parent "x32a4u"
- id = "x32a4";
- desc = "ATxmega32A4";
- signature = 0x1e 0x95 0x41;
- has_jtag = yes;
+ memory "bootsize"
+ alias "fuse8";
+ ;
- memory "fuse0"
+ memory "lock"
size = 1;
- offset = 0x8f0020;
+ offset = 0x128a;
+ readsize = 1;
+ ;
+
+ memory "data"
+ # SRAM, only used to supply the offset
+ offset = 0x1000000;
;
;
#------------------------------------------------------------
-# ATxmega64A4U
+# AVR8X tiny family common values
#------------------------------------------------------------
-part parent ".xmega"
- id = "x64a4u";
- desc = "ATxmega64A4U";
- signature = 0x1e 0x96 0x46;
- usbpid = 0x2fe5;
+part parent ".avr8x"
+ id = ".avr8x_tiny";
+ desc = "AVR8X tiny family common values";
+ family_id = "tinyAVR";
- memory "eeprom"
- size = 0x800;
- offset = 0x8c0000;
+ memory "userrow"
+ size = 0x20;
+ offset = 0x1300;
page_size = 0x20;
readsize = 0x100;
;
- memory "application"
- size = 0x10000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "usersig"
+ alias "userrow";
;
+;
- memory "apptable"
- size = 0x1000;
- offset = 0x80f000;
- page_size = 0x100;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# AVR8X mega family common values
+#------------------------------------------------------------
- memory "boot"
- size = 0x1000;
- offset = 0x810000;
- page_size = 0x100;
- readsize = 0x100;
- ;
+part parent ".avr8x"
+ id = ".avr8x_mega";
+ desc = "AVR8X mega family common values";
+ family_id = "megaAVR";
- memory "flash"
- size = 0x11000;
- offset = 0x800000;
- page_size = 0x100;
+ memory "userrow"
+ size = 0x40;
+ offset = 0x1300;
+ page_size = 0x40;
readsize = 0x100;
;
memory "usersig"
- size = 0x100;
- offset = 0x8e0400;
- page_size = 0x100;
- readsize = 0x100;
+ alias "userrow";
;
;
#------------------------------------------------------------
-# ATxmega64C3
+# ATtiny202
#------------------------------------------------------------
-part parent "x64a4u"
- id = "x64c3";
- desc = "ATxmega64C3";
- signature = 0x1e 0x96 0x49;
- usbpid = 0x2fd6;
-;
+part parent ".avr8x_tiny"
+ id = "t202";
+ desc = "ATtiny202";
+ signature = 0x1E 0x91 0x23;
-#------------------------------------------------------------
-# ATxmega64D3
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x800;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x64a4u"
- id = "x64d3";
- desc = "ATxmega64D3";
- signature = 0x1e 0x96 0x4a;
+ memory "eeprom"
+ size = 0x40;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega64D4
+# ATtiny204
#------------------------------------------------------------
-part parent "x64a4u"
- id = "x64d4";
- desc = "ATxmega64D4";
- signature = 0x1e 0x96 0x47;
+part parent ".avr8x_tiny"
+ id = "t204";
+ desc = "ATtiny204";
+ signature = 0x1E 0x91 0x22;
+
+ memory "flash"
+ size = 0x800;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x40;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega64A1
+# ATtiny402
#------------------------------------------------------------
-part parent "x64a4u"
- id = "x64a1";
- desc = "ATxmega64A1";
- signature = 0x1e 0x96 0x4e;
- has_jtag = yes;
+part parent ".avr8x_tiny"
+ id = "t402";
+ desc = "ATtiny402";
+ signature = 0x1E 0x92 0x27;
- memory "fuse0"
- size = 1;
- offset = 0x8f0020;
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega64A1U
+# ATtiny404
#------------------------------------------------------------
-part parent "x64a1"
- id = "x64a1u";
- desc = "ATxmega64A1U";
- signature = 0x1e 0x96 0x4e;
- usbpid = 0x2fe8;
-;
+part parent ".avr8x_tiny"
+ id = "t404";
+ desc = "ATtiny404";
+ signature = 0x1E 0x92 0x26;
-#------------------------------------------------------------
-# ATxmega64A3
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x64a1"
- id = "x64a3";
- desc = "ATxmega64A3";
- signature = 0x1e 0x96 0x42;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega64A3U
+# ATtiny406
#------------------------------------------------------------
-part parent "x64a1"
- id = "x64a3u";
- desc = "ATxmega64A3U";
- signature = 0x1e 0x96 0x42;
- usbpid = 0x2fe5;
-;
+part parent ".avr8x_tiny"
+ id = "t406";
+ desc = "ATtiny406";
+ signature = 0x1E 0x92 0x25;
-#------------------------------------------------------------
-# ATxmega64A4
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x64a1"
- id = "x64a4";
- desc = "ATxmega64A4";
- signature = 0x1e 0x96 0x46;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega64B1
+# ATtiny804
#------------------------------------------------------------
-part parent "x64a1"
- id = "x64b1";
- desc = "ATxmega64B1";
- signature = 0x1e 0x96 0x52;
- usbpid = 0x2fe1;
-;
+part parent ".avr8x_tiny"
+ id = "t804";
+ desc = "ATtiny804";
+ signature = 0x1E 0x93 0x25;
-#------------------------------------------------------------
-# ATxmega64B3
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x64a1"
- id = "x64b3";
- desc = "ATxmega64B3";
- signature = 0x1e 0x96 0x51;
- usbpid = 0x2fdf;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega128C3
+# ATtiny806
#------------------------------------------------------------
-part parent ".xmega"
- id = "x128c3";
- desc = "ATxmega128C3";
- signature = 0x1e 0x97 0x52;
- usbpid = 0x2fd7;
+part parent ".avr8x_tiny"
+ id = "t806";
+ desc = "ATtiny806";
+ signature = 0x1E 0x93 0x24;
- memory "eeprom"
- size = 0x800;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x20000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x2000;
- offset = 0x81e000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATtiny807
+#------------------------------------------------------------
- memory "boot"
- size = 0x2000;
- offset = 0x820000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "t807";
+ desc = "ATtiny807";
+ signature = 0x1E 0x93 0x23;
memory "flash"
- size = 0x22000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x200;
- offset = 0x8e0400;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega128D3
+# ATtiny1604
#------------------------------------------------------------
-part parent "x128c3"
- id = "x128d3";
- desc = "ATxmega128D3";
- signature = 0x1e 0x97 0x48;
-;
+part parent ".avr8x_tiny"
+ id = "t1604";
+ desc = "ATtiny1604";
+ signature = 0x1E 0x94 0x25;
-#------------------------------------------------------------
-# ATxmega128D4
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x128c3"
- id = "x128d4";
- desc = "ATxmega128D4";
- signature = 0x1e 0x97 0x47;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega128A1
+# ATtiny1606
#------------------------------------------------------------
-part parent "x128c3"
- id = "x128a1";
- desc = "ATxmega128A1";
- signature = 0x1e 0x97 0x4c;
- has_jtag = yes;
+part parent ".avr8x_tiny"
+ id = "t1606";
+ desc = "ATtiny1606";
+ signature = 0x1E 0x94 0x24;
- memory "fuse0"
- size = 1;
- offset = 0x8f0020;
+ memory "flash"
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega128A1 revision D
+# ATtiny1607
#------------------------------------------------------------
-part parent "x128a1"
- id = "x128a1d";
- desc = "ATxmega128A1revD";
- signature = 0x1e 0x97 0x41;
-;
+part parent ".avr8x_tiny"
+ id = "t1607";
+ desc = "ATtiny1607";
+ signature = 0x1E 0x94 0x23;
-#------------------------------------------------------------
-# ATxmega128A1U
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x128a1"
- id = "x128a1u";
- desc = "ATxmega128A1U";
- signature = 0x1e 0x97 0x4c;
- usbpid = 0x2fed;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega128A3
+# ATtiny212
#------------------------------------------------------------
-part parent "x128a1"
- id = "x128a3";
- desc = "ATxmega128A3";
- signature = 0x1e 0x97 0x42;
+part parent ".avr8x_tiny"
+ id = "t212";
+ desc = "ATtiny212";
+ signature = 0x1E 0x91 0x21;
+
+ memory "flash"
+ size = 0x800;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x40;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega128A3U
+# ATtiny214
#------------------------------------------------------------
-part parent "x128a1"
- id = "x128a3u";
- desc = "ATxmega128A3U";
- signature = 0x1e 0x97 0x42;
- usbpid = 0x2fe6;
+part parent ".avr8x_tiny"
+ id = "t214";
+ desc = "ATtiny214";
+ signature = 0x1E 0x91 0x20;
+
+ memory "flash"
+ size = 0x800;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x40;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega128A4
+# ATtiny412
#------------------------------------------------------------
-part parent ".xmega"
- id = "x128a4";
- desc = "ATxmega128A4";
- signature = 0x1e 0x97 0x46;
- has_jtag = yes;
+part parent ".avr8x_tiny"
+ id = "t412";
+ desc = "ATtiny412";
+ signature = 0x1E 0x92 0x23;
- memory "eeprom"
- size = 0x800;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x20000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x1000;
- offset = 0x81f000;
- page_size = 0x200;
- readsize = 0x100;
- ;
- memory "boot"
- size = 0x2000;
- offset = 0x820000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATtiny414
+#------------------------------------------------------------
- memory "flash"
- size = 0x22000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "t414";
+ desc = "ATtiny414";
+ signature = 0x1E 0x92 0x22;
- memory "usersig"
- size = 0x200;
- offset = 0x8e0400;
- page_size = 0x200;
- readsize = 0x100;
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "fuse0"
- size = 1;
- offset = 0x8f0020;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega128A4U
+# ATtiny416
#------------------------------------------------------------
-part parent ".xmega"
- id = "x128a4u";
- desc = "ATxmega128A4U";
- signature = 0x1e 0x97 0x46;
- usbpid = 0x2fde;
+part parent ".avr8x_tiny"
+ id = "t416";
+ desc = "ATtiny416";
+ signature = 0x1E 0x92 0x21;
- memory "eeprom"
- size = 0x800;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x20000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x1000;
- offset = 0x81f000;
- page_size = 0x100;
- readsize = 0x100;
- ;
- memory "boot"
- size = 0x2000;
- offset = 0x820000;
- page_size = 0x100;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATtiny417
+#------------------------------------------------------------
+
+part parent ".avr8x_tiny"
+ id = "t417";
+ desc = "ATtiny417";
+ signature = 0x1E 0x92 0x20;
memory "flash"
- size = 0x22000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x100;
- offset = 0x8e0400;
- page_size = 0x100;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
+
#------------------------------------------------------------
-# ATxmega128B1
+# ATtiny814
#------------------------------------------------------------
-part parent ".xmega"
- id = "x128b1";
- desc = "ATxmega128B1";
- signature = 0x1e 0x97 0x4d;
- usbpid = 0x2fea;
- has_jtag = yes;
+part parent ".avr8x_tiny"
+ id = "t814";
+ desc = "ATtiny814";
+ signature = 0x1E 0x93 0x22;
- memory "eeprom"
- size = 0x800;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x20000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x2000;
- offset = 0x81e000;
- page_size = 0x100;
- readsize = 0x100;
- ;
- memory "boot"
- size = 0x2000;
- offset = 0x820000;
- page_size = 0x100;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATtiny816
+#------------------------------------------------------------
- memory "flash"
- size = 0x22000;
- offset = 0x800000;
- page_size = 0x100;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "t816";
+ desc = "ATtiny816";
+ signature = 0x1E 0x93 0x21;
- memory "usersig"
- size = 0x100;
- offset = 0x8e0400;
- page_size = 0x100;
- readsize = 0x100;
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "fuse0"
- size = 1;
- offset = 0x8f0020;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega128B3
+# ATtiny817
#------------------------------------------------------------
-part parent "x128b1"
- id = "x128b3";
- desc = "ATxmega128B3";
- signature = 0x1e 0x97 0x4b;
- usbpid = 0x2fe0;
+part parent ".avr8x_tiny"
+ id = "t817";
+ desc = "ATtiny817";
+ signature = 0x1E 0x93 0x20;
+
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega192C3
+# ATtiny1614
#------------------------------------------------------------
-part parent ".xmega"
- id = "x192c3";
- desc = "ATxmega192C3";
- signature = 0x1e 0x97 0x51;
- # usbpid = 0x2f??;
+part parent ".avr8x_tiny"
+ id = "t1614";
+ desc = "ATtiny1614";
+ signature = 0x1E 0x94 0x22;
- memory "eeprom"
- size = 0x800;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x30000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x2000;
- offset = 0x82e000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATtiny1616
+#------------------------------------------------------------
- memory "boot"
- size = 0x2000;
- offset = 0x830000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "t1616";
+ desc = "ATtiny1616";
+ signature = 0x1E 0x94 0x21;
memory "flash"
- size = 0x32000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x200;
- offset = 0x8e0400;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega192D3
+# ATtiny1617
#------------------------------------------------------------
-part parent "x192c3"
- id = "x192d3";
- desc = "ATxmega192D3";
- signature = 0x1e 0x97 0x49;
+part parent ".avr8x_tiny"
+ id = "t1617";
+ desc = "ATtiny1617";
+ signature = 0x1E 0x94 0x20;
+
+ memory "flash"
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega192A1
+# ATtiny3216
#------------------------------------------------------------
-part parent "x192c3"
- id = "x192a1";
- desc = "ATxmega192A1";
- signature = 0x1e 0x97 0x4e;
- has_jtag = yes;
+part parent ".avr8x_tiny"
+ id = "t3216";
+ desc = "ATtiny3216";
+ signature = 0x1E 0x95 0x21;
- memory "fuse0"
- size = 1;
- offset = 0x8f0020;
+ memory "flash"
+ size = 0x8000;
+ offset = 0x8000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega192A3
+# ATtiny3217
#------------------------------------------------------------
-part parent "x192a1"
- id = "x192a3";
- desc = "ATxmega192A3";
- signature = 0x1e 0x97 0x44;
-;
+part parent ".avr8x_tiny"
+ id = "t3217";
+ desc = "ATtiny3217";
+ signature = 0x1E 0x95 0x22;
-#------------------------------------------------------------
-# ATxmega192A3U
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x8000;
+ offset = 0x8000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
-part parent "x192a1"
- id = "x192a3u";
- desc = "ATxmega192A3U";
- signature = 0x1e 0x97 0x44;
- usbpid = 0x2fe7;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega256C3
+# ATtiny424
#------------------------------------------------------------
-part parent ".xmega"
- id = "x256c3";
- desc = "ATxmega256C3";
- signature = 0x1e 0x98 0x46;
- usbpid = 0x2fda;
+part parent ".avr8x_tiny"
+ id = "t424";
+ desc = "ATtiny424";
+ signature = 0x1E 0x92 0x2C;
- memory "eeprom"
- size = 0x1000;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x40000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x2000;
- offset = 0x83e000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATtiny426
+#------------------------------------------------------------
- memory "boot"
- size = 0x2000;
- offset = 0x840000;
- page_size = 0x200;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "t426";
+ desc = "ATtiny426";
+ signature = 0x1E 0x92 0x2B;
memory "flash"
- size = 0x42000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x200;
- offset = 0x8e0400;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega256D3
+# ATtiny427
#------------------------------------------------------------
-part parent "x256c3"
- id = "x256d3";
- desc = "ATxmega256D3";
- signature = 0x1e 0x98 0x44;
+part parent ".avr8x_tiny"
+ id = "t427";
+ desc = "ATtiny427";
+ signature = 0x1E 0x92 0x2A;
+
+ memory "flash"
+ size = 0x1000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega256A1
+# ATtiny824
#------------------------------------------------------------
-part parent "x256c3"
- id = "x256a1";
- desc = "ATxmega256A1";
- signature = 0x1e 0x98 0x46;
- has_jtag = yes;
+part parent ".avr8x_tiny"
+ id = "t824";
+ desc = "ATtiny824";
+ signature = 0x1E 0x93 0x29;
- memory "fuse0"
- size = 1;
- offset = 0x8f0020;
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega256A3
+# ATtiny826
#------------------------------------------------------------
-part parent "x256a1"
- id = "x256a3";
- desc = "ATxmega256A3";
- signature = 0x1e 0x98 0x42;
-;
+part parent ".avr8x_tiny"
+ id = "t826";
+ desc = "ATtiny826";
+ signature = 0x1E 0x93 0x28;
-#------------------------------------------------------------
-# ATxmega256A3U
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x256a1"
- id = "x256a3u";
- desc = "ATxmega256A3U";
- signature = 0x1e 0x98 0x42;
- usbpid = 0x2fec;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega256A3B
+# ATtiny827
#------------------------------------------------------------
-part parent "x256a1"
- id = "x256a3b";
- desc = "ATxmega256A3B";
- signature = 0x1e 0x98 0x43;
-;
+part parent ".avr8x_tiny"
+ id = "t827";
+ desc = "ATtiny827";
+ signature = 0x1E 0x93 0x27;
-#------------------------------------------------------------
-# ATxmega256A3BU
-#------------------------------------------------------------
+ memory "flash"
+ size = 0x2000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
-part parent "x256a1"
- id = "x256a3bu";
- desc = "ATxmega256A3BU";
- signature = 0x1e 0x98 0x43;
- usbpid = 0x2fe2;
+ memory "eeprom"
+ size = 0x80;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega384C3
+# ATtiny1624
#------------------------------------------------------------
-part parent ".xmega"
- id = "x384c3";
- desc = "ATxmega384C3";
- signature = 0x1e 0x98 0x45;
- usbpid = 0x2fdb;
+part parent ".avr8x_tiny"
+ id = "t1624";
+ desc = "ATtiny1624";
+ signature = 0x1E 0x94 0x2A;
- memory "eeprom"
- size = 0x1000;
- offset = 0x8c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x60000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
+#------------------------------------------------------------
+# ATtiny1626
+#------------------------------------------------------------
- memory "apptable"
- size = 0x2000;
- offset = 0x85e000;
- page_size = 0x200;
- readsize = 0x100;
+part parent ".avr8x_tiny"
+ id = "t1626";
+ desc = "ATtiny1626";
+ signature = 0x1E 0x94 0x29;
+
+ memory "flash"
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "boot"
- size = 0x2000;
- offset = 0x860000;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
+
+#------------------------------------------------------------
+# ATtiny1627
+#------------------------------------------------------------
+
+part parent ".avr8x_tiny"
+ id = "t1627";
+ desc = "ATtiny1627";
+ signature = 0x1E 0x94 0x28;
memory "flash"
- size = 0x62000;
- offset = 0x800000;
- page_size = 0x200;
- readsize = 0x100;
+ size = 0x4000;
+ offset = 0x8000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x200;
- offset = 0x8e0400;
- page_size = 0x200;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega384D3
+# ATtiny3224
#------------------------------------------------------------
-part parent "x384c3"
- id = "x384d3";
- desc = "ATxmega384D3";
- signature = 0x1e 0x98 0x47;
+part parent ".avr8x_tiny"
+ id = "t3224";
+ desc = "ATtiny3224";
+ signature = 0x1E 0x95 0x28;
+
+ memory "flash"
+ size = 0x8000;
+ offset = 0x8000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATxmega8E5
+# ATtiny3226
#------------------------------------------------------------
-part parent ".xmega"
- id = "x8e5";
- desc = "ATxmega8E5";
- signature = 0x1e 0x93 0x41;
+part parent ".avr8x_tiny"
+ id = "t3226";
+ desc = "ATtiny3226";
+ signature = 0x1E 0x95 0x27;
- memory "eeprom"
- size = 0x0200;
- offset = 0x08c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x8000;
+ offset = 0x8000;
+ page_size = 0x80;
+ readsize = 0x100;
;
- memory "application"
- size = 0x2000;
- offset = 0x0800000;
- page_size = 0x80;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x800;
- offset = 0x00801800;
- page_size = 0x80;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATtiny3227
+#------------------------------------------------------------
- memory "boot"
- size = 0x800;
- offset = 0x00802000;
- page_size = 0x80;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "t3227";
+ desc = "ATtiny3227";
+ signature = 0x1E 0x95 0x26;
memory "flash"
- size = 0x2800;
- offset = 0x0800000;
- page_size = 0x80;
- readsize = 0x100;
+ size = 0x8000;
+ offset = 0x8000;
+ page_size = 0x80;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x80;
- offset = 0x8e0400;
- page_size = 0x80;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega16E5
+# ATmega808
#------------------------------------------------------------
-part parent ".xmega"
- id = "x16e5";
- desc = "ATxmega16E5";
- signature = 0x1e 0x94 0x45;
+part parent ".avr8x_tiny"
+ id = "m808";
+ desc = "ATmega808";
+ signature = 0x1E 0x93 0x26;
- memory "eeprom"
- size = 0x0200;
- offset = 0x08c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x2000;
+ offset = 0x4000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x4000;
- offset = 0x0800000;
- page_size = 0x80;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x1000;
- offset = 0x00803000;
- page_size = 0x80;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATmega809
+#------------------------------------------------------------
- memory "boot"
- size = 0x1000;
- offset = 0x00804000;
- page_size = 0x80;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "m809";
+ desc = "ATmega809";
+ signature = 0x1E 0x93 0x2A;
memory "flash"
- size = 0x5000;
- offset = 0x0800000;
- page_size = 0x80;
- readsize = 0x100;
+ size = 0x2000;
+ offset = 0x4000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x80;
- offset = 0x8e0400;
- page_size = 0x80;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATxmega32E5
+# ATmega1608
#------------------------------------------------------------
-part parent ".xmega"
- id = "x32e5";
- desc = "ATxmega32E5";
- signature = 0x1e 0x95 0x4c;
+part parent ".avr8x_tiny"
+ id = "m1608";
+ desc = "ATmega1608";
+ signature = 0x1E 0x94 0x27;
- memory "eeprom"
- size = 0x0400;
- offset = 0x08c0000;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x4000;
+ offset = 0x4000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "application"
- size = 0x8000;
- offset = 0x0800000;
- page_size = 0x80;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
+;
- memory "apptable"
- size = 0x1000;
- offset = 0x00807000;
- page_size = 0x80;
- readsize = 0x100;
- ;
+#------------------------------------------------------------
+# ATmega1609
+#------------------------------------------------------------
- memory "boot"
- size = 0x1000;
- offset = 0x00808000;
- page_size = 0x80;
- readsize = 0x100;
- ;
+part parent ".avr8x_tiny"
+ id = "m1609";
+ desc = "ATmega1609";
+ signature = 0x1E 0x94 0x26;
memory "flash"
- size = 0x9000;
- offset = 0x0800000;
- page_size = 0x80;
- readsize = 0x100;
+ size = 0x4000;
+ offset = 0x4000;
+ page_size = 0x40;
+ readsize = 0x100;
;
- memory "usersig"
- size = 0x80;
- offset = 0x8e0400;
- page_size = 0x80;
- readsize = 0x100;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x20;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# AVR32UC3A0512
+# ATmega3208
#------------------------------------------------------------
-part
- id = "uc3a0512";
- desc = "AT32UC3A0512";
- signature = 0xED 0xC0 0x3F;
- has_jtag = yes;
- is_avr32 = yes;
+part parent ".avr8x_mega"
+ id = "m3208";
+ desc = "ATmega3208";
+ signature = 0x1E 0x95 0x30;
memory "flash"
- paged = yes;
- page_size = 512; # bytes
- readsize = 512; # bytes
- num_pages = 1024; # could be set dynamicly
- size = 0x00080000; # could be set dynamicly
- offset = 0x80000000;
+ size = 0x8000;
+ offset = 0x4000;
+ page_size = 0x80;
+ readsize = 0x100;
;
-;
-part parent "uc3a0512"
- id = "ucr2";
- desc = "deprecated, use 'uc3a0512'";
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATtiny1634.
+# ATmega3209
#------------------------------------------------------------
-part
- id = "t1634";
- desc = "ATtiny1634";
- has_debugwire = yes;
- flash_instr = 0xB6, 0x01, 0x11;
- eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
- 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
- 0x99, 0xF9, 0xBB, 0xAF;
- stk500_devcode = 0x86;
- # avr910_devcode = 0x;
- signature = 0x1e 0x94 0x12;
- pagel = 0xB3;
- bs2 = 0xB1;
- reset = io;
- chip_erase_delay = 9000;
- pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
- "x x x x x x x x x x x x x x x x";
+part parent ".avr8x_mega"
+ id = "m3209";
+ desc = "ATmega3209";
+ signature = 0x1E 0x95 0x31;
- chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
- "x x x x x x x x x x x x x x x x";
+ memory "flash"
+ size = 0x8000;
+ offset = 0x4000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
- timeout = 200;
- stabdelay = 100;
- cmdexedelay = 25;
- synchloops = 32;
- bytedelay = 0;
- pollindex = 3;
- pollvalue = 0x53;
- predelay = 1;
- postdelay = 1;
- pollmethod = 1;
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+;
- pp_controlstack =
- 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
- 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
- 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
- 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
- hventerstabdelay = 100;
- progmodedelay = 0;
- latchcycles = 0;
- togglevtg = 1;
- poweroffdelay = 15;
- resetdelayms = 1;
- resetdelayus = 0;
- hvleavestabdelay = 15;
- resetdelay = 15;
- chiperasepulsewidth = 0;
- chiperasepolltimeout = 10;
- programfusepulsewidth = 0;
- programfusepolltimeout = 5;
- programlockpulsewidth = 0;
- programlockpolltimeout = 5;
+#------------------------------------------------------------
+# ATmega4808
+#------------------------------------------------------------
- memory "eeprom"
- paged = no;
- page_size = 4;
- size = 256;
- min_write_delay = 3600;
- max_write_delay = 3600;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read = " 1 0 1 0 0 0 0 0",
- " 0 0 0 x x x x a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+part parent ".avr8x_mega"
+ id = "m4808";
+ desc = "ATmega4808";
+ signature = 0x1E 0x96 0x50;
- write = " 1 1 0 0 0 0 0 0",
- " 0 0 0 x x x x a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ memory "flash"
+ size = 0xC000;
+ offset = 0x4000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
- loadpage_lo = " 1 1 0 0 0 0 0 1",
- " 0 0 0 0 0 0 0 0",
- " 0 0 0 0 0 0 a1 a0",
- " i i i i i i i i";
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+;
- writepage = " 1 1 0 0 0 0 1 0",
- " 0 0 x x x x x a8",
- " a7 a6 a5 a4 a3 a2 0 0",
- " x x x x x x x x";
+#------------------------------------------------------------
+# ATmega4809
+#------------------------------------------------------------
- mode = 0x41;
- delay = 5;
- blocksize = 4;
- readsize = 256;
- ;
+part parent ".avr8x_mega"
+ id = "m4809";
+ desc = "ATmega4809";
+ signature = 0x1E 0x96 0x51;
memory "flash"
- paged = yes;
- size = 16384;
- page_size = 32;
- num_pages = 512;
- min_write_delay = 4500;
- max_write_delay = 4500;
- readback_p1 = 0xff;
- readback_p2 = 0xff;
- read_lo = " 0 0 1 0 0 0 0 0",
- " 0 0 0 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
-
- read_hi = " 0 0 1 0 1 0 0 0",
- " 0 0 0 a12 a11 a10 a9 a8",
- " a7 a6 a5 a4 a3 a2 a1 a0",
- " o o o o o o o o";
+ size = 0xC000;
+ offset = 0x4000;
+ page_size = 0x80;
+ readsize = 0x100;
+ ;
- loadpage_lo = " 0 1 0 0 0 0 0 0",
- " 0 0 0 x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+ memory "eeprom"
+ size = 0x100;
+ offset = 0x1400;
+ page_size = 0x40;
+ readsize = 0x100;
+ ;
+;
- loadpage_hi = " 0 1 0 0 1 0 0 0",
- " 0 0 0 x x x x x",
- " x x a5 a4 a3 a2 a1 a0",
- " i i i i i i i i";
+#------------------------------------------------------------
+# AVR-Dx family common values
+#------------------------------------------------------------
- writepage = " 0 1 0 0 1 1 0 0",
- " 0 0 0 a12 a11 a10 a9 a8",
- " a7 a6 x x x x x x",
- " x x x x x x x x";
+part
+ id = ".avrdx";
+ desc = "AVR-Dx family common values";
+ has_updi = yes;
+ nvm_base = 0x1000;
+ ocd_base = 0x0F80;
- mode = 0x41;
- delay = 6;
- blocksize = 128;
- readsize = 256;
+ memory "signature"
+ size = 3;
+ offset = 0x1100;
+ readsize = 0x3;
+ ;
- ;
+ memory "prodsig"
+ size = 0x7D;
+ offset = 0x1103;
+ page_size = 0x7D;
+ readsize = 0x7D;
+ ;
- memory "lfuse"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ memory "tempsense"
+ size = 2;
+ offset = 0x1104;
+ readsize = 1;
+ ;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
- "x x x x x x x x i i i i i i i i";
- ;
+ memory "sernum"
+ size = 16;
+ offset = 0x1110;
+ readsize = 1;
+ ;
- memory "hfuse"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ memory "fuses"
+ size = 9;
+ offset = 0x1050;
+ page_size = 0x10;
+ readsize = 0x10;
+ ;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
- "x x x x x x x x i i i i i i i i";
- ;
+ memory "fuse0"
+ size = 1;
+ offset = 0x1050;
+ readsize = 1;
+ ;
- memory "efuse"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
- "x x x x x x x x o o o o o o o o";
+ memory "wdtcfg"
+ alias "fuse0";
+ ;
- write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
- "x x x x x x x x x x x i i i i i";
- ;
+ memory "fuse1"
+ size = 1;
+ offset = 0x1051;
+ readsize = 1;
+ ;
- memory "lock"
- size = 1;
- min_write_delay = 4500;
- max_write_delay = 4500;
- read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
- "x x x x x x x x x x x x x x o o";
+ memory "bodcfg"
+ alias "fuse1";
+ ;
- write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
- "x x x x x x x x 1 1 1 1 1 1 i i";
- ;
+ memory "fuse2"
+ size = 1;
+ offset = 0x1052;
+ readsize = 1;
+ ;
- memory "calibration"
- size = 1;
- read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
- "0 0 0 0 0 0 0 0 o o o o o o o o";
- ;
+ memory "osccfg"
+ alias "fuse2";
+ ;
- memory "signature"
- size = 3;
- read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
- "x x x x x x a1 a0 o o o o o o o o";
- ;
-;
+ memory "fuse4"
+ size = 1;
+ offset = 0x1054;
+ readsize = 1;
+ ;
-#------------------------------------------------------------
-# Common values for reduced core tinys (4/5/9/10/20/40)
-#------------------------------------------------------------
+ memory "tcd0cfg"
+ alias "fuse4";
+ ;
-part
- id = ".reduced_core_tiny";
- desc = "Common values for reduced core tinys";
- has_tpi = yes;
+ memory "fuse5"
+ size = 1;
+ offset = 0x1055;
+ readsize = 1;
+ ;
- memory "signature"
- size = 3;
- offset = 0x3fc0;
- page_size = 16;
+ memory "syscfg0"
+ alias "fuse5";
;
- memory "fuse"
+ memory "fuse6"
size = 1;
- offset = 0x3f40;
- page_size = 16;
- blocksize = 4;
+ offset = 0x1056;
+ readsize = 1;
;
- memory "calibration"
+ memory "syscfg1"
+ alias "fuse6";
+ ;
+
+ memory "fuse7"
size = 1;
- offset = 0x3f80;
- page_size = 16;
+ offset = 0x1057;
+ readsize = 1;
;
- memory "lockbits"
+ memory "codesize"
+ alias "fuse7";
+ ;
+
+ memory "append"
+ alias "fuse7";
+ ;
+
+ memory "fuse8"
size = 1;
- offset = 0x3f00;
- page_size = 16;
+ offset = 0x1058;
+ readsize = 1;
;
-;
-#------------------------------------------------------------
-# ATtiny4
-#------------------------------------------------------------
+ memory "bootsize"
+ alias "fuse8";
+ ;
-part parent ".reduced_core_tiny"
- id = "t4";
- desc = "ATtiny4";
- signature = 0x1e 0x8f 0x0a;
+ memory "bootend"
+ alias "fuse8";
+ ;
- memory "flash"
- size = 512;
- offset = 0x4000;
- page_size = 16;
- blocksize = 128;
+ memory "lock"
+ size = 4;
+ offset = 0x1040;
+ page_size = 0x1;
+ readsize = 0x4;
;
-;
-#------------------------------------------------------------
-# ATtiny5
-#------------------------------------------------------------
+ memory "userrow"
+ size = 0x20;
+ offset = 0x1080;
+ page_size = 0x20;
+ readsize = 0x20;
+ ;
-part parent "t4"
- id = "t5";
- desc = "ATtiny5";
- signature = 0x1e 0x8f 0x09;
+ memory "usersig"
+ alias "userrow";
+ ;
+
+ memory "data"
+ # SRAM, only used to supply the offset
+ offset = 0x1000000;
+ ;
;
#------------------------------------------------------------
-# ATtiny9
+# AVR32DA28
#------------------------------------------------------------
-part parent ".reduced_core_tiny"
- id = "t9";
- desc = "ATtiny9";
- signature = 0x1e 0x90 0x08;
+part parent ".avrdx"
+ id = "avr32da28";
+ desc = "AVR32DA28";
+ signature = 0x1E 0x95 0x34;
memory "flash"
- size = 1024;
- offset = 0x4000;
- page_size = 16;
- blocksize = 128;
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny10
+# AVR32DA32
#------------------------------------------------------------
-part parent "t9"
- id = "t10";
- desc = "ATtiny10";
- signature = 0x1e 0x90 0x03;
+part parent ".avrdx"
+ id = "avr32da32";
+ desc = "AVR32DA32";
+ signature = 0x1E 0x95 0x33;
+
+ memory "flash"
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
+ ;
;
#------------------------------------------------------------
-# ATtiny20
+# AVR32DA48
#------------------------------------------------------------
-part parent ".reduced_core_tiny"
- id = "t20";
- desc = "ATtiny20";
- signature = 0x1e 0x91 0x0F;
+part parent ".avrdx"
+ id = "avr32da48";
+ desc = "AVR32DA48";
+ signature = 0x1E 0x95 0x32;
memory "flash"
- size = 2048;
- offset = 0x4000;
- page_size = 16;
- blocksize = 128;
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny40
+# AVR64DA28
#------------------------------------------------------------
-part parent ".reduced_core_tiny"
- id = "t40";
- desc = "ATtiny40";
- signature = 0x1e 0x92 0x0E;
+part parent ".avrdx"
+ id = "avr64da28";
+ desc = "AVR64DA28";
+ signature = 0x1E 0x96 0x15;
memory "flash"
- size = 4096;
- offset = 0x4000;
- page_size = 64;
- blocksize = 128;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATmega406
+# AVR64DA32
#------------------------------------------------------------
-part
- id = "m406";
- desc = "ATMEGA406";
- has_jtag = yes;
- signature = 0x1e 0x95 0x07;
+part parent ".avrdx"
+ id = "avr64da32";
+ desc = "AVR64DA32";
+ signature = 0x1E 0x96 0x14;
- # STK500 parameters (parallel programming IO lines)
- pagel = 0xa7;
- bs2 = 0xa0;
- serial = no;
- parallel = yes;
+ memory "flash"
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
- # STK500v2 HV programming parameters, from XML
- pp_controlstack = 0x0e, 0x1e, 0x0f, 0x1f, 0x2e, 0x3e, 0x2f, 0x3f,
- 0x4e, 0x5e, 0x4f, 0x5f, 0x6e, 0x7e, 0x6f, 0x7f,
- 0x66, 0x76, 0x67, 0x77, 0x6a, 0x7a, 0x6b, 0x7b,
- 0xbe, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
+ ;
+;
- # JTAG ICE mkII parameters, also from XML files
- allowfullpagebitstream = no;
- enablepageprogramming = yes;
- idr = 0x51;
- rampz = 0x00;
- spmcr = 0x57;
- eecr = 0x3f;
+#------------------------------------------------------------
+# AVR64DA48
+#------------------------------------------------------------
+
+part parent ".avrdx"
+ id = "avr64da48";
+ desc = "AVR64DA48";
+ signature = 0x1E 0x96 0x13;
+
+ memory "flash"
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
memory "eeprom"
- paged = no;
- size = 512;
- page_size = 4;
- blocksize = 4;
- readsize = 4;
- num_pages = 128;
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
+;
+
+#------------------------------------------------------------
+# AVR64DA64
+#------------------------------------------------------------
+
+part parent ".avrdx"
+ id = "avr64da64";
+ desc = "AVR64DA64";
+ signature = 0x1E 0x96 0x12;
memory "flash"
- paged = yes;
- size = 40960;
- page_size = 128;
- blocksize = 128;
- readsize = 128;
- num_pages = 320;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "hfuse"
- size = 1;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
+;
- memory "lfuse"
- size = 1;
- ;
+#------------------------------------------------------------
+# AVR128DA28
+#------------------------------------------------------------
- memory "lockbits"
- size = 1;
+part parent ".avrdx"
+ id = "avr128da28";
+ desc = "AVR128DA28";
+ signature = 0x1E 0x97 0x0A;
+
+ memory "flash"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "signature"
- size = 3;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# AVR8X family common values
+# AVR128DA32
#------------------------------------------------------------
-part
- id = ".avr8x";
- desc = "AVR8X family common values";
- has_updi = yes;
- nvm_base = 0x1000;
- ocd_base = 0x0F80;
+part parent ".avrdx"
+ id = "avr128da32";
+ desc = "AVR128DA32";
+ signature = 0x1E 0x97 0x09;
- memory "signature"
- size = 3;
- offset = 0x1100;
+ memory "flash"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "prodsig"
- size = 0x3D;
- offset = 0x1103;
- page_size = 0x3D;
- readsize = 0x3D;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
+;
- memory "fuses"
- size = 9;
- offset = 0x1280;
- ;
+#------------------------------------------------------------
+# AVR128DA48
+#------------------------------------------------------------
- memory "fuse0"
- size = 1;
- offset = 0x1280;
+part parent ".avrdx"
+ id = "avr128da48";
+ desc = "AVR128DA48";
+ signature = 0x1E 0x97 0x08;
+
+ memory "flash"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "fuse1"
- size = 1;
- offset = 0x1281;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
+;
- memory "fuse2"
- size = 1;
- offset = 0x1282;
+#------------------------------------------------------------
+# AVR128DA64
+#------------------------------------------------------------
+
+part parent ".avrdx"
+ id = "avr128da64";
+ desc = "AVR128DA64";
+ signature = 0x1E 0x97 0x07;
+
+ memory "flash"
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "fuse4"
- size = 1;
- offset = 0x1284;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
+;
- memory "fuse5"
- size = 1;
- offset = 0x1285;
+#------------------------------------------------------------
+# AVR32DB28
+#------------------------------------------------------------
+
+part parent ".avrdx"
+ id = "avr32db28";
+ desc = "AVR32DB28";
+ signature = 0x1E 0x95 0x37;
+
+ memory "flash"
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "fuse6"
- size = 1;
- offset = 0x1286;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
+;
- memory "fuse7"
- size = 1;
- offset = 0x1287;
+#------------------------------------------------------------
+# AVR32DB32
+#------------------------------------------------------------
+
+part parent ".avrdx"
+ id = "avr32db32";
+ desc = "AVR32DB32";
+ signature = 0x1E 0x95 0x36;
+
+ memory "flash"
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "fuse8"
- size = 1;
- offset = 0x1288;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
+;
- memory "lock"
- size = 1;
- offset = 0x128a;
+#------------------------------------------------------------
+# AVR32DB48
+#------------------------------------------------------------
+
+part parent ".avrdx"
+ id = "avr32db48";
+ desc = "AVR32DB48";
+ signature = 0x1E 0x95 0x35;
+
+ memory "flash"
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
;
- memory "data"
- # SRAM, only used to supply the offset
- offset = 0x1000000;
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# AVR8X tiny family common values
+# AVR64DB28
#------------------------------------------------------------
-part parent ".avr8x"
- id = ".avr8x_tiny";
- desc = "AVR8X tiny family common values";
- family_id = "tinyAVR";
+part parent ".avrdx"
+ id = "avr64db28";
+ desc = "AVR64DB28";
+ signature = 0x1E 0x96 0x19;
- memory "usersig"
- size = 0x20;
- offset = 0x1300;
- page_size = 0x20;
- readsize = 0x100;
+ memory "flash"
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# AVR8X mega family common values
+# AVR64DB32
#------------------------------------------------------------
-part parent ".avr8x"
- id = ".avr8x_mega";
- desc = "AVR8X mega family common values";
- family_id = "megaAVR";
+part parent ".avrdx"
+ id = "avr64db32";
+ desc = "AVR64DB32";
+ signature = 0x1E 0x96 0x18;
- memory "usersig"
- size = 0x40;
- offset = 0x1300;
- page_size = 0x40;
- readsize = 0x100;
+ memory "flash"
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
+ readsize = 0x100;
+ ;
+
+ memory "eeprom"
+ size = 0x200;
+ offset = 0x1400;
+ page_size = 0x1;
+ readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny202
+# AVR64DB48
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t202";
- desc = "ATtiny202";
- signature = 0x1E 0x91 0x23;
+part parent ".avrdx"
+ id = "avr64db48";
+ desc = "AVR64DB48";
+ signature = 0x1E 0x96 0x17;
memory "flash"
- size = 0x800;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x40;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny204
+# AVR64DB64
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t204";
- desc = "ATtiny204";
- signature = 0x1E 0x91 0x22;
+part parent ".avrdx"
+ id = "avr64db64";
+ desc = "AVR64DB64";
+ signature = 0x1E 0x96 0x16;
memory "flash"
- size = 0x800;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x40;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny402
+# AVR128DB28
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t402";
- desc = "ATtiny402";
- signature = 0x1E 0x92 0x23;
+part parent ".avrdx"
+ id = "avr128db28";
+ desc = "AVR128DB28";
+ signature = 0x1E 0x97 0x0E;
memory "flash"
- size = 0x1000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny404
+# AVR128DB32
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t404";
- desc = "ATtiny404";
- signature = 0x1E 0x92 0x26;
+part parent ".avrdx"
+ id = "avr128db32";
+ desc = "AVR128DB32";
+ signature = 0x1E 0x97 0x0D;
memory "flash"
- size = 0x1000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny406
+# AVR128DB48
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t406";
- desc = "ATtiny406";
- signature = 0x1E 0x92 0x25;
+part parent ".avrdx"
+ id = "avr128db48";
+ desc = "AVR128DB48";
+ signature = 0x1E 0x97 0x0C;
memory "flash"
- size = 0x1000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny804
+# AVR128DB64
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t804";
- desc = "ATtiny804";
- signature = 0x1E 0x93 0x25;
+part parent ".avrdx"
+ id = "avr128db64";
+ desc = "AVR128DB64";
+ signature = 0x1E 0x97 0x0B;
memory "flash"
- size = 0x2000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x20000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny806
+# AVR16DD14
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t806";
- desc = "ATtiny806";
- signature = 0x1E 0x93 0x24;
+part parent ".avrdx"
+ id = "avr16dd14";
+ desc = "AVR16DD14";
+ signature = 0x1E 0x94 0x34;
memory "flash"
- size = 0x2000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x4000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny807
+# AVR16DD20
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t807";
- desc = "ATtiny807";
- signature = 0x1E 0x93 0x23;
+part parent ".avrdx"
+ id = "avr16dd20";
+ desc = "AVR16DD20";
+ signature = 0x1E 0x94 0x33;
memory "flash"
- size = 0x2000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x4000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny1604
+# AVR16DD28
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t1604";
- desc = "ATtiny1604";
- signature = 0x1E 0x94 0x25;
+part parent ".avrdx"
+ id = "avr16dd28";
+ desc = "AVR16DD28";
+ signature = 0x1E 0x94 0x32;
memory "flash"
size = 0x4000;
- offset = 0x8000;
- page_size = 0x40;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny1606
+# AVR16DD32
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t1606";
- desc = "ATtiny1606";
- signature = 0x1E 0x94 0x24;
+part parent ".avrdx"
+ id = "avr16dd32";
+ desc = "AVR16DD32";
+ signature = 0x1E 0x94 0x31;
memory "flash"
size = 0x4000;
- offset = 0x8000;
- page_size = 0x40;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny1607
+# AVR32DD14
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t1607";
- desc = "ATtiny1607";
- signature = 0x1E 0x94 0x23;
+part parent ".avrdx"
+ id = "avr32dd14";
+ desc = "AVR32DD14";
+ signature = 0x1E 0x95 0x3B;
memory "flash"
- size = 0x4000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny212
+# AVR32DD20
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t212";
- desc = "ATtiny212";
- signature = 0x1E 0x91 0x21;
+part parent ".avrdx"
+ id = "avr32dd20";
+ desc = "AVR32DD20";
+ signature = 0x1E 0x95 0x3A;
memory "flash"
- size = 0x800;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x40;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny214
+# AVR32DD28
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t214";
- desc = "ATtiny214";
- signature = 0x1E 0x91 0x20;
+part parent ".avrdx"
+ id = "avr32dd28";
+ desc = "AVR32DD28";
+ signature = 0x1E 0x95 0x39;
memory "flash"
- size = 0x800;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x40;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny412
+# AVR32DD32
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t412";
- desc = "ATtiny412";
- signature = 0x1E 0x92 0x23;
+part parent ".avrdx"
+ id = "avr32dd32";
+ desc = "AVR32DD32";
+ signature = 0x1E 0x95 0x38;
memory "flash"
- size = 0x1000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x8000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
-
#------------------------------------------------------------
-# ATtiny414
+# AVR64DD14
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t414";
- desc = "ATtiny414";
- signature = 0x1E 0x92 0x22;
+part parent ".avrdx"
+ id = "avr64dd14";
+ desc = "AVR64DD14";
+ signature = 0x1E 0x96 0x1D;
memory "flash"
- size = 0x1000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny416
+# AVR64DD20
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t416";
- desc = "ATtiny416";
- signature = 0x1E 0x92 0x21;
+part parent ".avrdx"
+ id = "avr64dd20";
+ desc = "AVR64DD20";
+ signature = 0x1E 0x96 0x1C;
memory "flash"
- size = 0x1000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
-
#------------------------------------------------------------
-# ATtiny417
+# AVR64DD28
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t417";
- desc = "ATtiny417";
- signature = 0x1E 0x92 0x20;
+part parent ".avrdx"
+ id = "avr64dd28";
+ desc = "AVR64DD28";
+ signature = 0x1E 0x96 0x1B;
memory "flash"
- size = 0x1000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
-
#------------------------------------------------------------
-# ATtiny814
+# AVR64DD32
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t814";
- desc = "ATtiny814";
- signature = 0x1E 0x93 0x22;
+part parent ".avrdx"
+ id = "avr64dd32";
+ desc = "AVR64DD32";
+ signature = 0x1E 0x96 0x1A;
memory "flash"
- size = 0x2000;
- offset = 0x8000;
- page_size = 0x40;
+ size = 0x10000;
+ offset = 0x800000;
+ page_size = 0x200;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x100;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x1;
readsize = 0x100;
;
;
+#------------------------------------------------------------
+# AVR-Ex family common values
+#------------------------------------------------------------
+
+part parent ".avrdx"
+ id = ".avrex";
+ desc = "AVR-Ex family common values";
+
+ memory "userrow"
+ size = 0x40;
+ offset = 0x1080;
+ page_size = 0x40;
+ readsize = 0x40;
+ ;
+
+ memory "usersig"
+ alias "userrow";
+ ;
+;
#------------------------------------------------------------
-# ATtiny816
+# AVR8EA28
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t816";
- desc = "ATtiny816";
- signature = 0x1E 0x93 0x21;
+part parent ".avrex"
+ id = "avr8ea28";
+ desc = "AVR8EA28";
+ signature = 0x1E 0x93 0x2C;
memory "flash"
size = 0x2000;
- offset = 0x8000;
+ offset = 0x800000;
page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny817
+# AVR8EA32
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t817";
- desc = "ATtiny817";
- signature = 0x1E 0x93 0x20;
+part parent ".avrex"
+ id = "avr8ea32";
+ desc = "AVR8EA32";
+ signature = 0x1E 0x93 0x2B;
memory "flash"
size = 0x2000;
- offset = 0x8000;
+ offset = 0x800000;
page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x80;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny1614
+# AVR16EA28
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t1614";
- desc = "ATtiny1614";
- signature = 0x1E 0x94 0x22;
+part parent ".avrex"
+ id = "avr16ea28";
+ desc = "AVR16EA28";
+ signature = 0x1E 0x94 0x37;
memory "flash"
size = 0x4000;
- offset = 0x8000;
+ offset = 0x800000;
page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny1616
+# AVR16EA32
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t1616";
- desc = "ATtiny1616";
- signature = 0x1E 0x94 0x21;
+part parent ".avrex"
+ id = "avr16ea32";
+ desc = "AVR16EA32";
+ signature = 0x1E 0x94 0x36;
memory "flash"
size = 0x4000;
- offset = 0x8000;
+ offset = 0x800000;
page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny1617
+# AVR16EA48
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t1617";
- desc = "ATtiny1617";
- signature = 0x1E 0x94 0x20;
+part parent ".avrex"
+ id = "avr16ea48";
+ desc = "AVR16EA48";
+ signature = 0x1E 0x94 0x35;
memory "flash"
size = 0x4000;
- offset = 0x8000;
+ offset = 0x800000;
page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x20;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny3214
+# AVR32EA28
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t3214";
- desc = "ATtiny3214";
- signature = 0x1E 0x95 0x20;
+part parent ".avrex"
+ id = "avr32ea28";
+ desc = "AVR32EA28";
+ signature = 0x1E 0x95 0x3E;
memory "flash"
size = 0x8000;
- offset = 0x8000;
- page_size = 0x80;
+ offset = 0x800000;
+ page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x40;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny3216
+# AVR32EA32
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t3216";
- desc = "ATtiny3216";
- signature = 0x1E 0x95 0x21;
+part parent ".avrex"
+ id = "avr32ea32";
+ desc = "AVR32EA32";
+ signature = 0x1E 0x95 0x3D;
memory "flash"
size = 0x8000;
- offset = 0x8000;
- page_size = 0x80;
+ offset = 0x800000;
+ page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x40;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATtiny3217
+# AVR32EA48
#------------------------------------------------------------
-part parent ".avr8x_tiny"
- id = "t3217";
- desc = "ATtiny3217";
- signature = 0x1E 0x95 0x22;
+part parent ".avrex"
+ id = "avr32ea48";
+ desc = "AVR32EA48";
+ signature = 0x1E 0x95 0x3C;
memory "flash"
size = 0x8000;
- offset = 0x8000;
- page_size = 0x80;
+ offset = 0x800000;
+ page_size = 0x40;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x40;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATmega3208
+# AVR64EA28
#------------------------------------------------------------
-part parent ".avr8x_mega"
- id = "m3208";
- desc = "ATmega3208";
- signature = 0x1E 0x95 0x52;
+part parent ".avrex"
+ id = "avr64ea28";
+ desc = "AVR64EA28";
+ signature = 0x1E 0x96 0x20;
memory "flash"
- size = 0x8000;
- offset = 0x4000;
+ size = 0x10000;
+ offset = 0x800000;
page_size = 0x80;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x40;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATmega3209
+# AVR64EA32
#------------------------------------------------------------
-part parent ".avr8x_mega"
- id = "m3209";
- desc = "ATmega3209";
- signature = 0x1E 0x95 0x53;
+part parent ".avrex"
+ id = "avr64ea32";
+ desc = "AVR64EA32";
+ signature = 0x1E 0x96 0x1F;
memory "flash"
- size = 0x8000;
- offset = 0x4000;
+ size = 0x10000;
+ offset = 0x800000;
page_size = 0x80;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x40;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATmega4808
+# AVR64EA48
#------------------------------------------------------------
-part parent ".avr8x_mega"
- id = "m4808";
- desc = "ATmega4808";
- signature = 0x1E 0x96 0x50;
+part parent ".avrex"
+ id = "avr64ea48";
+ desc = "AVR64EA48";
+ signature = 0x1E 0x96 0x1E;
memory "flash"
- size = 0xC000;
- offset = 0x4000;
+ size = 0x10000;
+ offset = 0x800000;
page_size = 0x80;
readsize = 0x100;
;
memory "eeprom"
- size = 0x100;
+ size = 0x200;
offset = 0x1400;
- page_size = 0x40;
+ page_size = 0x8;
readsize = 0x100;
;
;
#------------------------------------------------------------
-# ATmega4809
+# Logic Green parts
#------------------------------------------------------------
-part parent ".avr8x_mega"
- id = "m4809";
- desc = "ATmega4809";
- signature = 0x1E 0x96 0x51;
+part parent "m88"
+ id = "lgt8f88p";
+ desc = "LGT8F88P";
+ signature = 0x1e 0x93 0x0f;
- memory "flash"
- size = 0xC000;
- offset = 0x4000;
- page_size = 0x80;
- readsize = 0x100;
- ;
+ ocdrev = 1;
+ ;
- memory "eeprom"
- size = 0x100;
- offset = 0x1400;
- page_size = 0x40;
- readsize = 0x100;
- ;
+part parent "m168"
+ id = "lgt8f168p";
+ desc = "LGT8F168P";
+ signature = 0x1e 0x94 0x0b;
+
+ ocdrev = 1;
+;
+
+part parent "m328"
+ id = "lgt8f328p";
+ desc = "LGT8F328P";
+ signature = 0x1e 0x95 0x0F;
+
+ ocdrev = 1;
;
diff --git a/Boards/arduino_mega.board.json b/Boards/arduino_mega.board.json
index eea3b9886..f6c2b06f1 100644
--- a/Boards/arduino_mega.board.json
+++ b/Boards/arduino_mega.board.json
@@ -1,8 +1,9 @@
{
"$schema": "./mfboard.schema.json",
"AvrDudeSettings": {
+ "Attempts": 1,
"Device": "atmega2560",
- "BaudRate": "115200",
+ "BaudRates": [ "115200" ],
"Programmer": "wiring",
"FirmwareBaseName": "mobiflight_mega",
"ResetFirmwareFile": "reset.arduino_mega_1_0_2.hex",
diff --git a/Boards/arduino_micro.board.json b/Boards/arduino_micro.board.json
index 13e890db4..c171b6c55 100644
--- a/Boards/arduino_micro.board.json
+++ b/Boards/arduino_micro.board.json
@@ -1,7 +1,8 @@
{
"$schema": "./mfboard.schema.json",
"AvrDudeSettings": {
- "BaudRate": "57600",
+ "Attempts": 1,
+ "BaudRates": [ "57600" ],
"Device": "atmega32u4",
"FirmwareBaseName": "mobiflight_micro",
"Programmer": "avr109",
diff --git a/Boards/arduino_nano.board.json b/Boards/arduino_nano.board.json
new file mode 100644
index 000000000..f32e7b857
--- /dev/null
+++ b/Boards/arduino_nano.board.json
@@ -0,0 +1,166 @@
+{
+ "$schema": "./mfboard.schema.json",
+ "AvrDudeSettings": {
+ "Attempts": 1,
+ "Device": "atmega328p",
+ "BaudRates": [ "115200", "57600" ],
+ "Programmer": "arduino",
+ "FirmwareBaseName": "mobiflight_nano",
+ "Timeout": 15000,
+ "ResetFirmwareFile": "reset.arduino_uno_1_0_2.hex"
+ },
+ "Connection": {
+ "ConnectionDelay": 1750,
+ "DelayAfterFirmwareUpdate": 0,
+ "DtrEnable": true,
+ "EEPROMSize": 286,
+ "ExtraConnectionRetry": true,
+ "ForceResetOnFirmwareUpdate": false,
+ "MessageSize": 64,
+ "TimeoutForFirmwareUpdate": 60000
+ },
+ "HardwareIds": [
+ "^VID_2341&PID_0043",
+ "^VID_2A03&PID_0043",
+ "^VID_2341&PID_0243",
+ "^VID_2341&PID_0001",
+ "^VID_1A86&PID_7523",
+ "^VID_0403&PID_6001",
+ "^VID_0403\\+PID_6001\\+.+"
+ ],
+ "Info": {
+ "CanInstallFirmware": true,
+ "FriendlyName": "Arduino Nano",
+ "LatestFirmwareVersion": "2.3.0",
+ "MobiFlightType": "MobiFlight Nano"
+ },
+ "ModuleLimits": {
+ "MaxAnalogInputs": 6,
+ "MaxButtons": 18,
+ "MaxEncoders": 9,
+ "MaxInputShifters": 2,
+ "MaxLcdI2C": 2,
+ "MaxLedSegments": 1,
+ "MaxOutputs": 18,
+ "MaxServos": 2,
+ "MaxShifters": 2,
+ "MaxSteppers": 2,
+ "MaxInputMultiplexer": 3
+ },
+ "Pins": [
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": false,
+ "Pin": 2
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": true,
+ "Pin": 3
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": false,
+ "Pin": 4
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": true,
+ "Pin": 5
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": true,
+ "Pin": 6
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": false,
+ "Pin": 7
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": false,
+ "Pin": 8
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": true,
+ "Pin": 9
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": true,
+ "Pin": 10
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": true,
+ "Pin": 11
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": false,
+ "Pin": 12
+ },
+ {
+ "isAnalog": false,
+ "isI2C": false,
+ "isPWM": false,
+ "Pin": 13
+ },
+ {
+ "isAnalog": true,
+ "isI2C": false,
+ "isPWM": false,
+ "Name": "A0",
+ "Pin": 14
+ },
+ {
+ "isAnalog": true,
+ "isI2C": false,
+ "isPWM": false,
+ "Name": "A1",
+ "Pin": 15
+ },
+ {
+ "isAnalog": true,
+ "isI2C": false,
+ "isPWM": false,
+ "Name": "A2",
+ "Pin": 16
+ },
+ {
+ "isAnalog": true,
+ "isI2C": false,
+ "isPWM": false,
+ "Name": "A3",
+ "Pin": 17
+ },
+ {
+ "isAnalog": true,
+ "isI2C": true,
+ "isPWM": false,
+ "Name": "A4",
+ "Pin": 18
+ },
+ {
+ "isAnalog": true,
+ "isI2C": true,
+ "isPWM": false,
+ "Name": "A5",
+ "Pin": 19
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Boards/arduino_uno.board.json b/Boards/arduino_uno.board.json
index 7a4363e2c..05f4016e6 100644
--- a/Boards/arduino_uno.board.json
+++ b/Boards/arduino_uno.board.json
@@ -1,8 +1,9 @@
{
"$schema": "./mfboard.schema.json",
"AvrDudeSettings": {
+ "Attempts": 1,
"Device": "atmega328p",
- "BaudRate": "115200",
+ "BaudRates": [ "115200" ],
"Programmer": "arduino",
"FirmwareBaseName": "mobiflight_uno",
"Timeout": 15000,
diff --git a/Boards/mfboard.schema.json b/Boards/mfboard.schema.json
index ebe5fedd5..7ec742ed7 100644
--- a/Boards/mfboard.schema.json
+++ b/Boards/mfboard.schema.json
@@ -1,24 +1,44 @@
{
"definitions": {},
- "$schema": "http://json-schema.org/draft-07/schema#",
+ "$schema": "https://json-schema.org/draft/2019-09/schema#",
"$id": "https://mobiflight.com/mfboard.schema.json",
"title": "Root",
"type": "object",
- "required": ["Connection", "HardwareIds", "Info", "ModuleLimits", "Pins"],
+ "required": [ "Connection", "HardwareIds", "Info", "ModuleLimits", "Pins" ],
"properties": {
"AvrDudeSettings": {
"$id": "#root/AvrDudeSettings",
"title": "Avrdudesettings",
"type": "object",
"description": "Settings for flashing Arduino devices with avrdude.",
- "required": ["BaudRate", "Device", "FirmwareBaseName", "Programmer"],
+ "required": [ "Attempts", "BaudRates", "Device", "FirmwareBaseName", "Programmer" ],
"properties": {
+ "Attempts": {
+ "$id": "#root/AvrDudeSettings/Attempts",
+ "title": "Attempts",
+ "description": "Number of times AvrDude should retry connecting to the device.",
+ "type": "integer"
+ },
"BaudRate": {
"$id": "#root/AvrDudeSettings/BaudRate",
"title": "Baudrate",
- "description": "Baud rate to use with AvrDude.",
+ "deprecated": true,
+ "description": "Baud rate to use with AvrDude. Deprecated. Use BaudRates instead.",
"type": "string"
},
+ "BaudRates": {
+ "$id": "#root/AvrDude/Settings/BaudRates",
+ "title": " Baudrates",
+ "description": "All supported baud rates to use with AvrDude.",
+ "type": "array",
+ "default": [],
+ "items": {
+ "$id": "#root/BaudRates/items",
+ "title": "Items",
+ "description": "A baud rate for communicating with the device.",
+ "type": "string"
+ }
+ },
"Device": {
"$id": "#root/AvrDudeSettings/Device",
"title": "Device",
@@ -107,6 +127,13 @@
"title": "Messagesize",
"description": "Maximum size of a CmdMessenger message, in bytes.",
"type": "integer"
+ },
+ "TimeoutForFirmwareUpdate": {
+ "$id": "#root/Connection/TimeoutForFirmwareUpdate",
+ "title": "Timeoutforfirmwareupdate",
+ "description": "Number of milliseconds to wait for the firmware update to complete before attempting to call GetInfo on the board. Default 15000.",
+ "type": "integer",
+ "default": 15000
}
}
},
@@ -176,7 +203,6 @@
"MaxOutputs",
"MaxServos",
"MaxSteppers",
- "MaxInputShifters",
"MaxInputMultiplexer"
],
"properties": {
@@ -258,7 +284,7 @@
"$id": "#root/Pins/items",
"title": "Items",
"type": "object",
- "required": ["isAnalog", "isPWM", "isI2C", "Pin"],
+ "required": [ "isAnalog", "isPWM", "isI2C", "Pin" ],
"properties": {
"isAnalog": {
"$id": "#root/Pins/items/isAnalog",
@@ -282,7 +308,7 @@
"$id": "#root/Pins/items/Name",
"title": "Name",
"description": "Optional display name for the pin.",
- "examples": ["A1"],
+ "examples": [ "A1" ],
"type": "string"
},
"Pin": {
diff --git a/MobiFlight/Board.cs b/MobiFlight/Board.cs
index e538d5a8e..1da275b3d 100644
--- a/MobiFlight/Board.cs
+++ b/MobiFlight/Board.cs
@@ -12,10 +12,21 @@ namespace MobiFlight
public class AvrDudeSettings
{
///
- /// Baud rate to use with AvrDude.
+ /// Number of times AvrDude should retry connecting to the device.
///
+ public int Attempts;
+
+ ///
+ /// Baud rate to use with AvrDude. Deprecated. Use BaudRates instead.
+ ///
+ [Obsolete]
public String BaudRate;
+ ///
+ /// All supported baud rates to use with AvrDude.
+ ///
+ public List BaudRates;
+
///
/// AvrDude device type for the device.
///
@@ -91,6 +102,11 @@ public class Connection
/// Maximum size of a CmdMessenger message, in bytes.
///
public int MessageSize;
+
+ ///
+ /// Number of milliseconds to wait for the firmware update to complete before attempting to call GetInfo on the board.
+ ///
+ public int TimeoutForFirmwareUpdate = 15000;
}
///
@@ -212,6 +228,27 @@ public class Board
///
public List Pins;
+ ///
+ /// Migrates board definitions from older versions to newer versions.
+ ///
+ public void Migrate()
+ {
+ // Migrate AvrDudeSettings from older versions.
+ if (AvrDudeSettings != null)
+ {
+ // Older versions of boards only specified a single baud rate. Handle the case where
+ // an old file was loaded by migrating the BaudRate value into the BaudRates array.
+ if (!String.IsNullOrEmpty(AvrDudeSettings.BaudRate) && AvrDudeSettings.BaudRates == null)
+ {
+ AvrDudeSettings.BaudRates = new List()
+ {
+ AvrDudeSettings.BaudRate
+ };
+ }
+
+ }
+ }
+
public override string ToString()
{
return $"{Info.MobiFlightType} ({Info.FriendlyName})";
diff --git a/MobiFlight/BoardDefinitions.cs b/MobiFlight/BoardDefinitions.cs
index d750bc1f0..5571a0598 100644
--- a/MobiFlight/BoardDefinitions.cs
+++ b/MobiFlight/BoardDefinitions.cs
@@ -71,6 +71,7 @@ public static void Load()
try
{
var board = JsonConvert.DeserializeObject(File.ReadAllText(definitionFile));
+ board.Migrate();
boards.Add(board);
Log.Instance.log($"Loaded board definition for {board.Info.MobiFlightType} ({board.Info.FriendlyName})", LogSeverity.Info);
}
diff --git a/MobiFlight/MobiFlightFirmwareUpdater.cs b/MobiFlight/MobiFlightFirmwareUpdater.cs
index 8e7c40477..2b5780cfc 100644
--- a/MobiFlight/MobiFlightFirmwareUpdater.cs
+++ b/MobiFlight/MobiFlightFirmwareUpdater.cs
@@ -89,9 +89,6 @@ public static bool UpdateFirmware(MobiFlightModule module, String FirmwareName)
public static void RunAvrDude(String Port, Board board, String FirmwareName)
{
- String ArduinoChip = board.AvrDudeSettings.Device;
- String Bytes = board.AvrDudeSettings.BaudRate;
- String C = board.AvrDudeSettings.Programmer;
String message = "";
if (!IsValidFirmwareFilepath(FirmwarePath + "\\" + FirmwareName))
@@ -107,33 +104,36 @@ public static void RunAvrDude(String Port, Board board, String FirmwareName)
String FullAvrDudePath = $@"{ArduinoIdePath}\{AvrPath}";
- var proc1 = new ProcessStartInfo();
- string anyCommand =
- $@"-C""{FullAvrDudePath}\etc\avrdude.conf"" {verboseLevel} -p{ArduinoChip} -c{C} -P{Port} -b{Bytes} -D -Uflash:w:""{FirmwarePath}\{FirmwareName}"":i";
- proc1.UseShellExecute = true;
- proc1.WorkingDirectory = $@"""{FullAvrDudePath}""";
- proc1.FileName = $@"""{FullAvrDudePath}\bin\avrdude""";
- proc1.Arguments = anyCommand;
- proc1.WindowStyle = ProcessWindowStyle.Hidden;
- Log.Instance.log($"{proc1.FileName}.", LogSeverity.Debug);
- Log.Instance.log($"{anyCommand}.", LogSeverity.Debug);
- Process p = Process.Start(proc1);
- if (p.WaitForExit(board.AvrDudeSettings.Timeout))
+ foreach (var baudRate in board.AvrDudeSettings.BaudRates)
{
- Log.Instance.log($"Firmware upload exit code: {p.ExitCode}.", LogSeverity.Debug);
- // everything OK
- if (p.ExitCode == 0) return;
-
- // process terminated but with an error.
- message = $"ExitCode: {p.ExitCode} => Something went wrong when flashing with command \n {proc1.FileName} {anyCommand}.";
- } else
- {
- // we timed out;
- p.Kill();
- message = $"avrdude timed out! Something went wrong when flashing with command \n {proc1.FileName} {anyCommand}.";
+ var proc1 = new ProcessStartInfo();
+ string anyCommand =
+ $@"-C""{FullAvrDudePath}\etc\avrdude.conf"" {verboseLevel} -x attempts={board.AvrDudeSettings.Attempts} -p{board.AvrDudeSettings.Device} -c{board.AvrDudeSettings.Programmer} -P{Port} -b{baudRate} -D -Uflash:w:""{FirmwarePath}\{FirmwareName}"":i";
+ proc1.UseShellExecute = true;
+ proc1.WorkingDirectory = $@"""{FullAvrDudePath}""";
+ proc1.FileName = $@"""{FullAvrDudePath}\bin\avrdude""";
+ proc1.Arguments = anyCommand;
+ proc1.WindowStyle = ProcessWindowStyle.Hidden;
+ Log.Instance.log($"{proc1.FileName} {anyCommand}", LogSeverity.Debug);
+ Process p = Process.Start(proc1);
+ if (p.WaitForExit(board.AvrDudeSettings.Timeout))
+ {
+ Log.Instance.log($"Firmware upload exit code: {p.ExitCode}.", LogSeverity.Debug);
+ // everything OK
+ if (p.ExitCode == 0) return;
+
+ // process terminated but with an error.
+ message = $"ExitCode: {p.ExitCode} => Something went wrong when flashing with command \n {proc1.FileName} {anyCommand}.";
+ }
+ else
+ {
+ // we timed out;
+ p.Kill();
+ message = $"avrdude timed out! Something went wrong when flashing with command \n {proc1.FileName} {anyCommand}.";
+ }
+ Log.Instance.log(message, LogSeverity.Error);
}
- Log.Instance.log(message, LogSeverity.Error);
throw new Exception(message);
}
}
diff --git a/MobiFlightConnector.csproj b/MobiFlightConnector.csproj
index 99418094f..70f2c0947 100644
--- a/MobiFlightConnector.csproj
+++ b/MobiFlightConnector.csproj
@@ -867,6 +867,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
@@ -897,6 +900,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/UI/Forms/FirmwareUpdateProcess.cs b/UI/Forms/FirmwareUpdateProcess.cs
index e8f208d5b..d9ae050d8 100644
--- a/UI/Forms/FirmwareUpdateProcess.cs
+++ b/UI/Forms/FirmwareUpdateProcess.cs
@@ -121,7 +121,6 @@ async void UpdateOrResetModule(MobiFlightModule module, bool IsUpdate)
MobiFlightFirmwareUpdater.ArduinoIdePath = arduinoIdePath;
MobiFlightFirmwareUpdater.FirmwarePath = firmwarePath;
- int timeout = 15000;
var task = Task.Run(() => {
bool UpdateResult;
if (IsUpdate)
@@ -130,7 +129,7 @@ async void UpdateOrResetModule(MobiFlightModule module, bool IsUpdate)
UpdateResult = MobiFlightFirmwareUpdater.Reset(module);
return UpdateResult;
});
- if (await Task.WhenAny(task, Task.Delay(timeout)) == task)
+ if (await Task.WhenAny(task, Task.Delay(module.Board.Connection.TimeoutForFirmwareUpdate)) == task)
{
NumberOfModulesForFirmwareUpdate--;
diff --git a/firmware/mobiflight_nano_2_3_0.hex b/firmware/mobiflight_nano_2_3_0.hex
new file mode 100644
index 000000000..80401dd04
--- /dev/null
+++ b/firmware/mobiflight_nano_2_3_0.hex
@@ -0,0 +1,1528 @@
+:100000000C947D010C94A5010C94A5010C94A50100
+:100010000C94A5010C94A5010C94A5010C94A501C8
+:100020000C94A5010C94A5010C94A5010C94F1224B
+:100030000C94A5010C94A5010C94A5010C94A501A8
+:100040000C9422210C94A5010C9492210C946C2107
+:100050000C94A5010C94A5010C94A5010C94A50188
+:100060000C94D2210C94A5016E2F61004F4B004FD0
+:100070004B004F4B00427574746F6E20646F657354
+:10008000206E6F742066697420696E204D656D6FF7
+:100090007279004F757470757420646F6573206E8B
+:1000A0006F742066697420696E204D656D6F72797A
+:1000B00000375365676D656E7420646F6573206EDD
+:1000C0006F742066697420696E204D656D6F72795A
+:1000D0002100536572766F20646F6573206E6F74B4
+:1000E0002066697420696E204D656D6F72792100FC
+:1000F0004C434420646F6573206E6F74206669748E
+:1001000020696E204D656D6F72792100416E616CC2
+:100110006F67496E20646F6573206E6F7420666927
+:100120007420696E204D656D6F7279004F75747023
+:1001300075745368696674657220646F6573206EA8
+:100140006F742066697420696E204D656D6F7279D9
+:1001500000496E7075745368696674657220646FC7
+:100160006573206E6F742066697420696E204D651A
+:100170006D6F7279004661696C757265206F6E20D3
+:1001800072656164696E6720636F6E6669670045BA
+:100190006E636F6465727320646F6573206E6F7435
+:1001A0002066697420696E204D656D6F7279007EDE
+:1001B000306D79335B5F707F7B771F0D3D4F47005C
+:1001C000000000000000000000000000000000002F
+:1001D0000000000000000000000000800180257E7B
+:1001E000306D79335B5F707F7B0000000900000099
+:1001F000777F4E7E4F475F37307C000E00767E67FC
+:100200007E775B463E000000336D4E137800080099
+:100210007D1F0D3D4F477B373038000600151D67A9
+:1002200073055B0F1C000000276D4E007800004D29
+:10023000465374657070657220646F6573206E6FCD
+:10024000742066697420696E204D656D6F72790047
+:100250005374657070657220646F6573206E6F747F
+:100260002066697420696E204D656D6F727921007A
+:10027000446576696365427566666572204F76658A
+:1002800072666C6F7721004C6F6164696E672063E2
+:100290006F6E666967206661696C656400000000C6
+:1002A00000240027002A0000000000250028002B61
+:1002B00000000000002300260029000404040404B8
+:1002C0000404040202020202020303030303030103
+:1002D00002040810204080010204081020010204DA
+:1002E00008102000000008000201000003040700BD
+:1002F0000000000000000000AD2311241FBECFEF5E
+:10030000D8E0DEBFCDBF11E0A0E0B1E0E2E6FEE55F
+:1003100002C005900D92AA3FB107D9F727E0AAEFD6
+:10032000B1E001C01D92A43DB207E1F711E0CDE7B5
+:10033000D1E004C02197FE010E94132BCC37D107D6
+:10034000C9F70E9444240C942F2F0C940000AC0198
+:100350001092C3069091930780919207FA01BF0112
+:10036000641B750B2091C30630813093C306931331
+:1003700004C0921302C01092C3063081311104C030
+:10038000921721F0CB0108953817D1F33196E7CFBA
+:100390000F931F93CF93DF9380918707882309F4EE
+:1003A00046C0D0E0C0E0813029F482E08093870726
+:1003B000C7ECD6E080918807882341F1209721F48B
+:1003C000C0918C07D0918D078E01CE010E94A701AC
+:1003D000892B29F42196F80180818111F5CFF8014C
+:1003E0008081882309F1C8010E94A701F801E80F64
+:1003F000F91F8081882311F010823196F0938D07C8
+:10040000E0938C0710938B0700938A0780918A07EB
+:1004100090918B07892B59F081E080938807DF91B9
+:10042000CF911F910F91089510E000E0EBCF80E095
+:10043000F6CF0E94C801882351F081E0809388079D
+:100440008093890780918A0790918B070895109275
+:10045000890790E080E00895833081F028F48130AE
+:1004600099F08230A9F008958730A9F08830C9F05A
+:100470008430B1F4809180008F7D03C08091800032
+:100480008F7780938000089584B58F7784BD089519
+:1004900084B58F7DFBCF8091B0008F778093B000C3
+:1004A00008958091B0008F7DF9CFCF93DF93282FEF
+:1004B00030E0F901ED51FD4F8491F901E153FD4F19
+:1004C000D491F901E554FD4FC491CC23A1F08111E1
+:1004D0000E942C02EC2FF0E0EE0FFF1FEF54FD4FB7
+:1004E000A591B491EC91ED2381E090E009F480E0D6
+:1004F000DF91CF91089580E090E0FACF1F93CF93E2
+:10050000DF93282F30E0F901ED51FD4F8491F9017F
+:10051000E153FD4FD491F901E554FD4FC491CC2333
+:10052000A9F0162F81110E942C02EC2FF0E0EE0FA3
+:10053000FF1FE955FD4FA591B4918FB7F894EC9149
+:10054000111108C0D095DE23DC938FBFDF91CF91CE
+:100550001F910895DE2BF8CFCF93DF9390E0FC013D
+:10056000E153FD4F249185549D4FFC0184918823D4
+:10057000C9F090E0880F991FFC01E356FD4FA5914B
+:10058000B491FC01E955FD4FC591D49161110DC0A5
+:100590009FB7F8948C91209582238C93888128238F
+:1005A00028839FBFDF91CF910895623051F49FB7A8
+:1005B000F8943C91822F809583238C93E8812E2B95
+:1005C000EFCF8FB7F894EC912E2B2C938FBFEACFFF
+:1005D0001F93CF93DF93182FEB0161E00E94AC02D1
+:1005E000209739F460E0812FDF91CF911F910C9417
+:1005F0007E02CF3FD10511F461E0F5CFE12FF0E0AD
+:10060000ED51FD4FE491E33031F140F4E130B1F0D0
+:10061000E230E1F0C038D1057CF7E4CFE73029F1D2
+:10062000E83059F1E430B1F7809180008062809326
+:100630008000D0938B00C0938A0004C084B580688A
+:1006400084BDC7BDDF91CF911F91089584B58062AD
+:1006500084BDC8BDF7CF8091800080688093800002
+:10066000D0938900C0938800EDCF8091B00080685E
+:100670008093B000C093B300E5CF8091B00080625A
+:100680008093B000C093B400DDCF8E3008F08E5060
+:100690008770806480937C0080917A00806480936E
+:1006A0007A0080917A0086FDFCCF8091780090914D
+:1006B000790008953FB7F89480917A0490917B0473
+:1006C000A0917C04B0917D0426B5A89B05C02F3F66
+:1006D00019F00196A11DB11D3FBFBA2FA92F982F68
+:1006E0008827BC01CD01620F711D811D911D42E063
+:1006F000660F771F881F991F4A95D1F708952FB766
+:10070000F8946091760470917704809178049091C8
+:1007100079042FBF0895DC01ED91FC910190F081E7
+:10072000E02D0994AF92BF92CF92DF92EF92FF92A9
+:100730000F931F93CF93DF936C017B018B01040F09
+:10074000151FEB015E01AE18BF08C017D10759F0A5
+:100750006991D601ED91FC910190F081E02DC601E7
+:100760000995892B79F7C501DF91CF911F910F91E1
+:10077000FF90EF90DF90CF90BF90AF900895FC0175
+:10078000538D448D252F30E0842F90E0821B930BF6
+:10079000541710F0CF96089501970895FC01918D9C
+:1007A000828D981779F0A28DAE0FBF2FB11D5D9687
+:1007B0002C91828D8F5F60E60E94F32A928F822FA8
+:1007C00090E008958FEF9FEF0895FC01918D828D49
+:1007D000981731F0828DE80FF11D858D90E0089516
+:1007E0008FEF9FEF0895FC01918D228D892F90E06E
+:1007F000805A9F4F821B910960E670E00E94FF2A99
+:10080000089581E096E00E94F30321E0892B09F42A
+:1008100020E0822F089580E090E0892B29F00E944B
+:10082000010481110C9400000895FC01A48DA80F0F
+:10083000B92FB11DA358BF4F2C91848D90E0019624
+:100840008F739927848FA689B7892C93A089B18942
+:100850008C91837080648C93938D848D981306C0E3
+:100860000288F389E02D80818F7D80830895EF9247
+:10087000FF920F931F93CF93DF93EC0181E0888F5A
+:100880009B8D8C8D98131AC0E889F989808185FF2A
+:1008900015C09FB7F894EE89FF896083E889F989CC
+:1008A00080818370806480839FBF81E090E0DF91CE
+:1008B000CF911F910F91FF90EF900895F62E0B8D21
+:1008C00010E00F5F1F4F0F731127E02E8C8D8E11DC
+:1008D0000CC00FB607FCFACFE889F989808185FF43
+:1008E000F5CFCE010E941504F1CFEB8DEC0FFD2F5B
+:1008F000F11DE358FF4FF0829FB7F8940B8FEA8900
+:10090000FB8980818062CFCFCF93DF93EC01888D0C
+:100910008823B9F0AA89BB89E889F9898C9185FD7A
+:1009200003C0808186FD0DC00FB607FCF7CF8C9108
+:1009300085FFF2CF808185FFEDCFCE010E941504A7
+:10094000E9CFDF91CF910895089520910204260FF9
+:100950003327331F21323105ECF42091A404FC012C
+:1009600090E080E0243069F082E00895A0910204D4
+:100970002191AC0140525C4FA40FB52FB11D2C93B7
+:100980000196861798F380910204680F6093020421
+:1009900080E0089581E008951092A40481E080939E
+:1009A000A30410927E0461E082E10E947E0261E075
+:1009B00083E10E947E02E9EBF0E080818E7F8083FC
+:1009C00080818D7F808388E48093B80085E4809364
+:1009D000BC000895CF93DF9391E09093DF038823C9
+:1009E000B9F0C091B800D091BA008091BC008A7B68
+:1009F0008093BC0060E082E10E947E0260E083E1BF
+:100A00000E947E020E94CC04D093BA00C093B8002A
+:100A1000DF91CF9108958F929F92AF92BF92CF9224
+:100A2000DF92EF92FF920F931F93CF93DF93D091BA
+:100A3000CD04D13208F0D7C0182FC091CC040E9449
+:100A40005A036B017C018091A40481116BC082E088
+:100A50008093A4041093A3048FEF8093A2041092B8
+:100A6000A104D093A004ACEAB4E0E0E8F4E080E0B4
+:100A7000D81391C010927F0480917F04CC0FC82BB3
+:100A8000C0937F0480917E04813009F088C0109269
+:100A90007E040E945A036B017C0180917F04809345
+:100AA000BB008091A6049091A704A091A804B091E6
+:100AB000A904892B8A2B8B2BA1F00E945A03009149
+:100AC000A6041091A7042091A8043091A9046C19E0
+:100AD0007D098E099F09061717072807390708F4AB
+:100AE00042C08091BC0083FDD8CF85EC8093BC00D0
+:100AF0000E945A036B017C018091A404823009F4A6
+:100B000050C08091A2048F3F09F46FC08091A2046D
+:100B1000803209F46CC08091A204803309F469C06A
+:100B200084E026C08091A6049091A704A091A80417
+:100B3000B091A904892B8A2B8B2B09F484CF0E94B6
+:100B40005A038090A6049090A704A090A804B090A7
+:100B5000A9046C197D098E099F0986169706A806B7
+:100B6000B90608F070CF8091A5040E94EA0485E0E0
+:100B70001092AB041092CD041092AA04DF91CF9191
+:100B80001F910F91FF90EF90DF90CF90BF90AF90AB
+:100B90009F908F9008959D9191938F5F69CF85EE7F
+:100BA000A5CF8091A6049091A704A091A804B0912C
+:100BB000A904892B8A2B8B2B09F49ECF0E945A0300
+:100BC0000091A6041091A7042091A8043091A904D3
+:100BD0006C197D098E099F09061717072807390721
+:100BE00008F08ACFC0CF81E0C3CF80E0C1CF82E0E0
+:100BF000BFCF83E0BDCF81E00C940B05089508952D
+:100C00000895E091DE038091DD03E81730F4F0E011
+:100C1000E354FC4F808190E008958FEF9FEF08959B
+:100C20009091DE038091DD032FEF3FEF981748F49A
+:100C3000E92FF0E0E354FC4F208130E09F5F909378
+:100C4000DE03C90108958091DD039091DE03891BC5
+:100C5000990B0895CF92DF92EF92FF920F931F931B
+:100C6000CF93DF937C01CB018A012091AA04222338
+:100C700089F0EB016B01C40ED51ECC15DD0569F0C2
+:100C80006991D701ED91FC910190F081E02DC701B0
+:100C90000995F3CF642F0E94A504C801DF91CF917D
+:100CA0001F910F91FF90EF90DF90CF900895CF9319
+:100CB000DF931F92CDB7DEB769832091AA04222368
+:100CC000F9F02091CD04203258F021E030E0FC0111
+:100CD0003383228390E080E00F90DF91CF910895DD
+:100CE0008091AB04E82FF0E0E455FB4F99819083AD
+:100CF0008F5F8093AB048093CD0481E090E0ECCFD4
+:100D000061E0CE0101960E94A504F7CFCF93C82FD2
+:100D1000682F64608CEE95E00E9457066C2F70E09F
+:100D20006B7F8CEE95E0CF910C9457060F931F9339
+:100D3000CF93DF938C01C62FD42FFC01848191E0E7
+:100D40009093AA048093CC041092AB041092CD042B
+:100D5000862F807F842B9585892B0E948606F0E163
+:100D6000CF9FC0011124F8019585892B8D2B0E94FE
+:100D70008606DF91CF911F910F910C94FB05CF93C5
+:100D8000DF93CDB7DEB728970FB6F894DEBF0FBE5E
+:100D9000CDBF28E0EFE3F1E0DE01119601900D9266
+:100DA0002A95E1F7FC012385241710F44FEF420F39
+:100DB00050E0440F551F21E030E02C0F3D1F420F43
+:100DC000531FFA012081620F606840E028960FB639
+:100DD000F894DEBF0FBECDBFDF91CF910C94960685
+:100DE000CF93DF93EC0140E061E00E9496068BE335
+:100DF0009FE10197F1F78985882339F040E060E0B1
+:100E0000CE01DF91CF910C94BF06DF91CF91089571
+:100E100041E00E94960681E090E00895FC01248163
+:100E200031E03093AA042093CC041092AB041092CA
+:100E3000CD04607F8585862B0E9486060C94FB0579
+:100E4000AF92BF92CF92DF92EF92FF920F931F93D8
+:100E5000CF93DF936C01FC01848191E09093AA040D
+:100E60008093CC041092AB041092CD04EB01042FBC
+:100E700010E05B01A00EB11EF12CEE24E394CA1524
+:100E8000DB0541F18991F60195859160807F892B81
+:100E90000E948606FE0131972081F0E12F02900129
+:100EA0001124F60185858160822B0E948606F394C9
+:100EB000F7E0FF1520F780E00E940B05F601848122
+:100EC000E092AA048093CC041092AB041092CD045B
+:100ED000F12CD5CF0E94FB05C8010197DF91CF917E
+:100EE0001F910F91FF90EF90DF90CF90BF90AF9048
+:100EF000089590E080E00895CF93DF93FC01238173
+:100F0000222359F1EC0161E084810E94AC0261E08E
+:100F10008D810E94AC028B81843011F08830B1F455
+:100F200061E08E810E94AC0261E08F810E94AC0280
+:100F30008FA58F3F91F061E00E94AC026EA581E029
+:100F400068278FA5DF91CF910C947E02833011F03A
+:100F5000863071F761E08E81E9CFDF91CF910895FE
+:100F6000CF93DF93FC0123812223A9F0EC010190B0
+:100F7000F081E02D0480F581E02D60E009958FA5DA
+:100F80008F3F49F061E00E94AC026EA58FA5DF9112
+:100F9000CF910C947E02DF91CF910895DC01ED9109
+:100FA000FC9124813581477055276627772741506A
+:100FB000510961097109473051056105710560F4F6
+:100FC000FA01EB51F84F0C94132BEF07F107F307DD
+:100FD000F507F707F907FB0761E0F901099465E0F8
+:100FE000FCCF64E0FACF66E0F8CF62E0F6CF6AE0CB
+:100FF000F4CF68E0F2CF69E0F0CFCF93DF93EC015C
+:10100000CB01BA0126E030E040E050E00E94492ADE
+:10101000623071058105910589F16CF461157105E6
+:1010200081059105D1F06130710581059105F9F0D7
+:10103000DF91CF910895643071058105910561F1CB
+:1010400024F1653071058105910591F7E881F981F9
+:101050000480F581E02D66E006C0E881F981048016
+:10106000F581E02D64E0CE01DF91CF910994E88114
+:10107000F9810480F581E02D65E0F5CFE881F98103
+:101080000480F581E02D61E0EECFE881F9810480F4
+:10109000F581E02D63E0E7CFE881F9810480F581F7
+:1010A000E02D62E0E0CFDC01ED91FC910480F58160
+:1010B000E02D43705527662777274230510561059B
+:1010C000710571F0433051056105710559F04130EA
+:1010D00051056105710511F065E0099466E0FDCFE9
+:1010E0006AE0FBCF69E0F9CFCF93DF93EC01CB014E
+:1010F000BA0123E030E040E050E00E94492A61302C
+:1011000071058105910599F06230710581059105A0
+:10111000A9F0672B682B692BC1F4E881F981048061
+:10112000F581E02D64E0CE01DF91CF910994E88153
+:10113000F9810480F581E02D61E0F5CFE881F98146
+:101140000480F581E02D62E0EECFDF91CF9108952C
+:10115000DC01ED91FC910480F581E02D4370552771
+:1011600066277727423051056105710571F04330DC
+:1011700051056105710559F0413051056105710551
+:1011800011F062E0099463E0FDCF61E0FBCF60E025
+:10119000F9CFCF93DF93EC01E881F9810480F581E9
+:1011A000E02D8A8160E0811162E0CE010995E8813D
+:1011B000F9810480F581E02D8A8161E0811163E08D
+:1011C000CE0109958CA59DA58230910538F0880F38
+:1011D000991F880F991F05970197F1F7E881F98109
+:1011E0000480F581E02D8A8160E0811162E0CE010A
+:1011F000DF91CF910994CF93DF93EC0120E030E0B1
+:10120000A9016C897D898E899F890E942E2C1816D0
+:101210002CF4E8A9F9A9DF91CF910994EAA9FBA9D7
+:10122000FACFCF92DF92EF92FF920F931F93CF935B
+:10123000DF93DC011396CC91C43039F0C83059F1FA
+:10124000C33019F0C63049F1C2E08C010C5F1F4F6A
+:10125000F12CE12CC62ED12CD1E0F8016481C6011D
+:101260000E2C02C0959587950A94E2F780FD6D27B4
+:101270000F5F1F4F80810E947E02BFEFEB1AFB0AB7
+:10128000EC1658F3DF91CF911F910F91FF90EF90E3
+:10129000DF90CF900895C4E0D8CFC3E0D6CFDC0173
+:1012A0001396EC911397E93008F038C0F0E0E55A56
+:1012B000F64F0C94132B64096A09700976097C09AE
+:1012C0008E0982098E098809ED91FC910084F185CF
+:1012D000E02D0994ED91FC910284F385E02DF9CF86
+:1012E000ED91FC910484F585E02DF3CFED91FC9117
+:1012F0000684F785E02DEDCFED91FC910088F18912
+:10130000E02DE7CFED91FC910288F389E02DE1CF4C
+:10131000ED91FC910488F589E02DDBCF08954F9283
+:101320005F926F927F928F929F92AF92BF92CF9275
+:10133000DF92EF92FF920F931F93CF93DF93EC0115
+:10134000C888D988EA88FB888C859D85AE85BF854D
+:10135000C81AD90AEA0AFB0A6C897D898E899F8995
+:101360009B01AC010E9475294B015C016C8D7D8D48
+:101370008E8D9F8D9B01AC010E941A2B9B01AC01AD
+:10138000C501B4010E94862B0E94F82BC114D10420
+:10139000E104F10409F0B1C06230710581059105E5
+:1013A0000CF0CBC01CA21DA21EA21FA21C8A1D8A6B
+:1013B0001E8A1F8A1CAA1DAA1EAA1FAADF91CF91EE
+:1013C0001F910F91FF90EF90DF90CF90BF90AF9063
+:1013D0009F908F907F906F905F904F900895101620
+:1013E000110612061306B4F46C157D058E059F05D3
+:1013F0001CF42A812111A1C09B01AC0188279927E7
+:10140000DC01821B930BA40BB50B8CAB9DABAEAB7D
+:10141000BFAB93C0011511052105310509F48DC03D
+:101420006C157D058E059F050CF087C08A81882389
+:1014300009F483C030952095109501951F4F2F4FCB
+:101440003F4F0CAB1DAB2EAB3FAB77C00115110569
+:101450002105310509F471C08824992454018C18A0
+:101460009D08AE08BF08681579058A059B050CF034
+:1014700064C08A81811161C0DDCFCCACDDACEEAC43
+:10148000FFACA7019601C701B6010E941A2B2B01E0
+:101490003C01C501B4010E94162920E030E040E87B
+:1014A00050E40E94752920E030E040E85FE30E94AC
+:1014B0001A2B9B01AC01C301B2010E94862B9B0138
+:1014C000AC01C701B6010E94192B3B016C01FE0162
+:1014D000E05CFF4FE080F180028113819701A80159
+:1014E0000E942E2C181614F473018601C701D8012E
+:1014F0008CAF9DAFAEAFBFAF3AC00CA91DA92EA94E
+:101500003FA91C141D041E041F040CF468CF101600
+:101510001106120613060CF099CF00271127980127
+:101520000C191D092E093F096017710782079307DF
+:101530000CF062CF2A8121115FCF8CA89DA8AEA8A4
+:10154000BFA881149104A104B10409F096CF88AD1D
+:1015500099ADAAADBBAD8CAF9DAFAEAFBFAF81E0D3
+:101560001C141D041E041F040CF080E08A833FEF4E
+:10157000831A930AA30AB30A8CAA9DAAAEAABFAA89
+:10158000CCACDDACEEACFFACC701B6010E94FF2BCA
+:101590006CA37DA38EA39FA3A701960160E074E2D4
+:1015A00084E799E40E94862B6C8B7D8B8E8B9F8BBE
+:1015B0002A81211103CF90586C8B7D8B8E8B9F8B52
+:1015C000FDCE8F929F92AF92BF92EF92FF920F93B8
+:1015D0001F93CF937C018B01C42F0E947F03F801DE
+:1015E00080809180A280B380DC01CB0188199909A9
+:1015F000AA09BB094C2F50E070E060E08417950702
+:10160000A607B70748F0F70109950E947F03F80184
+:101610006083718382839383CF911F910F91FF9099
+:10162000EF90BF90AF909F908F9008952091950379
+:1016300030919603280F311D81E02D32314008F0A2
+:1016400080E00895FC0184818823E1F0818181118B
+:1016500019C081E0818382819381FC014089518995
+:1016600062897389403659476E4F7F4F59F040E683
+:1016700059E76EEF7FEFFC01408B518B628B738BD0
+:101680000C948F0908954F925F926F927F928F9280
+:101690009F92AF92BF92DF92EF92FF920F931F93B0
+:1016A000CF93DF93D12C08E810E0B8E5EB2EB2E041
+:1016B000FB2EC4EB4C2E512C612C712C80916802B6
+:1016C000D81608F096C0ED2DF0E0EE0FFF1FEC5994
+:1016D000FD4FC081D18189899A89AB89BC894D85AB
+:1016E0005E856F85788984179507A607B70709F483
+:1016F0007AC0481759076A077B070CF076C0019734
+:10170000A109B109898B9A8BAB8BBC8BA989BA894A
+:10171000A03282E0B807ACF52B854801821A910807
+:1017200027FD9394880C991C880C991C092C000C9B
+:10173000AA08BB082C85C701821B910927FD939538
+:101740009C01220F331F220F331F032E000C440B6A
+:10175000550B281939094A095B09A53BB10514F055
+:10176000A4EBB0E0B7FF02C0B0E0A0E00E94732A93
+:10177000A30192010E94492A820E931EA41EB51E47
+:10178000D401EA85EC3078F52B85C801821B9109DC
+:1017900027FD93959C01220F331F220F331FA217A1
+:1017A000B3077CF02C85C701821B910927FD939517
+:1017B0009C01220F331F220F331FA217B3070CF413
+:1017C0009D0122503109220F331F4FB7F8948E2FFD
+:1017D00090E0FC01EE0FFF1FE80FF91FE956FC4FE8
+:1017E000328321834FBFD39469CF0196A11DB11DD0
+:1017F00089CFDF91CF911F910F91FF90EF90DF90F4
+:10180000BF90AF909F908F907F906F905F904F9020
+:101810000895EF92FF921F93CF93DF93EC01162F61
+:101820008C8180FF10C0603170F46D837E0184E094
+:10183000E80EF11C612F617089910E947E0216955D
+:10184000EC16FD06B9F7DF91CF911F91FF90EF9055
+:101850000895DC01842FE0915702F09158023097EF
+:1018600019F04D915C91099408954F925F926F9297
+:101870007F928F929F92AF92BF92CF92DF92FF9210
+:101880000F931F93CF93DF93F12C80915102F816A1
+:1018900008F0EEC0EF2DF0E0EE0FFF1FE15CFD4F12
+:1018A000C081D1818A81882309F4B3C088810E94D4
+:1018B00055028C0189810E9455026C010E947F03B0
+:1018C0004B015C0181E090E0CD2811F090E080E0D8
+:1018D000880F991F21E0012B09F020E0922F982B0F
+:1018E0004B8D5C8D6D8D7E8D95018401041B150BD8
+:1018F000260B370BB901A801453651056105710565
+:1019000008F489C08885823008F485C08B8E9C8E4F
+:10191000AD8EBE8E81508887EE859E1709F445C036
+:10192000888503E310E0873010F401E010E06D8556
+:1019300024E0E202F0011124492F092E000C550B7E
+:10194000E42BF52BE058FE4F708170039001719FDE
+:10195000300D1124062E02C0220F331F0A94E2F725
+:10196000EF85F8892E0F3F1F388B2F874C0F5D1F97
+:10197000FA0141854423C1F04B885C886D887E88DC
+:101980004F8A588E698E7A8E8B8A9C8AAD8ABE8ADF
+:1019900002C0359527956A95E2F73A8B298B8C30F2
+:1019A00008F08BE08F5F88879E8709891A898D816F
+:1019B0009E810817190769F19801281B390BC90185
+:1019C000E0913D02F0913E026901CC0CDD1C3097A4
+:1019D00009F44BC04B815C812F5C3F4F23363105AE
+:1019E000E0F597FD30C0688180E00995C00ED11EFA
+:1019F00031E4C3163FE1D30654F08F859889837094
+:101A00009927988B8F871A8A198A10E000E01E8325
+:101A10000D83F3943ACF4F89588D698D7A8D950156
+:101A20008401041B150B260B370BB901A801453F98
+:101A300051406105710508F46FCF8B8E9C8EAD8E81
+:101A4000BE8E188669CF698182E00995C8018C191C
+:101A50009D09803C904E8CF2DACF97FD03C06881DF
+:101A600081E0C3CF698183E0F0CF37FDEFCFBECFF8
+:101A7000DF91CF911F910F91FF90DF90CF90BF909A
+:101A8000AF909F908F907F906F905F904F90089550
+:101A9000CF92DF92EF92FF920F931F93CF93DF933A
+:101AA0006C017A0180913B0290913C02892B31F1CB
+:101AB000D60113968C9100E181FD08E0EB01CE2563
+:101AC000DF2510E0C0FF13C080913B0290913C02E3
+:101AD000892B69F0E0913902F0913A02309739F0A0
+:101AE000D6014D915C91612F8E2D81700995D6950F
+:101AF000C795F694E7941F5F0113E4CFDF91CF9170
+:101B00001F910F91FF90EF90DF90CF900895AF92CB
+:101B1000BF92CF92DF92EF92FF920F931F93CF93DA
+:101B2000DF931F92CDB7DEB7C0903B02D0903C024E
+:101B3000C114D10409F43FC0FC01238130E1B32E6C
+:101B400021FF02C028E0B22EA62E8C01F60185816D
+:101B50008683F12CE12CBA946B2DC6010E94090CEE
+:101B6000F80182810E9455028983F80182810E94D6
+:101B700055028983EE0CFF1C298181E090E0211140
+:101B800002C090E080E0E82AF92AB110E4CFF60123
+:101B90006681C6010E94090CF801648175816E1589
+:101BA0007F0549F0AA2021F0A701C8010E94480D35
+:101BB000F801F582E4820F90DF91CF911F910F9190
+:101BC000FF90EF90DF90CF90BF90AF900895CF93AC
+:101BD000C0E080913802C81768F4EC2FF0E0EE0FF7
+:101BE000FF1FEE5CFD4F61E0808191810E94870DB7
+:101BF000CF5FEFCFCF910895DC01E0913002F091FB
+:101C00003102309761F013968C911397882339F045
+:101C10004D915C91119712966C9181E00994089511
+:101C2000DC01E0913002F0913102309759F01396C7
+:101C30008C911397811106C04D915C91119712966A
+:101C40006C91099408951F93CF93DF9310E08091D6
+:101C50002F021817F0F4E12FF0E0EE0FFF1FE55F01
+:101C6000FD4FC081D1818A810E9455029B818917D5
+:101C700051F091E0811101C090E09B83811105C07A
+:101C8000CE010E94100E1F5FE2CFCE010E94FC0D1C
+:101C9000FACFDF91CF911F910895CF93DF93EC019D
+:101CA000E88DF0E03396EE0FFF1FEC0FFD1F8E89DD
+:101CB0009F8920813181821B930B9F8B8E8B8A8120
+:101CC0000E944503E88DF0E03396EE0FFF1FEC0F06
+:101CD000FD1F91838083E88DF0E03396EE0FFF1FA8
+:101CE000EC0FFD1F8E899F8920813181820F931F08
+:101CF0009F8B8E8B888D8F5F888F888D8770888F64
+:101D0000DF91CF910895CF93C0E080910A02C81768
+:101D100060F4EC2FF0E0EE0FFF1FE250FE4F8081E9
+:101D200091810E944D0ECF5FF0CFCF910895CF9358
+:101D3000C0E080910A02C817B8F5EC2FF0E0EE0F72
+:101D4000FF1FE250FE4FA081B18156968D919C916C
+:101D5000579723E0969587952A95E1F713962D914D
+:101D60003C911497AC01421B530B9A0157FF03C0DF
+:101D700031952195310915964C9115974217130607
+:101D800009F084F414969C938E931397E091FC01D0
+:101D9000F091FD01309731F04D915C9111971296C1
+:101DA0006C910995CF5FC5CFCF9108950E947F03B5
+:101DB00060934E0470934F048093500490935104A9
+:101DC00008950F931F93CF93DF93082F162FD42FCF
+:101DD000C8E06D2F661F6627661F802F0E947E0257
+:101DE000DD0F61E0812F0E947E0260E0812F0E9462
+:101DF0007E02C15071F7DF91CF911F910F9108952D
+:101E0000EF92FF920F931F93CF93DF9300D0CDB744
+:101E1000DEB78C0149832A83660F771FF801E688B5
+:101E2000F788EE0CFF1CCF01801B910B8E159F05D0
+:101E300014F41192F8CF8981F801E60FF71F81831E
+:101E40008A81808360E0F80184890E947E021E14EA
+:101E50001F046CF4F1E0EF1AF108F801EE0DFF1D1C
+:101E60004081F801628980890E94E10EF0CF61E033
+:101E7000F80184890F900F90DF91CF911F910F91FE
+:101E8000FF90EF900C947E0277FD0DC0FC01268937
+:101E90003789621773073CF420E0411101C021E04B
+:101EA0004CE00C94000F0895FF920F931F93CF9373
+:101EB000DF93F82EC0E080916102C817B8F4EC2FD0
+:101EC000F0E0EE0FFF1FEE59FD4F00811181D0E0D1
+:101ED000F801808D8D1741F06D2F70E04F2DC801F6
+:101EE0000E94440FDF5FF4CFCF5FE5CFDF91CF914A
+:101EF0001F910F91FF9008950F931F93CF93DF933E
+:101F0000FC01208D2223F9F06217E8F4062F10E07F
+:101F10004423B1F0EC0186899789081719073CF42E
+:101F20002FEF240F4AE0B801CF010E94000F40E0DC
+:101F3000B801CE01DF91CF911F910F910C94440F06
+:101F400041E0B801F7CFDF91CF911F910F91089534
+:101F5000FF920F931F93CF93DF93EC0160E0888192
+:101F60000E947E02FB800F2D10E00C5F1F4F0C0FB4
+:101F70001D1FFF2049F0F80142918F0169818A817C
+:101F80000E94E10EFA94F5CF61E08881DF91CF9154
+:101F90001F910F91FF900C947E029F92AF92BF927F
+:101FA000CF92DF92EF92FF920F931F93CF93DF9325
+:101FB000EC01C62E61E08B810E947E0261E08A8185
+:101FC0000E947E0210E08D81181708F03FC0DB8070
+:101FD000BC8087E0E82EF12C00E061E08D2D0E94AE
+:101FE0007E028B2D0E9455020E2C01C0880F0A9490
+:101FF000EAF7082B60E08D2D0E947E0281E0E81A4E
+:10200000F10858F75E01A10EB11CF501D780D0167A
+:10201000D9F0CC20B9F0912E990C990C990CE02EA6
+:10202000F12C8D2D8E2580FF07C04E2D4170692D1E
+:102030006F0DCE010E94290CD694E694F394F8E03B
+:10204000FF12EFCFF50107831F5FBDCF60E08A81EC
+:10205000DF91CF911F910F91FF90EF90DF90CF9084
+:10206000BF90AF909F900C947E02CF93C0E0809180
+:102070005602C81768F4EC2FF0E0EE0FFF1FEE5A7F
+:10208000FD4F61E0808191810E94CD0FCF5FEFCF46
+:10209000CF9108957F928F929F92AF92BF92CF92ED
+:1020A000DF92EF92FF920F931F93CF93DF93C0E0E5
+:1020B00080912F02C81760F4EC2FF0E0EE0FFF1FA5
+:1020C000E55FFD4F808191810E94FC0DCF5FF0CFD5
+:1020D000C0E080912F02C81760F4EC2FF0E0EE0F03
+:1020E000FF1FE55FFD4F808191810E94100ECF5F41
+:1020F000F0CF10E080915602181708F057C0E12F7A
+:10210000F0E0EE0FFF1FEE5AFD4FC081D18160E07D
+:10211000CE010E94CD0F6E0187E0C80ED11C460192
+:10212000712CF12CE12C8D818E151F04D9F0D4F087
+:10213000F40181914F0100E0A82EB12C80FF06C070
+:1021400041E0672D600FCE010E94290CB594A79441
+:102150008A2D0F5F083081F7FFEFEF1AFF0A88E042
+:10216000780EE1CFF12C912C812C8D8188151904EA
+:10217000D9F0D4F0F60181916F0100E0A82EB12CC6
+:1021800080FD06C040E06F2D600FCE010E94290C3B
+:10219000B594A7948A2D0F5F083081F7FFEF8F1A4F
+:1021A0009F0A88E0F80EE1CF1F5FA4CF0E94D60EF1
+:1021B00010E0809138021817E0F4E12FF0E0EE0F04
+:1021C000FF1FEE5CFD4FC081D18160E0CE010E9417
+:1021D000870D4C815D8170E060E0CE010E94480D6A
+:1021E0004C815D816FEF7FEFCE010E94480D1F5F34
+:1021F000E0CFC0E080910A02C81718F5EC2FF0E09C
+:10220000EE0FFF1FE250FE4FA081B18156968D91D7
+:102210009C91579723E0969587952A95E1F7149618
+:102220009C938E931397E091FC01F091FD01309700
+:1022300031F04D915C91119712966C910995CF5F99
+:10224000D9CFDF91CF911F910F91FF90EF90DF9049
+:10225000CF90BF90AF909F908F907F9008950E94F5
+:10226000C801882359F081E080938807809389070B
+:1022700080918A0790918B070C948128109289078E
+:1022800090E080E008951F93CF93DF930E942F1179
+:10229000EC010E942F11182F0E942F11CC0FDD1F6F
+:1022A000CE59DD4F482F612F888199810E947C0F84
+:1022B000DF91CF911F910C94D60E0C9443117F9215
+:1022C0008F929F92AF92BF92CF92DF92EF92FF9246
+:1022D0000F931F93CF93DF930E942F11EC010E9465
+:1022E0002F118C010E9419024C010E942F115C01D8
+:1022F0000E942F11CC0FDD1FCE59DD4FE880F980F1
+:10230000F701208D222381F1C7E0D0E0712C6C0110
+:10231000DD241127BB244C2F4F5F96010C2E02C0E9
+:10232000359527950A94E2F720FF1CC0F70126890E
+:10233000378902171307ACF4F401E70DF11DE081B2
+:10234000F0E0E155FE4F2491B5010C2E02C07595C9
+:1023500067950A94E2F760FD2068B801C7010E9402
+:10236000000F73942197B8F6DF91CF911F910F91D1
+:10237000FF90EF90DF90CF90BF90AF909F908F90A5
+:102380007F900C94D60ECF930E942F11C82F0E94DD
+:102390002F11BC018C2F0E94E802CF910C94D60E15
+:1023A0000E942F11209158042817190661F05CF043
+:1023B000880F991FFC01EC5AFB4F808191810E948C
+:1023C000220B0C94D60E08950E942F1120915804D0
+:1023D0002817190611F10CF1880F991FFC01EC5A0E
+:1023E000FB4F0190F081E02D0280F381E02D1486F7
+:1023F000158616861786108A118A128A138A14AADD
+:1024000015AA16AA17AA14A215A216A217A2148A10
+:10241000158A168A178A0C94D60E08958F929F9269
+:10242000AF92BF92CF92DF92EF92FF921F93CF9322
+:10243000DF930E942F11EC010E942F11BC018091AB
+:1024400068028C171D0609F00CF4B0C0CC0FDD1F1C
+:10245000CC59DD4F0990D881C02DCD80DE800D2C68
+:10246000000CEE08FF0889809A80092C000CAA084D
+:10247000BB082F813885032E000C440B550B2C19FB
+:102480003D094E095F09072E000C880B990B68194E
+:1024900079098A099B090E94E32A2B813C81032E3A
+:1024A000000C440B550B281939094A095B090E9495
+:1024B000492ABA01A9014C0D5D1D6E1D7F1D052E17
+:1024C000000C660B770B8D859E85AF85B8898417C8
+:1024D0009507A607B70709F45CC04D875E876F872D
+:1024E000788B8985811155C08A858C3008F04FC062
+:1024F000188161E0812F0E94AC028A85282F30E08C
+:10250000F901EE0FFF1FE20FF31FE956FC4F1F7397
+:102510009081907C912B90831B861C862CE0622FEF
+:102520000E94F32A829FB001112430E020E0AB0129
+:10253000420F531FFA01EE0FFF1FE40FF51FE9567C
+:10254000FC4F908196FD16C02F5F3F4F2C30310518
+:1025500071F781110FC01092800082E0809381009A
+:102560001092850010928400B19A80916F00826071
+:1025700080936F00EA858E2F90E0FC01EE0FFF1F25
+:10258000E80FF91FE956FC4F80818064808381E069
+:102590008987DF91CF911F91FF90EF90DF90CF90CF
+:1025A000BF90AF909F908F900C94D60EDF91CF91FB
+:1025B0001F91FF90EF90DF90CF90BF90AF909F90D2
+:1025C0008F900895EF92FF920F931F93CF93DF9315
+:1025D0000E942F118C010E9419027C01EC01FC0168
+:1025E000DE018081882349F090919307891301C00F
+:1025F0003196808189933196F3CFAE17BF0710F4DF
+:102600001D92FBCF000F111FF801E75AFD4F00810B
+:102610001181F80186858823B1F0C0E0F801818935
+:102620008C1789F04C2F60E0C8010E94BF06F801AA
+:102630004089B701C49F600D711D1124C8010E941B
+:102640002007CF5FEBCFDF91CF911F910F91FF90CC
+:10265000EF900C94D60E2091FF0530910006821762
+:10266000930710F40C94332A80E008950F931F937E
+:10267000CF93DF938C01EB01F801808191819C0164
+:102680002F5F3F4F318320830E942B132881398194
+:10269000A9014F5F5F4F5983488322533B4FF90194
+:1026A0008083288139812C3D310560F48A3321F7FC
+:1026B00023533B4FF901108281E0DF91CF911F91AD
+:1026C0000F91089580E0F9CFEF92FF920F931F933F
+:1026D000CF93DF93EC01E090FF05F0900006888136
+:1026E00099818C010F5F1F4F198308830E942B1360
+:1026F000E016F10650F08A3391F781E0DF91CF9137
+:102700001F910F91FF90EF90089580E0F7CFAF9267
+:10271000BF92CF92DF92EF92FF920F931F93CF93CE
+:10272000DF9300D000D0CDB7DEB75C0119821A82EA
+:102730001B821C82CE0101967C0110E000E06C013E
+:10274000F501808191819C012F5F3F4F3183208370
+:102750000E942B13F7018083F8018E3241F00F5F46
+:102760001F4F8FEFE81AF80A0430110549F7EC0DF6
+:10277000FD1D1082C6010E9481280F900F900F90BE
+:102780000F90DF91CF911F910F91FF90EF90DF900D
+:10279000CF90BF90AF900895DF92EF92FF920F938A
+:1027A0001F93CF93DF938C019C01240F351F8091E1
+:1027B000FF059091000682179307E0F0EB017B0183
+:1027C000E40EF51ED990C8010E94332AD81621F0D4
+:1027D0006D2DC8010E943B2A0F5F1F4FEC16FD06AE
+:1027E00089F781E0DF91CF911F910F91FF90EF90DA
+:1027F000DF90089580E0F6CFFB0101900020E9F71B
+:102800003197AF01461B570BDC01ED91FC91028023
+:10281000F381E02D09948091BE068823A1F0609198
+:10282000910780918F07909190070E948B03809170
+:10283000C606882341F06EEC71E080918F0790917D
+:1028400090070E94FC131092C5061092BE0680E00D
+:1028500008958F929F92AF92BF92EF92FF920F9343
+:102860001F93CF93DF93CDB7DEB7A1970FB6F89440
+:10287000DEBF0FBECDBF7C01FA01CB0119A2223011
+:1028800008F42AE08E010F5D1F4F822E912CB12C8F
+:10289000A12CBF01A50194010E94B22AF901CA012D
+:1028A0006A300CF5605DD8016E938D01232B242BCB
+:1028B000252B79F790E080E0109721F0BD01C7014A
+:1028C0000E94FC13A1960FB6F894DEBF0FBECDBFD9
+:1028D000DF91CF911F910F91FF90EF90BF90AF903C
+:1028E0009F908F900895695CDECFCF939091BE0644
+:1028F0009923A9F0C82F6091920780918F0790913A
+:1029000090070E948B034C2F50E070E060E02AE0BB
+:1029100080918F0790919007CF910C942914CF91BB
+:1029200008959091BE06911110C091E09093BE065B
+:102930009093C506482F50E070E060E02AE0809157
+:102940008F07909190070C9429140895EF92FF92AD
+:102950000F931F93CF93DF939091BE0691112BC0DD
+:102960008B010E9491148091BE068823E1F0609152
+:10297000920780918F07909190070E948B03E090BF
+:102980008F07F0909007E801FE016491662359F0EB
+:10299000D701ED91FC910190F081E02DC7010995DF
+:1029A0002196892B89F7DF91CF911F910F91FF908D
+:1029B000EF900C940B1480E0DF91CF911F910F9159
+:1029C000FF90EF9008950E947F0360934E047093F0
+:1029D0004F04809350049093510468E670E085E0C2
+:1029E0000C94A6141F93CF93DF9310922F02109292
+:1029F000510210924D0480916102882329F0E091E8
+:102A00006202F0916302108E1092610230916802AE
+:102A1000C4E6D2E020E03217D1F0A991B99119961D
+:102A20008C911997882389F01A96EC911A978E2F1A
+:102A300090E0FC01EE0FFF1FE80FF91FE956FC4F75
+:102A400080818F7B808319961C922F5FE4CF109238
+:102A5000680280915804882361F0E0915404F09159
+:102A600055041082823028F0E0915604F09157040A
+:102A70001082109258049091FA01E9E5F2E080E0AA
+:102A8000981759F0A191B1911E962C911E9722236F
+:102A900011F01E961C928F5FF3CF1092FA011092E4
+:102AA0000A029091FB01EDE5F2E080E0981759F001
+:102AB000A191B19118962C911897222311F0189694
+:102AC0001C928F5FF3CF1092FB01809156028823F6
+:102AD00061F0E0915202F09153021682823028F0A8
+:102AE000E0915402F091550216821092560210E0C5
+:102AF000E09138021E1798F4F0E0EE0FFF1FEE5C35
+:102B0000FD4FC081D1818B8180FF07C062E08A8147
+:102B10000E94AC028B818E7F8B831F5FE9CF109266
+:102B20003802109228041092270410925304109235
+:102B30009603109295036CE670E085E0DF91CF91EB
+:102B40001F910C94A6146FE670E08FE00C94A6140D
+:102B50002091950330919603820F932F911D9093AE
+:102B60009603809395038C32914040F060E772E0C9
+:102B700085E00E94A61490E080E00895C90187597D
+:102B80009D4F0895CF92DF92EF92FF920F931F9384
+:102B9000CF93DF9390915102993009F45EC079018F
+:102BA000142FC62ED82E8FE10E94160B81110DC056
+:102BB0006FE871E085E0DF91CF911F910F91FF9059
+:102BC000EF90DF90CF900C94A6148FE10E94A8158F
+:102BD000EC01892B09F01A8200915102E02FF0E0FC
+:102BE000EE0FFF1FE15CFD4FD183C0831E821D826B
+:102BF000FC82EB82D882C98285E0819FF00111249A
+:102C0000E959FE4FDE01199601900D928A95E1F780
+:102C100062E08D2D0E94AC0262E089810E94AC02CC
+:102C20001E86188A1F861A8A198A18861F8A188E85
+:102C3000198E1A8E84EF91E0A0E0B0E08B8B9C8B14
+:102C4000AD8BBE8B81E08A838FE397E190933E0248
+:102C500080933D020F5F00935102DF91CF911F914E
+:102C60000F91FF90EF90DF90CF90089581E08093D7
+:102C7000530462E770E081E10C94A614CF93DF93D4
+:102C80000E94D60E8AE00E949114809127049091B0
+:102C90002804892B91F18BE390E00E942B13C82F1D
+:102CA0008091BE06882379F06091920780918F070A
+:102CB000909190070E948B036C2F80918F079091C9
+:102CC00090070E948B03C1E0D0E08091270490918F
+:102CD0002804C817D90788F4CE01CB960E942B137D
+:102CE0009091BE06992339F0682F80918F079091BB
+:102CF00090070E948B032196E8CFDF91CF910C942F
+:102D00000B14CF93DF930E94D60E0E941902BC01D0
+:102D1000EC0109900020E9F72197C81BD90BDD27AA
+:102D200080912704909128049C012F5F3F4F2C0F26
+:102D30003D1F2E31314088F5AE014F5F5F4FCB967E
+:102D40000E94CC134091270450912804C40FD51F32
+:102D5000D0932804C09327048091BE0681113FC000
+:102D600085E00E9491148091BE06882391F06091C5
+:102D7000920780918F07909190070E948B03AE017C
+:102D800070E060E02AE080918F07909190070E94A8
+:102D90002914DF91CF910C940B148091BE06811100
+:102DA0001EC085E00E9491148091BE06882389F39D
+:102DB0006091920780918F07909190070E948B03FA
+:102DC000C0918F07D09190076DE2CE010E948B03D6
+:102DD0002AE041E050E060E070E0CE01D8CFDF9122
+:102DE000CF910895CF93DF932091BE062223A1F0C7
+:102DF000EC016091920780918F07909190070E945B
+:102E00008B03209749F0BE0180918F079091900726
+:102E1000DF91CF910C94FC13DF91CF9108950E9424
+:102E2000D60E8AE00E94911487E591E00E94F21686
+:102E30008BE091E00E94F21680E091E00E94F21691
+:102E400081ED91E00E94F2160C940B140F931F93E6
+:102E5000CF93DF93C82FD62F8A018DE10E94911462
+:102E6000C8010E94F2168D2F0E9475148C2F0E94AB
+:102E70007514DF91CF911F910F910C940B140F9348
+:102E80001F93CF93C82F8A0186E00E949114C80136
+:102E90000E94F2168C2F0E947514CF911F910F91F2
+:102EA0000C940B140F931F93CF93DF93C82FD62F3F
+:102EB0008A018EE10E949114C8010E94F2168D2FA2
+:102EC0000E9475148C2F0E947514DF91CF911F9171
+:102ED0000F910C940B140F931F93CF93C82F8A015B
+:102EE00087E00E949114C8010E94F2168C2F0E9464
+:102EF0007514CF911F910F910C940B14CF92DF9208
+:102F0000EF92FF92CF93DF936C01EA018CE10E9474
+:102F10009114CE010E94F2168091BE06882321F101
+:102F20006091920780918F07909190070E948B0388
+:102F3000C0918F07D09190070D2C000CEE08FF0870
+:102F40002AE0B701A601F7FE0CC06DE2CE010E9497
+:102F50008B0344275527BA014C195D096E097F0977
+:102F60002AE0CE010E942914DF91CF91FF90EF90CB
+:102F7000DF90CF900C940B14CF93DF9300D0CDB79C
+:102F8000DEB70E941902FC0190E3ABE0B1E00190D2
+:102F90000D929A95E1F783E290E09A83898341E06C
+:102FA00050E0BE016F5F7F4F90E080E00E94CC1345
+:102FB0004FE250E06BE071E081E090E00E94CC13C2
+:102FC0008091BE06811109C085E00E9491148BE0BA
+:102FD00091E00E94F2160E940B140F900F90DF9167
+:102FE000CF910895FB0101900020E9F73197AF01DF
+:102FF000461B570BDC01ED91FC910284F385E02D1B
+:103000000994CF92DF92EF92FF920F931F93CF9389
+:10301000DF938C01EB01FC01D0886D2D70E0FE0187
+:1030200001900020E9F7CF0101978C1B9D0B8617BB
+:103030009707B0F4681B790B76956795D82EC80171
+:103040000E94BF06CC2EEC2EFD2E8E2D8C198D15D8
+:1030500048F4F70161917F01C8010E940807F5CF8C
+:1030600060E0EDCFDF91CF911F910F91FF90EF9036
+:10307000DF90CF90089585ED8093BC008091A604E9
+:103080009091A704A091A804B091A9040796A11D4E
+:10309000B11D23E0B695A795979587952A95D1F709
+:1030A0002091BC0024FD03C01092A4040895409117
+:1030B000A6045091A7046091A8047091A904452B1F
+:1030C000462B472B69F30097A105B10541F025E395
+:1030D0002A95F1F700000197A109B109E1CF80918C
+:1030E000A5040C94EA044F925F926F927F928F92A4
+:1030F0009F92AF92BF92CF92DF92EF92FF92CF93C7
+:10310000DF93EC016A017B0120E030E0A901CB01F3
+:10311000B6010E940F2987FF04C0F7FAF094F7F870
+:10312000F0948C8C9D8CAE8CBF8CA7019601C50150
+:10313000B4010E940F29882309F449C06CA97DA914
+:103140008EA99FA90E9416292B013C01A701960177
+:10315000C501B4010E94862B9B01AC01C301B201E1
+:103160000E9475290E94F82B6CAB7DAB8EAB9FAB98
+:10317000A701960160E070E080E090E40E94862B59
+:103180000E94392C26E53EE04DE25FE30E9475295E
+:1031900020E034E244E759E40E94752968AF79AF32
+:1031A0008AAF9BAFCC8EDD8EEE8EFF8ECE01DF918F
+:1031B000CF91FF90EF90DF90CF90BF90AF909F9016
+:1031C0008F907F906F905F904F900C948F09DF915C
+:1031D000CF91FF90EF90DF90CF90BF90AF909F90F6
+:1031E0008F907F906F905F904F9008958F929F92F5
+:1031F000AF92BF92CF92DF92EF92FF920F931F9305
+:10320000CF93DF9390915804923009F49DC0C22E61
+:10321000D42EA62EB82E8AE00E94160B811111C062
+:1032200060E572E085E0DF91CF911F910F91FF90F3
+:10323000EF90DF90CF90BF90AF909F908F900C94C5
+:10324000A6148AE00E94A8157C01009711F0FC01E9
+:103250001082E0915804F0E0EE0FFF1FEC5AFB4F94
+:10326000F182E08284E40E94160B81117AC06FE241
+:1032700072E085E00E94A614F0905804EF2DF0E073
+:10328000EE0FFF1FEC5AFB4FC080D180F601C281C8
+:10329000D38120E030E048EC53E4688D798D8A8D4D
+:1032A0009B8D0E940F298823E9F180E090E0A8EC33
+:1032B000B3E4888F998FAA8FBB8F80E090E4ACE154
+:1032C000B5E4FE01E05CFF4F80839183A283B3836A
+:1032D0008CA99DA9AEA9BFA9181619061A061B0626
+:1032E0000CF56C897D898E899F899B01AC010E94B8
+:1032F00075294B015C016C8D7D8D8E8D9F8D9B01A1
+:10330000AC010E941A2B9B01AC01C501B4010E94C3
+:10331000862B0E94F82B6CAB7DAB8EAB9FABCE01A6
+:103320000E948F0940E050E068E474E4F601828175
+:1033300093810E947318101611061CF4C6010E9496
+:10334000220BF394F0925804DF91CF911F910F91CB
+:10335000FF90EF90DF90CF90BF90AF909F908F90B5
+:10336000089584E4CA1072C0DB1070C00E94A815D2
+:10337000EC01892B09F459C084E991E09983888391
+:1033800081E08B831C861D861E861F86188A198AFB
+:103390001A8A1B8A1C8A1D8A1E8A1F8A80E090E076
+:1033A000A0E8BFE3888F998FAA8FBB8F1C8E1D8EDC
+:1033B0001E8E1F8E88A399A3AAA3BBA31CA21DA225
+:1033C0001EA21FA221E030E03DA72CA72FEF2FA7C0
+:1033D00018A619A61AA61BA6DC82CD8224E02E838D
+:1033E00025E02F831EA61CAA1DAA1EAA1FAA18AE7E
+:1033F00019AE1AAE1BAE1CAE1DAE1EAE1FAEFE0148
+:10340000E05CFF4F80839183A283B3831A82188686
+:1034100019861A861B86CE010E947C0740E050E088
+:1034200060E87FE3CE010E947318F701D383C28363
+:10343000048381E08583002321F062E0802F0E94D5
+:10344000AC0281E0F7018083118216CF0E94A8159B
+:10345000EC01892B51F384E991E09983888384E01E
+:103460008B831C861D861E861F86188A198A1A8AD7
+:103470001B8A1C8A1D8A1E8A1F8A80E090E0A0E8B1
+:10348000BFE3888F998FAA8FBB8F1C8E1D8E1E8ED7
+:103490001F8E88A399A3AAA3BBA31CA21DA21EA230
+:1034A0001FA221E030E03DA72CA72FEF2FA718A6E1
+:1034B00019A61AA61BA6CC82AD82BE82DF8292CF4D
+:1034C0002F923F924F925F926F927F928F929F9234
+:1034D000AF92BF92CF92DF92EF92FF920F931F9322
+:1034E000CF93DF9300D000D0CDB7DEB78091270413
+:1034F00090912804892B09F446C58BE390E09A83C8
+:1035000089831C821B82CE0101960E948713882327
+:1035100009F439C56BE4E62E66E4F62E7BE4272E2B
+:1035200071E0372EE4EBCE2ED12CEFEFE80FCE0179
+:103530000196EE3008F0A3C00E2E000CFF0BED55E7
+:10354000F54E0C94132BB11AB81C0C1B421B1D1CFE
+:10355000681CDC1CC91C441C5E1E011ECE1E3F1BC9
+:10356000341F0E948713982E80912F028231D9F147
+:1035700084E00E94160B65E770E0882309F42CC4F0
+:10358000AB80BC8084E00E94A8158C010097C1F03C
+:10359000DC0112969C921297C50182539B4F8D932A
+:1035A0009C9362E0892D0E94AC02F80182810E9406
+:1035B000550221E0892B09F420E0D80113962C93C1
+:1035C00080912F02E82FF0E0EE0FFF1FE55FFD4F27
+:1035D000118300832BE637E13093310220933002D0
+:1035E0008F5F80932F02BE016D5F7F4FCE010196EA
+:1035F0000E943613182FCE0101960E94871388234C
+:1036000009F4BEC4111191CF1092A90565E771E0CC
+:1036100085E00E94A614B7C40E948713B82E80913B
+:103620004D04823151F182E00E94160B63E970E093
+:10363000882309F461C382E00E94A8158C010097D9
+:1036400079F0FC01B082118261E08B2D0E94AC0206
+:10365000D80111966C91119770E08C910E94E8024C
+:1036600080914D04E82FF0E0EE0FFF1FE75DFB4F68
+:10367000118300838F5F80934D04CE0101960E94D9
+:103680006413B8CF0E948713482ECE0101960E9482
+:103690008713682ECE0101960E948713582ECE0103
+:1036A00001960E948713882ECE0101960E948713EF
+:1036B000782E80916102813001F389E10E94160B1E
+:1036C00061EB70E0882309F417C389E10E94A81513
+:1036D0008C01009711F0FC01108EA42C042C000C1E
+:1036E000BB0890906102E92DF0E0EE0FFF1FEE594C
+:1036F000FD4F11830083D8015196BC92AE92509732
+:10370000852D550C990B53969C938E935297862D2D
+:10371000660C990B55969C938E935497E72DE15028
+:10372000FF0B389708F45CC088E090E0D80157960A
+:103730009C938E93569761E0842D0E94AC0261E0C9
+:10374000F80182890E94AC0261E0D80154968C9104
+:103750000E94AC0261E0F80184890E947E02D801D7
+:103760005196BC92AE925097B12CA12CF80186894B
+:103770009789A816B906B4F520E04FE0B501C80155
+:103780000E94000FD80156968D919C91A816B906FB
+:1037900034F427E04BE0B501C8010E94000F20E09F
+:1037A00049E0B501C8010E94000FF8018689978998
+:1037B000A816B90664F46624639420E0462DB5018A
+:1037C000C8010E94000F6394F9E06F12F6CF41E048
+:1037D000B501C8010E94440F2FEFA21AB20AC6CF4A
+:1037E000872DA3CF708E712CF801808D781608F587
+:1037F000482D672DC8010E947C0FA72CB12C40E0FA
+:10380000B501C8010E94440FD80156968D919C9134
+:10381000A816B90664F46624639420E0462DB50129
+:10382000C8010E94000F6394B9E06B12F6CF739445
+:10383000DBCF93949092610220CF0E948713B82E21
+:10384000CE0101960E948713182FCE0101960E9487
+:103850008713082FCE0101960E948713A82ECE0150
+:1038600001960E9487132A2DAA0C330B402F000FBC
+:10387000550B612F110F770B10E000E08B2DBB0C67
+:10388000990B0E94F618F9CE0E948713B82ECE012C
+:1038900001960E948713182FCE0101960E9487136C
+:1038A000A82ECE0101960E948713982ECE01019674
+:1038B0000E948713082E000C990B292D990C330BAD
+:1038C0004A2DAA0C550B612F110F770B8C01D6CF07
+:1038D0000E948713182F80916802823009F4CDCEA0
+:1038E00087E10E94160B62ED70E0882309F404C2A0
+:1038F00087E10E94A815FC01892BB9F08091BB03D8
+:103900008C3098F591E0980F9093BB03828790E0FC
+:10391000DC01AA0FBB1FA80FB91FA956BC4F88EB2B
+:103920009BE012969C938E93119780916802A82F2A
+:10393000B0E0AA0FBB1FAC59BD4FED93FC931186AD
+:10394000158616861786108A118A128A138A148A97
+:1039500012821182D482C38216821582D086C782D7
+:1039600010838F5F8093680288CE8FEF8287DDCFD0
+:103970000E948713182FCE0101960E9487132B8176
+:103980003C8122533B4F40E0682F812F0E94C2159B
+:103990002ACE0E948713182FCE0101960E9487130A
+:1039A000082FCE0101960E9487132B813C81225360
+:1039B0003B4F482F602FE9CF0E948713982ECE01EE
+:1039C00001960E948713A82ECE0101960E948713AC
+:1039D000B82E8091FA01823009F44FCE82E10E9424
+:1039E000160B60EF70E0882309F486C182E10E9423
+:1039F000A8158C01009731F0FC01138212823182EC
+:103A000020821186E091FA01F0E0EE0FFF1FE75AE5
+:103A1000FD4F11830083D8011F969C921F975096EB
+:103A2000AC9250975196BC92519781E01E968C9320
+:103A30001E9714969C9214971A96AC921A971B96FE
+:103A4000BC921B971C961C921C971D961C92109260
+:103A5000DE031092DD031092AB041092CD040E949D
+:103A6000CC04EEEFF5E0F0930104E09300042FEFB7
+:103A700035E03093050420930404D80115961C9278
+:103A800015971B968C911B97823018F098E015962D
+:103A90009C93F8019485992329F0813019F485814C
+:103AA000846085830E945A032B013C0162E3862EC9
+:103AB000912CA12CB12C0E945A0364197509860916
+:103AC0009709683E734081059105A8F3F1E08F1ACC
+:103AD0009108A108B10828EE420E23E0521E611C95
+:103AE000711C81149104A104B10429F7D8011D9619
+:103AF0006C91C8010E940E0760E3C8010E940E0786
+:103B0000C7010197F1F760E3C8010E940E07C701E2
+:103B10000197F1F760E3C8010E940E0783E592E088
+:103B20000197F1F760E2C8010E940E07F801658174
+:103B3000606240E0C8010E94960684E0D8011696B3
+:103B40008C9340E06CE0C8010E949606C8010E9478
+:103B5000F00682E0F801878340E066E0C8010E9439
+:103B6000960640E062E0C8010E9496068BE39FE162
+:103B70000197F1F788E0D8011D968C931D97149654
+:103B80008C9191E09093AA048093CC041092AB04A2
+:103B90001092CD0468E08CEE95E00E9457060E94DA
+:103BA000FB058CE08093B800F8018685882319F125
+:103BB000C8010E94F006D80151964C91B12C4330B7
+:103BC00020F04695BB24BA94B40E4B2D67ED71E0FE
+:103BD000C8010E940118F8018189823038F041E063
+:103BE0004B0D62EE71E0C8010E94011840E060E0F8
+:103BF000C8010E94BF068091FA018F5F8093FA018D
+:103C00003CCD0E948713982ECE0101960E94871307
+:103C1000882E80910A02863009F4E5CC8DE10E945D
+:103C2000160B6CE071E0882309F4D6C0AB80BC8031
+:103C30008DE10E94A8158C01892B61F180E1F801CA
+:103C40003696DF011D928A95E9F7F801178A168AE0
+:103C5000108E85829282C50182539B4F918380830F
+:103C600062E0892D0E94AC0258E0B52EC8010E9486
+:103C70004D0EBA94B110FACFD80156968D919C9101
+:103C8000579743E0969587954A95E1F714969C934C
+:103C90008E93139780910A02E82FF0E0EE0FFF1F3A
+:103CA000E250FE4F11830083EEE7F7E1F093FD0150
+:103CB000E093FC018F5F80930A0295CC0E948713EA
+:103CC000882ECE0101960E948713582ECE010196B0
+:103CD0000E948713682ECE0101960E948713782ECA
+:103CE0008091FB01823009F4C8CC89E00E94160B58
+:103CF000811106C06CE271E085E00E94A614BDCC83
+:103D000089E00E94A8158C019090FB01A92CB12C90
+:103D1000AA0CBB1CF501E35AFD4F9183808381E01F
+:103D2000D80118968C9318978C9211965C921197E3
+:103D300012966C92129713967C9261E0882D0E94E5
+:103D4000AC0261E0F80181810E94AC0261E0D8011F
+:103D500012968C910E94AC02F8019381349680E017
+:103D6000981719F011928F5FFBCFC8010E94A80F1E
+:103D7000F501E35AFD4F80819181DC0113963C915E
+:103D8000FC01349620E0321719F011922F5FFBCF1F
+:103D90000E94A80F93949092FB016FCC0E9487130E
+:103DA000982ECE0101960E948713682ECE010196AF
+:103DB0000E948713782ECE0101960E948713882EC9
+:103DC00080915602823009F40ECC8BE00E94160BD3
+:103DD000811106C061E571E085E00E94A61403CC64
+:103DE000AB80BC808BE00E94A8158C01009731F05D
+:103DF000FC0116821782108611861286E091560207
+:103E0000F0E0EE0FFF1FEE5AFD4F11830083F80123
+:103E1000928263827482C50182539B4F9183808317
+:103E2000858261E0892D0E94AC0261E0D801139681
+:103E30008C910E94AC0260E0F80184810E94AC0287
+:103E400081E0D80116968C9360E0C8010E94CD0FE6
+:103E5000E6E2F7E1F0935802E093570280915602B0
+:103E60008F5F80935602BFCB0E948713982ECE019E
+:103E700001960E948713B82ECE0101960E948713E7
+:103E8000082FCE0101960E948713182FCE010196AC
+:103E90000E948713B092F8050093F9051093FA0574
+:103EA0008093FB051092FC0508EF15E061E0D80156
+:103EB0008D918D010E94AC02ECEFF5E0E017F10767
+:103EC000A9F78091FC0581608093FC0560E088EF94
+:103ED00095E00E94090CCE0101960E948713882E5E
+:103EE00080913802833009F47ECBAB80BC8086E0C1
+:103EF0000E94A8158C01009759F028EF35E0309307
+:103F00003C0220933B02DC0115961C921E921497F2
+:103F1000E0913802F0E0EE0FFF1FEE5CFD4F1183E1
+:103F20000083F8019282C50182539B4F9183808365
+:103F3000F1E08F1609F1D80113961C9262E0892DE9
+:103F40000E94AC02D80113968C911397816013964E
+:103F50008C9360E0C8010E94870DF80115821482DD
+:103F600022E537E130933A022093390280913802FA
+:103F70008F5F8093380237CB82E0F8018383DECFF6
+:103F8000112309F441CB0F900F900F900F90DF9108
+:103F9000CF911F910F91FF90EF90DF90CF90BF9046
+:103FA000AF909F908F907F906F905F904F903F90D9
+:103FB0002F9008950E94601A0C9436160F931F9349
+:103FC000CF93DF930E942F11EC010E94C801882338
+:103FD000F1F181E0809388078093890780918A07B7
+:103FE00090918B070E949F28209158042C171D0642
+:103FF000A1F19CF1CC0FDD1FCC5ADB4FE881F98198
+:10400000118206811781208531856017710782072B
+:104010009307B9F066837783808791870280F38165
+:10402000E02D008911892289338960177107820781
+:10403000930739F0608B718B828B938BCF010E9439
+:104040008F09DF91CF911F910F910C94D60E109292
+:10405000890760E070E0CB01C7CFDF91CF911F915E
+:104060000F910895FF920F931F93CF93DF930E94B8
+:104070002F11EC010E9419028C010E942F11F82EC1
+:10408000CC0FDD1FC35ADD4F0990D881C02D888524
+:10409000882369F169EE71E0C8010E94C62801E039
+:1040A00010E0009709F10E9481289885992391F0EA
+:1040B000982F9770980101C0220F9A95EAF786957C
+:1040C00086958695FE01E80FF11D8481FF2049F059
+:1040D000282B248369EE71E090E080E00E94C628DE
+:1040E000E0CF20952823F5CFCE010E94A80FDF91C5
+:1040F000CF911F910F91FF900C94D60ECF92DF922B
+:10410000EF92FF921F93CF93DF93182F8091FF05BB
+:1041100090910006CB9780F030E0E32E31E0F32E53
+:10412000C0E3D0E0CE010E942B13F70181937F0101
+:104130002196CB33D105B1F7111109C0809100014F
+:10414000833529F4809101018E3409F462C08EE038
+:104150000E944503BC01990F880B990B61157105ED
+:104160008105910511F00E9478280E942928CC240D
+:10417000CA942FE0D22EE12CF12CA70196010E94C7
+:10418000492A7F936F938BEE91E09F938F9380E00A
+:1041900091E09F938F930E948E2C0E942928A70163
+:1041A00096010E94492A7F936F9384EF91E09F9339
+:1041B0008F9387E091E09F938F930E948E2C4BE02A
+:1041C00050E060E071E080E390E00E94CC138DB796
+:1041D0009EB70C960FB6F8949EBF0FBE8DBF1111FF
+:1041E00018C08091FF0590910006CC9790F08BE36A
+:1041F00090E00E94332A882361F060E08BE390E036
+:10420000DF91CF911F91FF90EF90DF90CF900C94B2
+:104210003B2ADF91CF911F91FF90EF90DF90CF90DD
+:10422000089581E00E947E208091BE06811109C020
+:104230008AE00E94911480E091E00E94F2160C94B2
+:104240000B1408951F920F920FB60F9211242F9303
+:104250003F938F939F93AF93BF93809176049091F8
+:104260007704A0917804B09179043091750423E02B
+:10427000230F2D3758F50196A11DB11D209375040C
+:104280008093760490937704A0937804B093790494
+:1042900080917A0490917B04A0917C04B0917D047C
+:1042A0000196A11DB11D80937A0490937B04A09385
+:1042B0007C04B0937D04BF91AF919F918F913F910A
+:1042C0002F910F900FBE0F901F90189526E8230F87
+:1042D0000296A11DB11DD2CF1F920F920FB60F9261
+:1042E00011242F933F934F935F936F937F938F93FB
+:1042F0009F93AF93BF93EF93FF9381E096E00E946B
+:104300001504FF91EF91BF91AF919F918F917F9194
+:104310006F915F914F913F912F910F900FBE0F9032
+:104320001F9018951F920F920FB60F9211242F9382
+:104330005F936F937F938F939F93AF93BF93EF930D
+:10434000FF93E0911106F09112068081E09117062B
+:10435000F091180682FD24C0208180911A0690E019
+:10436000019660E670E00E94FF2A90911B06981764
+:1043700041F0E0911A06F0E0EF5FF94F258F80934E
+:104380001A06FF91EF91BF91AF919F918F917F910D
+:104390006F915F912F910F900FBE0F901F90189506
+:1043A0008081EFCF1F920F920FB60F9211242F939F
+:1043B0003F934F935F936F937F938F939F93AF93AD
+:1043C000BF93EF93FF938091B900887F803609F403
+:1043D0004AC0F0F5883209F4A7C018F5803109F415
+:1043E0009BC0B8F4882309F4F9C0883009F494C05C
+:1043F000FF91EF91BF91AF919F918F917F916F91BD
+:104400005F914F913F912F910F900FBE0F901F9092
+:104410001895883109F488C0803251F78093A2043E
+:1044200014C0803409F49DC040F48033B9F388335C
+:10443000F9F68093A20485ECB0C0803509F485C0FC
+:10444000883509F496C0883499F60E943B18D0CF7D
+:10445000883909F48CC038F5883729F050F488364B
+:1044600011F0803729F683E08093A404109226048B
+:1044700057C0883809F47BC0803919F0803809F0BA
+:10448000B7CF80912604803208F071C0E0912604F5
+:1044900081E08E0F809326048091BB00F0E0EA5FFC
+:1044A000FB4F80833DC0803B39F0E0F4803A09F453
+:1044B00079C0883A09F09CCF84E08093A4041092DC
+:1044C000030410920204E0910004F09101040995A4
+:1044D0008091020481110FC081E080930204109248
+:1044E000E00309C0803C09F4A6CF883C09F4A3CFBF
+:1044F000883B09F07DCFE091030481E08E0F80932B
+:104500000304F0E0E052FC4F80818093BB00909167
+:1045100003048091020429C080917F048093BB0032
+:1045200085EC8093BC0064CF9091A1048091A0049D
+:10453000981758F5E091A10481E08E0F8093A104B3
+:10454000F0E0E058FB4F8081E9CFE091A10481E0E9
+:104550008E0F8093A1048091BB00F0E0E058FB4FE8
+:1045600080839091A1048091A0049817C8F285E8F7
+:10457000D8CFE091A10481E08E0F8093A1048091B7
+:10458000BB00F0E0E058FB4F80838091A3048111D1
+:104590005CCF81E080937E0484EA8093BC0010921B
+:1045A000A40426CF85EC8093BC001092A4048091D3
+:1045B0002604803230F4E0912604F0E0EA5FFB4FFD
+:1045C00010826091260470E0E0910404F0910504EB
+:1045D00086E094E00995109226040ACF1092A20476
+:1045E00034CF1F920F920FB60F9211242F933F9347
+:1045F0004F935F936F937F938F939F93AF93BF93EB
+:10460000CF93DF93EF93FF938091BC03C091BB03E3
+:10461000D0E087FF24C01092850010928400809122
+:10462000BC038F5F8093BC038091BC03082E000CF9
+:10463000990B8C179D0724F48091BC038C30C4F136
+:104640008091840090918500049680349C4908F400
+:104650007AC08091840090918500049676C0809104
+:10466000BC03082E000C990B8C179D07C4F6E09133
+:10467000BC038E2FEE0F990BFC01EE0FFF1FE80F0E
+:10468000F91FE956FC4F808186FFC9CFE091BC033A
+:104690008E2FEE0F990BFC01EE0FFF1FE80FF91F95
+:1046A000E956FC4F808160E08F730E947E02B7CF95
+:1046B0002091840030918500E091BC038E2FEE0F95
+:1046C000990BFC01EE0FFF1FE80FF91FE956FC4F95
+:1046D00081819281820F931F90938900809388003B
+:1046E000E091BC038E2FEE0F990BFC01EE0FFF1F24
+:1046F000E80FF91FE956FC4F808186FF11C0E09159
+:10470000BC038E2FEE0F990BFC01EE0FFF1FE80F7D
+:10471000F91FE956FC4F808161E08F730E947E0291
+:10472000FF91EF91DF91CF91BF91AF919F918F91C9
+:104730007F916F915F914F913F912F910F900FBE9D
+:104740000F901F90189580E49CE9909389008093C6
+:1047500088008FEF8093BC03E3CF10920406109281
+:10476000030688EE93E0A0E0B0E080930506909306
+:104770000606A0930706B09308062EEA31E03093B0
+:1047800002062093010625EC30E030930E062093BC
+:104790000D0624EC30E03093100620930F0620EC39
+:1047A00030E0309312062093110621EC30E0309374
+:1047B00014062093130622EC30E030931606209363
+:1047C000150626EC30E03093180620931706109259
+:1047D0001A0610921B0610921C0610921D061092CB
+:1047E000EF051092EE058093F0059093F105A093EC
+:1047F000F205B093F30580EC91E09093ED05809382
+:10480000EC051092FC058FEF8093F8058093F90575
+:104810008093FA058093FB05109200061092FF0525
+:10482000109295071092940781E096E0909390077C
+:1048300080938F071092C6068CE2809392078BE3D9
+:10484000809391078FE28093930780E68093C1065F
+:104850008FE58093C2061092C00610928B071092CB
+:104860008A0710928D0710928C0781E08093880749
+:10487000E6E9F7E082ED97E0119211928E179F071B
+:10488000D9F71092C5060895789484B5826084BDE6
+:1048900084B5816084BD85B5826085BD85B5816044
+:1048A00085BD80916E00816080936E0010928100C2
+:1048B000809181008260809381008091810081607D
+:1048C000809381008091800081608093800080913E
+:1048D000B10084608093B1008091B00081608093CA
+:1048E000B00080917A00846080937A0080917A0091
+:1048F000826080937A0080917A00816080937A0050
+:1049000080917A00806880937A001092C100E091D3
+:104910001106F091120682E08083E0910D06F0917D
+:104920000E061082E0910F06F091100680E1808360
+:1049300010921906E0911506F091160686E0808324
+:10494000E0911306F0911406808180618083E091EC
+:104950001306F0911406808188608083E09113062D
+:10496000F0911406808180688083E0911306F091B5
+:10497000140680818F7D808380E094E09093000610
+:104980008093FF0583EE94E19093950780939407BD
+:1049900083E491E190939707809396078FE591E1E7
+:1049A00090939907809398078DE591E19093CB07B9
+:1049B0008093CA0783EC91E190939B0780939A07B9
+:1049C0008EED9FE190939D0780939C0780ED91E190
+:1049D0009093C1078093C00784EE91E19093C30741
+:1049E0008093C2078EE092E190939F0780939E0789
+:1049F0008FE097E19093A9078093A8078EE396E153
+:104A00009093AF078093AE0781E896E19093AD074E
+:104A10008093AC0782EF94E19093B1078093B00745
+:104A200083EA95E19093B3078093B2078AED9FE103
+:104A30009093B7078093B6078CEB97E19093BD07EF
+:104A40008093BC0781E191E29093BF078093BE07FA
+:104A50008AE490E19093C5078093C40782EE92E1C7
+:104A60009093C9078093C80782E390E29093CD07A3
+:104A70008093CC0781E08093C60680E00E947E2070
+:104A80000E94D60E0091FF05109100060115110538
+:104A9000C9F090E080E00E942B13833299F4003338
+:104AA000110580F07BE0E72E71E0F72ED0E0C0E04A
+:104AB0002196CE010E942B13D7018D937D01CF3219
+:104AC000D105B1F710922804109227048BE390E0EF
+:104AD000EC0121960E942B13482F2091270430913E
+:104AE0002804C901019690932804809327040C1789
+:104AF0001D0708F0FAC067E872E085E00E94A6147E
+:104B00000E947F036093590470935A0480935B045E
+:104B100090935C040E947F0360935D0470935E0435
+:104B200080935F04909360040E947F036E5F7F4FC9
+:104B30008F4F9F4F6093610470936204809363046E
+:104B4000909364040E947F036C5F7F4F8F4F9F4F51
+:104B5000609365047093660480936704909368047F
+:104B60000E947F036C5F7F4F8F4F9F4F609369045C
+:104B700070936A0480936B0490936C040E947F038B
+:104B80006A5F7F4F8F4F9F4F60936D0470936E04E9
+:104B900080936F04909370040E947F03685F7F4F3F
+:104BA0008F4F9F4F609371047093720480937304CE
+:104BB0009093740460E0C62E60E0D62E6624639461
+:104BC000772473948091C5068111D1C080918F079D
+:104BD00090919007DC01ED91FC910084F185E02D2E
+:104BE0000995892B09F4C3C080918F079091900794
+:104BF000DC01ED91FC910084F185E02D099550E6F2
+:104C0000E52EF12C8036910564F480918F07909108
+:104C10009007DC01ED91FC910084F185E02D099570
+:104C20007C01C0918F07D091900747E2A42E47E006
+:104C3000B42E450110E000E0E016F10609F061C075
+:104C4000D0E0C0E0EC16FD0609F4BCCFF50191916F
+:104C50005F0110928707309193072091C4069093CB
+:104C6000C406931304C0921302C01092C40680912C
+:104C7000C006E82FF0E040919107E254F94F9413F9
+:104C800063C0321709F460C01186882321F0709246
+:104C900087071092C4061092C00610928B071092DC
+:104CA0008A0710928D0710928C0770928807809166
+:104CB0008707813009F059C00E942F118093BF06E9
+:104CC0008E3108F04BC020918907222309F446C099
+:104CD000FC01FF27EE0FFF1FEA56F84F0190F0810D
+:104CE000E02D3097D9F1099540C0CE014111F0CEA9
+:104CF00030932804209327040E94601A0E943616DD
+:104D0000FFCE0E947F03688779878A879B87E88127
+:104D1000F9810284F385E02DCE01099597FF23C127
+:104D20000E947F03288539854A855B85621B730B4A
+:104D3000840B950B2C813D814E815F816217730737
+:104D40008407950720F37CCF91878F5F8093C006FF
+:104D50009091C206891708F09ECFA9CFE0919407E1
+:104D6000F0919507309709F0BECF21966BCF8090D8
+:104D70004E0490904F04A0905004B0905104809144
+:104D800052048111F6C00E947F03681979098A09CB
+:104D90009B09613A7B4B8D409105D8F0609252049B
+:104DA000C0E080914D04C81788F4EC2FF0E0EE0FBE
+:104DB000FF1FE75DFB4F0190F081E02D118270E055
+:104DC00060E080810E94E802CF5FEBCF81E00E942B
+:104DD000540F80915304882309F4B9C04AE069E56F
+:104DE00074E083E29EE00E94E10A41E06DE574E038
+:104DF00085E39CE00E94E10AF12C80915804F816AA
+:104E000008F082C0EF2DF0E0EE0FFF1FEC5AFB4FD1
+:104E100000811181D8011296CD91DC918CA19DA1C8
+:104E2000AEA1BFA1892B8A2B8B2BC1F10E945A0303
+:104E30004B015C0188A599A5AAA5BBA5B501A40154
+:104E4000481B590B6A0B7B0B8CA19DA1AEA1BFA186
+:104E5000481759076A077B0708F18C859D85AE8541
+:104E6000BF852A81222309F44BC00196A11DB11DE3
+:104E70008C879D87AE87BF874C855D856E857F85D6
+:104E8000E881F9810680F781E02DCE01099588A699
+:104E900099A6AAA6BBA6CE010E948F09F80184811B
+:104EA0000E945502D80115969C911597891721F1FA
+:104EB00015968C93159781111FC011968C9111979F
+:104EC0008823D1F01296ED91FC91139714861586E4
+:104ED00016861786108A118A128A138A14AA15AAAE
+:104EE00016AA17AA14A215A216A217A2148A158A26
+:104EF000168A178A11961C92F3947FCF80E067CFB1
+:104F00000197A109B109B4CF45E061E674E083E4FB
+:104F10009BE00E94E10A42E369E674E087E99EE0D3
+:104F20000E94E10A4AE065E674E083E89EE00E94A0
+:104F3000E10A4AE06DE674E085E390E10E94E10A4F
+:104F40004AE061E774E087EE9DE00E94E10AC11447
+:104F5000D10409F437CE0E940104882309F432CE2B
+:104F60000E9400002FCEF40181934F010F5F1F4F6D
+:104F700063CE0E947F03681979098A099B09603A08
+:104F80007B4B8D40910508F024CF10925204C0E075
+:104F900080914D04C81708F0B1CFEC2FF0E0EE0F70
+:104FA000FF1FE75DFB4F0190F081E02D618170E014
+:104FB00080810E94E802CF5FEBCF8F929F92AF92E9
+:104FC000BF92CF92DF92EF92FF92CF93DF93EC01EB
+:104FD000688179818A819B816115710581059105BF
+:104FE00021F464E279ED8BE597E02DE133EF41E0C8
+:104FF00050E00E94492A49015A019B01AC01A7EAED
+:10500000B1E40E94682A6B017C01ACEEB4EFA5010B
+:1050100094010E94762AC60ED71EE81EF91EF7FEDE
+:1050200006C081E0C81AD108E10880E8F80AC88201
+:10503000D982EA82FB82C701B6019F77DF91CF91C7
+:10504000FF90EF90DF90CF90BF90AF909F908F90A8
+:1050500008958F929F92AF92BF92CF92DF92EF927C
+:10506000FF9260913B0170913C0180913D019091D4
+:105070003E01611571058105910521F464E279ED28
+:105080008BE597E02DE133EF41E050E00E94492AA3
+:1050900049015A019B01AC01A7EAB1E40E94682AC8
+:1050A0006B017C01ACEEB4EFA50194010E94762A5D
+:1050B000C60ED71EE81EF91EF7FE06C081E0C81A0C
+:1050C000D108E10880E8F80AC0923B01D0923C0187
+:1050D000E0923D01F0923E01C701B6019F77FF903B
+:1050E000EF90DF90CF90BF90AF909F908F900895FA
+:1050F00060933B0170933C0180933D0190933E018E
+:105100000895FC0188279927E89421912032E9F33A
+:10511000293010F02E30C8F32B3241F02D3239F403
+:10512000689404C00E940729820F911D2191205389
+:105130002A30C0F31EF4909581959F4F08951F93D8
+:10514000FC0199278827BC01E89411911032E9F3FA
+:10515000193010F01E30C8F31B3251F01D3249F4E3
+:10516000689406C00E94F228610F711D811D911D77
+:10517000119110531A30B0F33EF4909580957095CC
+:1051800061957F4F8F4F9F4F1F91089542ED57E0DC
+:105190000E94CB280895FA01A191B081009719F4DB
+:1051A0001097E1F0CD01DC01CD010D90002011F44C
+:1051B000C00113C0FB012191222319F02015D9F75A
+:1051C000F3CFFB012191201519F41E92119606C010
+:1051D0002223C1F70D900020A1F7D001FA01A1937D
+:1051E000B0830895592F482F372F262F660F771F2A
+:1051F000881F991F660F771F881F991F620F731FE3
+:10520000841F951F660F771F881F991F08957AE0E6
+:10521000979F902D879F802D910D112408950E94B6
+:10522000512908F481E00895E89409C097FB3EF401
+:1052300090958095709561957F4F8F4F9F4F9923E3
+:10524000A9F0F92F96E9BB279395F6958795779561
+:105250006795B795F111F8CFFAF4BB0F11F460FF21
+:105260001BC06F5F7F4F8F4F9F4F16C0882311F079
+:1052700096E911C0772321F09EE8872F762F05C08D
+:10528000662371F096E8862F70E060E02AF09A9528
+:10529000660F771F881FDAF7880F9695879597F91D
+:1052A0000895990F0008550FAA0BE0E8FEEF1616B7
+:1052B0001706E807F907C0F012161306E407F5070A
+:1052C00098F0621B730B840B950B39F40A2661F07E
+:1052D000232B242B252B21F408950A2609F4A14021
+:1052E000A6958FEF811D811D08950E9488290C9439
+:1052F000F9290E94EB2938F00E94F22920F0952329
+:1053000011F00C94E2290C94E82911240C942D2A14
+:105310000E940A2A70F3959FC1F3950F50E0551F24
+:10532000629FF001729FBB27F00DB11D639FAA27FA
+:10533000F00DB11DAA1F649F6627B00DA11D661F49
+:10534000829F2227B00DA11D621F739FB00DA11D6A
+:10535000621F839FA00D611D221F749F3327A00D24
+:10536000611D231F849F600D211D822F762F6A2FC0
+:1053700011249F5750409AF0F1F088234AF0EE0F25
+:10538000FF1FBB1F661F771F881F91505040A9F752
+:105390009E3F510580F00C94E2290C942D2A5F3F2A
+:1053A000E4F3983ED4F3869577956795B795F7958E
+:1053B000E7959F5FC1F7FE2B880F911D9695879506
+:1053C00097F9089597F99F6780E870E060E0089585
+:1053D0009FEF80EC089500240A941616170618060D
+:1053E0000906089500240A941216130614060506E9
+:1053F0000895092E0394000C11F4882352F0BB0F7A
+:1054000040F4BF2B11F460FF04C06F5F7F4F8F4FDC
+:105410009F4F089557FD9058440F551F59F05F3F17
+:1054200071F04795880F97FB991F61F09F3F79F0C6
+:1054300087950895121613061406551FF2CF469548
+:10544000F1DF08C0161617061806991FF1CF8695CA
+:105450007105610508940895E894BB2766277727AE
+:10546000CB0197F90895F999FECF92BD81BDF89AC5
+:10547000992780B50895262FF999FECF1FBA92BDBE
+:1054800081BD20BD0FB6F894FA9AF99A0FBE019625
+:105490000895052E97FB1EF400940E94602A57FD84
+:1054A00007D00E94B22A07FC03D04EF40C94602A65
+:1054B00050954095309521953F4F4F4F5F4F089540
+:1054C00090958095709561957F4F8F4F9F4F089570
+:1054D0000E94D42AA59F900DB49F900DA49F800D8B
+:1054E000911D11240895B7FF0C94682A0E94682A20
+:1054F000821B930B08952F923F924F925F926F926F
+:105500007F928F929F92AF92BF92CF92DF92EF9253
+:10551000FF920F931F93CF93DF93CDB7DEB7CA1BD4
+:10552000DB0B0FB6F894DEBF0FBECDBF09942A88FF
+:10553000398848885F846E847D848C849B84AA84A7
+:10554000B984C884DF80EE80FD800C811B81AA8134
+:10555000B981CE0FD11D0FB6F894DEBF0FBECDBFFF
+:10556000ED010895A1E21A2EAA1BBB1BFD010DC07F
+:10557000AA1FBB1FEE1FFF1FA217B307E407F50703
+:1055800020F0A21BB30BE40BF50B661F771F881FDF
+:10559000991F1A9469F760957095809590959B0175
+:1055A000AC01BD01CF010895A29FB001B39FC0011E
+:1055B000A39F700D811D1124911DB29F700D811D3F
+:1055C0001124911D0895DB018F939F930E94682AF7
+:1055D000BF91AF91A29F800D911DA39F900DB29F8F
+:1055E000900D11240895991B79E004C0991F961716
+:1055F00008F0961B881F7A95C9F780950895AA1B15
+:10560000BB1B51E107C0AA1FBB1FA617B70710F0AD
+:10561000A61BB70B881F991F5A95A9F780959095DF
+:10562000BC01CD010895EE0FFF1F0590F491E02D10
+:1056300009945058BB27AA270E94312B0C94F929B2
+:105640000E94EB2938F00E94F22920F039F49F3FA4
+:1056500019F426F40C94E8290EF4E095E7FB0C9479
+:10566000E229E92F0E940A2A58F3BA176207730742
+:105670008407950720F079F4A6F50C942C2A0EF4F3
+:10568000E0950B2EBA2FA02D0B01B90190010C0152
+:10569000CA01A0011124FF27591B99F0593F50F46A
+:1056A000503E68F11A16F040A22F232F342F4427C2
+:1056B000585FF3CF469537952795A795F0405395BA
+:1056C000C9F77EF41F16BA0B620B730B840BBAF08A
+:1056D0009150A1F0FF0FBB1F661F771F881FC2F7F5
+:1056E0000EC0BA0F621F731F841F48F48795779509
+:1056F0006795B795F7959E3F08F0B0CF9395880FC3
+:1057000008F09927EE0F9795879508950E949A2B98
+:105710000C94F9290E94F22958F00E94EB2940F0DC
+:1057200029F45F3F29F00C94E22951110C942D2AA1
+:105730000C94E8290E940A2A68F39923B1F35523AF
+:1057400091F3951B550BBB27AA2762177307840794
+:1057500038F09F5F5F4F220F331F441FAA1FA9F32A
+:1057600035D00E2E3AF0E0E832D091505040E69518
+:10577000001CCAF72BD0FE2F29D0660F771F881F79
+:10578000BB1F261737074807AB07B0E809F0BB0B6C
+:10579000802DBF01FF2793585F4F3AF09E3F510580
+:1057A00078F00C94E2290C942D2A5F3FE4F3983EA4
+:1057B000D4F3869577956795B795F7959F5FC9F769
+:1057C000880F911D9695879597F90895E1E0660FEA
+:1057D000771F881FBB1F621773078407BA0720F063
+:1057E000621B730B840BBA0BEE1F88F7E0950895CC
+:1057F0000E94FF2B6894B1110C942D2A08950E94E9
+:10580000122A88F09F5798F0B92F9927B751B0F016
+:10581000E1F0660F771F881F991F1AF0BA95C9F734
+:1058200014C0B13091F00E942C2AB1E008950C947C
+:105830002C2A672F782F8827B85F39F0B93FCCF32F
+:10584000869577956795B395D9F73EF490958095B1
+:10585000709561957F4F8F4F9F4F08950E945129FA
+:1058600008F48FEF089519F416F40C94E8290C94B9
+:10587000792C0E94122AB8F39923C9F3B6F39F57E3
+:10588000550B87FF0E94872C0024A0E640EA900178
+:1058900080585695979528F4805C660F771F881F6F
+:1058A00020F026173707480730F4621B730B840B70
+:1058B000202931294A2BA6951794079420253125B4
+:1058C0004A2758F7660F771F881F20F026173707DB
+:1058D000480730F4620B730B840B200D311D411D02
+:1058E000A09581F7B901842F9158880F96958795D7
+:1058F00008959F3F31F0915020F4879577956795F3
+:10590000B795880F911D9695879597F908959150B1
+:105910005040660F771F881FD2F70895AEE0B0E0C1
+:10592000E4E9FCE20C94892A0D891E8986E08C83C7
+:105930001A8309838FEF9FE79E838D83AE01475EB5
+:105940005F4F6F89788DCE0101960E94B12C2F8117
+:105950003885020F131FF80110822E96E4E00C9494
+:10596000A52AABE0B0E0E7EBFCE20C947B2A7C01DB
+:105970003B018A01FC0117821682838181FFC8C125
+:10598000CE0101965C01F7019381F30193FD8591AE
+:1059900093FF81913F01882309F453C1853239F483
+:1059A00093FD859193FF81913F01853229F4B701E1
+:1059B00090E00E94A12EE7CF912C212C312CFFE109
+:1059C000F31538F08B3211F190F4803209F1833203
+:1059D00029F137FC3CC020ED280F2A3050F536FE67
+:1059E00020C08AE0989E200D1124922E06C08D3290
+:1059F00091F0803371F7689430F8F30193FD85914D
+:105A000093FF81913F018111DACF21C0689431F871
+:105A1000689432F8F2CF689433F8EFCF689434F892
+:105A2000ECCFEAE02E9E200D1124222E689435F84A
+:105A3000E4CF8E3229F436FC04C1689436F8DDCF09
+:105A40008C3619F4689437F8D8CF8836B1F2982F8D
+:105A50009F7D95549330E0F08336A1F18337C1F1F7
+:105A6000833509F063C02801F2E04F0E511CF801A4
+:105A7000C080D180692D70E036FC02C06FEF7FEFEF
+:105A8000C6010E948B2E4C01689437F882010AC02F
+:105A90000C5F1F4FFFE3F98388248394912C6501E9
+:105AA000E89437F833FE2DC0522C8114910471F51F
+:105AB000552009F468CFB70180E290E00E94A12E42
+:105AC0005A94F6CFF801808189830E5F1F4FE4CF8F
+:105AD0002801F2E04F0E511CF801C080D180692DE1
+:105AE00070E036FC02C06FEF7FEFC6010E94962E79
+:105AF0004C018201D5CFB70180E290E00E94A12E37
+:105B00002A942814190409F0B0F7CECFF60137FC17
+:105B1000859137FE81916F01B70190E00E94A12E1F
+:105B200051105A94F1E08F1A9108BFCF843619F0C2
+:105B3000893609F077C0F80137FE6BC0608171814A
+:105B4000828193810C5F1F4FF32DFF763F2E97FFCD
+:105B500009C090958095709561957F4F8F4F9F4FAD
+:105B6000689437F82AE030E0A5010E94D12EC82EB3
+:105B7000CA188C2C432C36FE0CC0E89440F8C9148B
+:105B800040F434FE05C032FC03C0F32DFE7E4F2EE0
+:105B9000892C44FE95C0FE01EC0DF11D80818033FF
+:105BA00009F087C0242D297E422E842D8870582E1E
+:105BB00043FC95C040FE8FC09C2C821418F42C0C22
+:105BC000922C981844FE91C0B70180E390E00E94A7
+:105BD000A12E42FE09C088E790E041FE02C088E5A0
+:105BE00090E0B7010E94A12EC91408F48AC0CA949B
+:105BF000D12C9FEFC91AD90ACA0CDB1CF60182917D
+:105C00006F01B70190E00E94A12EAC14BD04B1F762
+:105C10004FCF60817181072E000C880B990B0E5FAE
+:105C20001F4F92CFD32CE894D4F82AE030E0853788
+:105C300039F1232D297FD22E8F3601F148F4883592
+:105C4000A9F0F701868197812B96E2E10C94972ABF
+:105C5000803749F08837A9F7D4FE02C06894D2F89B
+:105C600020E130E00DC06894D4F8F6CF34FE03C0D4
+:105C7000822F8660D82E20E132E002C028E030E09A
+:105C8000F801D7FE0FC060817181828193810C5F22
+:105C90001F4FA5010E94D12EC82ECA183D2CE89492
+:105CA00037F867CF6081718190E080E00E5F1F4F11
+:105CB000F0CF42FC02C0839478CF8394839475CF55
+:105CC000842D867809F471CFF6CFB70180E290E099
+:105CD0000E94A12E83948214C0F3512C73CF522CB6
+:105CE0005818821408F46ECFF8CF842D867809F402
+:105CF0007BCF8BE241FE80E247FC8DE2B70190E072
+:105D000071CFB70180E390E00E94A12E9A946CCFEE
+:105D10008FEF9FEF99CFFC0105906150704001100B
+:105D2000D8F7809590958E0F9F1F0895FC016150C4
+:105D3000704001900110D8F7809590958E0F9F1FAD
+:105D400008950F931F93CF93DF93182F092FEB0123
+:105D50008B8181FD09C01FEF0FEF812F902FDF9105
+:105D6000CF911F910F91089582FF14C02E813F8122
+:105D70008C819D81281739073CF4E881F981CF0196
+:105D800001969983888310838E819F8101969F83DA
+:105D90008E83E3CFE885F985812F0995892BA1F3BF
+:105DA000DACFFA01AA27283051F1203181F1E894A5
+:105DB0006F936E7F6E5F7F4F8F4F9F4FAF4FB1E0FE
+:105DC0003ED0B4E03CD0670F781F891F9A1FA11DF9
+:105DD000680F791F8A1F911DA11D6A0F711D811DFA
+:105DE000911DA11D20D009F468943F912AE0269FBF
+:105DF00011243019305D3193DEF6CF010895462F1E
+:105E00004770405D4193B3E00FD0C9F7F6CF462FFE
+:105E10004F70405D4A3318F0495D31FD4052419367
+:105E200002D0A9F7EACFB4E0A69597958795779524
+:105E30006795BA95C9F700976105710508959B01AB
+:105E4000AC010A2E06945795479537952795BA9534
+:105E5000C9F7620F731F841F951FA01D0895F89442
+:025E6000FFCF72
+:105E620030393837363534333231004D6F62694656
+:105E72006C69676874204E616E6F0000000000005C
+:105E82000000000000000000000000000000000010
+:105E920000000000000000000000000100000000FF
+:105EA200004000140054000000000008079203792B
+:105EB20007A404F21720074D6F6269466C69676890
+:105EC20074204E616E6F00000000010201000000AC
+:105ED20002010000010100010100010101010100B4
+:105EE20000FF0100010000FFFF0000010001FF00B0
+:105EF20000000000B0077C0711094F09FB08C90820
+:105F0200A80874085308FD07CE07000000003704F4
+:105F12009203BF038404F303CE03E50300000000F1
+:105F220057062A06790700062306100601060D0AFF
+:105F320000322E332E30004D6F6269466C696768FD
+:105F42007400526F636B7321007C00534E2D253019
+:0A5F520033782D002530337800006D
+:00000001FF