From 346552f2842ac96725746ccb303e14d335aedbe9 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Mon, 6 Aug 2007 23:49:37 +0000 Subject: [PATCH] Adding avrdude-5.4-arduino and copying bootloader168 into the linux distribution. --- build/linux/dist/tools/avrdude | Bin 0 -> 515337 bytes build/linux/dist/tools/avrdude.conf | 11721 ++++++++++++++++++++++++++ build/linux/make.sh | 1 + 3 files changed, 11722 insertions(+) create mode 100755 build/linux/dist/tools/avrdude create mode 100644 build/linux/dist/tools/avrdude.conf diff --git a/build/linux/dist/tools/avrdude b/build/linux/dist/tools/avrdude new file mode 100755 index 0000000000000000000000000000000000000000..0fcb6229409c30d1fa5a9c505bed42d354a136cb GIT binary patch literal 515337 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%0DojOzpK}?V0Fd9 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 XKlEpV^x`RRfb!Oq9mf literal 0 HcmV?d00001 diff --git a/build/linux/dist/tools/avrdude.conf b/build/linux/dist/tools/avrdude.conf new file mode 100644 index 000000000..faf1ba331 --- /dev/null +++ b/build/linux/dist/tools/avrdude.conf @@ -0,0 +1,11721 @@ +# $Id: avrdude.conf.in,v 1.122 2007/05/16 21:29:36 joerg_wunsch Exp $ +# +# 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. +# +# Possible entry formats are: +# +# programmer +# id = [, [, ] ...] ; # are quoted strings +# desc = ; # quoted string +# type = par | stk500 | stk500v2 | stk500pp | stk500hvsp | stk500generic | +# avr910 | butterfly | usbasp | +# jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw | +# dragon_dw | dragon_jtag | dragon_isp | dragon_pp | +# dragon_hvsp; # programmer type +# baudrate = ; # baudrate for avr910-programmer +# vcc = [, ... ] ; # 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 +# ; +# +# part +# id = ; # quoted string +# desc = ; # quoted string +# has_jtag = ; # part has JTAG i/f +# has_debugwire = ; # part has debugWire i/f +# devicecode = ; # deprecated, use stk500_devcode +# stk500_devcode = ; # numeric +# avr910_devcode = ; # numeric +# signature = ; # signature bytes +# 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) +# +# 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. +# +# 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/atmel/acrobat/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/atmel/acrobat/doc2525.pdf +# + +#define ATTINY10 0x10 +#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 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 +# +default_parallel = "/dev/parport0"; +default_serial = "/dev/ttyS0"; + + +# +# PROGRAMMER DEFINITIONS +# + +programmer + id = "avrisp"; + desc = "Atmel AVR ISP"; + type = stk500; +; + +programmer + id = "avrispv2"; + desc = "Atmel AVR ISP V2"; + type = stk500v2; +; + +programmer + id = "avrispmkII"; + desc = "Atmel AVR ISP mkII"; + type = stk500v2; +; + +programmer + id = "avrisp2"; + desc = "Atmel AVR ISP mkII"; + type = stk500v2; +; + +# 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; +; + +programmer + id = "stk500v1"; + desc = "Atmel STK500 Version 1.x firmware"; + type = stk500; +; + +programmer + id = "stk500v2"; + desc = "Atmel STK500 Version 2.x firmware"; + type = stk500v2; +; + +programmer + id = "stk500pp"; + desc = "Atmel STK500 V2 in parallel programming mode"; + type = stk500pp; +; + +programmer + id = "stk500hvsp"; + desc = "Atmel STK500 V2 in high-voltage serial programming mode"; + type = stk500hvsp; +; + +programmer + id = "avr910"; + desc = "Atmel Low Cost Serial Programmer"; + type = avr910; +; + +programmer + id = "usbasp"; + desc = "USBasp, http://www.fischl.de/usbasp/"; + type = usbasp; +; + +programmer + id = "butterfly"; + desc = "Atmel Butterfly Development Board"; + type = butterfly; +; + +programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = butterfly; +; + +programmer + id = "avr911"; + desc = "Atmel AppNote AVR911 AVROSP"; + type = butterfly; +; + +programmer + id = "jtagmkI"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = jtagmki; +; + +# easier to type +programmer + id = "jtag1"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = jtagmki; +; + +# easier to type +programmer + id = "jtag1slow"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 19200; + type = jtagmki; +; + +programmer + id = "jtagmkII"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# easier to type +programmer + id = "jtag2slow"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# JTAG ICE mkII @ 115200 Bd +programmer + id = "jtag2fast"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +# make the fast one the default, people will love that +programmer + id = "jtag2"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +# JTAG ICE mkII in ISP mode +programmer + id = "jtag2isp"; + desc = "Atmel JTAG ICE mkII in ISP mode"; + baudrate = 115200; + type = jtagmkii_isp; +; + +# JTAG ICE mkII in debugWire mode +programmer + id = "jtag2dw"; + desc = "Atmel JTAG ICE mkII in debugWire mode"; + baudrate = 115200; + type = jtagmkii_dw; +; + +# AVR Dragon in JTAG mode +programmer + id = "dragon_jtag"; + desc = "Atmel AVR Dragon in JTAG mode"; + baudrate = 115200; + type = dragon_jtag; +; + +# AVR Dragon in ISP mode +programmer + id = "dragon_isp"; + desc = "Atmel AVR Dragon in ISP mode"; + baudrate = 115200; + type = dragon_isp; +; + +# AVR Dragon in PP mode +programmer + id = "dragon_pp"; + desc = "Atmel AVR Dragon in PP mode"; + baudrate = 115200; + type = dragon_pp; +; + +# AVR Dragon in HVSP mode +programmer + id = "dragon_hvsp"; + desc = "Atmel AVR Dragon in HVSP mode"; + baudrate = 115200; + type = dragon_hvsp; +; + +# AVR Dragon in debugWire mode +programmer + id = "dragon_dw"; + desc = "Atmel AVR Dragon in debugWire mode"; + baudrate = 115200; + type = dragon_dw; +; + +programmer + id = "pavr"; + desc = "Jason Kyle's pAVR Serial Programmer"; + type = avr910; +; + +# Parallel port programmers. + +programmer + id = "bsd"; + desc = "Brian Dean's Programmer, http://www.bsdhome.com/avrdude/"; + type = par; + vcc = 2, 3, 4, 5; + reset = 7; + sck = 8; + mosi = 9; + miso = 10; +; + +programmer + id = "stk200"; + desc = "STK200"; + type = par; + 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 + id = "pony-stk200"; + desc = "Pony Prog STK200"; + type = par; + buff = 4, 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; + pgmled = 8; +; + +programmer + id = "dt006"; + desc = "Dontronics DT006"; + type = par; + reset = 4; + sck = 5; + mosi = 2; + miso = 11; +; + +programmer + id = "bascom"; + desc = "Bascom SAMPLE programming cable"; + type = par; + reset = 4; + sck = 5; + mosi = 2; + miso = 11; +; + +programmer + id = "alf"; + desc = "Nightshade ALF-PgmAVR, http://nightshade.homeip.net/"; + type = par; + 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; + 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; + reset = 2; + sck = 3; + mosi = 4; + miso = 13; +; + +programmer + id = "abcmini"; + desc = "ABCmini Board, aka Dick Smith HOTCHIP"; + type = par; + reset = 4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "futurlec"; + desc = "Futurlec.com programming cable."; + type = par; + 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). +# 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; + mosi = 2; + sck = 3; + reset = 4; + buff = 5; + miso = 13; + vcc = 6; +; + + +programmer + id = "dapa"; + desc = "Direct AVR Parallel Access cable"; + type = par; + 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; + reset = ~6; + sck = ~8; + mosi = ~7; + miso = ~10; +; + +programmer + id = "ere-isp-avr"; + desc = "ERE ISP-AVR "; + type = par; + reset = ~4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "blaster"; + desc = "Altera ByteBlaster"; + type = par; + 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) +programmer + id = "frank-stk200"; + desc = "Frank STK200"; + type = par; + vcc = 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; + pgmled = 8; +; + + +# +# 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; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# Same as above, different name +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "siprog"; + desc = "Lancos SI-Prog "; + type = serbb; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# 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; + 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; + 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; + + 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"; + 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"; + + 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"; + ; + 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"; + ; + 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; + + 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; + + 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; + + 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"; + ; + ; + + +#------------------------------------------------------------ +# 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; + + 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 + id = "m164p"; + desc = "ATMEGA164P"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x0a; + 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 = 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; + + 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 = 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 "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"; + ; + ; + + +#------------------------------------------------------------ +# ATmega324P +#------------------------------------------------------------ + +# similar to ATmega164P + +part + id = "m324p"; + desc = "ATMEGA324P"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x95 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 = 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; + + 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"; + ; + ; + + +#------------------------------------------------------------ +# ATmega644 +#------------------------------------------------------------ + +# similar to ATmega164 + +part + id = "m644"; + desc = "ATMEGA644"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x09; + 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, 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; + + 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 + id = "m644p"; + desc = "ATMEGA644P"; + has_jtag = yes; +# stk500_devcode = 0x82; # no STK500v1 support +# avr910_devcode = 0x?; # try the ATmega16 one:^ + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x0a; + 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, 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; + + 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"; + ; + ; + + + +#------------------------------------------------------------ +# 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"; + + 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"; + + 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"; + ; + + 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 = 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 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; + + 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; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega3290 +#------------------------------------------------------------ + +# identical to ATmega329 + +part + id = "m3290"; + desc = "ATMEGA3290"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x04; + 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; + + 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 a3 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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 + id = "m6490"; + desc = "ATMEGA6490"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 0x04; + 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; + + 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 x x a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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; + 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"; + ; + + 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 = 10; + 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 = 10; + 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 x x x 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; + + 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 x x x x x x x 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; + + 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 x x x x x x x 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; + + 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 x x x x x x x 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"; + ; + +; + + +#------------------------------------------------------------ +# 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; + + 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 = 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 = 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 x x x x x x x 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"; + ; + ; + + +#------------------------------------------------------------ +# 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; + + 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 = 5; + 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 x x x x x 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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 = 5; + 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 x x x x x 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"; + ; +; + +#------------------------------------------------------------ +# 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; + + 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"; + ; + ; + +#------------------------------------------------------------ +# 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 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 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3 +#------------------------------------------------------------ + +# Completely identical to AT90PWM2 (including the signature!) + +part + id = "pwm3"; + desc = "AT90PWM3"; + 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 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 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2B +#------------------------------------------------------------ +# Same as AT90PWM2 but different signature. + +part + id = "pwm2b"; + desc = "AT90PWM2B"; + 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 0x83; + 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; + ; + 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 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 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3B +#------------------------------------------------------------ + +# Completely identical to AT90PWM2B (including the signature!) + +part + id = "pwm3b"; + desc = "AT90PWM3B"; + 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 0x83; + 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; + ; + 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 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 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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"; + 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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"; + 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"; + ; + ; + +#------------------------------------------------------------ +# 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 = 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; + + 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", + "a8 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 = 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; + ; +# 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"; + 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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; + + 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 + id = "m1281"; + desc = "ATMEGA1281"; + signature = 0x1e 0x97 0x04; + 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; + + 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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 + id = "m2561"; + desc = "ATMEGA2561"; + signature = 0x1e 0x98 0x02; + 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; + + 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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; + + 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; + + 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", + "a8 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"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; +# signature = 0x1e 0x96 0x82; ? + signature = 0x1e 0x97 0x82; + 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; + + 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 + id = "usb647"; + desc = "AT90USB647"; +# signature = 0x1e 0x96 0x82; ? + signature = 0x1e 0x97 0x82; + 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; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1286 +#------------------------------------------------------------ + +part + id = "usb1286"; + desc = "AT90USB1286"; + signature = 0x1e 0x97 0x82; + 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; + + 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 + id = "usb1287"; + desc = "AT90USB1287"; + signature = 0x1e 0x97 0x82; + 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; + + 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"; + ; + ; + +#------------------------------------------------------------ +# 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; + + 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; + + 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 + id = "m3250"; + desc = "ATMEGA3250"; + signature = 0x1E 0x95 0x06; + 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; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega6450 +#------------------------------------------------------------ + +part + id = "m6450"; + desc = "ATMEGA6450"; + signature = 0x1E 0x96 0x06; + 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; + + 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 = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 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"; + ; + ; diff --git a/build/linux/make.sh b/build/linux/make.sh index ac03761af..51b8e15c9 100755 --- a/build/linux/make.sh +++ b/build/linux/make.sh @@ -50,6 +50,7 @@ echo Copying shared and core files... cp -r ../shared/* work rm -rf work/dist cp -r ../../targets work/lib +cp -r ../../bootloader168 work rm work/reference.zip echo Copying examples...