From c7b70fce3a1cfac57d0f9fc2e1cef88766821868 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Mon, 3 Aug 2009 20:57:46 +0000 Subject: [PATCH] Updating linux build scripts, etc for Arduino 0017. --- build/linux/dist.sh | 76 +- build/linux/dist/{processing => arduino} | 3 + build/linux/dist/lib/librxtxSerial.so | Bin 0 -> 48304 bytes build/linux/dist/tools/avrdude | Bin 0 -> 530422 bytes build/linux/dist/tools/avrdude.conf | 11914 +++++++++++++++++++++ build/linux/make.sh | 142 +- build/linux/run.sh | 2 +- 7 files changed, 11967 insertions(+), 170 deletions(-) rename build/linux/dist/{processing => arduino} (79%) create mode 100755 build/linux/dist/lib/librxtxSerial.so create mode 100755 build/linux/dist/tools/avrdude create mode 100644 build/linux/dist/tools/avrdude.conf diff --git a/build/linux/dist.sh b/build/linux/dist.sh index 1dd9533fb..6c36bd69f 100755 --- a/build/linux/dist.sh +++ b/build/linux/dist.sh @@ -6,10 +6,10 @@ REVISION=`head -1 ../../todo.txt | awk '{print $1}'` if [ $1 ] then RELEASE=$1 - echo Creating Processing release $RELEASE... + echo Creating Arduino release $RELEASE... else RELEASE=$REVISION - echo Creating Processing distribution for revision $REVISION... + echo Creating Arduino distribution for revision $REVISION... fi ARCH=`uname -m` @@ -22,67 +22,67 @@ fi ./make.sh # remove any old boogers -rm -rf processing -rm -rf processing-* +rm -rf arduino +rm -rf arduino-* -mkdir processing -cp -r ../shared/lib processing/ -cp -r ../shared/libraries processing/ -cp -r ../shared/tools processing/ -cp ../../app/lib/antlr.jar processing/lib/ -cp ../../app/lib/ecj.jar processing/lib/ -cp ../../app/lib/jna.jar processing/lib/ -cp ../shared/revisions.txt processing/ +mkdir arduino +cp -r ../shared/lib arduino/ +cp -r ../shared/libraries arduino/ +cp -r ../shared/tools arduino/ +cp ../../app/lib/antlr.jar arduino/lib/ +cp ../../app/lib/ecj.jar arduino/lib/ +cp ../../app/lib/jna.jar arduino/lib/ +cp ../../app/lib/oro.jar arduino/lib/ +cp ../../app/lib/RXTXcomm.jar arduino/lib/ +cp ../../readme.txt arduino/ + +cp -r ../../hardware arduino/ + +cp -r dist/tools arduino/hardware +cp dist/lib/librxtxSerial.so arduino/lib if [ $1 ] then # write the release version number into the output directory - echo $1 > processing/lib/version.txt + echo $1 > arduino/lib/version.txt fi -echo Extracting examples... -unzip -q -d processing/ ../shared/examples.zip +echo Copying examples... +cp -r ../shared/examples arduino/ echo Extracting reference... -unzip -q -d processing/ ../shared/reference.zip - -# add the libraries folder with source -cp -r ../../net processing/libraries/ -cp -r ../../opengl processing/libraries/ -cp -r ../../serial processing/libraries/ -cp -r ../../pdf processing/libraries/ -cp -r ../../dxf processing/libraries/ +unzip -q -d arduino/ ../shared/reference.zip # add java (jre) files -tar --extract --file=jre.tgz --ungzip --directory=processing +#tar --extract --file=jre.tgz --ungzip --directory=arduino # grab pde.jar and export from the working dir -cp work/lib/pde.jar processing/lib/ -cp work/lib/core.jar processing/lib/ +cp work/lib/pde.jar arduino/lib/ +cp work/lib/core.jar arduino/lib/ # get platform-specific goodies from the dist dir -install -m 755 dist/processing processing/processing +install -m 755 dist/arduino arduino/arduino # make sure notes.txt is unix LFs # the 2> is because the app is a little chatty -dos2unix processing/revisions.txt 2> /dev/null -dos2unix processing/lib/preferences.txt 2> /dev/null +dos2unix arduino/readme.txt 2> /dev/null +dos2unix arduino/lib/preferences.txt 2> /dev/null # remove boogers -find processing -name "*~" -exec rm -f {} ';' -find processing -name ".DS_Store" -exec rm -f {} ';' -find processing -name "._*" -exec rm -f {} ';' -find processing -name "Thumbs.db" -exec rm -f {} ';' +find arduino -name "*~" -exec rm -f {} ';' +find arduino -name ".DS_Store" -exec rm -f {} ';' +find arduino -name "._*" -exec rm -f {} ';' +find arduino -name "Thumbs.db" -exec rm -f {} ';' # clean out the cvs entries -find processing -name "CVS" -exec rm -rf {} ';' 2> /dev/null -find processing -name ".cvsignore" -exec rm -rf {} ';' -find processing -name ".svn" -exec rm -rf {} 2> /dev/null ';' +find arduino -name "CVS" -exec rm -rf {} ';' 2> /dev/null +find arduino -name ".cvsignore" -exec rm -rf {} ';' +find arduino -name ".svn" -exec rm -rf {} 2> /dev/null ';' # zip it all up for release echo Creating tarball and finishing... -P5=processing-$RELEASE -mv processing $P5 +P5=arduino-$RELEASE +mv arduino $P5 tar cfz $P5.tgz $P5 # nah, keep the new directory around diff --git a/build/linux/dist/processing b/build/linux/dist/arduino similarity index 79% rename from build/linux/dist/processing rename to build/linux/dist/arduino index e02e551a3..3137595d2 100755 --- a/build/linux/dist/processing +++ b/build/linux/dist/arduino @@ -12,6 +12,9 @@ do done export CLASSPATH +LD_LIBRARY_PATH=`pwd`/lib:${LD_LIBRARY_PATH} +export LD_LIBRARY_PATH + export PATH="${APPDIR}/java/bin:${PATH}" java processing.app.Base diff --git a/build/linux/dist/lib/librxtxSerial.so b/build/linux/dist/lib/librxtxSerial.so new file mode 100755 index 0000000000000000000000000000000000000000..d340dcb676e7873a70e23ca9bd21abf108f02409 GIT binary patch literal 48304 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

