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