From 32db1c8ce4d29cbef55427d3eb48b68a0029c6a3 Mon Sep 17 00:00:00 2001 From: Josh Stewart Date: Mon, 1 Jul 2019 17:41:54 +1000 Subject: [PATCH] Linux 64-bit binaries for avrdude (See #4) --- bin/avrdude-linux_x86_64/avrdude | Bin 0 -> 537192 bytes bin/avrdude-linux_x86_64/avrdude.conf | 16077 ++++++++++++++++++++++++ 2 files changed, 16077 insertions(+) create mode 100755 bin/avrdude-linux_x86_64/avrdude create mode 100644 bin/avrdude-linux_x86_64/avrdude.conf diff --git a/bin/avrdude-linux_x86_64/avrdude b/bin/avrdude-linux_x86_64/avrdude new file mode 100755 index 0000000000000000000000000000000000000000..7644fcebc883a8fb9c9903fd651a0a29aa53968e GIT binary patch literal 537192 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 RUvZrc|6Cd-uTIXv{|D5`N2ve+ literal 0 HcmV?d00001 diff --git a/bin/avrdude-linux_x86_64/avrdude.conf b/bin/avrdude-linux_x86_64/avrdude.conf new file mode 100644 index 0000000..d3994bd --- /dev/null +++ b/bin/avrdude-linux_x86_64/avrdude.conf @@ -0,0 +1,16077 @@ +# $Id$ -*- text -*- +# +# AVRDUDE Configuration File +# +# This file contains configuration data used by AVRDUDE which describes +# the programming hardware pinouts and also provides part definitions. +# AVRDUDE's "-C" command line option specifies the location of the +# configuration file. The "-c" option names the programmer configuration +# which must match one of the entry's "id" parameter. The "-p" option +# identifies which part AVRDUDE is going to be programming and must match +# one of the parts' "id" parameter. +# +# DO NOT MODIFY THIS FILE. Modifications will be overwritten the next +# time a "make install" is run. For user-specific additions, use the +# "-C +filename" commandline option. +# +# Possible entry formats are: +# +# programmer +# parent # optional parent +# id = [, [, ] ...] ; # are quoted strings +# desc = ; # quoted string +# type = ; # programmer type, quoted string +# # supported programmer types can be listed by "-c ?type" +# connection_type = parallel | serial | usb +# baudrate = ; # baudrate for avr910-programmer +# vcc = [, ... ] ; # pin number(s) +# buff = [, ... ] ; # pin number(s) +# reset = ; # pin number +# sck = ; # pin number +# mosi = ; # pin number +# miso = ; # pin number +# errled = ; # pin number +# rdyled = ; # pin number +# pgmled = ; # pin number +# vfyled = ; # pin number +# usbvid = ; # USB VID (Vendor ID) +# usbpid = [, ...] # USB PID (Product ID) (1) +# usbdev = ; # USB interface or other device info +# usbvendor = ; # USB Vendor Name +# usbproduct = ; # USB Product Name +# usbsn = ; # USB Serial Number +# +# To invert a bit, use = ~ , the spaces are important. +# For a pin list all pins must be inverted. +# A single pin can be specified as usual = ~ , for lists +# specify it as follows = ~ ( [, ... ] ) . +# +# (1) Not all programmer types can process a list of PIDs. +# ; +# +# part +# id = ; # quoted string +# desc = ; # quoted string +# has_jtag = ; # part has JTAG i/f +# has_debugwire = ; # part has debugWire i/f +# has_pdi = ; # part has PDI i/f +# has_updi = ; # part has UPDI i/f +# has_tpi = ; # part has TPI i/f +# devicecode = ; # deprecated, use stk500_devcode +# stk500_devcode = ; # numeric +# avr910_devcode = ; # numeric +# signature = ; # signature bytes +# usbpid = ; # DFU USB PID +# chip_erase_delay = ; # micro-seconds +# reset = dedicated | io; +# retry_pulse = reset | sck; +# pgm_enable = ; +# chip_erase = ; +# chip_erase_delay = ; # chip erase delay (us) +# # STK500 parameters (parallel programming IO lines) +# pagel = ; # pin name in hex, i.e., 0xD7 +# bs2 = ; # pin name in hex, i.e., 0xA0 +# serial = ; # can use serial downloading +# parallel = ; # can use par. programming +# # STK500v2 parameters, to be taken from Atmel's XML files +# timeout = ; +# stabdelay = ; +# cmdexedelay = ; +# synchloops = ; +# bytedelay = ; +# pollvalue = ; +# pollindex = ; +# predelay = ; +# postdelay = ; +# pollmethod = ; +# mode = ; +# delay = ; +# blocksize = ; +# readsize = ; +# hvspcmdexedelay = ; +# # STK500v2 HV programming parameters, from XML +# pp_controlstack = , , ...; # PP only +# hvsp_controlstack = , , ...; # HVSP only +# hventerstabdelay = ; +# progmodedelay = ; # PP only +# latchcycles = ; +# togglevtg = ; +# poweroffdelay = ; +# resetdelayms = ; +# resetdelayus = ; +# hvleavestabdelay = ; +# resetdelay = ; +# synchcycles = ; # HVSP only +# chiperasepulsewidth = ; # PP only +# chiperasepolltimeout = ; +# chiperasetime = ; # HVSP only +# programfusepulsewidth = ; # PP only +# programfusepolltimeout = ; +# programlockpulsewidth = ; # PP only +# programlockpolltimeout = ; +# # JTAG ICE mkII parameters, also from XML files +# allowfullpagebitstream = ; +# enablepageprogramming = ; +# idr = ; # IO addr of IDR (OCD) reg. +# rampz = ; # IO addr of RAMPZ reg. +# spmcr = ; # mem addr of SPMC[S]R reg. +# eecr = ; # mem addr of EECR reg. +# # (only when != 0x3c) +# is_at90s1200 = ; # AT90S1200 part +# is_avr32 = ; # AVR32 part +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# Parts can also inherit parameters from previously defined parts +# using the following syntax. In this case specified integer and +# string values override parameter values from the parent part. New +# memory definitions are added to the definitions inherited from the +# parent. +# +# part parent # quoted string +# id = ; # quoted string +# +# ; +# +# NOTES: +# * 'devicecode' is the device code used by the STK500 (see codes +# listed below) +# * Not all memory types will implement all instructions. +# * AVR Fuse bits and Lock bits are implemented as a type of memory. +# * Example memory types are: +# "flash", "eeprom", "fuse", "lfuse" (low fuse), "hfuse" (high +# fuse), "signature", "calibration", "lock" +# * The memory type specified on the avrdude command line must match +# one of the memory types defined for the specified chip. +# * The pwroff_after_write flag causes avrdude to attempt to +# power the device off and back on after an unsuccessful write to +# the affected memory area if VCC programmer pins are defined. If +# VCC pins are not defined for the programmer, a message +# indicating that the device needs a power-cycle is printed out. +# This flag was added to work around a problem with the +# at90s4433/2333's; see the at90s4433 errata at: +# +# http://www.atmel.com/dyn/resources/prod_documents/doc1280.pdf +# +# INSTRUCTION FORMATS +# +# Instruction formats are specified as a comma seperated list of +# string values containing information (bit specifiers) about each +# of the 32 bits of the instruction. Bit specifiers may be one of +# the following formats: +# +# '1' = the bit is always set on input as well as output +# +# '0' = the bit is always clear on input as well as output +# +# 'x' = the bit is ignored on input and output +# +# 'a' = the bit is an address bit, the bit-number matches this bit +# specifier's position within the current instruction byte +# +# 'aN' = the bit is the Nth address bit, bit-number = N, i.e., a12 +# is address bit 12 on input, a0 is address bit 0. +# +# 'i' = the bit is an input data bit +# +# 'o' = the bit is an output data bit +# +# Each instruction must be composed of 32 bit specifiers. The +# instruction specification closely follows the instruction data +# provided in Atmel's data sheets for their parts. +# +# See below for some examples. +# +# +# The following are STK500 part device codes to use for the +# "devicecode" field of the part. These came from Atmel's software +# section avr061.zip which accompanies the application note +# AVR061 available from: +# +# http://www.atmel.com/dyn/resources/prod_documents/doc2525.pdf +# + +#define ATTINY10 0x10 /* the _old_ one that never existed! */ +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 +#define AT90CAN64 0xB3 +#define AT90CAN32 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults; suitable for ~/.avrduderc +# +default_parallel = "/dev/parport0"; +default_serial = "/dev/ttyS0"; +# default_bitclock = 2.5; + +# Turn off safemode by default +#default_safemode = no; + + +# +# PROGRAMMER DEFINITIONS +# + +# http://wiring.org.co/ +# Basically STK500v2 protocol, with some glue to trigger the +# bootloader. +programmer + id = "wiring"; + desc = "Wiring"; + type = "wiring"; + connection_type = serial; +; + +programmer + id = "arduino"; + desc = "Arduino"; + type = "arduino"; + connection_type = serial; +; +# this will interface with the chips on these programmers: +# +# http://real.kiev.ua/old/avreal/en/adapters +# http://www.amontec.com/jtagkey.shtml, jtagkey-tiny.shtml +# http://www.olimex.com/dev/arm-usb-ocd.html, arm-usb-tiny.html +# http://www.ethernut.de/en/hardware/turtelizer/index.html +# http://elk.informatik.fh-augsburg.de/hhweb/doc/openocd/usbjtag/usbjtag.html +# http://dangerousprototypes.com/docs/FT2232_breakout_board +# http://www.ftdichip.com/Products/Modules/DLPModules.htm,DLP-2232*,DLP-USB1232H +# http://flashrom.org/FT2232SPI_Programmer +# +# The drivers will look for a specific device and use the first one found. +# If you have mulitple devices, then look for unique information (like SN) +# And fill that in here. +# +# Note that the pin numbers for the main ISP signals (reset, sck, +# mosi, miso) are fixed and cannot be changed, since they must match +# the way the Multi-Protocol Synchronous Serial Engine (MPSSE) of +# these FTDI ICs has been designed. + +programmer + id = "avrftdi"; + desc = "FT2232D based generic programmer"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0x6010; + usbvendor = ""; + usbproduct = ""; + usbdev = "A"; + usbsn = ""; +#ISP-signals - lower ADBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +#LED SIGNALs - higher ADBUS-Nibble +# errled = 4; +# rdyled = 5; +# pgmled = 6; +# vfyled = 7; +#Buffer Signal - ACBUS - Nibble +# buff = 8; +; +# This is an implementation of the above with a buffer IC (74AC244) and +# 4 LEDs directly attached, all active low. +programmer + id = "2232HIO"; + desc = "FT2232H based generic programmer"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; +# Note: This PID is reserved for generic H devices and +# should be programmed into the EEPROM +# usbpid = 0x8A48; + usbpid = 0x6010; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals + reset = 3; + sck = 0; + mosi = 1; + miso = 2; + buff = ~4; +#LED SIGNALs + errled = ~ 11; + rdyled = ~ 14; + pgmled = ~ 13; + vfyled = ~ 12; +; + +#The FT4232H can be treated as FT2232H, but it has a different USB +#device ID of 0x6011. +programmer parent "avrftdi" + id = "4232h"; + desc = "FT4232H based generic programmer"; + usbpid = 0x6011; +; + +programmer + id = "jtagkey"; + desc = "Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; +# Note: This PID is used in all JTAGKey variants + usbpid = 0xCFF8; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals => 20 - Pin connector on JTAGKey + reset = 3; # TMS 7 violet + sck = 0; # TCK 9 white + mosi = 1; # TDI 5 green + miso = 2; # TDO 13 orange + buff = ~4; +# VTG VREF 1 brown with red tip +# GND GND 20 black +# The colors are on the 20 pin breakout cable +# 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"; + 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; +; + +# C232HM module from FTDI and Glyn.com.au. +# : Orange is SCK +# : Yellow is MOSI +# : Green is MISO +# : Brown is RST +# : Black 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 = "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; +; + + +# 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. +# (But there are also several projects called Open JTAG, eg. +# http://www.openjtag.org, which are completely different.) +# http://www.100ask.net/shop/english.html (website seems to be outdated) +# http://item.taobao.com/item.htm?id=1559277013 +# http://www.micro4you.com/store/openjtag-arm-jtag-usb.html (schematics!) +# some other sources which call it O-Link +# http://www.andahammer.com/olink/ +# http://www.developmentboard.net/31-o-link-debugger.html +# http://armwerks.com/catalog/o-link-debugger-copy/ +# or just have a look at ebay ... +# It is basically the same entry as jtagkey with different usb ids. +programmer parent "jtagkey" + id = "o-link"; + desc = "O-Link, OpenJTAG from www.100ask.net"; + usbvid = 0x1457; + usbpid = 0x5118; + usbvendor = "www.100ask.net"; + usbproduct = "USB<=>JTAG&RS232"; +; + +# http://wiki.openmoko.org/wiki/Debug_Board_v3 +programmer + id = "openmoko"; + desc = "Openmoko debug board (v3)"; + type = "avrftdi"; + usbvid = 0x1457; + usbpid = 0x5118; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; + reset = 3; # TMS 7 + sck = 0; # TCK 9 + mosi = 1; # TDI 5 + miso = 2; # TDO 13 +; + +# Only Rev. A boards. +# Schematic and user manual: http://www.cs.put.poznan.pl/wswitala/download/pdf/811EVBK.pdf +programmer + id = "lm3s811"; + desc = "Luminary Micro LM3S811 Eval Board (Rev. A)"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0xbcd9; + usbvendor = "LMI"; + usbproduct = "LM3S811 Evaluation Board"; + usbdev = "A"; + usbsn = ""; +#ISP-signals - lower ACBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +# Enable correct buffers + buff = 7; +; + +# submitted as bug #46020 +programmer + id = "tumpa"; + desc = "TIAO USB Multi-Protocol Adapter"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0x8A98; + usbdev = "A"; + usbvendor = "TIAO"; + usbproduct = ""; + usbsn = ""; + sck = 0; # TCK 9 + mosi = 1; # TDI 5 + miso = 2; # TDO 13 + reset = 3; # TMS 7 +; + +programmer + id = "avrisp"; + desc = "Atmel AVR ISP"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "avrispv2"; + desc = "Atmel AVR ISP V2"; + type = "stk500v2"; + connection_type = serial; +; + +programmer + id = "avrispmkII"; + desc = "Atmel AVR ISP mkII"; + type = "stk500v2"; + connection_type = usb; +; + +programmer parent "avrispmkII" + id = "avrisp2"; +; + +programmer + id = "buspirate"; + desc = "The Bus Pirate"; + type = "buspirate"; + connection_type = serial; +; + +programmer + id = "buspirate_bb"; + desc = "The Bus Pirate (bitbang interface, supports TPI)"; + type = "buspirate_bb"; + connection_type = serial; + # pins are bits in bitbang byte (numbers are 87654321) + # 1|POWER|PULLUP|AUX|MOSI|CLK|MISO|CS + reset = 1; + sck = 3; + mosi = 4; + miso = 2; + #vcc = 7; This is internally set independent of this setting. +; + +# This is supposed to be the "default" STK500 entry. +# Attempts to select the correct firmware version +# by probing for it. Better use one of the entries +# below instead. +programmer + id = "stk500"; + desc = "Atmel STK500"; + type = "stk500generic"; + connection_type = serial; +; + +programmer + id = "stk500v1"; + desc = "Atmel STK500 Version 1.x firmware"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "mib510"; + desc = "Crossbow MIB510 programming board"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "stk500v2"; + desc = "Atmel STK500 Version 2.x firmware"; + type = "stk500v2"; + connection_type = serial; +; + +programmer + id = "stk500pp"; + desc = "Atmel STK500 V2 in parallel programming mode"; + type = "stk500pp"; + connection_type = serial; +; + +programmer + id = "stk500hvsp"; + desc = "Atmel STK500 V2 in high-voltage serial programming mode"; + type = "stk500hvsp"; + connection_type = serial; +; + +programmer + id = "stk600"; + desc = "Atmel STK600"; + type = "stk600"; + connection_type = usb; +; + +programmer + id = "stk600pp"; + desc = "Atmel STK600 in parallel programming mode"; + type = "stk600pp"; + connection_type = usb; +; + +programmer + id = "stk600hvsp"; + desc = "Atmel STK600 in high-voltage serial programming mode"; + type = "stk600hvsp"; + connection_type = usb; +; + +programmer + id = "avr910"; + desc = "Atmel Low Cost Serial Programmer"; + type = "avr910"; + connection_type = serial; +; + +programmer + id = "ft245r"; + desc = "FT245R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # D1 + sck = 0; # D0 + mosi = 2; # D2 + reset = 4; # D4 +; + +programmer + id = "ft232r"; + desc = "FT232R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # RxD + sck = 0; # TxD + mosi = 2; # RTS + reset = 4; # DTR +; + +# see http://www.bitwizard.nl/wiki/index.php/FTDI_ATmega +programmer + id = "bwmega"; + desc = "BitWizard ftdi_atmega builtin programmer"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 5; # DSR + sck = 6; # DCD + mosi = 3; # CTS + reset = 7; # RI +; + +# see http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html +# Note: pins are numbered from 1! +programmer + id = "arduino-ft232r"; + desc = "Arduino: FT232R connected to ISP"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 3; # CTS X3(1) + sck = 5; # DSR X3(2) + mosi = 6; # DCD X3(3) + reset = 7; # RI X3(4) +; + +# website mentioned above uses this id +programmer parent "arduino-ft232r" + id = "diecimila"; + desc = "alias for arduino-ft232r"; +; + +# There is a ATmega328P kit PCB called "uncompatino". +# This board allows ISP via its on-board FT232R. +# This is designed like Arduino Duemilanove but has no standard ICPS header. +# Its 4 pairs of pins are shorted to enable ftdi_syncbb. +# http://akizukidenshi.com/catalog/g/gP-07487/ +# http://akizukidenshi.com/download/ds/akizuki/k6096_manual_20130816.pdf +programmer + id = "uncompatino"; + desc = "uncompatino with all pairs of pins shorted"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 3; # cts + sck = 5; # dsr + mosi = 6; # dcd + reset = 7; # ri +; + +# FTDI USB to serial cable TTL-232R-5V with a custom adapter for ICSP +# http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm +# http://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_TTL-232R_CABLES.pdf +# For ICSP pinout see for example http://www.atmel.com/images/doc2562.pdf +# (Figure 1. ISP6PIN header pinout and Table 1. Connections required for ISP ...) +# TTL-232R GND 1 Black -> ICPS GND (pin 6) +# TTL-232R CTS 2 Brown -> ICPS MOSI (pin 4) +# TTL-232R VCC 3 Red -> ICPS VCC (pin 2) +# TTL-232R TXD 4 Orange -> ICPS RESET (pin 5) +# TTL-232R RXD 5 Yellow -> ICPS SCK (pin 3) +# TTL-232R RTS 6 Green -> ICPS MISO (pin 1) +# Except for VCC and GND, you can connect arbitual pairs as long as +# the following table is adjusted. +programmer + id = "ttl232r"; + desc = "FTDI TTL232R-5V with ICSP adapter"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 2; # rts + sck = 1; # rxd + mosi = 3; # cts + reset = 0; # txd +; + +programmer + id = "usbasp"; + desc = "USBasp, http://www.fischl.de/usbasp/"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + usbvendor = "www.fischl.de"; + usbproduct = "USBasp"; + + # following variants are autodetected for id "usbasp" + + # original usbasp from fischl.de + # see above "usbasp" + + # old usbasp from fischl.de + #usbvid = 0x03EB; # ATMEL + #usbpid = 0xC7B4; # (unoffical) USBasp + #usbvendor = "www.fischl.de"; + #usbproduct = "USBasp"; + + # NIBObee (only if -P nibobee is given on command line) + # see below "nibobee" +; + +programmer + id = "nibobee"; + desc = "NIBObee"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x092F; # NIBObee PID + usbvendor = "www.nicai-systems.com"; + usbproduct = "NIBObee"; +; + +programmer + id = "usbasp-clone"; + desc = "Any usbasp clone with correct VID/PID"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + #usbvendor = ""; + #usbproduct = ""; +; + +# USBtiny can also be used for TPI programming. +# In that case, a resistor of 1 kOhm is needed between MISO and MOSI +# pins of the connector, and MISO (pin 1 of the 6-pin connector) +# connects to TPIDATA. +programmer + id = "usbtiny"; + desc = "USBtiny simple USB programmer, https://learn.adafruit.com/usbtinyisp"; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x1781; + usbpid = 0x0c9f; +; + +# commercial version of USBtiny, using a separate VID/PID +programmer + id = "ehajo-isp"; + desc = "avr-isp-programmer from eHaJo, http://www.eHaJo.de"; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x16D0; + usbpid = 0x0BA5; +; + +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; +; + +programmer + id = "butterfly"; + desc = "Atmel Butterfly Development Board"; + type = "butterfly"; + connection_type = serial; +; + +programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = "butterfly"; + connection_type = serial; +; + +programmer + id = "avr911"; + desc = "Atmel AppNote AVR911 AVROSP"; + type = "butterfly"; + connection_type = serial; +; + +# suggested in http://forum.mikrokopter.de/topic-post48317.html +programmer + id = "mkbutterfly"; + desc = "Mikrokopter.de Butterfly"; + type = "butterfly_mk"; + connection_type = serial; +; + +programmer parent "mkbutterfly" + id = "butterfly_mk"; +; + +programmer + id = "jtagmkI"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = "jtagmki"; + connection_type = serial; +; + +# easier to type +programmer parent "jtagmkI" + id = "jtag1"; +; + +# easier to type +programmer parent "jtag1" + id = "jtag1slow"; + baudrate = 19200; +; + +# The JTAG ICE mkII has both, serial and USB connectivity. As it is +# mostly used through USB these days (AVR Studio 5 only supporting it +# that way), we make connection_type = usb the default. Users are +# still free to use a serial port with the -P option. + +programmer + id = "jtagmkII"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = "jtagmkii"; + connection_type = usb; +; + +# easier to type +programmer parent "jtagmkII" + id = "jtag2slow"; +; + +# JTAG ICE mkII @ 115200 Bd +programmer parent "jtag2slow" + id = "jtag2fast"; + baudrate = 115200; +; + +# make the fast one the default, people will love that +programmer parent "jtag2fast" + id = "jtag2"; +; + +# JTAG ICE mkII in ISP mode +programmer + id = "jtag2isp"; + desc = "Atmel JTAG ICE mkII in ISP mode"; + baudrate = 115200; + type = "jtagmkii_isp"; + connection_type = usb; +; + +# JTAG ICE mkII in debugWire mode +programmer + id = "jtag2dw"; + desc = "Atmel JTAG ICE mkII in debugWire mode"; + baudrate = 115200; + type = "jtagmkii_dw"; + connection_type = usb; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtagmkII_avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = "jtagmkii_avr32"; + connection_type = usb; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtag2avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = "jtagmkii_avr32"; + connection_type = usb; +; + +# JTAG ICE mkII in PDI mode +programmer + id = "jtag2pdi"; + desc = "Atmel JTAG ICE mkII PDI mode"; + baudrate = 115200; + type = "jtagmkii_pdi"; + connection_type = usb; +; + +# AVR Dragon in JTAG mode +programmer + id = "dragon_jtag"; + desc = "Atmel AVR Dragon in JTAG mode"; + baudrate = 115200; + type = "dragon_jtag"; + connection_type = usb; +; + +# AVR Dragon in ISP mode +programmer + id = "dragon_isp"; + desc = "Atmel AVR Dragon in ISP mode"; + baudrate = 115200; + type = "dragon_isp"; + connection_type = usb; +; + +# AVR Dragon in PP mode +programmer + id = "dragon_pp"; + desc = "Atmel AVR Dragon in PP mode"; + baudrate = 115200; + type = "dragon_pp"; + connection_type = usb; +; + +# AVR Dragon in HVSP mode +programmer + id = "dragon_hvsp"; + desc = "Atmel AVR Dragon in HVSP mode"; + baudrate = 115200; + type = "dragon_hvsp"; + connection_type = usb; +; + +# AVR Dragon in debugWire mode +programmer + id = "dragon_dw"; + desc = "Atmel AVR Dragon in debugWire mode"; + baudrate = 115200; + type = "dragon_dw"; + connection_type = usb; +; + +# AVR Dragon in PDI mode +programmer + id = "dragon_pdi"; + desc = "Atmel AVR Dragon in PDI mode"; + baudrate = 115200; + type = "dragon_pdi"; + connection_type = usb; +; + +programmer + id = "jtag3"; + desc = "Atmel AVR JTAGICE3 in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3pdi"; + desc = "Atmel AVR JTAGICE3 in PDI mode"; + type = "jtagice3_pdi"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3dw"; + desc = "Atmel AVR JTAGICE3 in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3isp"; + desc = "Atmel AVR JTAGICE3 in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "xplainedpro"; + desc = "Atmel AVR XplainedPro in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2111; +; + +programmer + id = "xplainedpro_updi"; + desc = "Atmel AVR XplainedPro in UPDI mode"; + type = "jtagice3_updi"; + connection_type = usb; + usbpid = 0x2111; +; + +programmer + id = "xplainedmini"; + desc = "Atmel AVR XplainedMini in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2145; +; + +programmer + id = "xplainedmini_dw"; + desc = "Atmel AVR XplainedMini in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2145; +; + +programmer + id = "xplainedmini_updi"; + desc = "Atmel AVR XplainedMini in UPDI mode"; + type = "jtagice3_updi"; + connection_type = usb; + usbpid = 0x2145; +; + +programmer + id = "atmelice"; + desc = "Atmel-ICE (ARM/AVR) in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "atmelice_pdi"; + desc = "Atmel-ICE (ARM/AVR) in PDI mode"; + type = "jtagice3_pdi"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "atmelice_updi"; + desc = "Atmel-ICE (ARM/AVR) in UPDI mode"; + type = "jtagice3_updi"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "atmelice_dw"; + desc = "Atmel-ICE (ARM/AVR) in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "atmelice_isp"; + desc = "Atmel-ICE (ARM/AVR) in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "powerdebugger"; + desc = "Atmel PowerDebugger (ARM/AVR) in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2144; +; + +programmer + id = "powerdebugger_pdi"; + desc = "Atmel PowerDebugger (ARM/AVR) in PDI mode"; + type = "jtagice3_pdi"; + connection_type = usb; + usbpid = 0x2144; +; + +programmer + id = "powerdebugger_updi"; + desc = "Atmel PowerDebugger (ARM/AVR) in UPDI mode"; + type = "jtagice3_updi"; + connection_type = usb; + usbpid = 0x2144; +; + +programmer + id = "powerdebugger_dw"; + desc = "Atmel PowerDebugger (ARM/AVR) in debugWire mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2144; +; + +programmer + id = "powerdebugger_isp"; + desc = "Atmel PowerDebugger (ARM/AVR) in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2144; +; + +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"; + connection_type = usb; +; + +programmer + id = "flip2"; + desc = "FLIP USB DFU protocol version 2 (AVR4023)"; + type = "flip2"; + connection_type = usb; +; + +# 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; +; + +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; +; + +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"; +; + +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; +; + +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; +; + +programmer + id = "picoweb"; + desc = "Picoweb Programming Cable, http://www.picoweb.net/"; + type = "par"; + connection_type = parallel; + reset = 2; + sck = 3; + mosi = 4; + miso = 13; +; + +programmer + id = "abcmini"; + desc = "ABCmini Board, aka Dick Smith HOTCHIP"; + type = "par"; + connection_type = parallel; + reset = 4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "futurlec"; + desc = "Futurlec.com programming cable."; + type = "par"; + connection_type = parallel; + reset = 3; + sck = 2; + mosi = 1; + miso = 10; +; + + +# 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; +; + + +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. +# +# PC - DB9 - Pins for RS232: +# +# GND 5 -- |O +# | O| <- 9 RI +# DTR 4 <- |O | +# | O| <- 8 CTS +# TXD 3 <- |O | +# | O| -> 7 RTS +# RXD 2 -> |O | +# | O| <- 6 DSR +# DCD 1 -> |O +# +# Using RXD is currently not supported. +# Using RI is not supported under Win32 but is supported under Posix. + +# serial ponyprog design (dasa2 in uisp) +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "ponyser"; + desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts"; + type = "serbb"; + connection_type = serial; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# Same as above, different name +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer parent "ponyser" + id = "siprog"; + desc = "Lancos SI-Prog "; +; + +# unknown (dasa in uisp) +# reset=rts sck=dtr mosi=txd miso=cts + +programmer + id = "dasa"; + desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; + type = "serbb"; + connection_type = serial; + reset = 7; + sck = 4; + mosi = 3; + miso = 8; +; + +# unknown (dasa3 in uisp) +# reset=!dtr sck=rts mosi=txd miso=cts + +programmer + id = "dasa3"; + desc = "serial port banging, reset=!dtr sck=rts mosi=txd miso=cts"; + type = "serbb"; + connection_type = serial; + reset = ~4; + sck = 7; + mosi = 3; + miso = 8; +; + +# C2N232i (jumper configuration "auto") +# reset=dtr sck=!rts mosi=!txd miso=!cts + +programmer + id = "c2n232i"; + desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; + type = "serbb"; + connection_type = serial; + reset = 4; + sck = ~7; + mosi = ~3; + miso = ~8; +; + +# +# PART DEFINITIONS +# + +#------------------------------------------------------------ +# ATtiny11 +#------------------------------------------------------------ + +# This is an HVSP-only device. + +part + id = "t11"; + desc = "ATtiny11"; + stk500_devcode = 0x11; + signature = 0x1e 0x90 0x04; + chip_erase_delay = 20000; + + timeout = 200; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + blocksize = 64; + readsize = 256; + delay = 5; + ; + + memory "flash" + size = 1024; + blocksize = 128; + readsize = 256; + delay = 3; + ; + + memory "signature" + size = 3; + ; + + memory "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + + memory "fuse" + size = 1; + ; +; + +#------------------------------------------------------------ +# ATtiny12 +#------------------------------------------------------------ + +part + id = "t12"; + desc = "ATtiny12"; + stk500_devcode = 0x12; + avr910_devcode = 0x55; + signature = 0x1e 0x90 0x05; + chip_erase_delay = 20000; + 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; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 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 = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x 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 x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 8; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4500; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x 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", + " 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_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 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"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + 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 "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "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 x x x x x", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# ATtiny13 +#------------------------------------------------------------ + +part + id = "t13"; + desc = "ATtiny13"; + has_debugwire = yes; + flash_instr = 0xB4, 0x0E, 0x1E; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x0E, 0xB4, 0x0E, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; + signature = 0x1e 0x90 0x07; + chip_erase_delay = 4000; + 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 90; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 0; + + memory "eeprom" + size = 64; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x x 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 x 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 x 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 = 1024; + page_size = 32; + num_pages = 32; + 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 0 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 0 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"; + + 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", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + 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; + 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"; + ; + + 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"; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + 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"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + 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"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny15 +#------------------------------------------------------------ + +part + id = "t15"; + desc = "ATtiny15"; + stk500_devcode = 0x13; + avr910_devcode = 0x56; + signature = 0x1e 0x90 0x06; + chip_erase_delay = 8200; + 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; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 5; + synchcycles = 6; + latchcycles = 16; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 8200; + max_write_delay = 8200; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x 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 x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4100; + max_write_delay = 4100; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x 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", + " 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_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 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"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + 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 "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o x x o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i 1 1 i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# AT90s1200 +#------------------------------------------------------------ + +part + id = "1200"; + desc = "AT90S1200"; + is_at90s1200 = yes; + stk500_devcode = 0x33; + avr910_devcode = 0x13; + signature = 0x1e 0x90 0x01; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 20000; + 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 = 1; + bytedelay = 0; + pollindex = 0; + pollvalue = 0xFF; + 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 64; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x 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 x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 32; + readsize = 256; + ; + memory "flash" + size = 1024; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x 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", + " 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_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x02; + delay = 15; + blocksize = 128; + readsize = 256; + ; + 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 "fuse" + size = 1; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4414 +#------------------------------------------------------------ + +part + id = "4414"; + desc = "AT90S4414"; + stk500_devcode = 0x50; + avr910_devcode = 0x28; + signature = 0x1e 0x92 0x01; + chip_erase_delay = 20000; + 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 = 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, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 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 x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 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"; + + read_hi = " 0 0 1 0 1 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_lo = " 0 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_hi = " 0 1 0 0 1 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"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + 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 "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2313 +#------------------------------------------------------------ + +part + id = "2313"; + desc = "AT90S2313"; + stk500_devcode = 0x40; + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x01; + chip_erase_delay = 20000; + 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 = 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = "1 0 1 0 0 0 0 0 x x x 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 x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x 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 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + 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 "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x i i x", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2333 +#------------------------------------------------------------ + +part + id = "2333"; +##### WARNING: No XML file for device 'AT90S2333'! ##### + desc = "AT90S2333"; + stk500_devcode = 0x42; + avr910_devcode = 0x34; + signature = 0x1e 0x91 0x05; + chip_erase_delay = 20000; + 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 = 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x 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 x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x 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 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + 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 "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "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 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + 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; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "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 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x 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 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + 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 "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + 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 = 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x 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 x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 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"; + + read_hi = " 0 0 1 0 1 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_lo = " 0 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_hi = " 0 1 0 0 1 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"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + 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 "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "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 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + 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"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x 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 x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 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"; + + read_hi = " 0 0 1 0 1 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_lo = " 0 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_hi = " 0 1 0 0 1 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 "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 "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "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 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 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 x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 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"; + + read_hi = " 0 0 1 0 1 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_lo = " 0 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_hi = " 0 1 0 0 1 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"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + 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 "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + 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 = 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 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 x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 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"; + + read_hi = " 0 0 1 0 1 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_lo = " 0 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_hi = " 0 1 0 0 1 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"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + 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 "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATmega103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + 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 = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + 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"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + 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", + " 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 = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + 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"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATmega64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + 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 = 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, 0x00; + 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 = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + ocdrev = 2; + + 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", + " 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"; + + mode = 0x04; + delay = 20; + blocksize = 64; + 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", + " x 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", + " x 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", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + 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 x 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 = 4; + 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"; + ; + + 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"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega128 +#------------------------------------------------------------ + +part + id = "m128"; + desc = "ATmega128"; + has_jtag = yes; + stk500_devcode = 0xB2; + avr910_devcode = 0x43; + signature = 0x1e 0x97 0x02; + 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 = 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, 0x00; + 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 = 0x22; + spmcr = 0x68; + rampz = 0x3b; + allowfullpagebitstream = yes; + + 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 = 0xff; + readback_p2 = 0xff; + 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"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + 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", + "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"; + + 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 = 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 x 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 = 4; + 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN128 +#------------------------------------------------------------ + +part + id = "c128"; + desc = "AT90CAN128"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x97 0x81; + 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"; + + 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, 0x01; + 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; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + 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 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 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 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"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + 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", + "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 = 256; + 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 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 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 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 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN64 +#------------------------------------------------------------ + +part + id = "c64"; + desc = "AT90CAN64"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x96 0x81; + 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"; + + 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, 0x01; + 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; + rampz = 0x3b; + eecr = 0x3f; + 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 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 = 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 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 = 256; + 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 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 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 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 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN32 +#------------------------------------------------------------ + +part + id = "c32"; + desc = "AT90CAN32"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x95 0x81; + 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"; + + 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, 0x01; + 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; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* 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 x x x 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 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 x a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 256; + 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", + " 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 = 256; + 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 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 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 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 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATmega16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + 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", + "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, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + 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 x 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 x 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 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 128; + 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"; + + 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_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"; + + 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; + delay = 6; + 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 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 "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 = 4; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega164P +#------------------------------------------------------------ + +# 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; + ; + + +#------------------------------------------------------------ +# ATmega324P +#------------------------------------------------------------ + +# similar to ATmega164P + +part + id = "m324p"; + desc = "ATmega324P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x95 0x08; + 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, 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 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"; + + 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 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + 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 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 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 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; + ; + + 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 0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega324PA +#------------------------------------------------------------ + +# similar to ATmega324P + +part parent "m324p" + id = "m324pa"; + desc = "ATmega324PA"; + signature = 0x1e 0x95 0x11; + + ocdrev = 3; + ; + + +#------------------------------------------------------------ +# ATmega644 +#------------------------------------------------------------ + +# 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"; + + mode = 0x41; + delay = 10; + blocksize = 128; + 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 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 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 = 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; + ; + + 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 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega644P +#------------------------------------------------------------ + +# similar to ATmega164p + +part parent "m644" + id = "m644p"; + desc = "ATmega644P"; + signature = 0x1e 0x96 0x0a; + + ocdrev = 3; + ; + + + +#------------------------------------------------------------ +# ATmega1284 +#------------------------------------------------------------ + +# similar to ATmega164 + +part + id = "m1284"; + desc = "ATmega1284"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x06; + 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 = 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; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + 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 = 4096; + 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"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + 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", + "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 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 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 = 10; + 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; + ; + + 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 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega1284P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m1284p"; + desc = "ATmega1284P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x05; + 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 = 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; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + 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 = 4096; + 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"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + 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", + "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 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 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 = 10; + 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; + ; + + 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 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATmega162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + 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"; + + ocdrev = 2; + + 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"; + + 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_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"; + + 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 = 10; + blocksize = 128; + readsize = 256; + + ; + + 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, 0x00; + 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; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + 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 x 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 x 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 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 "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + 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 = 16000; + max_write_delay = 16000; + + 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 = 16000; + max_write_delay = 16000; + + 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"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + 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"; + + 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 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 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATmega163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + 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 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 = 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 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 x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + 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", + " 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", + " 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 = 0x11; + delay = 20; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + 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 x x 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 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + 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 x x x x 1 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 1 1 1 1 1 i i i"; + ; + + 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 0 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"; + ; + + 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 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATmega169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + 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 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; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 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 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"; + + 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; + ; + + 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", + " 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", + " 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", + " 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 = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + 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 = 2000; + max_write_delay = 2000; + 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; + 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"; + + 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 "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"; + + 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 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 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# 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"; + + 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; + + 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", + " x x x x x x 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 x 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 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 = 8; + 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", + " x 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", + " x 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", + " 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 = 6; + blocksize = 256; + 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"; + ; + + 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 "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"; + ; + ; + +#------------------------------------------------------------ +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part parent "m329" + id = "m329p"; + desc = "ATmega329P"; + signature = 0x1e 0x95 0x0b; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290 +#------------------------------------------------------------ + +# identical to ATmega329 + +part parent "m329" + id = "m3290"; + desc = "ATmega3290"; + signature = 0x1e 0x95 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part parent "m3290" + id = "m3290p"; + desc = "ATmega3290P"; + signature = 0x1e 0x95 0x0c; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega649 +#------------------------------------------------------------ + +part + id = "m649"; + desc = "ATmega649"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 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"; + + 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; + + 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", + " 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 = 20; + 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", + " 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", + " x x x 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 = 256; + 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"; + ; + + 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 "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"; + ; + ; + +#------------------------------------------------------------ +# ATmega6490 +#------------------------------------------------------------ + +# identical to ATmega649 + +part parent "m649" + id = "m6490"; + desc = "ATmega6490"; + signature = 0x1e 0x96 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega32 +#------------------------------------------------------------ + +part + id = "m32"; + desc = "ATmega32"; + has_jtag = yes; + stk500_devcode = 0x91; + avr910_devcode = 0x72; + signature = 0x1e 0x95 0x02; + 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 = 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, 0x00; + 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 = yes; + + ocdrev = 2; + + 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 x x x x 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 x 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 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 64; + 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 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_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"; + + 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; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + 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 = 2000; + max_write_delay = 2000; + 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 "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"; + + 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 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 = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega161 +#------------------------------------------------------------ + +part + id = "m161"; + desc = "ATmega161"; + stk500_devcode = 0x80; + avr910_devcode = 0x60; + signature = 0x1e 0x94 0x01; + chip_erase_delay = 28000; + 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 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 = 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + memory "eeprom" + size = 512; + min_write_delay = 3400; + max_write_delay = 3400; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 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 x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 14000; + max_write_delay = 14000; + readback_p1 = 0xff; + readback_p2 = 0xff; + 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", + " 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", + " 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 = 0x21; + delay = 16; + blocksize = 128; + readsize = 256; + ; + + memory "fuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x o x o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x 1 i 1 i i i i i"; + ; + + 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"; + + 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 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega8 +#------------------------------------------------------------ + +part + id = "m8"; + desc = "ATmega8"; + stk500_devcode = 0x70; + avr910_devcode = 0x76; + signature = 0x1e 0x93 0x07; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 10000; + 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + 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 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 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + 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 = 0x00; + 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 0 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 0 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 = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + 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 = 2000; + max_write_delay = 2000; + 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"; + ; + + # 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"; + + 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 = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 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"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega8515 +#------------------------------------------------------------ + +part + id = "m8515"; + desc = "ATmega8515"; + stk500_devcode = 0x63; + avr910_devcode = 0x3A; + signature = 0x1e 0x93 0x06; + 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 = 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, 0x00; + 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; + + memory "eeprom" + size = 512; + 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 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 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + 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", + " 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 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 0 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 = 0x21; + delay = 6; + blocksize = 64; + 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 "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"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 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"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega8535 +#------------------------------------------------------------ + +part + id = "m8535"; + desc = "ATmega8535"; + stk500_devcode = 0x64; + avr910_devcode = 0x69; + signature = 0x1e 0x93 0x08; + 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", + "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, 0x00; + 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; + + memory "eeprom" + size = 512; + 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 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 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + 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", + " 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 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 0 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 = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + 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 = 2000; + max_write_delay = 2000; + 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 "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"; + + 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 = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 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"; + ; + ; + + +#------------------------------------------------------------ +# ATtiny26 +#------------------------------------------------------------ + +part + id = "t26"; + desc = "ATtiny26"; + stk500_devcode = 0x21; + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x09; + pagel = 0xb3; + bs2 = 0xb2; + 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 = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x 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 x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + 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", + " x x x x x x 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 x x x 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 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 x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 16; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 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"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + 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 x x x 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 "calibration" + size = 4; + 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"; + desc = "ATtiny261"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0c; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + 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 = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 128; + page_size = 4; + num_pages = 32; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = "1 0 1 0 0 0 0 0 x x x 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 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 = 10; + 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", + " x x x x x x 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 x x x 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 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 x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 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"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + 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 = 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"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny461 +#------------------------------------------------------------ +# Close to ATtiny261 + +part + id = "t461"; + desc = "ATtiny461"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x08; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + 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 = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 256; + page_size = 4; + num_pages = 64; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x 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 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 = 10; + 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", + " x x x x x 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 x x 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 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 x 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 x x 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; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 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"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + 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 = 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"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny861 +#------------------------------------------------------------ +# Close to ATtiny461 + +part + id = "t861"; + desc = "ATtiny861"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x93 0x0d; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + 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 = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 512; + num_pages = 128; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 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 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"; + + 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; + ; + + 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", + " x x x x 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 x 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 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 x 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 x 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; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 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"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + 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 = 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"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny28 +#------------------------------------------------------------ + +# This is an HVPP-only device. + +part + id = "t28"; + desc = "ATtiny28"; + stk500_devcode = 0x22; + avr910_devcode = 0x5c; + signature = 0x1e 0x91 0x07; + + 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 = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "flash" + size = 2048; + page_size = 2; + readsize = 256; + delay = 5; + ; + + memory "signature" + size = 3; + ; + + memory "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + + memory "fuse" + size = 1; + ; +; + + + +#------------------------------------------------------------ +# ATmega48 +#------------------------------------------------------------ + +part + id = "m48"; + desc = "ATmega48"; + 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 = 0x59; +# avr910_devcode = 0x; + signature = 0x1e 0x92 0x05; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 45000; + 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 = 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; + + 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 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 = 20; + 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 = 0x00; + readback_p2 = 0x00; + 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 = 6; + blocksize = 64; + 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 x x 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega48P +#------------------------------------------------------------ + +part parent "m48" + id = "m48p"; + desc = "ATmega48P"; + signature = 0x1e 0x92 0x0a; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega48PB +#------------------------------------------------------------ + +part parent "m48" + id = "m48pb"; + desc = "ATmega48PB"; + signature = 0x1e 0x92 0x10; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega88 +#------------------------------------------------------------ + +part + id = "m88"; + desc = "ATmega88"; + 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 0x0a; + 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"; + + 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; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + 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"; + + 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"; + + 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; + ; + 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 = 64; + 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega88P +#------------------------------------------------------------ + +part parent "m88" + id = "m88p"; + desc = "ATmega88P"; + signature = 0x1e 0x93 0x0f; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega88PB +#------------------------------------------------------------ + +part parent "m88" + id = "m88pb"; + desc = "ATmega88PB"; + signature = 0x1e 0x93 0x16; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega168 +#------------------------------------------------------------ + +part + id = "m168"; + desc = "ATmega168"; + 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 0x06; + 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"; + + 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; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + 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"; + + 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"; + + 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; + ; + + 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 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"; + + 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 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 = 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"; + ; + + 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"; + ; +; + +#------------------------------------------------------------ +# ATmega168P +#------------------------------------------------------------ + +part parent "m168" + id = "m168p"; + desc = "ATmega168P"; + signature = 0x1e 0x94 0x0b; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# ATmega168PB +#------------------------------------------------------------ + +part parent "m168" + id = "m168pb"; + desc = "ATmega168PB"; + signature = 0x1e 0x94 0x15; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# ATtiny88 +#------------------------------------------------------------ + +part + 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 = 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"; + + 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; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + 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 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 = 20; + blocksize = 4; + 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"; + + 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 = 64; + 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 x x 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega328 +#------------------------------------------------------------ + +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"; + + 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 = 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; + + 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"; + + 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"; + + 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"; + + 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 = 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"; + ; + + 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"; + ; +; + +part parent "m328" + id = "m328p"; + desc = "ATmega328P"; + signature = 0x1e 0x95 0x0F; + + ocdrev = 1; +; + +part parent "m328" + id = "m328pb"; + desc = "ATmega328PB"; + signature = 0x1e 0x95 0x16; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# ATmega32m1 +#------------------------------------------------------------ + +part parent "m328" + id = "m32m1"; + desc = "ATmega32M1"; + # stk500_devcode = 0x; + # avr910_devcode = 0x; + signature = 0x1e 0x95 0x84; + bs2 = 0xe2; + + 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"; + ; +; + +#------------------------------------------------------------ +# ATmega64m1 +#------------------------------------------------------------ + +part parent "m328" + id = "m64m1"; + desc = "ATmega64M1"; + # stk500_devcode = 0x; + # avr910_devcode = 0x; + signature = 0x1e 0x96 0x84; + bs2 = 0xe2; + + 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; + 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 = 0; + + 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"; + +# 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", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# 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", + "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; + 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; + ; +# 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; + 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 +#------------------------------------------------------------ + +part + id = "t4313"; + desc = "ATtiny4313"; + 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"; + + 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; + 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 = 0; + + 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 = 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 = 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; + ; + + 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 = 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"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2 +#------------------------------------------------------------ + +part + id = "pwm2"; + desc = "AT90PWM2"; + 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"; + + 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 = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + 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 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"; + + 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 = 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 = 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; + 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 "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"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3 +#------------------------------------------------------------ + +# Completely identical to AT90PWM2 (including the signature!) + +part parent "pwm2" + id = "pwm3"; + desc = "AT90PWM3"; + ; + +#------------------------------------------------------------ +# AT90PWM2B +#------------------------------------------------------------ +# Same as AT90PWM2 but different signature. + +part parent "pwm2" + id = "pwm2b"; + desc = "AT90PWM2B"; + signature = 0x1e 0x93 0x83; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# AT90PWM3B +#------------------------------------------------------------ + +# Completely identical to AT90PWM2B (including the signature!) + +part parent "pwm2b" + id = "pwm3b"; + desc = "AT90PWM3B"; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# AT90PWM316 +#------------------------------------------------------------ + +# 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 = 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"; + + 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_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"; + + 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; + delay = 6; + blocksize = 128; + readsize = 256; + ; + ; + +#------------------------------------------------------------ +# AT90PWM216 +#------------------------------------------------------------ +# Completely identical to AT90PWM316 (including the signature!) + +part parent "pwm316" + id = "pwm216"; + desc = "AT90PWM216"; + ; + +#------------------------------------------------------------ +# ATtiny25 +#------------------------------------------------------------ + +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; + + 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, 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; + + 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 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 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 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# 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 "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"; + ; + ; + +#------------------------------------------------------------ +# ATtiny45 +#------------------------------------------------------------ + +part + 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; + + 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, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + 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; + + ocdrev = 1; + + 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 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 = 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 = 6; + blocksize = 32; + readsize = 256; + ; +# 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 "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"; + ; + ; + +#------------------------------------------------------------ +# ATtiny85 +#------------------------------------------------------------ + +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 = 400000; + + 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, 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; + + ocdrev = 1; + + 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 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"; + + 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 = 12; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 30000; + max_write_delay = 30000; + 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 = 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 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"; + + 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 = 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 = 10; + blocksize = 256; + 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega1280 +#------------------------------------------------------------ + +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"; + + 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 = 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 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"; + + mode = 0x41; + delay = 10; + blocksize = 8; + 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"; + + 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"; + + 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 = 10; + blocksize = 256; + 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"; + ; + + 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; + ; + +#------------------------------------------------------------ +# 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; + 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, 0x02; + 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 = 4; + + 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 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"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + 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"; + + 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 = 10; + blocksize = 256; + 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega2561 +#------------------------------------------------------------ + +part parent "m2560" + id = "m2561"; + desc = "ATmega2561"; + signature = 0x1e 0x98 0x02; + + ocdrev = 4; + ; + +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM + +part parent "m2561" + id = "m128rfa1"; + desc = "ATmega128RFA1"; + signature = 0x1e 0xa7 0x01; + chip_erase_delay = 55000; + bs2 = 0xE2; + + ocdrev = 3; + + 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"; + + 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"; + + 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 a2 a1 a0", + " 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", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + 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; + 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 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 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 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + 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"; + 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"; + ; + ; + +#------------------------------------------------------------ +# 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", + " 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 = 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 = 6; + 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 "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"; + ; + ; + +#------------------------------------------------------------ +# ATtiny84 +#------------------------------------------------------------ + +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; + + 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 = 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 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"; + + 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 = 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; + ; +# 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"; + ; + + 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 "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"; + ; + ; + +#------------------------------------------------------------ +# ATtiny441 +#------------------------------------------------------------ + +part parent "t44" + id = "t441"; + desc = "ATtiny441"; + signature = 0x1e 0x92 0x15; + + 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"; + + 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 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 0 a10 a9 a8", + " a7 a6 a5 a4 a3 x x x", + " x x x x x x x x"; + + 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; + ; +; + +#------------------------------------------------------------ +# 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"; + + 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; + ; +; + +#------------------------------------------------------------ +# 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 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; + 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 = 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"; + + 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 = 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", + " 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 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 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"; + 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +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"; + + 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 = 2048; + 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"; + + 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; + ; + + memory "flash" + paged = yes; + 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", + " 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 = 6; + blocksize = 256; + 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 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 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90USB647 +#------------------------------------------------------------ +# 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; + + 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 = 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 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; + ; + + 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"; + + 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"; + + 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 = 256; + 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 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 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"; + ; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1287 +#------------------------------------------------------------ +# identical to AT90USB1286 + +part parent "usb1286" + id = "usb1287"; + desc = "AT90USB1287"; + signature = 0x1e 0x97 0x82; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + +part + id = "usb162"; + desc = "AT90USB162"; + has_jtag = no; + has_debugwire = yes; + 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", + "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 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 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"; + ; + ; + +#------------------------------------------------------------ +# AT90USB82 +#------------------------------------------------------------ +# 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; + 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 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 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 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 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 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 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 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 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 +#------------------------------------------------------------ + +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 x x 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"; + ; + ; + +#------------------------------------------------------------ +# 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 x x 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega3250 +#------------------------------------------------------------ + +part parent "m325" + id = "m3250"; + desc = "ATmega3250"; + signature = 0x1E 0x95 0x06; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega6450 +#------------------------------------------------------------ + +part parent "m645" + id = "m6450"; + desc = "ATmega6450"; + signature = 0x1E 0x96 0x06; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# 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; +; + +#------------------------------------------------------------ +# 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 +#------------------------------------------------------------ + +part + id = "uc3a0512"; + desc = "AT32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + 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; + ; +; + +part parent "uc3a0512" + id = "ucr2"; + desc = "deprecated, use 'uc3a0512'"; +; + +#------------------------------------------------------------ +# ATtiny1634. +#------------------------------------------------------------ + +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"; + + 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; + 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; + + 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"; + + 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"; + + 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; + ; + + 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"; + + 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 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 = 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 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 x x x x 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"; + ; + + 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"; + ; +; + +#------------------------------------------------------------ +# Common values for reduced core tinys (4/5/9/10/20/40) +#------------------------------------------------------------ + +part + id = ".reduced_core_tiny"; + desc = "Common values for reduced core tinys"; + has_tpi = yes; + + memory "signature" + size = 3; + offset = 0x3fc0; + page_size = 16; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + page_size = 16; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + page_size = 16; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + page_size = 16; + ; +; + +#------------------------------------------------------------ +# ATtiny4 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ + +part parent "t4" + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; +; + +#------------------------------------------------------------ +# ATtiny9 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t9"; + desc = "ATtiny9"; + signature = 0x1e 0x90 0x08; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ + +part parent "t9" + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; +; + +#------------------------------------------------------------ +# ATtiny20 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t20"; + desc = "ATtiny20"; + signature = 0x1e 0x91 0x0F; + + memory "flash" + size = 2048; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny40 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t40"; + desc = "ATtiny40"; + signature = 0x1e 0x92 0x0E; + + memory "flash" + size = 4096; + offset = 0x4000; + page_size = 64; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATmega406 +#------------------------------------------------------------ + +part + id = "m406"; + desc = "ATMEGA406"; + has_jtag = yes; + signature = 0x1e 0x95 0x07; + + # STK500 parameters (parallel programming IO lines) + pagel = 0xa7; + bs2 = 0xa0; + serial = no; + parallel = yes; + + # 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; + + # 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 "flash" + paged = yes; + size = 40960; + page_size = 128; + blocksize = 128; + readsize = 128; + num_pages = 320; + ; + + memory "hfuse" + size = 1; + ; + + memory "lfuse" + size = 1; + ; + + memory "lockbits" + size = 1; + ; + + memory "signature" + size = 3; + ; +; + +#------------------------------------------------------------ +# AVR8X family common values +#------------------------------------------------------------ + +part + id = ".avr8x"; + desc = "AVR8X family common values"; + has_updi = yes; + nvm_base = 0x1000; + ocd_base = 0x0F80; + + memory "signature" + size = 3; + offset = 0x1100; + ; + + memory "prodsig" + size = 0x3D; + offset = 0x1103; + page_size = 0x3D; + readsize = 0x3D; + ; + + memory "fuses" + size = 9; + offset = 0x1280; + ; + + memory "fuse0" + size = 1; + offset = 0x1280; + ; + + memory "fuse1" + size = 1; + offset = 0x1281; + ; + + memory "fuse2" + size = 1; + offset = 0x1282; + ; + + memory "fuse4" + size = 1; + offset = 0x1284; + ; + + memory "fuse5" + size = 1; + offset = 0x1285; + ; + + memory "fuse6" + size = 1; + offset = 0x1286; + ; + + memory "fuse7" + size = 1; + offset = 0x1287; + ; + + memory "fuse8" + size = 1; + offset = 0x1288; + ; + + memory "lock" + size = 1; + offset = 0x128a; + ; + + memory "data" + # SRAM, only used to supply the offset + offset = 0x1000000; + ; +; + +#------------------------------------------------------------ +# AVR8X tiny family common values +#------------------------------------------------------------ + +part parent ".avr8x" + id = ".avr8x_tiny"; + desc = "AVR8X tiny family common values"; + family_id = "tinyAVR"; + + memory "usersig" + size = 0x20; + offset = 0x1300; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# AVR8X mega family common values +#------------------------------------------------------------ + +part parent ".avr8x" + id = ".avr8x_mega"; + desc = "AVR8X mega family common values"; + family_id = "megaAVR"; + + memory "usersig" + size = 0x40; + offset = 0x1300; + page_size = 0x40; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny202 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t202"; + desc = "ATtiny202"; + signature = 0x1E 0x91 0x23; + + memory "flash" + size = 0x800; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x40; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny204 +#------------------------------------------------------------ + +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; + ; +; + +#------------------------------------------------------------ +# ATtiny402 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t402"; + desc = "ATtiny402"; + signature = 0x1E 0x92 0x23; + + memory "flash" + size = 0x1000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny404 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t404"; + desc = "ATtiny404"; + signature = 0x1E 0x92 0x26; + + memory "flash" + size = 0x1000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny406 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t406"; + desc = "ATtiny406"; + signature = 0x1E 0x92 0x25; + + memory "flash" + size = 0x1000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny804 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t804"; + desc = "ATtiny804"; + signature = 0x1E 0x93 0x25; + + memory "flash" + size = 0x2000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny806 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t806"; + desc = "ATtiny806"; + signature = 0x1E 0x93 0x24; + + memory "flash" + size = 0x2000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny807 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t807"; + desc = "ATtiny807"; + signature = 0x1E 0x93 0x23; + + memory "flash" + size = 0x2000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny1604 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t1604"; + desc = "ATtiny1604"; + signature = 0x1E 0x94 0x25; + + memory "flash" + size = 0x4000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny1606 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t1606"; + desc = "ATtiny1606"; + signature = 0x1E 0x94 0x24; + + memory "flash" + size = 0x4000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny1607 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t1607"; + desc = "ATtiny1607"; + signature = 0x1E 0x94 0x23; + + memory "flash" + size = 0x4000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny212 +#------------------------------------------------------------ + +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; + ; +; + +#------------------------------------------------------------ +# ATtiny214 +#------------------------------------------------------------ + +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; + ; +; + +#------------------------------------------------------------ +# ATtiny412 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t412"; + desc = "ATtiny412"; + signature = 0x1E 0x92 0x23; + + memory "flash" + size = 0x1000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + + +#------------------------------------------------------------ +# ATtiny414 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t414"; + desc = "ATtiny414"; + signature = 0x1E 0x92 0x22; + + memory "flash" + size = 0x1000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny416 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t416"; + desc = "ATtiny416"; + signature = 0x1E 0x92 0x21; + + memory "flash" + size = 0x1000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + + +#------------------------------------------------------------ +# ATtiny417 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t417"; + desc = "ATtiny417"; + signature = 0x1E 0x92 0x20; + + memory "flash" + size = 0x1000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + + +#------------------------------------------------------------ +# ATtiny814 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t814"; + desc = "ATtiny814"; + signature = 0x1E 0x93 0x22; + + memory "flash" + size = 0x2000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + + +#------------------------------------------------------------ +# ATtiny816 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t816"; + desc = "ATtiny816"; + signature = 0x1E 0x93 0x21; + + memory "flash" + size = 0x2000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x80; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny817 +#------------------------------------------------------------ + +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; + ; +; + +#------------------------------------------------------------ +# ATtiny1614 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t1614"; + desc = "ATtiny1614"; + signature = 0x1E 0x94 0x22; + + memory "flash" + size = 0x4000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny1616 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t1616"; + desc = "ATtiny1616"; + signature = 0x1E 0x94 0x21; + + memory "flash" + size = 0x4000; + offset = 0x8000; + page_size = 0x40; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x20; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny1617 +#------------------------------------------------------------ + +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; + ; +; + +#------------------------------------------------------------ +# ATtiny3214 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t3214"; + desc = "ATtiny3214"; + signature = 0x1E 0x95 0x20; + + memory "flash" + size = 0x8000; + offset = 0x8000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x40; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny3216 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t3216"; + desc = "ATtiny3216"; + signature = 0x1E 0x95 0x21; + + memory "flash" + size = 0x8000; + offset = 0x8000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x40; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATtiny3217 +#------------------------------------------------------------ + +part parent ".avr8x_tiny" + id = "t3217"; + desc = "ATtiny3217"; + signature = 0x1E 0x95 0x22; + + memory "flash" + size = 0x8000; + offset = 0x8000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x40; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATmega3208 +#------------------------------------------------------------ + +part parent ".avr8x_mega" + id = "m3208"; + desc = "ATmega3208"; + signature = 0x1E 0x95 0x52; + + memory "flash" + size = 0x8000; + offset = 0x4000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x40; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATmega3209 +#------------------------------------------------------------ + +part parent ".avr8x_mega" + id = "m3209"; + desc = "ATmega3209"; + signature = 0x1E 0x95 0x53; + + memory "flash" + size = 0x8000; + offset = 0x4000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x40; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATmega4808 +#------------------------------------------------------------ + +part parent ".avr8x_mega" + id = "m4808"; + desc = "ATmega4808"; + signature = 0x1E 0x96 0x50; + + memory "flash" + size = 0xC000; + offset = 0x4000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x40; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATmega4809 +#------------------------------------------------------------ + +part parent ".avr8x_mega" + id = "m4809"; + desc = "ATmega4809"; + signature = 0x1E 0x96 0x51; + + memory "flash" + size = 0xC000; + offset = 0x4000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "eeprom" + size = 0x100; + offset = 0x1400; + page_size = 0x40; + readsize = 0x100; + ; +;