oZ5JeY8!z(WXo2(J~` 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 literal 0 HcmV?d00001 diff --git a/build/linux/dist/tools/avrdude b/build/linux/dist/tools/avrdude new file mode 100755 index 0000000000000000000000000000000000000000..96f489c15441c2c0493317730c0485d2573f1876 GIT binary patch literal 530422 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

u#;1q0kU3>UsPsMpi-R4=h=}^u9 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ν~<6P$&6HPis@meo&y?tHMH@TS&h1 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 CK6B0h 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..221cf2aa5 --- /dev/null +++ b/build/linux/dist/tools/avrdude.conf @@ -0,0 +1,11914 @@ +# $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 = "usbtiny"; + desc = "USBtiny simple USB programmer"; + type = usbtiny; +; + +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"; + ; +; + +#------------------------------------------------------------ +# ATmega328 +#------------------------------------------------------------ + +part + id = "m328p"; + desc = "ATMEGA328P"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x95 0x0F; + 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 = 1024; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x 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 cb4bbda71..ee12b9db4 100755 --- a/build/linux/make.sh +++ b/build/linux/make.sh @@ -15,24 +15,24 @@ else cp -r ../shared/libraries work/ cp -r ../shared/tools work/ + cp -r ../../hardware work/ + cp ../../app/lib/antlr.jar work/lib/ cp ../../app/lib/ecj.jar work/lib/ cp ../../app/lib/jna.jar work/lib/ + cp ../../app/lib/oro.jar work/lib/ + cp ../../app/lib/RXTXcomm.jar work/lib/ - echo Extracting examples... - unzip -q -d work/ ../shared/examples.zip + echo Copying examples... + cp -r ../shared/examples work/ echo Extracting reference... unzip -q -d work/ ../shared/reference.zip - cp -r ../../net work/libraries/ - cp -r ../../opengl work/libraries/ - cp -r ../../serial work/libraries/ - cp -r ../../video work/libraries/ - cp -r ../../pdf work/libraries/ - cp -r ../../dxf work/libraries/ + cp -r dist/tools work/hardware/ + cp dist/lib/librxtxSerial.so work/lib/ - install -m 755 dist/processing work/processing + install -m 755 dist/arduino work/arduino ARCH=`uname -m` if [ $ARCH = "i686" ] @@ -84,41 +84,6 @@ cd bin && zip -rq ../../build/linux/work/lib/core.jar \ cd .. -### -- BUILD PREPROC ------------------------------------------------ - -echo Building PDE for JDK 1.5... - -cd app - -# long path is to avoid requiring java to be in your PATH - echo Building antlr grammar code... - - # first build the default java goop -../build/linux/work/java/bin/java \ - -cp ../build/linux/work/lib/antlr.jar antlr.Tool \ - -o src/antlr/java \ - src/antlr/java/java.g - - # hack to get around path mess - cp src/antlr/java/JavaTokenTypes.txt src/processing/app/preproc/ - -# now build the pde stuff that extends the java classes -# this is totally ugly and needs to be fixed -# the problem is that -glib doesn't set the main path properly, -# so it's necessary to cd into the antlr/java folder, otherwise -# the JavaTokenTypes.txt file won't be found -cd src/antlr/java -../../../../build/linux/work/java/bin/java \ - -cp ../../../../build/linux/work/lib/antlr.jar antlr.Tool \ - -o ../../processing/app/preproc \ - -glib java.g \ - ../../processing/app/preproc/pde.g -cd ../../.. - -# return to the root of the p5 folder -cd .. - - ### -- BUILD PDE ------------------------------------------------ cd app @@ -130,16 +95,14 @@ mkdir ../build/linux/work/classes -cp ../build/linux/work/java/lib/tools.jar \ com.sun.tools.javac.Main \ -source 1.5 -target 1.5 \ - -classpath ../build/linux/work/lib/core.jar:../build/linux/work/lib/antlr.jar:../build/linux/work/lib/ecj.jar:../build/linux/work/lib/jna.jar:../build/linux/work/java/lib/tools.jar \ + -classpath ../build/linux/work/lib/core.jar:../build/linux/work/lib/antlr.jar:../build/linux/work/lib/ecj.jar:../build/linux/work/lib/jna.jar:../build/linux/work/lib/oro.jar:../build/linux/work/lib/RXTXcomm.jar:../build/linux/work/java/lib/tools.jar \ -d ../build/linux/work/classes \ src/processing/app/*.java \ src/processing/app/debug/*.java \ src/processing/app/linux/*.java \ src/processing/app/preproc/*.java \ src/processing/app/syntax/*.java \ - src/processing/app/tools/*.java \ - src/antlr/*.java \ - src/antlr/java/*.java + src/processing/app/tools/*.java cd ../build/linux/work/classes rm -f ../lib/pde.jar @@ -147,88 +110,5 @@ zip -0rq ../lib/pde.jar . cd ../../../.. -### -- BUILD LIBRARIES ------------------------------------------------ - -cd build/linux - -PLATFORM=linux - -JAVAC="../build/linux/work/java/bin/java -cp ../build/linux/work/java/lib/tools.jar com.sun.tools.javac.Main -source 1.5 -target 1.5" -CORE=../build/$PLATFORM/work/lib/core.jar -LIBRARIES=../build/$PLATFORM/work/libraries - -# move to processing/build -cd .. - -# SERIAL LIBRARY -echo Building serial library... -cd ../serial -mkdir -p bin -$JAVAC \ - -classpath "library/RXTXcomm.jar:$CORE" \ - -d bin src/processing/serial/*.java -rm -f library/serial.jar -find bin -name "*~" -exec rm -f {} ';' -cd bin && zip -rq ../library/serial.jar processing/serial/*.class && cd .. -mkdir -p $LIBRARIES/serial/library/ -cp library/serial.jar $LIBRARIES/serial/library/ - - -# NET LIBRARY -echo Building net library... -cd ../net -mkdir -p bin -$JAVAC \ - -classpath "$CORE" \ - -d bin src/processing/net/*.java -rm -f library/net.jar -find bin -name "*~" -exec rm -f {} ';' -cd bin && zip -rq ../library/net.jar processing/net/*.class && cd .. -mkdir -p $LIBRARIES/net/library/ -cp library/net.jar $LIBRARIES/net/library/ - - -# OPENGL LIBRARY -echo Building OpenGL library... -cd ../opengl -mkdir -p bin -$JAVAC \ - -classpath "library/jogl.jar:$CORE" \ - -d bin src/processing/opengl/*.java -rm -f library/opengl.jar -find bin -name "*~" -exec rm -f {} ';' -cd bin && zip -rq ../library/opengl.jar processing/opengl/*.class && cd .. -mkdir -p $LIBRARIES/opengl/library/ -cp library/opengl.jar $LIBRARIES/opengl/library/ - - -# PDF LIBRARY -echo Building PDF library... -cd ../pdf -mkdir -p bin -$JAVAC \ - -classpath "library/itext.jar:$CORE" \ - -d bin src/processing/pdf/*.java -rm -f library/pdf.jar -find bin -name "*~" -exec rm -f {} ';' -cd bin && zip -rq ../library/pdf.jar processing/pdf/*.class && cd .. -mkdir -p $LIBRARIES/pdf/library/ -cp library/pdf.jar $LIBRARIES/pdf/library/ - - -# DXF LIBRARY -echo Building DXF library... -cd ../dxf -mkdir -p bin -$JAVAC \ - -classpath "$CORE" \ - -d bin src/processing/dxf/*.java -rm -f library/dxf.jar -find bin -name "*~" -exec rm -f {} ';' -cd bin && zip -rq ../library/dxf.jar processing/dxf/*.class && cd .. -mkdir -p $LIBRARIES/dxf/library/ -cp library/dxf.jar $LIBRARIES/dxf/library/ - - echo echo Done. diff --git a/build/linux/run.sh b/build/linux/run.sh index 29ccd3aa9..78c5c0f44 100755 --- a/build/linux/run.sh +++ b/build/linux/run.sh @@ -1,3 +1,3 @@ #!/bin/sh -cd work && ./processing && cd .. +cd work && ./arduino && cd ..