From 235facd545cb7c1dd4c1b2f894db791c82181f7f Mon Sep 17 00:00:00 2001 From: Bob Kuhn Date: Fri, 25 May 2018 20:26:48 -0500 Subject: [PATCH] install AVRDUDE 5.10, faster disk find for LPC1768 (#10849) --- .../HAL/HAL_LPC1768/upload_extra_script.py | 47 +- buildroot/share/atom/auto_build.py | 34 + buildroot/share/atom/avrdude.conf | 15478 ++++++++++++++++ buildroot/share/atom/avrdude_5.10_linux | Bin 0 -> 1159576 bytes buildroot/share/atom/avrdude_5.10_macOS | Bin 0 -> 346784 bytes buildroot/share/atom/avrdude_linux.conf | 15478 ++++++++++++++++ buildroot/share/atom/avrdude_macOS.conf | 15272 +++++++++++++++ .../atom/create_custom_upload_command_CDC.py | 190 +- .../atom/create_custom_upload_command_DFU.py | 35 +- 9 files changed, 46403 insertions(+), 131 deletions(-) create mode 100644 buildroot/share/atom/avrdude.conf create mode 100644 buildroot/share/atom/avrdude_5.10_linux create mode 100644 buildroot/share/atom/avrdude_5.10_macOS create mode 100644 buildroot/share/atom/avrdude_linux.conf create mode 100644 buildroot/share/atom/avrdude_macOS.conf diff --git a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py index 1872652393..5842faa561 100644 --- a/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py +++ b/Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py @@ -6,10 +6,10 @@ target_filename = "FIRMWARE.CUR" target_drive = "REARM" -upload_disk = "" import os -import subprocess +import platform +current_OS = platform.system() #env_vars = subprocess.check_output('platformio run -t envdump') #env_vars = env_vars.split('\n') @@ -21,10 +21,6 @@ build_type = os.environ.get("BUILD_TYPE", 'Not Set') if not(build_type == 'upload' or build_type == 'traceback' or build_type == 'Not Set') : exit(0) -print '\nSearching for upload disk' - -import platform -current_OS = platform.system() if current_OS == 'Windows': @@ -43,38 +39,22 @@ if current_OS == 'Windows': driveStr = driveStr.strip().lstrip('Drives: ') # typical result (string): 'C:\ D:\ E:\ F:\ G:\ H:\ I:\ J:\ K:\ L:\ M:\ Y:\ Z:\' drives = driveStr.split() # typical result (array of stings): ['C:\\', 'D:\\', 'E:\\', 'F:\\', 'G:\\', 'H:\\', 'I:\\', 'J:\\', 'K:\\', 'L:\\', 'M:\\', 'Y:\\', 'Z:\\'] - # - # scan top directory of each drive for FIRMWARE.CUR - # return first drive found - # - - import os upload_disk = 'Disk not found' target_file_found = False target_drive_found = False - - volume_info = subprocess.check_output('powershell -Command volume ') - volume_info = volume_info.split('\n') - for entry in volume_info: - if target_drive in entry and target_drive_found == False: # set upload if not found target file yet - target_drive_found = True - upload_disk = entry[ : entry.find(' ')] + ':' - for drive in drives: final_drive_name = drive.strip().rstrip('\\') # typical result (string): 'C:' - # modified version of walklevel() - level=0 - some_dir = "/" - some_dir = some_dir.rstrip(os.path.sep) - assert os.path.isdir(some_dir) - num_sep = some_dir.count(os.path.sep) - for root, dirs, files in os.walk(final_drive_name): - num_sep_this = root.count(os.path.sep) - if num_sep + level <= num_sep_this: - del dirs[:] - if target_filename in files: + try: + volume_info = subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT) + except Exception as e: + continue + else: + if target_drive in volume_info and target_file_found == False: # set upload if not found target file yet + target_drive_found = True + upload_disk = final_drive_name + if target_filename in volume_info: if target_file_found == False: - upload_disk = root + upload_disk = final_drive_name target_file_found = True # @@ -88,7 +68,7 @@ if current_OS == 'Windows': ) print 'upload disk: ' , upload_disk else: - print '\nUnable to find destination disk. File must be copied manually. \n' + print '\nUnable to find destination disk. File must be copied manually. \n' if current_OS == 'Linux': @@ -97,7 +77,6 @@ if current_OS == 'Linux': # platformio.ini will accept this for a Linux upload port designation: 'upload_port = /media/media_name/drive' # - import os upload_disk = 'Disk not found' target_file_found = False target_drive_found = False diff --git a/buildroot/share/atom/auto_build.py b/buildroot/share/atom/auto_build.py index 4dce045305..6268f27343 100644 --- a/buildroot/share/atom/auto_build.py +++ b/buildroot/share/atom/auto_build.py @@ -23,6 +23,8 @@ ####################################### # +# Revision: 2.0.1 +# # Description: script to automate PlatformIO builds # CLI: python auto_build.py build_option # build_option (required) @@ -103,6 +105,7 @@ current_OS = platform.system() target_env = '' board_name = '' + ######### # Python 2 error messages: # Can't find a usable init.tcl in the following directories ... @@ -208,6 +211,13 @@ def resolve_path(path): import os # turn the selection into a partial path + + if 0 <= path.find('"'): + path = path[ path.find('"') : ] + if 0 <= path.find(', line '): + path = path.replace(', line ', ':') + path = path.replace('"', '') + #get line and column numbers line_num = 1 column_num = 1 @@ -969,6 +979,7 @@ class output_window(Text): Text.__init__(self, self.frame, borderwidth=3, relief="sunken") self.config(tabs=(400,)) # configure Text widget tab stops self.config(background = 'black', foreground = 'white', font= ("consolas", 12), wrap = 'word', undo = 'True') +# self.config(background = 'black', foreground = 'white', font= ("consolas", 12), wrap = 'none', undo = 'True') self.config(height = 24, width = 100) self.config(insertbackground = 'pale green') # keyboard insertion point self.pack(side='left', fill='both', expand=True) @@ -991,6 +1002,25 @@ class output_window(Text): self.config(yscrollcommand=scrb.set) scrb.pack(side='right', fill='y') +# self.scrb_Y = tk.Scrollbar(self.frame, orient='vertical', command=self.yview) +# self.scrb_Y.config(yscrollcommand=self.scrb_Y.set) +# self.scrb_Y.pack(side='right', fill='y') +# +# self.scrb_X = tk.Scrollbar(self.frame, orient='horizontal', command=self.xview) +# self.scrb_X.config(xscrollcommand=self.scrb_X.set) +# self.scrb_X.pack(side='bottom', fill='x') + +# scrb_X = tk.Scrollbar(self, orient=tk.HORIZONTAL, command=self.xview) # tk.HORIZONTAL now have a horizsontal scroll bar BUT... shrinks it to a postage stamp and hides far right behind the vertical scroll bar +# self.config(xscrollcommand=scrb_X.set) +# scrb_X.pack(side='bottom', fill='x') +# +# scrb= tk.Scrollbar(self, orient='vertical', command=self.yview) +# self.config(yscrollcommand=scrb.set) +# scrb.pack(side='right', fill='y') + +# self.config(height = 240, width = 1000) # didn't get the size baCK TO NORMAL +# self.pack(side='left', fill='both', expand=True) # didn't get the size baCK TO NORMAL + # pop-up menu self.popup = tk.Menu(self, tearoff=0) @@ -1230,6 +1260,10 @@ def main(): target_env = get_env(board_name, Marlin_ver) + os.environ["BUILD_TYPE"] = build_type # let sub processes know what is happening + os.environ["TARGET_ENV"] = target_env + os.environ["BOARD_NAME"] = board_name + auto_build = output_window() if 0 <= target_env.find('USB1286'): copy_boards_dir() # copy custom boards over to PlatformIO if using custom board diff --git a/buildroot/share/atom/avrdude.conf b/buildroot/share/atom/avrdude.conf new file mode 100644 index 0000000000..1194847f77 --- /dev/null +++ b/buildroot/share/atom/avrdude.conf @@ -0,0 +1,15478 @@ +# $Id: avrdude.conf.in 916 2010-01-15 16:36:13Z joerg_wunsch $ +# +# 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 | +# stk600 | stk600pp | stk600hvsp | +# avr910 | butterfly | usbasp | +# jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw | +# jtagmkII_avr32 | jtagmkii_pdi | +# dragon_dw | dragon_jtag | dragon_isp | dragon_pp | +# dragon_hvsp | dragon_pdi | arduino; # 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 +# has_pdi = ; # part has PDI i/f +# has_tpi = ; # part has TPI 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) +# is_avr32 = ; # AVR32 part +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# 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 /* the _old_ one that never existed! */ +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 +#define AT90CAN64 0xB3 +#define AT90CAN32 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults +# +default_parallel = "lpt1"; +default_serial = "com1"; + + +# +# PROGRAMMER DEFINITIONS +# + +programmer + id = "arduino"; + desc = "Arduino"; + type = arduino; +; + +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; +; + +programmer + id = "buspirate"; + desc = "The Bus Pirate"; + type = buspirate; +; + +# 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 = "mib510"; + desc = "Crossbow MIB510 programming board"; + 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 = "stk600"; + desc = "Atmel STK600"; + type = stk600; +; + +programmer + id = "stk600pp"; + desc = "Atmel STK600 in parallel programming mode"; + type = stk600pp; +; + +programmer + id = "stk600hvsp"; + desc = "Atmel STK600 in high-voltage serial programming mode"; + type = stk600hvsp; +; + +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, http://www.ladyada.net/make/usbtinyisp/"; + 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; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtagmkII_avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtag2avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in PDI mode +programmer + id = "jtag2pdi"; + desc = "Atmel JTAG ICE mkII PDI mode"; + baudrate = 115200; + type = jtagmkii_pdi; +; + +# 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; +; + +# AVR Dragon in PDI mode +programmer + id = "dragon_pdi"; + desc = "Atmel AVR Dragon in PDI mode"; + baudrate = 115200; + type = dragon_pdi; +; + +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; +; + +# The AT98ISP Cable is a simple parallel dongle for AT89 family. +# http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2877 +programmer +id = "89isp"; +desc = "Atmel at89isp cable"; +type = par; +reset = 17; +sck = 1; +mosi = 2; +miso = 10; +; + + +# +# 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; +; + +# C2N232i (jumper configuration "auto") +# reset=dtr sck=!rts mosi=!txd miso=!cts + +programmer + id = "c2n232i"; + desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; + type = serbb; + 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"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATMEGA103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATMEGA64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN64 +#------------------------------------------------------------ + +part + id = "c64"; + desc = "AT90CAN64"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x96 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN32 +#------------------------------------------------------------ + +part + id = "c32"; + desc = "AT90CAN32"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x95 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 256; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATMEGA16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + 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, use 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, use 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, use 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, use 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"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega1284P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m1284p"; + desc = "ATMEGA1284P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x05; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 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, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATMEGA162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATMEGA163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 20; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o x x o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x 1 o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x 0 x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATMEGA169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part + id = "m329p"; + desc = "ATMEGA329P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0b; + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part + id = "m3290p"; + desc = "ATMEGA3290P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0c; + 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; + page_size = 4; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + 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"; + ; +; + +#------------------------------------------------------------ +# ATtiny88 +#------------------------------------------------------------ + +part + id = "t88"; + desc = "attiny88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x11; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 64; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 64; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x 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 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega328P +#------------------------------------------------------------ + +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"; + ; + ; + +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM + +part + id = "m128rfa1"; + desc = "ATMEGA128RFA1"; + signature = 0x1e 0xa7 0x01; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xE2; + 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 = 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"; + ; + ; + +#------------------------------------------------------------ +# 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega32u4 +#------------------------------------------------------------ + +part + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + 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 = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + 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 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; + signature = 0x1e 0x96 0x82; + 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; + 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"; + ; + ; + + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + +part + id = "usb162"; + desc = "AT90USB162"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB82 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 8192; +# num_pages = 64; + +part + id = "usb82"; + desc = "AT90USB82"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 128; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega325 +#------------------------------------------------------------ + +part + id = "m325"; + desc = "ATMEGA325"; + signature = 0x1e 0x95 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATXMEGA64A1 +#------------------------------------------------------------ + +part + id = "x64a1"; + desc = "ATXMEGA64A1"; + signature = 0x1e 0x96 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1 +#------------------------------------------------------------ + +part + id = "x128a1"; + desc = "ATXMEGA128A1"; + signature = 0x1e 0x97 0x4c; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1REVD +#------------------------------------------------------------ + +part + id = "x128a1d"; + desc = "ATXMEGA128A1REVD"; + signature = 0x1e 0x97 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A1 +#------------------------------------------------------------ + +part + id = "x192a1"; + desc = "ATXMEGA192A1"; + signature = 0x1e 0x97 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A1 +#------------------------------------------------------------ + +part + id = "x256a1"; + desc = "ATXMEGA256A1"; + signature = 0x1e 0x98 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A3 +#------------------------------------------------------------ + +part + id = "x64a3"; + desc = "ATXMEGA64A3"; + signature = 0x1e 0x96 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A3 +#------------------------------------------------------------ + +part + id = "x128a3"; + desc = "ATXMEGA128A3"; + signature = 0x1e 0x97 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A3 +#------------------------------------------------------------ + +part + id = "x192a3"; + desc = "ATXMEGA192A3"; + signature = 0x1e 0x97 0x44; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3 +#------------------------------------------------------------ + +part + id = "x256a3"; + desc = "ATXMEGA256A3"; + signature = 0x1e 0x98 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3B +#------------------------------------------------------------ + +part + id = "x256a3b"; + desc = "ATXMEGA256A3B"; + signature = 0x1e 0x98 0x43; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA16A4 +#------------------------------------------------------------ + +part + id = "x16a4"; + desc = "ATXMEGA16A4"; + signature = 0x1e 0x94 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00004000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00803000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00804000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00005000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA32A4 +#------------------------------------------------------------ + +part + id = "x32a4"; + desc = "ATXMEGA32A4"; + signature = 0x1e 0x95 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00008000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00807000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00808000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00009000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A4 +#------------------------------------------------------------ + +part + id = "x64a4"; + desc = "ATXMEGA64A4"; + signature = 0x1e 0x96 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A4 +#------------------------------------------------------------ + +part + id = "x128a4"; + desc = "ATXMEGA128A4"; + signature = 0x1e 0x97 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + + +#------------------------------------------------------------ +# AVR32UC3A0512 +#------------------------------------------------------------ + +part + id = "ucr2"; + desc = "32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + memory "flash" + paged = yes; + page_size = 512; # bytes + readsize = 512; # bytes + num_pages = 1024; # could be set dynamicly + size = 0x00080000; # could be set dynamicly + offset = 0x80000000; + ; +; + +#------------------------------------------------------------ +# ATtiny4 +#------------------------------------------------------------ + +part + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ + +part + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny9 +#------------------------------------------------------------ + +part + id = "t8"; + desc = "ATtiny9"; + signature = 0x1e 0x90 0x08; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ + +part + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + diff --git a/buildroot/share/atom/avrdude_5.10_linux b/buildroot/share/atom/avrdude_5.10_linux new file mode 100644 index 0000000000000000000000000000000000000000..0b7f3fda43501321935378999e219175e706ef87 GIT binary patch literal 1159576 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

gr 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�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

FEu1EKEa!!6R*dO4)j4w$| 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

rszx-wl?IDX#o3Up#tQ=YYE@u!R5L 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�CICT>twJPD1JS9O(UUs>*b3ty3nb|Vq|%?=b-%b;<_$uLl5fE zD8BYLWPkm`5K#TbPy%YINkUBa=w;mxZVU;y@NfU;(QEqhEyxm3rp*UAf(0ZD9&G>( z5|!pUeml-p;^b=h7JRh{xF`Z`3;zB>k_$3V!rw6ubV3ZM`MC>piuX>?6)2!q;}1@l z0?WHJRb(*lx<;RbcJj{3H~Ey;G=Bh1CX06945xa(OJK~NJGIyLnD#i4%47Pz$obqP^4`GAUHS$jILUn&y0M@3;q)LtmRa?&0EM zV0di=ZZv}Z05a%07u*ryj(bEwDg+$&@PcSouu-mtZ#}wMAJ~GT5mYL+1%p_iQn3^~ zunsxm*SGWK3lkkg6d|`39lsrCEs;f7yOY5HbOFTo7t*|tz^OP13SjUeWBwM<);*8j z4n_lp0|+f3m%inJs-BG+j376oiZF9AFrbQjTxgGa{#votL`1}9A zOXmw!1qKFI4_gq)-wL{*0yX?KA!fjImmEUXQd$I-@#$UQ%CO=2J{Cp>*iBF0K?5bL zp}DmpeV+u9)QijP5T7;wWh@QfCx9%q10n^=qaKcXY(aVS-Jk#e9rvh$n2*6s0}%5D zn5hZseS^-kVtENV>D+OTIY@2~Sk4N>-1rAHM3j2L@!N5B{+4CT=uzVVvCnaj3sNBQ zw}9qWQN7CF3R<6l8akkZ^E^9`g2TYm@+f}`=u{+BZKW|Nq2kf)d*Q_tXc<-EjT$U_ z*bu>DjT$TqAyS}V(Q(}45AxY{(Cs{XTtUn;V5TRCc@WI>0Wr7z{{J8BG>_g6M}`d# zQ5^DuAL<4Njqu^1Ksn3+R#@uv(Aa4mXAkPf=ae>3iTsEL<(9p^q99jW8=y zQKC@*DUmzwN#kN*fF<>rzyAM6wE`3~zo6Nvq8!!3N)Y2g9xhEs^(;F?3KTODj(hS! z0dM;YlwgBEOnopj6vR{kGb2Du889;*#1sTGlR!*1Ff$Xx{QVPTLJo-e;U^*%oiJk2 z6Y6084p7~N=^;(H{8A?LSo8(mdD3|l7W5(iPHdtB- z1sQ`}41o6Ky;uyFcL2$QODR}K^EhaWX(zZ+=62lE1oHCVAOHV5eml;BwFMv!+WvJI zG^JX!4=u<_|J0eRf;KJ)qNRU%mx1YeAxqz|49O^EzlbJ!n7zK0XK=kAUqbm+168;@ElBvGa=u=pt8B z4=+$l+zxbrX*X-V38+~GYGA2?2Z9A0`L~_%=r#Qd8X`OJ;)W7<)yGv89?+GApv=Vp z>d~)kMP7>d4%F}HEj~dgqv3OD9;MmOvnyh_o?$~U{ zP+|y@?{Z-D=;r-n3~~Z!{njGzK&+r6|F*NB^>-eDSHu5Su188dU~aGnyTJ^k1mcDYxEtgkZs6bM zdj#r+u*aam$^V82UYt^7WB~2n`R@Y05fgcB3ZDLegh%H`kIvta#Q{FOsv-7F48Gku zDxSw#R6qmj$6POIc7$H;@V(xVdku0&wm^sLRgX^4p4$_UJ&jku>t{fP#S7gQkcas@ zKxGKb)0v?70Iw?G?*s3T120!;=Wp!=t@&&I&&uBlTB69m&7FmRn?E!3>Kp!T?o7~| zZ@`PVJP$sT@Z>!9;Z!{_`^e#TK+fbVuAuA!^@WG?klE2f9(tvm12(qWdF8$f=p& z8uo<|NL9BT|F+OeKE0|2VBMetjsD1k7KMVuFN3zAJ$vyQE^q}Ra0@PQ6(VpFE^rMZ zumdh|9U`zCEC4+QX#to6a?-(vj11r*K!}s(LnK@}fAh;TfX}!9-}DM{RT@Of^FR0w z<;URjlsr1my$F$qjgq_ujWRd8AwqCB=pKk}Xb3Km2S>?ruox&xe8IyrpeS*E2n#qy zc}51`P8}7W&JSq2(2&==fydJnJiy1Ndvvq_* z@aT3u&|uL}8t&1{+U*KUl&c}5Vc_2WPJN^_v`7vd0!zVSpb+o|4|0G);O#w7R{myq zz_;@OXngUfEF;5fSC3v+6IVoV=72RqgEJIjSOi!MWY|9!kX0bVJV8TT2SAoXnx&*q4LFFh*KUgGcdpGaFO#*$XMCWGJW~ z1oAW7OCaqpK&MiH47Nqr3wG1pKaijR9SMh`4-}#YpppVeT0wh4!8>FZLnVJPAp#L9 z`Rqj-RPqU^X^8A5u!{}-r<2s(Qlv~~>=+w5$hQ6zALUit+IpZyRMe*8u?;WMaB z`44773aEb%TE(^#vf3ML!UU)ZEpSPY3aAT;p^|xw3=I1nocI}Dyp>{P@N7KBz=CYi zw-;R?i`cnA-8#kvpwsF>V=_m4pMgt!~(T2cAf#T zK<7>EJP#VdtJ!%GM3wHm45IROUIkI9O0`Veu-T_fTJMV!g@0|}ol*`UX zAj)>vpgu^=-xEUB;@7c)&qP9)|18{pf zEErS`{sXN*X9v~vA76{@w*ajL=8^y{3q0u2da@)XZ3iPmTBjomXe^O|q4jnzOLQ;G zQBXfGZ5IPm8o%oWkK>LK;M3-gJA#B6(mDg#Joxt?@@PKr!DH9zRS@9u{gKDPS1g@@ z9L>L2>IHpUzm;-$be?~aB+kfSc=EM`$8kpks3{sy8hR4&iD<_-(B>xe^9MllW1#bw zzk7E6^X!fj@MyhVA_1RIs1`6h;Q0T#N4K;`>+RC_p51jC9&wOKAqn|zImA=#>fC-9EQ3V8Xu6E))#T0Mnmg?5@nyx0s)WaY5|54d5>;y36D+> z@UmQxbSI-nr?bRsIdEU{wX{d4vj9i{ey}p=Hbw@9|ICI5!1jP#ht{4C4ggO&IfFNB zwY~-!%D=yw?FEk*s0Dh^7j!elHU`jbu4<60O zB|I!Y)jaU%22^@+VH?@OP@|}4G<5_#U7o`3Lf1Y9-ZC_9>*P^RyctD1X}bA3J6f7 z#~x0@-TwqP{w{lVe)Z^e7x3t;J>k<`F5uhx4Ybs_#LLwXyqyN2-?O_6R1N>X+&q!5yISAn|q@VGc@jB7)!0QB% ze$YsvM<-l=i8olUrHqP4rzB`5E0_bUyVIM)r#q43wW?>Qp8&`N4`@1vn)_M+F3{=C z;n~Tf;`pBp{Sar^{3j?sdvv=CAfMOZ(d{mQ%4Y|iUIJR&32r}obh~q)%A@M<1}jHB ze;#x@8@Lc}wr1dO0kyJydaEVUCU|r^3wX31C~=3Ra{-UmlRlllO4vb%3VU>(@;DCK z?!@5Joge^6?}VC7K?V7fUoeEW;&ATs?ZdI6S(UJi3cGJUZDxtj+?C*KQu2r&u{GrH@-rmWX}7iDJG-H^cvfr9V;9JE;D43<-vm43Kr`t(W*)?tzAPy4iX? z7%eaIH(g)=tyM0`gO(bg$p6Jyq5`Vx<(m)vgXK3!c>#*=OC{|8Pl2lZH!TPFTPA`R zD}H~$13Fg$RCa=Ln`f_|fKO+IfQO}|N2f$dv`4o$xDfQ{bcPgyp`c;|G^`8?(?F0? zNLrV`k=8YEByU8a2{yWu(eXbUIQOKDQH;10Ca*x>upe=94JW!=S<6329VDjkbUOUox$aqt-CCFnWLr6IW0k1_^^p5s-6WrN|*zInjB_ zqxldAsQm_Jcyv30oP<`EI0|?icY?N0Ab#l%SMcZ*^yu`5lqKNu(gPHattU&AJ$l_G zJS_bMN@P8H134gWGVo~qR-)x`95md@@LCb#Fi3c|!ouet^?2C_i8K z?EK=<9WMY*Yqv|eUrSGbA z+E=rb3pD5&rvWOI+#L6S+9^K0x>}bQ8Q|r&PdB$C*aA>L>%ULuJC{z-I){^xH2%}RUp+Ol6_WY`B<@&dQe1Y#k$$K&VItJ`}CGz9nr zseSMG|A3V%_olCVvd$qN<=(*O`|VC!uvmH!}|hG z5C^Tr1MW>ufTllIR%y^cBB+zP8a%KH>ZGQF&4_)O$jQh6RSi)e9I#)2i-F+gn0F5XdZw9Rh0<|NK zH-qkogRmBWMj}8>_~Xqp5X=b(W(R`VfM8a@n7yF8bQnB3n<0yxc_)F773qd7cIMr} z$iM(PB;;Tkf58El&;0exkQL6Nr=b#u;1UX~5Tys;BG84-;5#omn*+cb;JTqJoI(0M zI-8*@oZo^iZHBIJ=4V1T=>ZD^1IY3Zpbd}5n>#?k0r9g3g6V)@79f}z2qtK8G$_zK zjyJDBh%P`dXCRoMQ-`2xK`W%8Owc(+Q05JoTJTw_9MQ3dJ-S)HO2E>?Y&{SQlpdyD z041XrLF|kS;7-pA33kZ%G3fj=xcY3k`o9qMO6<@<4p18c+FoXz3RiCpSAQ0)KKA8D zHl+LqDo;GRSySQax#8;PLe(EcSC8KR^XO((h3h}93-gZ#SpSPAHkf}r*x>&8Dh^Tw z$`7;Q>UAONgV?b6=O|o#HeCJR^WgAO!cY$?!(r_okpDpCC1^YZbU%zww{4|3Xuiqb zqt`paqt`SDYznC4yvYhGtw7?StDX?z2U$S_{>|Wo-g)1r^BW|mgWBW&AHd89&%c7! zyT6e7{Qtja=W%dB1u6~GKmcBUg4!h(U=_zayX{`Q{RGOupe$bE3aL*!@4t}v3|hbQ z+@tf@3qdwU2FK2$piKV=p_J9N^=;`@&@Py_{8J9U=0z&s3~z&M*!BtLh7y+6+a+C~ z$!s5fmk*$B^Eb#m5OOO8Nk7~_p!({XXXp19UZ5MIU18w~S`l3VbxF7N3tcet_>0s} z|NnP)gNhxG-eL}q-pQbX$fNVPZ|4Wc|JOm9l)+9q;@kS9bT_<_2PyAB@dFM&(0(SD zPTwQ0oyQ@=2%WWOd^(?dbe8UTarped|DK(oQz5_uJNzx6JC9vk|GRYl;_m~UV(7xZ zE%%I1Z|!x6JoJ3UPS+Eip%)PKr{PKPU0u(7IzPE~zIai)>fis?1EnvKgnc`I{GSXe zZdwnNUTm&C!cgb!(aq{23QMrBv_LEY7yfO&*SlRW{6Ep@dZCj=1-y!Q(pgYa@!bJ3 zx{H~Sp*!@#Yax{Q?+(52|5Uf@iEiIB7QWX({Za;gmxJIfgZwTRTQBkVdx18=qaGlS zEq*}tzen>M3*XLjzMV%rI#0WF=Yqyt4s@}1xLyVYSr;2<`mHl`Ll;wr>(wsi4%cg- zgEzq^xPE_8d=3rIr>KAe!lm=2W9QN4 zpG^FHp!-ogx>?OY$818*zW|TE3h;091sQ(s3^+^nGl8~WxL(I%Rwtn`7GhL18B0pbu%*q1IQCmObiSSwPzSgq&<3Blfh;| zeINjdgMJ23+t*Ydd}8nS7ZXk+l1e6MIYO`N75qu11JqXNW(^kvxf2xXf7L)Nkc+Q) z^qQW6xOl^V1_m5nha?qoxc0iwU)KLf*SE01p0_W~f(LH10AsPpJG{dJO& z;bk|(weSpt6u6-CBtUU+g`_xWh1;YJu?bXqdGwmPKwNb19|I%~Af{r81AQh)99(Ba zii7*AAooM#paxyDI;;XCp;{bFJ6=?rEKgeuQ*i?dT z0mZ>pk6u$Vh&4L@2*kl;xPD8xeo!39K=i-)%fRqD=(sDW=3sa^2Q+-w%^DBa!wS*k z(Q6uU5}eca{DrP3eyIxa1-`hs3W=Lw9Eqg!aC5ByB!9o!p$+c#a4Jn*fcCdk_O^|1vOixn2gX%;{k4a=ilD<_lt6 z_2~B90AgJ8==NO!y7laJfJZlL9Nal9V8cMoQg=uI?Eb^Ru;U--erM2)2BvU@x0OLY z04d~ySUCx#@GqnivjElf&`CGQ{!~!=BDncKqen06M@c3I&(1?W{4Uo#_+38u^zuHC zWMc5`Jnh5pa?6w7<)Tk7?|DhkjQDvEewUw~{4OVbdU^MOMNWJ2yWH^QcRA?T#ni#( z*u~tz)WzPx*v0JF!C-hGI`%NELj|%g?YMi46T@-$h+x+sr_cO#tkZd!7(VmY@h<0O zVo2l9Iq{jlz8}(asAHWCm8(XQ1NSC+SsSi_(lYEIMbLI%5BLF^p!J`i{tsyDGj@U4@Ot`I9|{TECPXhR=}4Oau|6@lFLnFr!FW+eNe{iB5QVEaMc7mr?6&~>SZ zlUPeYCjr8b!B=w;1dfp(KTdRg}{L)dV84}f}Gy{uEFfz1Y0_a42hW^=(j zP&W%a{DWvefx;8L{ZA?1F$}buG5|8i=h4l2fg6;hKx>a)ys)|c@BcnF2FU)S?=Keq zVqoZO2AyC8TC*Vws@Z!>7jzzf5%L=}9LnDTT3+hWYkOA;v@y+f!A?$4iQakav&Yh% zpne!A$PcFR*SjtNT?N;$9(3-B>jg%J?%g0W4ZnGG9(utKH3}5L5OG(-Z~H(?5DhOG z9(Xb3Cj&$0!RDX;OFWt%{)Q+3pXp|Jp!3v=vY()N< zi*r917`iQ9ME(MumI>MbIq5hf!)q;%Zq_GUFtuG!wTmEXb>V8gkAunt&_rzKtrt2! zVJ8rIbhFOq0vQili}a#21F{w=06e(~8m=w*$-waXibpqVBUlyapt~2xASQi!@$?6% zw6?u-jFI7mH%Q@Xk8aioxWfH#g?k_h_kt8EffP2qkpIEJ03P1}&zC|1qWS;-5@U~E z(O5~)-5W2C{A6J0-rT|h9fktk_c_J$gg$?8_=) zaWFjaf)%W=BF?q-iAVBbk6vCWOGbunmc|lRZr3}nS-)RUcD>W-dIwo&ZV5|+;ei*Y zzk{r(FmmkPe}DyaG}pK0|4cQkFJ7Md_a72Th|P~4y|(*~GBUh4{+)s0^&^j7+e0AU zP7v=3O8)_r|3Kjr9N^gb-KFz)^W%Egmj90Yp7)W%qujswH)pxm4ku;?2L8o2iX9-q z0KRq^>Mvc0>r5b?a^tKm1-mj4wTtp^oRso!tZpw(8X#f&cx7ipp@sugzpRt$5<7`nHU&f zr5|?$pUwsDor|(DF!**amjJD}YkdM)Kl}1ED+9y-Qy$5Ojff#IbLEBt;T-){Ph3I~Rl+@NUaX4PW@g}=lL8;~KL2VtIe zJ`7qWbLvI=7f>Mu8uopu^8f$;i!YjgFhQ1;^SfUFp9ATkdC{ZsCj+RpaQqOM;&(gc z@%^Sp^G^YALP_J#H@#sB8nDW@eE_0e`QIN%bK%eDePqhWz~2PgsMC3>@zDoxRZ#T7 z(@&7$EKO24n-Bf60L~NB;baY5W!f zSJU|Gr8<#wKV>m3m}pEAmV%)f6i%;-V-3bH`Dm@4}$dHO5?Ae zWBLG;sGE-|cr+ho;%^NC1xoAxk|2-fbBthTgJSM8e|}HtgMVO0f~*FapML{n^u09x zoLeBqc@P0|S1}P=sa59;O~G8#>4W5%t1zm7wMlt@eZ1h0j;J3 ztx*T3Onnvx1`<-{($9#LIs4E5{|&H|nfK@afAo|Y1WTELpi3vZS*I{VQsyF%A&8WD z?f@iZzWoStA*e+FUOo63R1iQiUTgcG|Nmb;Wn^F=H@RvWLz1f@h=wOuV`ETq1zlx} zC%HZc^+OQJ)de(|J(^zsdqC1Fe@imx2zr$IhWPZ$->wR}Xu|SP(dn1cAalUut-js% zpt_*-%g_J+LA%&nK>NWwx>-XQLG3Y6_w$z+I3>Aset%&PnpNlowc9-QL0VAYi|!Y^ zXMm2_r@d!j0G~AgN>z#{EtK6u$WMj)B3WyA@Qw`gCd>W4+JM z#K7p$&1wVI0BT}hC>8Q(JOZkRkvexTgx-OwFbC-TgMIAFhwniGU_Pk50vX?Jd;{7> z=Fxc>+}7WF0#rJ8vp)C_8Z`yA_b+(#vQ85PtqQG_+^Y39 ze+y`1Fw%Hv^KU-z^kI!Cco|glZ@C(7!voE~ZTaUPXg<>M-h%2$*6n;upl-oOMn}yvtp|L1dqKsjM=#hKAAZ*pj?G7yKmiN( zvV|l6K2B&+s0a#sP&WlKA(_zuIy5xo#d1(YG#?Rgv3yW!>dW}fNAop*D<7y%=w@C2 z4-#P3t`|y03=e>!gOPy&IXar(fYMPVDD8ED6-&IB0WuI29;Uf_L5UZd_8z|hML289 zKhRzrP+x@$Jhm&bA5=KL0F_rBU`=oLfHXmSAM4)0Qhdo92GA8(@bn35pF-lh`Hh4} zXXypda>~xo6Rnr(l6-niPx69NYw88ihAhX<w^LO)afpTr1UQ?Of zj0~MOJbHPfKt0uDmPQZ86aOFh^qTVQW@LD6>(gs01Y(%@^qMB{fI79j`n$oWt$>!D zf^zzI&~d-LuNW9!3;6V!vV#<}`}CT=+Xc!xAHdx}etCwk|NsAA{~xj+^x*&h|3UaE zlm@X0;dkHzu^{;yo}U9i8TqS6=g;Qf96sHu3V%QoXf`VR{p&z}={3Ey3zTL&I!|@p zd{O-hv`E^sn@5Ge4>Y~m8GFUC^PW%VXW!2ENckCbWH6{1dETSfbkQzGh8NDS7#Kjh zJpUi}_CusYTP;K950(cu zah}~KDrKzu^*{@`Kfh#P@ce(&^Z&WhyD#0qZAVjkB-fsO$-v-~{M(~fR(2Pt1csaE zYWVH7Jd%4shVBPN#ft?mK}`zKViaG?e;^mvDm(LU3o&JYc&GE;iwcmX&Hva-PQ6xv z&8LCK6~O-R=(Rnwlab*?0Zi2r&;Q3foBs)vuJ`P`2Qm;v?Glh$mzSWcu#xkRkLB-L z8AtwYHL_TI{r3d}gUA2F9?ic6O0R)U1hvs%w%dSA{Pco>!L#|OfM@f60pH&G4?dlr z`TN;H#SUoYuVaiObTrSS*Oqf9N;K>M>FnlF@#wYvv;$cN+_#78d^zC-0|O#{K=}=x zo;(`gfJWdwJO6lev!411%2ME3;W%p}=zu{628QFT)lin>K3N8+=aK#I*!+*r5wx*^ zp+*|AcG$7`pIi;UtKomg=6|-1{PT}HHlJtO395%QZ-Q3p_KL311a*F!nh!8pp5X6i zXJlY-{C}K(8}AbiCWh9N9=&q|LH_TZ8UUjBU2ipiWYj$2*=?iZ()klwh=VpufWr|| zhXh3=tX>>0*kp0bUxs% zA0U5QI5r>s$G@!?WHq?D`MDib-Mo5X{G5T|H7|Vq3`m&^|F*3lb*`3QT{>Sl^7|k2 zNVW~;U}EUyVQ>5ix}{*(c+k_IvYjGDfh-)MMtf@ZZrHBvWgI@nNf67%Ra)!xp?unV-><;Ce| zpxUz}5<2h*ssl8@Li`;IK&hjX4Sb;0zZdI3vmyuhTNFVhNH?$icTgp2=+Vo2l!uAI zr`z)Tjn3mQvY&x^=m$V^JKGo;UUq=gHXmjInd$|W0!_m5w}3Xx?y~~T!gl_DArJC3 zbe5ABG~r?T$78Obwn^y@@Xkt*NgiO6jyN{dGBWVDfcEn^_PVJ2 zxBd5@fq}mre0^KD>y9plmIM5)p#40cRRR)EK@I~A9q_kUfGp|!|KiOP28R8hQUTnI zHN5nq_9k*IM z(gV9dI|n-Nzwmhi3P%1`dvKV6ZfE}X6%>n*)P!+M`uWG;q;w0c22_aJ(;8WmlJ%%N@1rUb>!tMAD9uNgNqzJ6(#X7j!5{Oz=xZ2ZjwY$M;LF?e^AA@$0 z{eRI9*JcaR_U;SJnNz^pBwnm}1a_wR6L3r3qt|rCR_F-vA-LKMsM-dIT5h=7DNq}~ zdvxAq9Cdv>Xv94Nyq5MKXx`@wBwjjQA9ytW{_n-WQ0D+*JYZm`OY>;_ z&G3+cfxiXRkq2=Ofsz=E)56RExgp4-m-W30$e0L@m!M;qJsN-S7h+(j_wZ=^y@7>+ zp`^m2@pl3zXvf+lP$c!T2EdeW2JstzgD%G?i3iy*je()Gz@wKn52gaNT-l@X_W>aW zh7vE2#@`L93=E}y9=)tOP!+F>JbGFEVVqQtUe+KOC&Htb^{O(&Wv{(GdRaMOGN3)@ zw_!4d9=)tmoS<@;p$>G9LC|NA7En6;0V*`X$5bxc0!lNW&BSXSGB7xH+r4=65S+$a zc7qpZ+j;bsPIz(R5m>AP)C%fm{lv_~(Cfk2$@`L-iJ|pCsjx?{?K9BmL~rQ?@btuI zkEP(gOB(2^PSD)MgdGgskXf1oAnt;+i~JO6utx|*7xlDe0bl^v8QSolF5ZU&#u+6x}ttfn7fp>!KO1PTg>znegb8>pTF37 z50q#;x>;|102$3uq6%p@_L}-Mf@=OpFD&mfFuYa;H*XQ`Cqz5gqt{lgk&)qr!F_Ns zIvH#Xq^l|jHR1a`Xsh=;e`_+RG1JYO16Bsz|9Fp!;K+&qxe;9J zU)~4`G-$0Keh*dz%iaSe5$O55@c8j)d;{w2dv=0*l-<1Fe={<8>^lEF`0>)&M-)6d zPk4NP<kAuJ1J$h}J7!PG00`(^~4`v<&(H@<(D>_{___iJZEs^2}pCRqj zyH?@<|NlO{r7L{8Rioa6@|tbuM$ky%2hdst*9#tsEm9wQ6ByM;KWbHf9SsKsoLgo|IUrf5gz|d^L!rxK}x_P<<%v0uX$^QTU|4Y#F z9!P(*^+1Vlx3x!i=mih$&;uTgzd*6J14MZ6J74hVEIgUUY^7ADBG2+bBu{5|}jE!N$jbJJPxgNiY5 z!Kk|d6pb&Y-CltQn#sL+L4E#Ny^L>1}Re!&QbP_#!Sr@>y$JK$f zdv>0G5psut!MF84=%hjZ7SJiRKE1j@b&L$K{*q_sG5&25Ew?MgK=Yn&85z1=W+1Xt z8YDk;-hYvG8{|n)AE!hHmXVn27#TWmz4&;Wf#J0*w11D1f1cGcGQ9Y38`R;nQ31v6 zyUtrL4&4S7wjVtHAMpHtp1-yF|NsBsP9GPjAG!KAs1MS4!=v#CC}kqGjD5RJR6z6X zOrV4!@#4xYaKewj11qJH*MqzaP55!QVF_R5HmI2l*4hZwIuoK*1+LX?JtM+!b`^8^dwe6B8~lGq|>XD*=uCRlfljFCM+N^6OEKDfw{=w4!D& zD3$v3rXKL=&At9wc7jJYt0!281^>3t>)@UU_i9Fl7i(_8()r5iNzskV-h0eqhF zE|BgQKW;LBy6TNbKtYHUksjTw?yq6x*jw;0sKg7_o8ai2a0?cl57#0^Xa7xDbcWsp z7shOG1J*zdIC2AQfIr-T{c9N+Uhf6Zr-RBn@cgbv=kIQ7&}Na|&?oz#^R}foK|ZXo z=yrY5d9e8;Tl0gTpyfa=2RmJ#fU3>VC;OoD&)yJ~;uv$cA)-3}TajmJS#=&}DFfa)_?e+txo^nmoD6kkEqcDg0bYCi?SFuTXE!@&vBmxW0UDm&?2tJ@@Y-s^ zavr^<3&1f3T1^n3(0ZW4kAIu*g65whrJ0`H?3mK}AZfz`%|8W7syw<`t6qYf3o6$X zz@xdKs(bPpQ0%?9ew~5gb)ZK#YZzS3AMofYNXe6qC%tU+}38mP7d&DMg)%a6Ioflio@F)#qFSqkws z_2^|)0TtHpOI*d+LFuj?yd=Gs^#?n&wdm2ydI!peukV4bJyPLDsEOc&u;FT;>x&+M z4wdL^hpsPj0^LFZKX(2Jga_S}kyZp=9|T=3#8C<6fmRE7^s-h7K}-j&gyQ3au;Df( zKvo-l69u~;dh9%h7?=mzRN>LfdJDn>?Y8jfW%ZGSm;f@ZK^(${n+DpPfw<-uF}@n^ z7zP`E&H&FefX-;I0-aXg4ejiM@9Wyv2r9x?NrJl4Q)~YJ|G%#Z)Dh{t|6&?QtTVR3 zquct0*J02S{o^m1KyDIs?(3gLJS#<>`iFt_z$% z7m_A)xGp^Ax`+XE7YFDbEav8)%=}Yb7q4I{k#2s#;?eCp0dyuF1HbDjk51nS2VXFm zFm|{uNjvVkl#vls!StHOConR+Xk73QyhoX*%faO}C$#=EJka5~{Fv(s28cpOZAOL{ z5m1Gk-3~6yt}8lRS3o4^f+VeRNbUkj%Hfc_4w7WVAz7or$nfIHe2C-h`L}r_boj31 z-{z6n;k&B2!hxZLv)jX?BX@0w@49XW7tm!K5*@x9L9{@J@1~B_&99XZ;g@#YbtU*> z$hF|5T^kt~j=64T0QqtY#1k@Jj0`Wz=7Sc$gEk|S$T{+Fb5Tj?a9s^%BzCy20bQr& z(viCUH6Qr?%+>$@A9Gy~He||?f4HWCHXsEGcqu^@NaWn;Mn{_0CW{rX%uLQ#5_>R((OB=%Q2_rKuJYcWNypt zlEU6FM&H&a9ia>OTR?ZpI(CJqc)SGV7msdM3%JAYfyZb;r6cDGMuwfB%L2gH555M? zN(#c2ZHFt<1}Os#4;dbKk$DMv+ty2MuoGAxJO%{=C_via8k|>vOJ>_k3=A*7fChXo zd35{E=m=fd;ku|Jc5(ARmQs%9$`S_tsjf>LJHL4TKLS}4=F$0~^}sRL1FjXK9=){( zLE+)k`RIlJB?bnU&IhlV3=eqBIOf87P@(w%lSlFepI+Th??F|TD}zUOYzL^G>a9Hh ziA>LKSI7y!AW?X1f|lQcLi2!Q^AC{{L&t_6qWrB}K%)Tvk2yB~Q{-<34fT3-*EYO3 z@dI>n5a>!i{?7FO|Np;~0r|I=wc$O;zo57}unW`#@qooug){#)Ur>d`-wL{-6=aA< zcj=7((?JC_DA}>DeFV`8ngJ99_pURLnk+9`E`ZVsYd=^OC_qiY!?>V`dbJcBpl>d~ znkbtfYLnq=IpJ#gL9qpi)EB!iFfhDM^XO)^f-8Ig9zF#bx&hRpaBBD|Tq^6)%_;#` zu@A07a0Mg7YlViNf*#$hKOTY{4|3K#hLq zvJcb<1gYo|26c&TT_1uHhkdv21CL%)Ca~S0En~~hgDQIaZr>X&-L7{$dQJZ?2Zb(3 zs{1?xL$~Xb<{wPuCLX=K0xLjU6GVS4XJqi;ce&X7gVCdx_Y0Wkddjog-lNwP!~=CY zKE3ci52_GBTg_hRfNIL-BNEW20=RvMzTOtpUWCiM$_46iS~u!HFF1nU90?mc*z6qMkX zECR*zi)CkFxhUr>s0oKQKMK0P0ump8?}2=XEk3G2U4vef_y{06K0xyh81az`ijR;l z(D;}SDw06)QG_EtKxc%(ikp_H3=9knKZW^QLEFJRx>%c;IR_!PQhQL&QtU8R+b|M>p?{yP!YT*Ypg;0X!fFEPGLX8XWCya6LK@Js!QL4;O%4`uH>~ z3Rj*+8V`i+7xie~4QdZFlw^B0?*mQUFz~m4I+x(-5l|0gGH7$aaaYiKeg@BOuo9o% z+9#kR9Vblw_ur#8^Z~Tqm<%$=vAZtgg)k^#LApDWLA$9z_f~#`8}{1Aqnq{09Z*<+ zd|3q^NEPsCJ`CEfstooXXarj8Gy}tHQ1(~}Q)(rt4{=nr2a(SWQ z*?Ap44G<1C37krgxo!vpZ5iCy<;>XOx~a>Vsl#=1mosyR>lRQO$fsBL&|pP5W^(LsXY6ujcI57jS6Rws7G(<256!59U`pLP`g2(G{K{rb@pvgfI)J$Ab63626By9 zbP}8pYQd^N!Kw^yD1p-Rjd_d=uPr>fSrg!rY;egrR?wkuXSn1`@Q^7;=es4K@P4u2 zBrFM~odmCj!BQWA&vOAC*5KI-z2y7F>l2^>7gbQd1e7&BllwuN^*vfo?qfIvswG@M zdiFvu{RU0w{1*VJLiC#LUu@V0>6yF$(Y>aQ^B_GF&_&U$2TCQtNfb2C_d@_Q{txbj zww^5I1__yd0AF<0Po-Q_2N) z%Zph8ph}f>^D{{J_kwp){0|T~-V90>pm7E8z%ZzHhGje#l$TsPkAVl?|ANx}O^7j_ zt`~Y81w5J$@O$j~@c;jRP#xl-c*wK!iKpfjpUx+s(b(3LrN*A!wG1zogYQH;{^CA} z?lrZ5y7R#akUMvPmO1YP)&Kl1;6YrEUQkjakM)Pjaq$ESBut)Q5 zP_fAf7H+=5(CNCvr90Zi)$+4T=ZzX^m(C9}LBp)ye}XnMPGVwUaO!0-)V$!@`5ANo z4`?LPqcgU{v)4z3#iO$q)S2|`?F9uQs9WdLU3j)cg%H)TKN2 zgkP_SwyWhWm(E{he60suKnG&Ebl#Zh`2Bx#?H+~_tJX_C-M$_CeSP4uU&jiMF);VfnG<{mU%SA{_X78K2J31s=(VJUU%xyyo!eES&)o=)7?7 z1xKgriq0Dzo!~+8UMCih&ejajltkxL(2!m8Ay$vhsi0wWNORt&J9h)vKEq3%o%cI$ zd(L!LwJ%H)}Cvi`~)iSjKIUVpkhmVA-LFjc?6WwK|A$cyE=lK zhp%m2J3qUCdQSYUpwoC?>w0vvdcjTj03JF8nIO3kQG+i68}kPgcipU_V8xJ9*wLl) zhDUGe4NxHiTQ$_p`ui%(K?~u=omzk}E*NawZ_sq)`WJf+gCd9ZI9yLIT#wRBuqRZG zz{=iNhZz`<_76e#$7i^79(L?J13qXE)G#gq8wIZ7JbFzTB|w?z{fli!KqW=63jWmagdZ-O=ef z$EOpLSUYPM7+&f;_o6BplB+jufaK~|5E_)L--CmzbV0Z84yRrbwa(BPmZw}gAD8ii z^7P{pj?NP^9l!tSyxe&Mod2dk2cWuZSERw_R}3$8e)wLx#i#Rs=dl<2c|hJiP}1!> zrNi~0W9OZY*hBo=T=#dl9zN!J1e8_wg8CVt9w{^Uyj&kh#`5U|O{N|2=>!e+BE~}g zg9X4H3D62ac*E7BSGILJBSWdKw+%py?6^wwH(F7R*&3ALbY9aY9vGasS z^AY6n0FQ3g7O(YOf&;E14x|D)0I=%-1H(>mzU+UYasZq! z_2F8sf(KVY{_C0w_FvBdSiTH8fWF?(qt|q;CnH1bOMf zJ^)QI^oG9K*9sb{{SP__;6Mo|aJF281x^&)>R)rgRtp}0b}3$hG=XlMEN24UI4R)! z;1hqu!B6~=ta%^-AAX$=-L7w3EI*X_dvx=nhK{eysza_~Tfu znLr(Q)8lg)88$GzSi7Hr0qiD^&igK%pI(@9BR8=G_JJBxP$?ht;GJ?cG zEx5*?4?qJ4?Tn!7DSqbjx3hv7=KSrPUp%t^RU3Pe+puO0&mq^Mh3?n ze4qiu11~=8g?jTPXzvopq1z5KFqFxG9JvNmg!c08n#RcRTEr3DlG_1V)BD=dqnCHZ zG?00$7H|vhfrmIj7VyjkMS%b>=#q~OOfPytR)D;=lfl7)!4d3B{`DsqPwrr7C}1$W z^!;P!;s2-iwSfkYJHNYh9(wVa160bCu!57xKFCR~-#c%CxG%4BFfcgo0PR5D0a|MO zdaEON!eNI40|UeB6^@`CwG2Bz0rq;f;||b4cHlPe>pn-&&0-AT+5gv#ko5te{1psZ zYx9X;fVciX14A0W-ib0xk8akab0E)wN(c^!uRy_3dk7R~rVHjke3$p10hIdJ?}2XU zeH{)8J&*qk3}7SV;YJ*N3^GgrWP}x}5y}uFazI9awwApX0V(?W50pkCSRu5|g?*qw zXV4A>(5mCum)AhETHy8{$o(k&SC7un4V|TXAZv!FfzRIo*Y2LZb5uYzE42OCn|lDP z|Cs9m$8Og>9j*tDxgG+|RQ|pRsw>z*Hx__yyYcCK2X5lAgX;=#3-2Acs^ITPgN~nr zMtns}m7y&>{^rHtNPPa{;UiE*RXG>j(RvBmhz_YC)_~-DO(%gZVguDZFtecsgVL=F z|F+r#p554_kq6xb_*=R`b5z}|o6msm-~1uS-wG<_Jiv$X_=5*tLCNv`L{L!(x~_tG zHv_{<@Vr(xYyBBetbn3e6|OP}tn$U3UC=!7Iu11d30L?BJPr#oGIS!M>RAU;4Qd>{ zHt^_n-Qdz`VR+!RD#Q_|;5w9%bku-!fa*JsZr%^4LC%1T^YDA19(DBMq z27Bj21YUr%A4s4NBJc*59ADIe1iEEGhmd%5TX(zO`2?#Ur2l|(%IjQENeUW*=>mJi zy4&>uay9bhH&~g%B$%>fh%%2}Q;kU=?}4=X?*!!r0p5Dh_IcMQ9?d`4%QHNBc|l8W zJYZWyJi56(dTlu-F*1M`^MTXU3*(&(3@<^eeL>m#!*2$L*9IWgJrGL`#5x0F$$(g! zKrA5;YXOMG0b(ut4Yrsy3{1xz>~?+eA5_YNe0ky%f80S(cAvP9fuT$glxy4ffjlGH zIgyd!HMqdfgG;4Aq>4aN>>jTQ?tuyn{tnP6 zE~v9f*!ao~9^I@vPk`JG${O+D!BtS^6zKt_ofl%;VOitOHU@ADxik%AvPW;}ac}|w z4Kjje11q-kZ}UA4S`v{DnzhLTmH%*KIpD@lnFJmEa)nF21`nlz>=Xj0*B6VnF)+MN z^yp?)gsV9YS0g$JQD{_x6oLv0OUOX($Kx=6Ooym1MIP(Z^1*{2iMc?S&) zgAxIx){u7mf84S8zhZHsM|bUp7whhTQb6Ubm$RUw0j0U1^IE{&2Bdkx&il}s0yMb- zGfbc)!=syZ%`sRY27w1}K@npK3O;*}Zq|Odq$yl-C8WH6vjsXppAAzTNI*30jvg;Fpq%;OF?d_?gS^y+AXkz>AVFLMY!XqGjs>MIzN6C z2}@G;R=l*Th&XT7-C065YAd1)HQ?!DRQk2DnxxcpTFR~ z4UVGekXjwIOB7P8gBEvt^s?>&_ZqOp)prK)bbILm!vl`Z{{;A3Ks`l|Ue+$0I*vkg zxPp=jXrA=K5s>#m;aPSI#1bgY^5`}F297|N&W|rNHZw4Q`}}^5|tXR{`q)oiyvw%j&5LQ3cX5R|Ud`>j0fmi@anC zR6criw=-}tFmyW@G#~g2ny~if-|kkEwz7ev#L=Udb)`4d43A#czrGOmfi(V{gFd~i zvO%CZ4Bl@ZpoRdezB`EGz2OF;L>D?UFub<+=w+QD2GMlFqnFhNwmJ-Iz#TrY0Y`&C zQ)R4tJ|K!0bfK|FujmHQ1wWnOMGqdG{Su(i>1+oDxld<5D6Bv8*SCYh)2FlDf|Y?G z_WvWy@jnaCPSC6iXx-mIP#%I5CU6gXH2+{NSMccNP3!=5ghdTO3+s|unmiaU{D0ul z%e(s@1H)@2k6zy2a~K(3OM3M3mds#ecrD=3%Uc9uuzU3KdQSiuEUN@IAJoFRG6$5- zL9LZG$N^Ium?wazu0W%PJ3&1-(74v3Kv0LTf}_iIQ-|w%&=8EZM=x}|7L;2i&ShlS z2^v;3Jn+H}X3j)RbD|*Tu(@>QZi1QO1|Eh5nc@vH1+;s{@W6{7>p+A4pVN-JZeX5- zYLIW|ACQ~)AZGEpbk%P1={EI0z{v1g-KX2s?Et7a1#Opk10FvGnf!4MBg4)~kRJ8C zb)a<+cKq9X*L(DuK57H`AG8Ol4I=K@c@K2Wrz`)q;~u@HXJ>>lCHTywM^yrpdydM+`pdj>wJJAp1M9>Nv z!vimVuLUm%+rYdM(^PSYsgS5x2Ma_-xH)Vfb5=sUx*2B9Dok_E`-5G_=F*i4kBZ$_ zK<)ws*n!!M3_C#shlU4U#<-z4Guy9~n!@%%T19V|AWYdBc+yH%0c--E( z3=*-oR)fOCM#ZO>Rs1j`189PA$ zVrdznP-0~nVNhc2(R|3kqxpb?M<-ZE>E+iZHmmqsKrKLKU5XikF}~pFVC{8H@}s=Yw_y_ws^fDqc>8uyaA; z?GUyW$ZyqPHY?}^vzKQH41bh7HEU2M=xs}hz-hE9=)tdAU0@K zokuTg8i)-lwLtrQL2PiBy_Yrb2qVMm8joJqQV^rqqnEV?#K`jKWo-sA5<%@N5CgR5 zZz71{52}Aa3^$Kn*7+cYtw%5GG7!VWqnC9ph@tJ#%en=`Q1a+y-3?+$g3eb2F$6q% zSx>ji1|qiG>{ zXciPra-i}Bbd#6iffvCmA<+ansu^ZU=gk*3Fl$a?S`&fS8Y{Rp+d)OgNl0pcvjT37 z0FpIVSAePr&_vCPN8zBth1Gc%C`%z4{>VpqzK~e~nsa0R`TzfoAOHWq`tkq&=O6$7 zpa1{=|DPZK|L_0%|Nrm5|Npc9BOTv>>bdgo|9|0s|NqPX`~P1XDrOF)LFPImvHk!3 z{~z)1|Nq2)|NmzpiG$R^FzA}q8mL_BzyJUH{{83|P;<0nPDffEQN%_vmK*w+-f$2cD3|jz?#N z1!%npXpVrtC7BV@{64_~ZUKP?zd;K#ndTjHJp^*{0f>_oKqJYW|6ioLgI%o->i>gH z2Dv&2JZ1}WwPYV7!_Ik-e9p2Il+VF6eRG8YYpLNe*8{xpF=%igfZA1}U=#T}Kt~LK zni7XVYsC3mK?{|SxgHScY6i_NbhsYuY6cCZcDNquY6h*`>2N*V)!f6tz|i4(q^lX! zSnY5<+SLqNJlo-Vtg9Kcfv>~$xJUQy383y|NsBe|NsA&{r~^J_W%F?E&u=j@BaV)|D^x_|IhsY z|NmAR;|2dAbm}HdQ;*)#%P$l%LA~eF3%l51nF=(AVdV_URL8*!PiHLx4HSSDmj4GY zJO!`d`wzCu@!)^?*V-Q4tWjXMff5-5ct97F?k|HU^?f=&zSy#WfdMi+>e0=r4ps_J z1V6y@#E_F)Ux4o>mIv==1N+^h^D^k(8_=$5@FuJe$6a5@vam3KZmD?F<;K|I`nJoB zsl)YMmm713>wAyh(igix6R$f##EViV(ENJq$qK#ZpRDyk9^I^)!6t#683`WC1vzsu z*qJW`7Qn{5oIJW&yWk29;0pa93ZKu1DU|GTebvF-<@&nAnX$|DO@}j6m+RXOXJ*3# z9^JeSU=u*&T^~x>!G4TA{6cX)Xu&twf1vmUufGQ!VeQ%Z$1}M_1+tX$fa8A9T23E+ z*B_qUb5ua1EXSQ8xB2#(Doh1+F229eT>vW2N+mpcS)YLpE9>P=-wRrv$avh@08~AA z^qTGnWn=(X0idPbQ1!YVy{v5@g}uDyAgU9j9yCV`IzvwebjnGK$_7?YY_TYU?y9X( zsn`YD2M*f4Uoa0e>Z1F952#xYn&N=Wl|mNWdUW0btu=K89a#$+dDZ|8gNk^A>Jfz4 zCr5sP78OuI1ziMC%2X}p)A<~9{|3m`&V%3q)7F!vpshBbSzP!DP=}HC?}G9Ncs|;r zm$d-od(hq`oJ&a2$9EdvM1YpvbsqEVyaKv%wsUU>sPoay+PfZ>!7j9(1kZ-^yB_Rp zodS~WHRbvQYUMtEv40*Y|#s~8^eY~BM}>B7Lk zKlQ-D2lAa@d5B_R=;2abE-D!vt*ie1|L@t`qXMcEeL5d`G{0)_>}^p2U1i|eyF~?5 zF}k+?_uzN=il+)k-t?H)bZ-J@BrOzHW9?`-MZ}G|Nk$1 zQ~&)x-Z}&7tgcp&U`OjZkT*alRCpqkg0i}N>OaUKmK{tC3@)8}C;a>Wzq=J=2~R^O zn1-1ED*hb1K>OZW*ZlkcAH+=TXk80d4-TZx)&`I`cp}8r@NF7meV9w;(m+aH(bMZT>#c(Y&7BE-Dos$)^o3LHCJ+>o%}B$Xgw)+rey*zdBk$R~B@EJ=W0*Dvvw%Zv6NEf5%)S~-U!<9%1l z_a(kAoiDn3K_PbeMdv~8UQkjv=6Znb;7f@P--FQIhKD**4|lj80k3rfx1Bt?At|o6 z^uUXYwxHC+-vK&>&ZYC6Cv%BPMdz)Zpw@s#@7`UY=)5(HfuZ>@*G?`_YY3)wE6A^) z(Xt6(16(`b^LKz6UOvogL2=+}`IWy3)KvkWs^i(cM+LO%5S&s#Z7~mMN>K(c3*4gu z>PCVkL5)aQbb}KNRN=3rfBzxko#2E8I_ji#J9u83HEsF!UR{b0h0-ukG#qOM4Uvc;^6YVN?f@+yf34@y3vMGDp7dzm4O-&Jz(4ii!H4pl zy`U@y(J2Da2`=}c<$)I{vGi_j0VN>YL}(6=0SR`_EdVEVkW@$Oynp}yA8!SvV9@NP ztKkz@(8{8%pc2ugb8XK*P=|@ZrSmsvefV=w7B;Z__up0Xy(7Q#UH)xgcXxmb3I1(h zvpQNAgR;urg`k3<^KQr7MgRW)ckO)U*!YZr;s1XZ%dH^0Nz+fc-*D z#sLQ{DC5kq0tF#|2WV{6r4wu_c;ap+s9*rC)ds~u?^aM@@FEASwj$M~^SMWNE6DpE z%oPp$#(B{8xNO~59q-Rh%LrTvtE=>a^N67j*k6zPW1LsS zttto5D#8_@RfOHFv!IrAy50Z}w@yVJD0*RJ2?=FTWdvFjnRFAp*28xNY*Az+NC31b z5;R=p$iMBJtHPE?m-L|ePKrID(pI+71dqFG_75;7D<&pf5)seEGb1r&K{rkYH zBm1X8$HdUw0IH)_TY#KV;oIf9$;IMBN!`mipiXVK>Eq=fbL~8OWjjHwnQmc^Uemr7 zMuwfBEop`aURX~9H9+hdPb+{Jly4S*pkXi>4gvQX!DbW4g9^I_G zU;{uY{zfT3sAN3i07~uPy+$vdO$McPQ02vdXg_15=Tl2THiL>>NP0#K+80S?ps=q< z0Ih-rrD4{I*FXt65<;V;AiB9cyxPq*!^B_PLul1{=d5DT2_Q$VhP#)BZ(HL#@f zrwftnzfXcBd(eR*`nw=W2ejNc9qc|(fyfK?A1JzCbU}}GJ2Z)b0epfE$d$Mf!I?1lt+_e+rd61Ef)d;8LfK0sus?u&uL|-2cF5jU0H#8voXZJ1!83IZS z7oh!(G9A!bw6#|l7$B_Q(~;L2znu<>NZ$8Zj0`XLf^HHt{BL;sB?BV^19;UjY{4;T znJsL=F=&bbw&3^z69WTm!SO{V28L$Pg5#@ThB<%xO)!Ixzxghx`Q6Q`0d^cH_|EMB zITPg9#a&1Xj_W5fFuV){T~^Dl$LckmfuT$lw0zD1;z++NP<7(Coe?s6Cxru$<%h#3mH*6mLnBg4*V44{*eUaXt|O7%7> zp50)n$sGu(z6qd&_QR)F^~82YhEi?EW*Zge8WoRj);|kj9$5q)O$CKjZ3j5VL{5Mg zx6@oYYSD^YkQ?)jKyKvk0L`d@{V^TWAKqX!73N*8n=EdWmO*R=?SyKA+pGb%nHgj= zsC>NJ&%p2!bVjaEw{7G?kaz8UdUgMA1F^uq1DzeV6SVxw@W6`={UDFqL;XFwosj`1 zGp(P2!Qw_q7szo;(>r3Z_+hmnB&SsRd33YBTL243ti-uIgZDG2g3KqWzPQej<3=EqYUx$D)_LmC`3}qnwr{}|hs1TtaRD*c* zn(l(?KYszNUjn56KV(7qk_({9Ac7S_>p-fI8JNjM#sHM0DmcN(rNrZPg-^F_#C%Y+ zgG$(cTR<#u3CmQ&$gmSMux)tY#rj@o0sza*YDLIQ?FA)(Qc&G|ZVRM<1=Y=La8IlO zkDG$xxgFFU0j0gfUIvEOf#4)F18b70(1#`&(8ibD^I+kT2scWj4B-OdUPOXu2df1o z2v{v_fT)ENdO&k`pz#-v<~If&-K>#N)t#13K@I}>r~tg~M=})JOrh zPdvK!gB%q5@;u1p-~%{O)-S@=s|5rgtyeP!chF#$1*YBxZ7XYs9@wSM2w4yXTA^kA z^#6a*$*=GgTF~`sn~~IjjwDA>16{9H{~By6bcNc+H((xgh1zF`{h;Mi9=)urpqi?) z9kgo7qnA}3R26|voAu~r{SCDTZa-*6l}9gY@n^7U&=qQ}5FT`en)^4f9CU@6=MOM% z1!#R%FY9g46*isipfNy?Ue>*!n~I<|2}0R$o6y&y!RGS}FU7uG;s6SMNPo!iTkJ~_ zX9OQQzqfKWDB*$H1V5lF*gQH5ERMN8Q0Qs{)es%754+kxcQJOjKI&=%tsv=eecaXd z0X$vxq^k{doKT1B)2_B3V3B8CZGXUw=ioU)Q1Sr}@x1t{4VwMqwE|m*NXnquKbcNw z2Mr}XfZ8vx^CQ3m`j8R!W3Eq?9J|^$7(vrz&m6njc)%=>bx*;AyE{RB3sASBT^liE z|GW#7BXADcgHEsqkFJ87){ya0pUwlWh6g-4uX%Ky^5{Gm`*OPzDDXh@3*hwZYIrjC zFW^!*_T@xd==mhzG!^@j(E-Yb=7*Uxu;mBP ztnUWf5~d9X9j*_MGKK~?@jdEl1Dz}g&KQs!@&uMcp2Bj-GguCJ4$C1gz&Ql883K|+ zu4{mEhy>UHs5#_UD>%gvnLmu+xdN0wKvyw!xMIm4=^BXqalDy#dRZ&4fKv`Mk62#?^PqV|_dX)!2twKLlmo3PW=F!WVxEj>h zVyXe1J2!JGC?9~DCidV_TTs&^rxD!6_|^<=cV=24O{d*!0kr^2I2`wb&YyoR4m!sk z)K%!^eE_0586EdCV@#mwH-jh8_JO+!1Sim7bAKM)&JLcPEh?ba1o(J%(9GJccmMvk z9w-4_{c(Q^%;l}1QzpT~?-v@tF1Kk0&FDd<5WzERuWdX#A>8B62B707DVmW(&7Wbx zpdrOxR_;}ZP<4j8?In2B6BMf15VtL80-cez8RRR^ZZ`*yPDuN$^Ztu-O#lD;bb@8T z8@3?z6FmMr!1r;0j%Bzz8RT#Yq=%)`@LZVzbS>es9yo@T+arNtb+TP^YanSc%Md4 z7X#k8HmgKP88(9Y7$u!}dJJyLNIizmNuaO=xk?}Is&APH^By)JdJLgpwV)oug;L15 zg2-LS7dj2#(j5JKBk+E3NCW;w1E@GY?AbXFlpH)-Z2!7gCohj~);ZvP zh9J*6fezOLXQBU~C^+!qXFaTKzrP+-*u&dH!2urK^Fii;@~1~9c(K%r$&WxK-+f50 z;pJ7Z4rqDrvBM?E(cRxK9$bPSb4P0LtUU)V;h<%C{&_GDT9zl?gp`<|R)8y%4KF>R zW%=2=2sIng)j-SgmG{7=Ld$Z{?s~*E;I^RKFX3hRekqV2z*{CjWuzjQ2QAB)q5Te! zYnDHN*a~+Iv@Fkm4z>wemODbshL+{bph=m|c2GI((aQ>&iuLGh2d(}_-d%#0-=XUx zJbGC-E=80qpwsIiTZj9>qqCq~6Hx;$_1x;f<@HVzr1Dy?9+de|%4_>Mpv@b+1|SMl zUbADA*Y&mF@|tfBDBn?5UTeLCm)D>T$q<)c1rK+ET)wXw?DC#k`jyx4^a$>MrX6=r z2mtMv+V}|^d(gD__zai_O^ZuEL1G*f`#Y~e*znkgrbWZg5OI*2R;YTo8faPsukVJp zB=-LV+W~D!6hhj^(3V6qga=K1OOed3gtFmgLsQ>JNSg(k`atQ`qq7~__C5+pnb5ZP zaY&mV+V-9aaRoG;O8-Il!k=K<8+<+oynaHYSH{JN^lI4)D^Kr(M`b~={s&UTOsfW` zS570O^jcSgkzV^}g41gQh{B#;&sTxdYurro(<^8a3e>)+dInFg^*u0`tHNEL2yywH zssTu^9-tQRarcBUP}8`VRREGipb6IK6gV+K6D$ifk$@5-#}!DF!V?TM!7e~j^8`nN zm4Osn(9R+sq(KTzun!>iLlf*L2oIWIMZQ4n1lj)rY7g9gXo7Wk1a>hr!3IHi&;%>; z6f6f#uwszp3r(;uAj2up1e^5}Vbi=H5H{Q9poChTM#zfCTPe$djK{K8nU2cI1xp`FBVXXqa7Nudq5|JKnI)- zfQ}bJ?o>d-n*%az2JMDOy@A*XvOn)NgblYJYj~rV4@9o_`>cypDr8iEN`+F;BEEy5 z{z@-z5r_gW;$sDM&w5!uvVpQBY!M$DMxD003|vN7O(m*~02KxP%AiIibr$hK*K>i! zhv4Di(fq~&ydnWIEx-ZVQwd(|c>&Z`Wj=&D{QhEr1SkynJ1Rlba{L0U7j}T!;R1*i z3CBSKKKwdA__z6PI{1)-f1B%O&J&LO+s-qd?3L-XyipeG)2+I)9TWiI#rE`5L{Zk4wNS6TX&0TJ=naI%+p{#BK(=2-JH54|0R%n7E;iiUN%`f%d>1 z2CD&;rf@aS#UT#=20D=l*=d$H%94D#RmBl5+5>KJptz_Kbc98(=_#;_KJg3qu6Pj# zbJk&8&MJXgc^JIf0o?laXs)neDB<$y{O1|N^2(rSWJDrhXCuqmI;ei(iN=|*oCZXc`>+ER93>k@KPG=1$ftnwFGL@%irLYAgVW8LCyhP zFeFQfaYJ?T45ER4%kFcmCc?5 z?U+3*W?*<71PVN+DcI*7zl$Pur>x*+J(vYD6=c@(7=#-p6+^pIp52gW>MpSGX#G~A z1Bob5+4))lv{Mf{f5=+Q$gmR{W??YBp!-i-K&B&i#Zb0hEi3}{VZh_Jj^Ojs96&j5 z2k3ZMo?1Olz<4b_#&hPwkivpRJ=j@K?j04HveNRi3aTn zX$2)feRejz36I*FK5X1c5fl79*+o{sc`8 zs89jTuRxl!(8le;3t&5-O|Zuh`=L#+uMi%z2__C5%LO%oUPJAHH-Vr{u;lAt)1XZ- zR>=GYv~gPwne&4-!8}20i96e&jV;ioO%M2d;9BTB56C7)C>w4QdSeSV9|#LiEb~iu zpMhNk4b}g9!8~ZFUPSWM)#GR(1`XBR=MZs_dp1JV!`%Z7RZd9r92%O&;6w?f%)v!S8NdkySjXsE7-*aQt#MexJUhQYj>z(=1Lavz_Pel~0dxSNa*Rq1e+%eX8^^s`;5Aj> zj=3%f1RW;J)#17jbj1p!egTc%fwuD<-~&}L{2j{Rt$YhW8yO)tckKkVra&t41RyFv ztC>Oj8A_myE~X{NTsMJcnKnQsMnT0pSUuFlM-X)j*qM*HE;0t&3>qVZn=1x2mjN`z zcieRWJIgWGMMjwF-tj{!cK*)4poz+E*4SE*r$L1pGk7c)RH!leF*3Zo2)e_#d5?+- zXk|9!5I#sKc=Vc{dHr4 z9%uy_U*N;Y@Un=JfuZ%bM>p#oxQZs23f5OX;Nb#8(4po0t|vgtgMC1?$qV&t28Ne* z5SK58YxIO^G(F?Z$na7eBHs*`*M!SY1z8P>&@@mOF*>$x_lCi^g5r`?! z;k&pabxDUS==gyJ;4}W=0lgL+Ar*Cox52&!O)P=UVshzx(UH2S!*ww@(80wnEYd5% zdiXoLK;4{f)>qZAFqr@zy9I@bp)VukOtG_Y$zr&qRWKvN&LxmaMl}n3#!NTs61YMy zxWbt}poMiF-K_0!NnN<)9dB?DKFNf();zjdBf!dVwz%{&5%aAA$6Wt0dGwb41JBKZ zgX6_QUQl8N?Tmd%%aofc&&42y9_-CIf><^AQ2iajMYqWaRuO;S1W#1Uau7 zv~&1K6)1GTxzMB6G;l8{rM-W_mIYcV1v*3e8YmEZO&14&_L9AS@ir6W2L2YvnF^-* z_aW-9L4`q!#yomWYj;D0_d|stCoPz|>}P;nfDSsZ{5V*yB-^9c)EjE}1c*?KN3UtR zJjA|Qh>$PnMjoh87DUL-qnni==6Zq^viDJjzc_s^Kq`f=)X_Ib=>f9n|1JS|5Rkzs5J9X?54m;~t%-AzRWQ?X`au zAZwwqxc9)n|Nr-aPStp^BMsbSt^&u$^B4LVASe5DZUyaH;%|Y**6{#PSU-Ou2$tn< z0WDhf=rs+#3yQ?&FMg$iG?mnN^qMY$s(cO+D)i_zE!Yc>)8{WfL&Ot7_oc`}4BZ13 z;%_+zN=MzSv0#US!iTvJ&roI1i3a8JSGcr zty=&i!%NWdB97bGV9xMtK3cPZ(eaxrBS#4@XzN{0>&Xp_B}| zkF|oF#Ng3+(*v~a3+yTgN1&q@cw{EKdamaY=|ruc?UtU?Kh%&;|^TZdN6* z(V)mU(GBt($V)b0FM)Q|)TA&lyzB)x1okt6kI`pxY^---U|?i$>#I9l(=+$_hhcG0A0HWzINhRG6RFF;kbs!Kv=Y$ne_5qnmXbTrvhOSqPF; zKjylh+12pdOVB<{k8ajpxI$yNLViDRI(wA_y4nO<;<3hn6+-Ghp>Ee59?eH0kW-pb z5~6>DDDRrzWVm)70hM*vJvwVamj#PJ&FOT#(D<8?iGiU8bQA|0SQO-$HJvceeDh^w zc$vivE&xGCgM!Lzy<|{mffL?EZ%D$Eh6s6i^qMB#fFw^2un>Ps3`lb~>&jw~ks!nU z;fCMv1^E$_@R*Yr7+!LLj(_UBd(3q|<7;+LFasm`9dq5s1Wke)9D7|kJ6$_KDNsBK zlmZWfc1gCRgRg-&KqvuDcySDTlskV%FcZkd;QJd~Tc7xLzTkO}6 z8wK$CZWqlT9?2K>fwly^a7_fQ-}2q?ntcMKJn-mtUEtKqV&K%vV|a|2g@0S<{*GWq z7t7KX{%xWAN|+2Ubp$hYo;vtSq9d3YL<@8Tvvg#$c6hU;9d~ADWavER(cKEZV}-e( z!lS!(2I%s|O9>1NyFm3Gv}CNE0J>fwiv<+t{2eZ!dZqCgs5o+L{12vj+d)C$*a;d3 zW?*pP_xa&!`3~&SCKd2D6W0YUj2~PWKYDcfZt(4V_Y!n2nyck^=v^(fib$Sz>HL7~ z<)8#m%se{A%+lq$AH3;*Uxzaj$n4G&2VY2ZI5UH2fevSow>&$~ba=D5bY!!;bQE*= zbmuN`>3oOg!53fR85oc~)*agMq7R%7Dso&czq|7L{Bvde>dN@Vr!#eftLAr~&KEA- zxocco|GRXj_VBk#fhs-F&E@e746l+w4z|wVj8;Aue0j#~DcU5hHOGd#Z^Sz+$ z-RW>iTZAN}z56AOfx&SPXoILnH)}dr9VF8`xpY22yEX!nQ9#AXG1q;}FYkl;oZYNe zU`?Rx_5eH*3UbzEkj)EU@Ww%_qcqg|2s}P1;Mw`l@b)*iS`NsixiTKTtc{?lcaWnYULl$Vpphxidgj&x zm7tPwPCh88K(2FwyY2_bb)a3r^>9g5xa1@+P)YIPPAs$^0NytNxvT*;{s1rU0z5m< zd3Ih0cai_TCzFW(6hVI-TYpjHTrs-K@fJyLN(yO+mr5!2xVnK`aBq zOFu@ag{b{;P}6$_C&(!N7SIv1;42pSo0o%z#ycT){d(~ov?&wH`}86cV)N10EskA0 zDxIeq9{p?h6;SG6c%b2DpvUn;;K=58z2L~dEkuOLqxlyze>-S%xKA&uivy@z{v1Y z`Tzg_h6i5Pd33Xi!&U8tsB+}r#sk`&*$FZjbg*+EBqY*e7#Lo=`}DFtG67vl?$gV9 z*q)IALnj3cy#Gy!yX z*p~nQ{~P`P|9|cO|Nl|iM*)tV=Q}TZbe3N5?ELFu`MdLmBfrz}-U`MSiZP(MH}D0) zKA`KR0(?84dHz4vc?)!jaChm27i=*M4F3;1_WCn|FUWib+P{C{@Bjauhg)x#^1F2Y z^60L;06J>pZZxQ%dH!N@H1xpbUpX*;EdY<8f)a*<3)mOo(a1nzK@r}| z`XAidXYg!10=g-|r}Mc_=Qq&l9|01e=GInFP1Vin1vU|sqdtJgJwfiZw`XK{d7X)Y z!I6I(pWy+})nyDGy`ul;V&s1dpG`mbTUrU6Y%PjT1_I>n)5 zF6exSW8jk^_&j>|f|erf1l_&>@yv^~NLYo-daOkjB+J0x0y^{2qc@lZe4jQbOBC}N zUNZdV(R#8p`6VcGcyu23&^!+kL(QK?Q%pg}HFQj21yM#*Ou-I;^S};*^FR)Rs`O|+ z#^Pc5y>!1v>&X&rkKQd{V?4g!1RIYiFO9@t8vY;i_3F#UXg)zHJ9|UpeE!2OP~Om>v1I`7yob1c@-E?PO-)-+qztQ0G+8u^c|V)y$yg z-tGuc)ZFsu1U0Wp@;$p<9bn62k1^|agO4WZaAxdCW&&RYa-12Ip?V^~8Oo#co=@km z7d*TF{Rd6_m_&dYK9B?tYWHS>TnMSzKpiJgHbKfxFOngL8|HzPfdWee?xhPhU@x5x zhpiTz7>={Q-~7e`TpxV(?EL514PNrt?TpB5LEy{=+8plD%Q~qP>?F^|W01`D-KX=N zPv@`y0SbvGx)!qaB!8bYC}Vb>`G3+Q`Jj*Gk1`F={ZDX1wcv*4fg{hg^T&&OVGIneoqs&K zOLy>Z<7@m0I>&~;1$1ATM>nfy2B=70%HIOoKGE=V0e>s_*ctE!s=MIvQjiO?KrR#n zSBbeNd^&44xEen3=&jvh`0d4>Fz}3&7HHN<&~=4p?>tZlKn~DxHGF&A^#W*v+=hFfliIt=6aof+X+|xZEqb7&wBKV z27-d9^O{$($Ug8HrmlwnZKNIfrySoQ4L)4m<%Q$_<1az=nP+z&XvrtU6;_Tq{H>r- zuzv?S9CaM`gT|1+x1Aq+$lkPw_Hhlb34!ZQ#bTYn< z>h`_RdCsTXb%T%PG5%(Ea83+8(ZOQWda{()qucdFgT)5^mNrHPhW`g$4gYugUU0E| z2y&KV^Le({(ypy<`CF|)p4$&v@rrWZ&NomXzNidk0559r;0K3djOz-}Cdu%r3=HMM zj?Mo$_*+3ED2~lX*uYl_cyzN)PJ^W)OYq1qD2_gWE;B9g=w>a0OUl3{HLMvKUI&Br z0m3E!gNHFeIwx6yGsU(LQ0wtG=pYRj1k%bxp2>!2nF7~R0ny?OGVe5K9y}H1kpj4yAWN{Z>R@BR_s}f&=w@92 zSLp^@C;!BWG+zs+@H%K`ot(AawOZ$+2R*F|ez2P3W5c5MFfzl0YmHR0tU|NsAGJ|vrN z@@W3S!Qa#eYIy8~9Pb}*p^BB#>`Fr&i>GEfVYm?U8T<7wJ5p zT?0G~ww8ZAAZ2=YIuM$82_gFq>* z$PTf7L_PrIY2F23WtRNg4#2Ewn*<(S3S$8+NdfiJzWRe!nt&bO?O@RB@wfRWQ;`>_ zb)4P&gOR@#beuTYRT#TI-oN43dC3gPbbAt@L1C({0p2{% zsx*m#;Wg+mfrT(BR(J4FEGU$GKvn#0*uM4eexPt-t$-`!n+#f0A;7vX1VqQN-0>`stP_3=3@^`umREMOy1@0k0=Hv8hQGIAgl~zT;|FRag&zPdLYe^fAKG~)ApfoZ z00}|R#0JQJ&=7nH?v8Y`K8T0C)kO9#ohTP;DNh7P zwIAO-U4TG08Ia91$EUBL?SDfD=iO`r{aV3!NJ&H(!q z<1~%;FOI&4_!P7|19X|fOVHU8p536^Fjj$^H=yuScR;NC0-fXT*^TZgzX@PZ6*$16 z#1v#X$WsTJ0nqiA_7fNwz|9+v zZr1ELSfC5S9VTXtILhNNXg4s(MvSvI-oLp24&qDDN+pnupu57rdG96Y9CwI!cY{Y~ zLEg2nXJpt3T~3n=GL=9409cJ_xIN5&p&)UPZ3i*^R|vK3J$Th6(uwLX|3V7=1+g%% zxWO&;wt}9f0lNRf8shm+vP#6Jn%gj zyfZ;L8ud0eD;1R6+)}+67+(5-mrH_DPC*gKf1sdzYl~QCrQ{7dPw3zap5_Pq2VXNa zJ_g;A3QnI|2VUIv0(mErH5BYEt<#_QBY6YC>8MrHiz^)J#0l5Nv>D*6$nA_j` zgW^Q=uM%i5$)i{FhY~2jK-WQhR028h#Wzn-B(mm5gTx`VBWQZp1G#JH0ovO;q2S;D z|JDEh|9AZV|GzhA-01)R|MCC-|IhsY|9|m+&{2AzYzEmM3?Cl^t$zmBpP-q0E~q7) zt{0kr!S953v}^-iNW$L=I`aFN>jGWR?zSVK?r|U+~?l#aZah~0M zTfmaOD?K`)OKcQDhx>vEP!BrxH6#auZn1)%EPmWU0JPHLxC5xe4>}(hbdvUq7BkR7 zBTzq^zoiOPWB01E%w=EzU2gtjh1viAo}EV_16eOtd4fhCOU!&a-+T0$zTL;b@M1bx zsMOT4+ts7>K%K5CtWRqTT~k8-w@T zd30AuyvPUh!CUdVs|8-n0o^Lp$qb(R106EnU9It=11#n&0Tu+E?BsFWSpn3s@Hp7Pj`NE{13i1=yiSTCD8hhNKkx(+7G(mQCZNf4pmOzp~M;x1sO^dbpmBu-_8#& z&bvcbmH5FmegO|@g7RLR6Lgf_5H5KgE?EIK<3*o4Y&f!;mkF#4GKcHrf!Yr9=w^K# z0dw0#xG6>uQ#{;}g2&=TAjnlKU#tKf3W#NVT>-xIcLLZ*Q0L=?M>k|IZnwn?A<*Sa zP%h+D6mXdT23^(!6LtV^z;tc>R>A{5H^8ohZG+)!rVWZ6uAn9S7y0?Yt0+O;W5{f4 z=lvJAUVxHdg&b(y7izJ!D`Yt<z z^QLd-gBOoMj_Wo3J`*$)b^pa0@Zs`4kb{KzTfnEO_L@H54Uz2w%ksAz0~Ou9raf~Y z!sTFLpU$l-Kx+V6u7a{`uj$v>5ZOquEPu;Bi10+HCMT%yY0!{Gujv-3ur^fq1Vni0 z1&ARcP~oEx;pd=hL_6=l`0EPFto$tpAi_&PCyI66fAI_|yc;ac>zu>L@H*PH_3Z|g z5~d9%(9?CjJv_UogYvOQZxx5(0mPZ42RsfwkZ(N+(#*i`dK26SddUPj7`65728|M? z4Hn?B9o{$Dj0_O7d^(qcPUm##SPB{rbv69&2p$p!9YWFyIvEtq0G$@EP^Fsr43yybJ0w9aYI(xnq6>l@ofaOwTS23+9^G?67J^3X-@k}(VPN=w+5>VHvWMag$1WFE2Jn6ZP@t%lFl{h{ zc%<7IDNqzVnh!~|9@q`)Ve-4)Fg##*(y{Zt2 zLhy@hGt79{@&&P{{MdoTB+jE%{nmz6sDli zH3yH}f8AZB!y$Jv&^zj2<|D?sGzvXGUOUkn*hDqY?dN zUQmF7(}?39P`JIk^7sFLBr#Cc^zr~yOpCu|>)-$XH(0$~2NlubZ&?fyv3WTMDx&St z%iEmE$iUw+5hP*#vg_~v|1TChV(q`e%7?Qapfw3s;B|3bFeoTs<%3BkxO{Nw1P?HK zbj}4Gkqa&@;=t-aLB;|e83qN}7El-JfKTT`&(0e!wmO26rRmA3;4$bIbxxq{=hL|t zbWk&Y3%IWCHQl)#BAWn~F#o)G z;lRM~(u|pb0Te&VB}^NPA(;TQLdpYHP4@oPV8*HzXalGrj~(L~S_x+GWE* z$Hsr4brU6)pz+@TP=te`-V!{X3yS&+;GtE}CX}~!unKpx9RtIL)34b!9DmKU;baHc zd!C*5zu)#y{Os5TKHVO4<~nR*jTJog{0>wO^V)%`^RQXuAHFA#C&1c&WRFF*W& zl#rSwOdBjA$=b8G4Riv$XX7yiaJCn1Oo3$<=!x?$kN^4q|HT{|&>4Q9Ys-cH{r?Zc zu1IW{7&7fiKpt5wHntm)#@yZrYBMH{sEHSL)IDXSd8 z$K97`di0vMZ-NNv*)lL3Zw1}Y!oUD3$Vvi_w}R>@5bt#%Y(w2~2XIT@we{^W@J#^9 zCF~G}F_tSEK-wWjf~up}ItW9+-3GWJsxU)L5mrL3dN|XCdf{=H~zQ^-7Mt z?x5UW?&ZzqmgBbMshj-vzsPOd-u)7^Vg&OQG2vE5RyTbug z7D1YEkTn1n*UqOqL1iGcJoM>&^@7!sfx*S{bFr*PFZfCdPsXDzou6DZAHnLE z7f&r27+{4GsI38=zW3;!3M!&r%m808?b`XbLdJ&~eB(ejIItZp@AEfx|NH;{wTIzt zaB;QI3zU&Sg?b8jJQkEjjLo3^(S>kHcerE>cqr<{KMUx>5|3`yBCs;Z;D<=(4Ufhn zpgfB_0^(-Dz+n3K|Nnd>yc~&*EDmFX4v2-Z$)V@{1&ygd_Rk^4Qy}d*$If$(o!31& zKYMh7uQc)KW?kzE3J7qC0=47u{T@9Zc2j>fL^6&iT0%_H|bgl(u14RGSrSmf=OFVb!{P*I)^}qjJ zHQzz+Qvj{Ng_P!y_Jd>RT}Ttcwez`S<8#Or3gFtU1agG}83`7YpFw?w7oj&HmFO$b zEO#f^RLIULXx|B<5Zs-5p$S%7Q46_30h}J0VOJ=C`UNkv%)wVEfIJGmLIK>Lakc!z z-^BO-|NobuWofRh-ykK93aHowdDR4^2MN9{2bAv+MK36X!S_mlF4xKR=w|)s4vIri zVxA5jgasw$X~v8UubtthtHDe+Lyf7{Fi@`82D<+aZb%T^kaR^*sriD_40QPsDE>UU zS!=-RAgNx|rSk`7J^jMp6t=%-hr6qvYmlci=)Ar-@a{uX0|R$g&}k(ey`b#QfH-jp zw7LUyawKR6;eOCH0LTYUfcD@ZQ7D`!6muq3ibOW}OY!>j=?XA@0#@8fgmM?Eb|B zG+GQfEvwhG6(oG%#eEZK@$mWyXuJh{9`B1Hi0P06u>LOxd4(T(pH~3L?LnyWprfBA zOh7r0q`2U?dqin*66jV|(8YqFqqQK1#BKv;G}v*tCqTRTpl5chfwJKnC7~NNTR=Pc zplVj2tATFR`~a$pJ7L$iF9LOe5a*GArm^4$V=X)X_dnuTP>*Y19(3F0D(I;ppa|`Q z9#IH)4RqV)F%HB5zFtr^Tn#9sK=;RTfJ&Zr(5Wu5hvD@bD10INxdl8yi|u|NcLklh z$?%C^pc!yFkqs&@2*ztKor+4q*m{ES48dCXmf!tp_UP z_b+H;WO%UyB+>~e0>G-~wt;8-VV-hyo=mi5D$k)u0*VUB;k116tkK zdF#b_BUoc&su5&GAIf+m`hA;(_)z~seF{6Px7)(-Ho|wH4iUQVmKei*=h*xMbT3;e zOUr>0E&gpMJi1voIfMKFDn25>BdnlIA_Dfs3w|SLdIqnfMEKts?ticji5D#(8#=-M zH$wKmA>99lSo{yFpMpVWLwR)m_UzsVK8~jKe~Ha;SJ1J;3_iWJPe98wCjR{U-=jD5 zfd?o${{5c}IwuEw3!ezsR!AIyb}kzpcn#Vl@eni=4Qc?Iy6*%Xun+2Exf;Uy8Q^uT zkVAg4lqVjY7d#+?@*drm{M*794?g1H-^Ryzk$+nl^T9`;X=FDhN6rh7qy!o@^6Wea zNktqlY>Xh`+Q3$k4M^@gAjZJ3>kcae!;2ga za6iDtqZ=agnwf!N*Ouc93@?JfG9KNmD;;48!5?h3Kq;ui+XJ@r1&aYFC?SQ|VbI*1 zA!rg(jDf*%2grQG11}!w!yL3iA3C1{S+DNV3Co<=vLk393q8SpHh=_V>wyXhgq|1I zpu(`Q`r!Zzt9fA{r%Sx}15yDFD@y1}E@RJ|G0qk8}1jy^d23_W^Hm6k$;PU?fUqJj3({ck{Qkd=yMiXf7+gC)I39c<;L&a2(^TIbPi;Ru@XXLdca4|E!3 zcjy(D&W|45u^T))Z-UKp41b{wH4mI2Ok6B~`gE7BC{1-`{0D05eFv@o{&E)7*89WX zs{Q}}|8Ca{m=ilf_OMvq0Uj}xcp(Nd797hy;9*s0EGO#15}>*+C=0OOumhzEP{~#Y z)(OgY65w?4!W6Fdw+<*pK+b;&cMJochwIV&M#2@ee;BkI>x5@_e1%7^sca)C+W)_} zqzg|85{n^1`*l%L0%$MLan~!L+e2MjzkyQ%sBSv$dIdE62AUOm3tG$Q(cJ*br05C3 zaStdZxbQnYbTxeI(ph@Mwe$OHLD2p>#=}V3TrHow^7}nM?h2~Z7+gDFKqJ|efBRST z2!_{lvp@mUd_(R~XZ3~OWkKn;ni5LDLW5Lnbs)LkSXKBNtF#&vF zJS%9R6|%T-J6I`9CrX^ zRM@=+uyU=Nb%_lu&3M5r(}h^Z2)FFG7T7ZM`U8Hy!F%lTp!&`cd_NOt56^MeJD}kh z=r{`0J!#Nec}i`ntUP*IF9m`|*ctfyK$q%xbhEO-UAHC>Jva4blwC7^!e$cIbj;_CZ4=l3EN5 zj*b80AB!>6N$gB`EXLrt2XwvkOE=I&k>Qh(k92@_yFXU$6 z?*%PPa%}v6Z3im@e?Mrwk7MKitUF8${QaQIw;UV)o8&Pv@b^y!4Fxs+|5wAnz~2wL z+S#%3f1MqO16o7u*!bU09>f9NwC33Oe;z-G(+|;ejvd75gK(ZPgE+mQ63g(3W8?qN zj0_CmI)%RnWa`c@j0_ArxEUB2UYG6MP{<8kO_;Uw#tv2n@Vdd*aXWMFFfo9aKE4jx zX_m*x0BS@syms5kP|LsoSz>6lv%!vm0dnuN-cAR328JD=EdE+)=K_8P2FO)IVmmLe zGcfD`m94M2cD`U{VA#P08p;OWK`qK&1loPKO+^42>75>++o%n#V6kx>JOT=e)NpW) zc+sZ;nz@FoQirzl?tpXZE|96Nh6h|aAA$?pES4AhG+~8zg%fD=6nmHJot6XO2FQ6! zm<^?H8$=;C=xCrd@nRtN4tsR7&a{N(SbMN8i5GK0R)BNtWeubp`$8R-W7nyJR7r!(Z7+(Aa5r06( z;exZ`A^Gew5w>t*)C73iM9Uo+bX4m!Jg3ziq1? z3n)c_$Lybb^v=Bi-eY*{MTQ0gL+b(l4$x*yk6u<~KTvjs#L0S^&FEE5J<*4qnm>!^kS?Y`oFE}CQwSqP&yae6v z;nB^y)EpG&3Ld?z-e7|yUaSN=?V#ZS&?cE)Q%((#2X4LiqRPMkp4f&3Y%6%m6k1Nj zf!zbTiJ8S0WT3^1B$zSaod~9{)j_+Gf4OvnBk;vCkZGXSH0X52_iCWkTA&c_W)%gy z2jsEc;9*^f7m_f8d^-O_wR`lMep3fK>-ARH`Su>&;Pl|p&ENqF(7S*C|9>qE4&T>2 z9^K&63Vb>h3_(Z5tTY1!9%M)ZGLQ#a@q;{&SF6InFaZ^S`=9XkLgO0?aMGL#8ou-B z+`8Z|XeAJ6^^ya4W^Yp5McEla^ZGG$0xpxO>w63L&fq}vE|532KPv`sB zI{fkspw&JNV5P@Ad&B;F^cFLMgzl;^FgP7^G5*g0Rt*xeQ3a))!yc`-OHYB4uNR2l z{DZd$w6yxFDadc2@T>L)u|Q=@CN%H9e4($x!0@t@g@M7<@a>C5stgP-T0uk`h-e2H z1Il!+%%I~jmx5A`Pv=_Dlrv~Qr$=Y&iogH=`*iPs<3 z1-z5x{|k_-JUc;W`jk9zP6&VNK~T_jw}Qef&C#+Qlo$D1*MRok@Ne60 zfXD&gL3^LSsem#;Wuiwn>rWF<(gLN``CcHF#*4oyprC-K)%D;+_R6Ol?CKYe%HV>5 zzjZojL}N#EX{mzrZQGHu-*=DRsi1v{FG?W} z0BtO;fIC1AJQghRq6WzUP;)^0?IDTt#Q`M-29F&I1x5KOrO728ovk-OCwze%l9!m9 zngVjj-~a#9j<-Je3vvjk{`UmsafTAmIdNPjpa=v-_7gNv!LR#oAtC2%vFV8<6y3G=~n&V z%*gQKASiM$9JEReWc5^#^IbY0LZcM4fZ>Y*xCsbvZ-TH-b|8dw2>d1QXJKX^KgM8I_^93m69XpRXTHfPt1+AR+WW4LC zd8hfeL&*`3US3T%kT;qwS@?T+L9K*t)o26IqF&JHtE>!g-CQ+wBGjV zF1^6t0&2N_zwOhjyWs$={p8BO&Ca#ue}%Y5H!FhyBZE`7%MP2J3=Av`iYH$4r%l)g zV!Cwxe{oV4l#M;Rc~nZILCeF=d-R$n9ROWh|LcXn90S8^Y4CnPu$RDNpB}xoZU-0` zUIfU2+Lksdpe*>#rSsPdMUcS%WB(7AHhFfNsO$$dF<%JDfyRAaTYGe~cItz25GeZe zT|q2`7rpYJx(qbzmj<360|(Y4m(Guloi|=wl7$X!d7$(Ayl60n=XYfl_^ z1szw);L&>95wwh#fxiW``XAC=1vMBCxEem`=Cub6{`8uHcHV>Pqi$9v8%74p6ZIA# zh1~@lJ3)~Ni9?U>+5@0Lz!o`BQ1N%@fNqXuy=2YEaGdpvJ!m|bfx+;k<_V7(9+rna z_?-^>CO`4+wNdv-{^-N_%_sQJe2XMuyItFLXh{ce{QgXwvNn@<9P8 z?g5Pld31(e@aU{P;L*+Q(dl}^@U~~?7o_?cTq=H$@Q*#rmx#iz%P&|s&M%)Cm_d}IWu zeFAFkbi(eI^n~7>1)8wZg|gw3QPAl#Q>gfXH2&fr9H05?+rg7Vy{zDcg77)BI?(hS ze9mkE8_2n^i@}PvfM>~|N1cl72J@hEX4_zMW^m&{H!pegvdSVI$A1xhq6|8jc9RQi z4S3$Gmo=IPF|~G|8^VVB1~j#XWj-|=GQ%VRS?>wD2&)}53<4dKD&qz1lqlw6U;wYr zg)VG7?!W=6C_H+3Rqa8GXBj{Xkyv>_CyR6&c=Xze$}=*6M=J~uyfBvlB?<68g>Day z*Q`6iI=dl*kGnuqSFVN!Tn$fVfCg-`7+$=VfDLKzcld+1@4)mPci;iFM4NvK)@bem zmGsR&70YD6n|qsox)cc+UV?7EpLD2KN`60PH|4?s1DM{n!{kW)+UVRdS${OdrEZq{p{ z7A1Hp?4m3q!!FPenBjpJ7Gj{n;kBtpH|thV7YP(ktkIxir(5F1PLK=0V>~so(7Xj& z`^O@NQk%mj(BS1UD1Q;0zXYW(%=tbCXz0V{`xf2>dkJN}uk}EQiDP$N#tQ|o^DyT8 z-h$id79PE(f>2j~dJ!m!a56_UWLOJz{uthWhqON+_ha#Ia|4~c0h;wY*y($Lf14Zg z!3P{3ouwy02XSy7?DV|?sRv-m;NU}6kK~gcnI|v%CJBJ93O)Es&Ew!pdzaolT%d#u zIVK8Jdm+^q@U#OOLhSav;L`1S#k2FSXXj1F@GO=WA4MVQ0Mz1a{>K8US76fx0Rkl< z{||Kr2sr*f;@JF$)2H)w(MFGM)>o>aViHu(O#lz?O1yXnG6WozIWnMI)IqZkpz8j= zN9Qfq&W|q)M4$om5_H~d>!ms;k6zwrYfvs`^yrQ~;nVrD9&`ta1K2!JW{w6Oo!iTM zUmBD$USx=XraxXHIqo$(RNrw2(6Bpbqc=auJPXD;PyTJj{M&*V`L}s9x$tjuW_IP@ z=F8y9zb%x}m490-lPmwWQfA-YTqcj^Hyj?lw(Vd$9K#%g9fMx{6NcE-d_)0s#L7XY zE>6P(R^E*KQx2dN_ptg6lpew3?V*k#pgHFMFAj+?FuYg_B9@83iy`Q}#va|Q%;4ZN z03W}*3bg(N9AWVE?b$sKG|&MWW#M^U1UlbP8gwaJ2LJYE@K8phI0HlJEB@`xpy3PK z`8*5^rFTH1GeKaxz}vh$IvG7$50oDD=w`K30mT()=;8@@kX7S_lL)Brh7VmV5&?~m zy?W6r#K7=+GQT{7Z?_r9X{{yTN)v1zsLf)@P-+Ca|6Cc?#+d>hR|PczPD(K{>;yT> zaRQ5e)$fy|shw>vc-;fMy; z9!TjKq#sm!Knh3DbWQ935>3chHE8}5JRFZ&y7PiehD=7W!lrapl|camYE+&EkDp4s z&;+RhC*n5}pi~EGRD#sMED!{B^&sQBVEd8svxaNu5%6)Hzd`+>R8aEy|3X{{)X;A| zz(4hnYwHt_&e#hc-QY_V`TL%L*2rJ%_2J~~^gRI@S5H0T(^-3<+mFY!^O>XOF&E2^ zF8qEUJ(5p&GW%C}bo%b-_TzBmUw;mF?q37R{rf>}nF$`S(FaYjh6%J@sx$NGDcr7T0S4x1l^Y!F|s)!eD0-(ruz2E_H%5gVvu6}Lf(al<|2ugCGAznqu z810LCL2wfG=r#Q-4vH!8dW~PMogZ8~AHF!k4>~vm6cmt?OOUTagrz@teg)lU>C$<) z)AxdB=M|66(j6Y1pjNc$tYlC;K7Zja02;FV)_TB^f9i2)chRxAM#X`lgtPT_eay?f z;6eUvE-Hx!A8>%rUrXRT2&w);rDyxoBZ9U^RaKYk4l9v1CSp1bbfqcy8iEfP;z?TdGAH!y1)M&E${O8fEIYa z2CXz~mxtv}UGTWF#EWi_#o*jIK@1eRc8@&$lsofFVPtJ8y{^<*9Yu3roc z42?fQ*WlE$zvcpudUOVGbYAr66>TtKWN5ZxC{gj~Wz7IP29)aA!H(}d^7L=Vqt%o46<)9iw1ROOlIC)^>a_6~01um%J4IW>E&v*alCOALB!2%j80&QZj z0^0-{$hoi|bWq8QzuX|HHLILzc})5i(&iMa=RqE;kQ*unon;M zqepKcW5*oUbD&dvK(hZ^ZkI%YWJ7#yrJTy7I+qE>MWDgJ!N;_(2Ock2|nrFdSz{ z%SkMDJnjyNS($0mn{v4#$QX6(%cw@LZs0^ATq7>=I}WK?LkA&~z1l3uu0ZjjYVZjN?{H!yjKyCsL zYV)^(c2jwPSNDTbFw)qzBRn{tzqk(4*m)QnD*7PnI>FIUV(8I%+^6%IXXi0c7fPCw zfx+<@iyXttO3>tH@+FU6-mO6l4Bb2v9XtI&JMl};dvvoZfvpGS#1r};hkyd-m>?s= zOVDns7oXU{Zu~0=k^(7O3|F*J5L8CIh~j`{R|O7Gc13C*f!0g^gJil6@TywStYL|r zXSbV#N2jxdXSbVxN2jxZXE&Q?w;zW`r#FX3C$nd_-HTUX)y$sVbpkK$f!WRi9-TM9 zWsgTUYd+jHqHxy;LtJx)9p;)zpdk!+dm3Dx!`f>Bo}FhLJFj_mes%2p4{_fMkUt^k z85)8nurk25GJ}$2ESTvm;L=&m;nG5B(wajF@};*LvyLFYU8w!Yw$*q80$f6ZoJ_R`lt(Y(0#CjKzBGS1q~7Pigr{p zFc|*d2Tq;0mi_(j*)3*x5;C#?ZcROV@nrGe|BjuBaJ8pq?}9 z3|)}5O#HpspjoD4`=1IpW>44%E9wCQ@l7nDYOP4|G^13H&H8#L6`&H6?Re0)4 z0wloidfKDcbOApoZ9!%lUcI=+!ocuyI>h84u*smT`a>J!Mo?&TK{CgBkg~_1Gu7d~ zWAp4T6L9PflYnd(GyLzk6Vzx1h3H9{fAFZcha|9d+MwWLtoH@=|3yKjTlnzoQ@G-Thh+?}GBvZxN7wP_Qn9 zn=}n$0xKk)Ix{2k!)ka}4?Al8C> zSr0l3qXBNU8r3j*A`U0Kk3(BD_pdDep-E1DcreVB{4B)^4pU~#h`OvZR z=8NxAFq=RJ`}%gia5V%?2j9>Hdy~Ka93%w^!0p=xTG0c(d2c>1Xw~0a!vmc+Ut};b zFuYs@QTs#~7A#$GwG()tZUZF%Ymj2lVS*mrtlQy=W1))SDP}b<=-eXE{%5!vOSqZ~ zkW|$RHunW62fYN{P374eCx8^PVDI{LK6LH;`GQyK-+x!bx2*^GJAXpvK5?m=Jx0{wS<^Cm63truf zwcWKld^(?X-h8oT#ozy(hrv#RCDX!%fB(1M=I^Wl)ymzhi-cey=mEEm8)WbSXzYSK z0PfaQz*Wk@RlWqPd;uC%2AdB~e=k@V7$EuCrSpYH^AY5Z&4mA|6NDHU{;N&`lT*Ot zG%z^>OwIz6bHL<0Fu4Fsg53FEbqSaaYV7=1T>)mV0+VaN9s-j`z~nJ7c>+wH0+VOJNh2_60w&GCqy?C?0+Tji(hf{IfJrAX=>jI*z@!J5^a7JUVA2mv27t*R zFc|_SL2cy!su9AB3_iWGJNX$I9E1O>uHcez^)H2HK_easi0N$;QC&avF%G0AlrkSau**6Nu#x zVu9|j$VdRO@<3vBAXW;9H37tm0xJNGt@z0&VWh0PS~u zISC{Nx_|Cv2Z&V%lC1-=xmi6`0b;!evGhQ!{~(qMh{X#k%R%>DWPpyUeklMF(*%jJfmmiB)}O!s|7W;@Sf4Vzz4Di9K&&Gmu|*)(We{ry zi1i4>>I1Ppfmkgd79%qQ!^(g(5BK&-={JR<{QT>`O$KrGOff|nd1Rx-$!|9*pxo(E;A-nUy9d_T6q z4#Wmw1vCH>V{qsPjVm%VwCFj0{NMGz@Bf7Vj{hD1^D%t<@A!ZE|M~yt{a^8a=YMO4 zFJN(y+|vIm{~v?%KqAQa$p6#-&-_38|J?uc|1bZ)^8f1p>;G^3zxn^x|J(oX{J;DE z-v9gmAN+s#|Iz=)|DXPU{{Q9wSO4GqfBXO4|M&kt{Qvg<$N!)IfBpac|L^~Q|3N-s zWME=oW?*4pWng1qXW(GqWDsQ#V-RPMV6bBFX7FS1X9#2nVz6fT{6Cl>gdvn6j3JyM zjv<~QfgzD0i6NOGg&~(AkKxPzdOC}SvPsA9PA|Mma<|5yF5 zW~gDPWvFLpU}$3KXPCe+kzo?UWQHjWQyHc)OlO$EFq2_6!yJaW42u{RGb~|P%CL-K zIl~Hul?n>tA#BiA52*Xi^V+{h>D3zNJ>e|$jZqp zC@LwdsH&-JXliNe=<4Yk7#bOyn3|beSXx=z*xK1UI667IxVpJ}czSvJ`1<(=1O^3% zgocGjL`Fr&#Ky%ZBqk-Nq^6~3WM*aOI{7hnhbpm8yOZbEQIIWeum`?CJd$wd%$MdF!VFnF-&5x1?%f) zaD>vX43oetPqY$(-BtsN~2w0^!nCxem#2~{U%g_ghy$mW0 zs!$%tH3%70mN`QogC#>BgEd&~L@)_a(aYe<;KtC;;K9(x-~|`=V1&qGBV*CZ!BmDc zhIF{j9B{dq&rrZn$WR0>3riVN7|R(d7%Ca67$7BK9k?uPWN2b&W@uq(WoTn)XXs$) zWawh(X6Rw)W0;6DT*4Ry7z7#m7=#$2!7dbo+Y5229D_WA0)rxh5`!|Dj5dP~gD!&} zgFb@+gAs!6m28GIOg!SzA_xMo1q z3LsUOI0dY4B0~m4CPNlOHk5~{4kQAKSCIYv3=~P<9UWl;F2+c;W9%a1Eehu{v>7@XbQroAbipa=AVV)hAGGH6 zVFaat^$Z3KlNb!)wXi!Qq#m9Ht%>I`%!lV|P-+3?X)^|M1`7sD1}g?@1{-)iZOdTC zV9(&d;0R7NF5ui$$>`4D!Qjc@#o&!I)j)DLsKi;pa0q9(WHVYYS~9L=kYFre1hobv z8P_nZW!S*5kzo_VW`->cQjF4!GK{i}a*XnfTN$=7Y-iZPu#;gI!)^uzMny&?MrB47 zMpZ^DMr+1B40{=D822;SGKMl9VNhc{46YwfFxW93XRv2L((U8%I(U|cL1A5K)l;IhJ6XSD+7Yr{MoEcphT^ZdN zUopI9c*F3P;T^+!h7SxM89p(5X86PKkKsQ910yRVGb0Bh8>2a+7o#A9FQXr$KVtx6 zAY%|?Fk=W~7-KkN1Y;y)6yrLEeGJizF^sW{ag6bd351L(qW23~FkX3&}?P{s_3HnQ^TiEn-~@nnjR53X#xYb`mPyT z;Rz-rc6Na(z3z^l-oB({{;9#HCPoZaq70S{77R8F)(mD0=CX2->K0PwtVGGhzcf9 z0m8(@!otG9%)rdZ%*f2dOf+DD0!Adj#0=qp4Pgb7q!A1(%#4hfj(|9qVan90)22-a zftfRA&zdu5?%a9v=93B*Ac2Jo7cE-6c*&Bb5v=OBfb0EM#C|U}IRqFqeUuVF?2x10%zH zhItH2h=vOo1Q~=FxEPi)ECr9iEMj0_U}j)sU}oS1*V!mmGB7ZJhF{Ue7#K_$KM_7XB47+CoeZT3QAJ1!KqUWr+zRnfXZ}G8Hx}`W`RmWP)Ud^hR(K!3%Eg9zEB#O z0&O}DL>6EO1M{L762LTw0G08nAO^I~fim$@#tbG%@)k&JLQGJP5Wku<1_lODU4u{s zs%a2B+$>P70g*Llu!Jz+B&e0>4d+1^c@PRpmOyD36~hqAz`&3Mj!4ngGmO4Xof@v28Jvs4?<-?CtOa^~2qY+HP2+&@17#q?e0}0saaG&8BLp0-ChD!{G8SXPYVpz=df#DHDG~<1S4-8)!?lb&ic*gLR!JqLL z!v}`{4E~J&84?-4GAvs(>kUNOdFXtF>Pkr z!nBoXJJSxPolJX}_A>2fI>2<0=@8RlrXx(pn2s}@WIDrimgyYRd8P|Y7nv?GU1qw* zbe-uY(=DbuOm~^?G2Lf+!1R#m5z}L)CrrU4QznFf5S$~-RGW}!v&%^-k60^EXGV?JDFbgpYGm9{b zGK(>bGfOf{Gs`f`GRrZ`Gb=JHF)K5xFsm}FGixwwGHWqwGwU$xGV3uLFdH%(F&i_R zFq<-)F`F}6Fk3R)G21gcFgr3kF*`H6GP^N*FncolF#9t5G5a$IFb6URF$Xh;Fo!aS zF-I^*GDk5-GsiH;GRHB;Gbb`9F()&pFsCx7GiNYoF=sR9Fy}JoG3PTEG8ZuyGnX)z zGM6z|Fjp}*z+odZ3^p;tU^8^Gc^gz+)s1IBxdcNy<6-e$bTc$4u4<8{Vsj8_@2FkWW7#CVbM z0^@ncbBt#h&oG{5JjHmD@dV>>#$$|!84ocYWIVvQpK&ka9>(2_yBK#e?qJ-`xQ%fu z;}*uvjGGuYGOlM_$GDntCF2Ul<&4W17c(wmT);S=aUSDb#yO0$8D}z1XPm}3m2nE= zWX4I16B#Ek_A~Y}_Aqucb~1J_wllUdwlFp`HZe9bHZayR)-l#H)-YBxRxwsGRxp+` zmNAwv7Bdzx7BUtv<}>Co<}&6mW;13nW-?|lrZc88rZ6TmCNU;3#xuq-#xlk*MlnV* zMlgmkhB5{-1~CRQ1~B?D`Y?JkdNF!3dN8^(x-q&kx-dF3Ix#vjIxyNZ+Avx(S}|HO zS}>Y3nlYL(nlKtO8ZjC&8ZhcJ>M`mv>M&|EYB6duYA~uZsxhiEsxT@uDlsZB$}`F_ z$}-9@N;66^N-|0?iZhBaiZY5Y3Ns2Z3Ni{X@-y-=@-T8Uaxro;axk(pvN5tSGBYwU zGBPqS{$u#d@Q2|y!%v1E4Br{PF??b8%vH1o_sD*?~Ed*`3*!*_U}KvnR71vlX*Dvo*6Tvjej` zvm3KBvkkK?vk|i)vpus3vo5n8vp%yqvo`ZmW=m!xW>aQkW;13rW)o%=W?g0tW&>t@ zW*KG;=4ysU1_fpbW>sc2W))@yW+7%VW)Ws_W;tdVW`5?S%xw&U%#zGf%u>u<3=+(u z;5w_BVJR~=Gc)s2=KoCG%<|0b42;Zd%uAWsnYoy`m?toNW8!4~&h&|CDKi`MPo|~J zKbU?oF);sO>Sg%A#K=5@;SJMgrteIX7+x^FVS2^{^50VC7KWcpUzuhxyk%O-{F&(! z(=>)pOi!4eGQDG(!tjpiHPdybS4_(pZZlnFdd2jL=_S)r<{L~;n7%N5X1dFCmFYUu zQsxUxH<)fS-D0}Ibe`!Y(@CalOgEU0F&$$%%5;J0JkuejvrHG5jxa4{KE-r^=>XGl zrsGVfn2s=QWjf5Xjp+c>dZq(RTbVX6ZDra6ZX>K_TFkVPX$RAGrfp1%nHGaxxq@ja z(>kWb;C97Irg=>BnC3IhW?I2ClW8H-QszZWa~PH|&1RaaGw3ezfvW~O$gsZ8BWOPL#(I+-Rgbul$F)iU)kb%5)-Hl_}ycBV3> zrOY)k*FE>j}YQszvi9HxAxrOeq( z(cl^}l_{JlgDHh6ifJix8q-qd7^YCB1SU_W7^VQGrOe(;K}>5HmNK|9`7(JhxiT$f zc4S)0yo@27$(v~@a}bjalRuLclRc9wlRuLmlMRyxlRJ|)lQq*W1_vg0CQBwGCOdFw zfa*^ZCL1PiCNm~$CM_m&CJiQaCOvS?D$AtFWW=P$q{Sr5q|cF@b8- ze~esAOiY|i^BFjpzA}Dg{Lc85aXZ6L#{Z0;8UHdaWrozUFBz9I|7ZLJu7^SOFQ}$n z%KV9ODf27FdyG#R-!a}|e9QQdaVhg_##@Z{7@spfWqifBl=%hY9mYqD=NKO_USqt- z2uhb17?(0%WxT+61I)Y0c$V=vm<5ts%6yG+EyGR5rOewIKy~#}=A(?q7_Ts%W?agA zknt?zKE_?(dV3G!amJ$z#~4pC9%ca5-VnWq7?(1G@KWXjj5`?jF>YYo$GDzx4dXh- zrHrer}=P>p%&SIRx*bA=dLH5cs*f9h$OkvoZhNaA37``!lWB9=En&BtIXNLC-42(;eKSO5>zkueN z!9M;07Wu-!!}yJXfsv6>5G=~aD8MMfD8$Ia$i^tjxRjZnQJPVZQJirpvoNCwBOjw8 zqaNc@X3%UXh+N7Hn>7_>RA*eutirgIS(j0bQHoKAQI&Bivl62*qY0xaqdenMX3#vU zKBGRP7Na4f4%if3MomUjMk_`OMhiw)@VuxS*bSgCFlTgQv}E*PbY-+s3}y^ujALBN9LJc*{lRI->6bbkY=Zb0CAW<~~3YaP@|2er?UYvpFr5Hynavoi z7;G3C8SEL{8C)1_8GIR<7|t=-F$6PsG8iy8Fc>g+F!(dLGE8J}Wbk5eVsK;dW(Z+$ zX7FPOUm8C@7(GQMN{%IM9c$>hWIjqw%ZYsUACT1?tZElh!o>llNW-Y_;Yu`yj@YGQiJ z$j-#U#L0A-X$n&?Q!CR{CN8E~Oq-dmF->Ed&2)ol3)2;Fe|9=}^!YZH@#m*#BhYV| z-eDPq{=xJUJQ9rpJVxyf9;NnT_Qo+%9gZPepz_gxe9n)H- zHQ*6|l}sy`mNPA5TFSJ9X))6xriDxknC3IhV*-thgT}?t$HTjsx|lk_BLQtp&Cv1i zTBaJ5G4WES60GCmnM@f>=}c)%sZ1$M$xKP$5rKH{D0vLVI5}jL+>gnZ$&1Mo+|zes za%FO1a%OUZj+xsr*+R$7EtxEs%$dy4M$h%YNDY3TU*aR$%``Vof1@KN+V3_BTiz(>#5F|2})nIn&t&td@0pM%E9CqPHWTNs+5 zBjWYUCg4%=0)`ldAO;_XdS*)o6NY+bV+LaePAqK)>bGW+oguY0E;5~g$&DeMfzcJN zz`&V-!2rPpi-W{K43K!Ippf!xBNex`;by7(OFViG&W&1sd0)<{r?=}~e*e)Zz`;1# zSW0PWn2!7QQoEFsa~yha?+;q{_EyU2|3AxKFe!E$2r$hQR!d)BX5z9p)NAeGJrR8u z=jXkC{;TH1*PG3TTnZC~B$$_%>!ocCv2i`U*J;hoc>(?Jf2Y0rd!ytei&Jl~SmOKw z1(ubfM(VrGe9j%cANTh9pNx)&GpkmA-qjk!<2=1kE@7dF2J2>XE48!tT+ZMB8}{bq zjD*hLyNgz_CHEJJILr-HQeACgz_wG|@BQ(AF=wvc&06_*M@84i+3m%ANmB!492c8v zscaOpU_bxg?cLowA!lFjOj_}CRzWvMOXF0j<&(GR99nwW?&0aBqb@q0lWos{~9Nz!Y?7=|^56;WhQCd&qa{Ry7*5z<5ZQdf$HgUS%@h z4s5;XqG3^p|0Z)}>Q$|Ui#J#_ZJg|ueZDHh<8EYTlAd261t5F~)M8}-t?UQ!7(jQ8 zfEZsu1PFt!aAII!03Cq=;xar0lMMeL6qsyi`3E*1v|kh?(9i<0x1j~%4wyItg9un1 z1H%VsuEd9V~Xm~TgXwcqnkV|1Sh>e83c$l=?#a2Sn4}%IMXcT-LC!MbM z*k8-*aDUINiZGK+(EZI1?3KX4$UZbQG*r~P(BXKY%<;mQk5K&+Ao>{!pmYM14uH}Q zP+9>@H?+h-(xpO-J*+|{5OZxNI6&O_9m-z-zMPMNVFB121_lN& z-O!Q;F^}N`=%!-^28IJL^0 z6N51W6N3rE|No{8ObliW|NomaFfmv#Ff&*(Ffmv$Ff&*)Ff-UNFf%AHFfk}HFfk}G zFfk}IFfphw{Qs}Yz{H@&@c+L$0~3P=12cmr0~3Q512cm*12cmT11v=&A`KR94K03P z|2DMPL1{fG4J#*Ln`oZA`V7lS)eK75ib`MN5aNh;f4QFqIX@*s|Ahi5V2yJi!Ogp^12B8mM zh0r@8uOgF?IfzYLg!8AkNAu!#r=OCD7xO4zaH;6-MhSlJ!J{cIi_JYM3 z9`1(FGr+W-*17?Pd7toHYhE*3Bq^U2%!r%KtW55L%!cLSN{F&@(z9bU{0Wj%b6>0j*HF1wuzOL+FAg2tA__LLX>= z&>!j{bU_`27N~{L8>%66LKTEosD#iA6%hJC8HB!23ZV~_K404CCpcYw7!ApHFf(CQw{WpG&UfKqxp%y)pb zSHKD!`W;~H9|#|keqe4uv5SELyaNM8KLhBpBCt+)y9vYt*$Fe(RL{_WLABUQAvrNG zFTX?~GcU6wGchN#DpjGhASJORwMZc+v$%u{hnm!ilGMDE)D(q+#G=I9RD^Q<(&8fh zoc!d(9R1XiWCneP#ImB4(v(!aJVqbRb`eaB7G>tA;8mPiTmV&^lA4oPiB)ZCQBi&o$g9PfdFjybQOGYy zElMoO%+JH(g5=8NoK%J6{L;J9nwY1f zkWo@nV5P5LUS6)3l#-j7T$HbuoS&7`Jwr)B1(Dr6QbD5(}JK_USX zRz<0aDWI?_#;+5mEwnhbNCA{WaGQ)vNlJcdu>vRsr&eSZmnh^Hft&;4Cn^-BrkCa< z7Ab%nsiRPwomo(jnU{{unWZ@Fhq%w4Aq<@Q3KEM-iWL%zQmwcc6ck{BMfvGPiMhF{ zMKCFFjOOKo?j3~6C}boSDLIpQoR@l|leqS^*T?AQOvA3kvd!N)#{)f?^#7-3q9aG>SD9GSl<& zi&9e{&T&P_Ntl|Ug-&pYx2b^vsO+#bG+==6!i*TaLLA+Fy*)j_WrAP6f@4?^C|8zX z311zB(&AJFCEWsrfW)E_C1_}XG=TVE--A<4T7GF>iXK!N?qOY5s0YAmpngqFQAny( zD9OkyMh?o7%7RpAE(XOpC`_mo+aR-$;yD23Cd_ya1*e7pkOs7Kra)XPPzl1IS`1Z% zh)j?q9K%#4mK9kV8pNlhmL=z>q$+4YOKWfeuBl+9z+h0JTEWGTm!Fpkic|lx)S{wH zaAtP`mCiw+(iz!MaLfm%mXv_XgCua#3@@0W>Z}x0^$gQMroq&qm&yo*#+e{>R>)BR zN|VSDr4Zz-kYAjfnUj-Pl3%2doS2iD1SzkeT2qVC@{4jo?jfKONvlFxVooWztjo(U zS12w4rD=uCJOx+RfFOTgP%)jDl2VjfT&!RKu?1eELMn;0L{OowqfnG=s|pShm;BNs zP$iL(nw$+P`|?tgLDfRB0!sAifC>drQr2}-D9KmIhlF-2mufLMAtr-#!;&v3b*H43 zWhSR0Rp%*S^FZZsCCGrpP<3BiQdA1D5aL|4ayv6UFR`SwC{-aPu_O`h>SCBM zI0wSB3tSki8XOfVscD&csVNF+`9%s)H$e(hP{HB?aU?>Ut%5-XgQ|g11=!rk%Sy!H!lcSK7s*sqJUsM7rPeG^CXMi2(=O5x~ zrQqh{80?{to0^+nREf1jOw3bAElMm-Re&^4Ul z#RV$GgDJ^6#V={zJ9)t6XiYj#!U@0Ui zF*#cyt+Y6`SfMgeMj&s8;BJ4afwwgvu2_#dCOmX-*0#F)8F^W~V|U6O?*O z@N;tZ7Hfh{a#pZ`G|+WH&1q!A zU?zcjeV`glAwLbA$57kyU_+7>Y+$K7wFub^xW5t73ZRx1SeFYtoX{CAkOEa9v9u%~ zoK;i7RRFkTgqDP$fX`I00e9|DYy_L-862SC4DKqrfO~(@nRyD}j#F`Ja(-S)aV$uC zfPxLEt&6D}?&{?HJZSZ;08$BdwHw$1Yy>>YU>#OO1qQ8l6clt*vFQYh1whJcg+v8V zp#O&9DS&((s$i3wnhS~qJFB9a@|rR$8&J%H zu1>d$wgNSv5=%hAgUvpum@lL*LiCiOz4l~qlL+Kys6uR%Z)r|RWf^I0ha84{r zRY=Uq$u9@x#?-{*427c9!qU{@60{l@%{)+x9TI4%DWEnRsA|nGN=Yq3l=dLU=;op6 zLvUU4!L1rd&6b!~S&{*&0!s41H4dbG0yZHGp#_ZvHK8oEC^M}RthN+Q1%eAp*03^P zMz*HBX_aG%pWieOgg|u0ouWu|jbMxQaoP{ou+3?2HmL%Mo1HJkU^4Nh+xIotUEl zs@}jlTor6UwI3*b*hT9g*s%&epk6&vsQ^+2i#A9)Dh8WS0WtwHC>0MLl!9m1fW+cr zOvw^(lMC8G2b)lda3&hd89b1q49RMc)>APk9YNauV9k*VHhHDFNob`S$Q)0^$Qr2W z0Baa2qZv>JQi~Obr4}XS7pE%ZmzETimgp(ymVpqcVV#>_lnS=J5UWOzU|?x#P7b8A z1nQf>%_vmREd-a9IjO~v0JH}w$BJDtiwi(QW8fY~DX5auHF@;wh!M1q>hpS|=zdfNN=Z`KDk4>buz~*!bx>RhFa{+cAJza14n#nTf^VKmzGy z0B3#(2{Q+WF-eAY3N}ebb_#lWdI~m4es&Dtm}h{tv{6cKhT_b0h7@QBLrM~)4owos zISimy16&QL@Pf6tK@tj?d62?5Ge3`^I5jT?OeiEO6eX5}1{1-`-DQ(x4054~ z9mwe1Vz}9fDOsh(C7>26Xj}y{uv@I40cjp60g!$q)rdJ@qtjX`Yu{iEdtTayCS9u(LOGP!~f3zAYq%H?rx-(yCx!(#IHw_nH!Qe8xdEKDDoawKxeFxZX9w{USR27`g{dMV z&|q4NQ*$6A4=^)8-63TKkXwosQY(^EQ$e#7dFhbWC|bzF3_%Ne)nWw=m{c-&(6%74 zs5ljDC@lDplt5w%qydzWK@o3M0UCq?u}pI+;3GC56{#e~67kk3B&X)&*n;dds^DS> z$w&o7E>dNk0vnu%CJY5=-UKzflk>qN-^F^QXar^IlA^@C;ie4S(0i3O;#Y4XsHTh6EsqaQj1G-N{X!* zK%-3+XgLVcu*W`(M#Oj-j+qlem*@&M-~mpk zpTRFMUjF=Q8K7vPtk-s z4^&maTo>(IlO3y2qmZAL#>J4ImIf-MH9!i`+zPKrkX#E@hS#y!DkF%yp}J9>jZhws zuo2S-#mU()4?qknPR>SiFm$F8QT#)c;B_pbGDJ2N)rAN(SVFc8R5dF^g9d~0QgdQa z-3XRMb0wA}05Sqi71TVWpof`-*E?a+AhW>DI0X%u4piSjl^}ZsGJypvOsu#-Q*)}i zX2qbH3a-#%(9l<^f;y-IR)@ESO2DI>;5IE}UKy#Xf;9L*BW2~8B^jX1#ib6auhqdL zZ0g|h6mC*6XxIld9tO1^>}62(o0yxFnO>S-S`3OAD+O3bA6Xeh22zfLCwZ+@Q>?)K zSN^wjub z(ELBBX941+AT=1Q6wvKM(VSPB8xPU~2|N%Bzh;mM1+Zlrs->C=S_%jQzyh`ks-@tm zMzGIw6HAgappHT4!tSRO@YDi$<|?yTAtkk-C^b2;1T&CxkXu1!aS>We z^79pP6Z0y;l{mP^n4FJf7^#{e!&)FmqfXrrZ#|^Ls(@-lab;dfVg)3E8K5~KwIU<2 zw74WS1w29uk9)MBDFBU@ff7*?XvPVYR}>%(PD5QobBOQYTETrZL{7*r0L2k@HSl1A zC;|;iLJ}5|yRqwpVO+e%|?5fpOlcDQL(A|#GEXynbCEBFaA_ed; z46NWrN=IluMspK*!34SuuKsSIVF6Gvk(yTmD#{eVg%)_|rX&$G?*m#E0*wY(dp)rP zmhh|;Nsng@-$7bPZxMqHBf^NLFnK}MomS&&~`oC%tU%+E>DEiS19O-bg% z*B>aP=9Lsxf*cYGUKIoy>V~b<054F03>>N!t3qNZQK2|7w;(4~lZye?#|KXw>p_H} z%_CS8fM-OK^V9P(t5Q=CuC)Reqg)JWi6x0S3TZj16$-_m21RO-LMF(2d5JlY)T*nS zm#>frp2bv115M;JKpWL5m3fJ|naQv+BQsB-vNAroC^fMpH9n~{EiJW3LlduBkbR`6 z1a;FjG#Qc-QxqWPgQBsrG9F?MRF(+;q~?Lk9jF<(nZ?DaDbR3$M4T>CP!yDwz-$A} zP^9JLmosGMfkZR&P=gIpi{kZhdTL30UTQ@NQNB*iD=sa91!X+AWYhpnB$)rpJRC;l&`G8i|^q5w4Q_ps-dZnR9XVBlDG6S&FlK* zgA*?-<$*j7YI}fJV8BcUxfv3hAise6Z?JwOs3&ETQvu3v3gB?U*>eLK3@xh>MGt;Y zftxPiYMN-@fLx5M%?jo(ke%SV88RnSS_GZy2UqN19nh8!F-{^Ypg~nLct8?T<12vM zBT1V zv}UO!wHVy4Oa)cwI^cv1O*%!X>6!U?pav^wY)?To1r!y!V_mZW%}=0p8^H`=3}p-j z3~r!m8dO?CXI`unJW~{G!DXg3WT?~lxAqf){^58iEP^>ZpF{D6eW|Ba& z`3$)XX*s3E8Q{VQ%1p}ywHrYd6hkosbakUGoS~YD94O$S*VKv<@DLlwGwq-fFfU!9peVBpw6GI2jL8L> zD2dNYEsuxv&p;ZX?QV!hgaYUS0xT*(1rDT~0owv=$AUblS`6vr=cmDIAc%=6r3LZ1 zsks=YDQG}joVKcTsS3WJ zg|UzYBf+2%69vz_lnMoqDJcpH5D^Ha3=%6=@XgE%S5WXxtO!?7Pyp3)PKn9cT&l&o z2%rFBf(czD62gRvKqwR;2nRxf3;-nwRb4~FVg*%`6a`gNC21*Tl8#ZJLS zNaE;Bgt{QtVAl}P0?UH@;!N;TDP*-!#|62D1Vt(ol;#v;TLJ`CRGeCrnFyWNPs{}u zn@C1M6@ivPA{Cc1 zsG{J?ykwvJ`~vKG6sia`36IMh@Z3EpLxOUqXI@Hb1>7CT45&#UMc~wkEC*-9>pIn9 zXkvFsElJEoFCG*WK*P!f#igk!`3ym>jxG%0L7pM5U}n6JKZN%1gouI!z|!#^o(w+z zjxL}?1QLX^q2lqb5h3x8E-pb3eIR8F&K{lt@vcFR!LAGe?!NJ^evVE)t_(KN_J9JU zytQNSbocWQa%Bi}^a*uk02$#L9L(V97Z4i4;2#y0$HoZVs{O6@BKr(nvetvx5s@8(D>26aTB9bHh@0ko$MhMh`_12RF&Gr^U4QfYAkm=_P~IToaY z>ntKGS7j~+xM7&BEIox_Xx0a9_JFz+)WF88#}U!jElMp;1+{%44%gBGS*8GSx`L`@ zF@sxXQ7*V;U8b6%r<%f`r3LDbf>c2jf#NeI6|`0zv|iN_v>H7#FCE%Rbp!8m00nI^ zs6VTal$n=URH*=(wna2q&=n;XCue4&sX>GwX!u z>OkEb(7-6DS^)LY7!Yo@Qt(6>H?&efXiHBmN!HK=r3=uWJMdU;Qf3~=u?YR3?s;kn zw9Bfe5DDtoCsr!tf#&%^OG-dP4v=0|CMak@sTW}ZsO=1QKRlMK6aq5y6dXe%j6iV= z?m#A%C1&P;*WP62!2%BC4y5#81?h!kKzl#7wq=Hi3TkSg?jktS>}-wo3{ccZg0>SN z)Pt6ET+{z|$s)psjtV8bgXILBWPJyrz(tS6QA|2_Ez-$F$hZ z4b=bwHoJfZ_n`e-JuZf7E(WMq6;kt{c^kg-N&yu87=u!v;VLeq9x(E39X=h97CdYu z0fol}X<~qzI~59`77T<5_8GJe0VPdPRR?kts3=u10S`G9gID!(F@O^`LvcYSXq|&C zD3ih}JSzpLC}glRDODjUwWJ)h+0_6%0Bf#?QZ|6rnIlp-WM~vznWuo8UZ6!i;3~>i zwU|MNA-R|#v9tn&4MBtva*_lqgIk)K2`;UigFzeS977}YkazSmFt~tgEKtK>F|N{-~dksXXvhiymU~73Qb43pz$3BX$HT11&l#3@NObdt}lj8LxL(g z&}`YipbY|+ zh6d14BzrCjhR0q4>H#00-m>5KpqW)lz6al6i7{yiZ(u#R9XUYXFRBy1r=L} zU;@Pi$e+k1iz@?o{diJ-eo0P#VoGWe186h_JdTuFQ34)Hf)rXXV@Vwv0adV|<&jpP zHW{d=T9Tig3TnH+X0%{KB;afZTCoS6CWZ`#faVJoGEysG6$GR($OKQ2fqH5AY0wc_ zE(Wl{pbjAZ9)cUzXO!_a}!G-6PFC2_7_7rXri*9w1lA~ zpP{@czXUQs22<~;?~gPq1`1}-wv^0#kmDhN3mHcSISyQ2qU9`Tw*({&NnsGrfqb9< z@d3nhkVVyy9T$)+UtE%snWvv$3f^m>pr8BZ7Q+}>s~DmIGs1!mAyHxy!4PZ&VVXrS1RFz`77+}=mJp^%1UQGISp;<c%BOsqu^!3xtS%PGy)pNhUzXRoYrvZ zv{g_|fvq%1O@S7@@LkGK`-wu4;0z8a6(GxMK#RB` zd}}Zhyd(uwl0g<#q^5wfFKGS+w4qyv!5|5of?#PBBmoHv1r60=P3Qtc&`CX@!TrqK z+|-mz&{RTheo88+L(gCU)($D8KrB&!E5kK`+zFj?Cq^IG ziQwJ1&|NH`0tIyT1$^uYhbfRjT75_$fw~u^d7!~OP*8#AC6QV^8ld)$f@-oRzMw-H zi^8X{95Rb&rQq-E;_3(9%nq(p;TERoD1Z(h$w}1(M?7?eA!I*3Xghj|0&KVu)tcf| z@a&ofnls_TRtmwX;CV#_P=JGmvLVMzfjkfD<${;LLwh@#R-oNFRtm7dLo%dt8iCI!%FoNJ0`J0A$jJvC^HrRanp%L; z)dcHIcLCvE)q!sI+<`u~6{@&332Q;5@F&HZN zdQ>r(8W<>KdsHzPnL=noBU3Qn-rgQ1!$1p}c<8w)ph$wHFvOw&P(6YpYO(02g4aQd z6XL;(UXUFG5`}FL#+uGS3J}_;;0{oO9=-U4h*>EhRacdH$)IL8sLFyIou`_UVuf0C z!E}Mwm8GV@wiv*2IZPUeb|&{NhyfScM9LvKkQ$7r1JqM37nnJ{SZvK?Mp9P_G%);fX2W^|Ts# zdO8ZAQwR+zR6)B4_4M@6DrnHyAVeu>>lt~qE3(zFJPH{eMGkAoZeEZ)5m_9eorIuQ zz|mF$wL()No+KC^NNTARAc^UzDe+)q;jsbgXF%7sAc|nnQYM%}(E4f6A{Owm~5N^pM5$uBMjEu}6g%1j0AbA@gZK~2DD8o`U4Ap43EOTfFF zL7fNic~E%u!OD4XI6%j|kTN_<3PK7nYDNKQfRLCN0IMS@0$@5w4ON&v5(5>c4Hl-L zEKE$0!t_xgN0B~^3Qy;r@uX@-t_?uCA?lci?)fDOxv9mVQ#2HcQw#Gz$C@c%i^Iv4mXP6n4CM|bGd9MbYv(6ZlD$aD<2!wYKv=4N|( zD&*xuj<$0tN=(ns!(}#7EuWd5huUU9@dw;BR^SseP*fI|B$kwd)?$N(7(gMWpaEOK zt&m%st_ksg0^Dh^<_R=vthgAQ^K)~dz3luv@b+rR1{1_waVZyrZ@jN_D0o3HXi7mB zlw(qh6x_lQ-2m{IyMlshDQKPpvljrBhES@dda4FSV3nBt35XIX2{JAiYBzL22qfyP zpbC&FkoQ63vK80}E(Yk-i>C`Vy&!X7BWlq0AW|~0QXr{pfJX{6VPi88w1o;Zf{~vG zna_nq3^a#;2F&p!98i$JS2w^SK_M4>ZgLW+t(vcpp988M70UCAK*w$tfd+ANDsdYL zIW#pG3=)E2hN2GSi=u(MS#(K9r` zZCFHZYI>qVfQu)5RRCzS0@yHkS}95`%LH{kL8ciJG78#~#P23kJ!9xbPHb@naT8Gn znduqgaSPU0AVU(6@>K`ci%CgMDoqd1EP^&>LO|`B5`}`I)Ph9NP9M;)qGxab zXdEgXbmVA$TACiX3V_bf6hZdZfJO>IV`ZT79lS|M7q*51G_(mB=zz|hV)HAk@&t9f zK?N-K#t2H@z(~re;L~29+q!WlXlMf-EdrsUh|YPv~M3J0@ z?pdtPgOqxp$`o|`b-YVBxcUXN16(|z)o?sW9>zvi;uscWYy^`4sYeNR=*S{kz(GY7 zV9SGxQj=3N%Rud?0?@Io(2D`!83m?1w>Ui~HBUh`rxbb)PO(C6Vg;hX16nPwTB-v% z6dYt4w7$h*J1DOrO?hK;w}Nw!vx2`j^0*PAIRu*vgv@K;umrZc7F0Vyix?Dt#ixO; zI6#VgE{34Qa+sgsixL??qX%w|o<6QFTnwH$IjQN1ISPnzScDif<0Ax8b4wv7RfGDu z3|0y*u=0+<3OuR7V5Q&@795}-5WrvsS_=jh)(02AaH~MEui%Mfx36<3=+J_aRFJNc z{DOki6b37WAjsi?42VvCUA(t}SqsAsUvD^MSw%Tc9c#f`S9$U0j_)-NQYDT;qcy{hZ?==>{x= z#Psy>admg}i3fWxz~9p^1gruk?CkIB>*(i#BIfEF>f;#V9~AHF@8XIg14I4T%S<1?vuW4T<-QhnpCTp0SHlOF&r>R;j2KBUOUMCHVym;PHGM zx~NlngKYpg0=?`8OCa2XQA@$+rO-+uxHxEp57%HiO5um30~Qj5r^&$GI?yZ~=+r3G z5JEDKI$?xlAbKcabtt5UgSYe;FsdogLVBE2zo0YUK`Xp5CVtVUjER}~Mb|_0Fe-kH zp!^5DX$E@O6KL{S&oB*r?ibw{q~-FUeR`1cB{>6h#|LU8q6QJ}!98>fXf?+R8Ze=F zeh||TswGgAX-90S6r-<)p0~l>e=KuG9b?`wLatDV(7#9P0JpyQ&4$J_})2S9CC0>wX$oZ)nUHi=>Q$?VS{E)U*VnIO;{75`dAq88b1YI(a0^K(QPZr?$BuFF@n%eV(Ou|7F zBPBkt5g0Lon)<+M;5w-jl&EG>GyS2Oj2=N?Sq%Teq6Z$b$P<6Cpv5+C=?Ol92x;OH zUqc1iP)#cZVkf>Z?0{tk?0!LwJ2X3~6M1NcQZx3@jHW31Kob~v=R9E{3sy)*jKK84 zA_QychAlo|8mSo_Ff*wi8!(g6BLk~_N3up)@bE1axa*T7FR~xaSBF03Un> z=7UbUQb0dj!{yq^f(S%qdDr~wn7 zQjWHW#xou)UXYTBA&~-}js(l&lfz~vqRVA$1R4>*SC*lxrA|r)wdo+ONRSKAf&yGg zg2dr#p^#SeYd{)0wyG7N!8KdeoC@^TBuu-ik)9ETB)BMz4|a3{HRwQor;dLxjP-YR zQ3y&+&nyNVxTcy@p`dH0plYHAJ|+)kOeC?a$k-?z>}CzDE=E?MX{F$vS`zOW1Y5ul z8jJ?(0&jH#O^t(jXaS1Fh=_;?(#!yr0aOS#(5CbPThLu!&bcX|12op_r`30mL5kVj7$XNow*y%z;c?f|gstHZ4H|6;CEB&P@jIYrtUwTF`;d0FDQ3 zTEw9qeB>2qja71Pih`5Nc+LZ|552S~6*Q}&pa9x(s*t8oke{EU zkQbi=zYD7*zW_YslayallAjA=f{%%XD#$B{2P?=ch=(WuEpq{#_oRSyTowG>CtZjj zNS+8L$SCkRR))}Ht3c;i85$IT&Qw4rKx*?qCqaPR558_sK|vui1#vh~9>f>9iRqci zh9F;nd<@!~4Ph4)r9y6C0xK{AUw{R2CIwDcP=Gkzpa4AaV^M+RZqN#O3-CFw;OI%s z0Ut>SbGL#5JoFWy;S6>bK6fiX?veoc2CSB1FCh6G6u3yfQ8hF`_KPYsO2FRH($WIo z;S9a}9JCZHzeFK9AH2?nO96CVC`3LJbQ2roL?X~KEzkx|(Am`~3YjITx!^mTzyqXK z;B5tvQ>;KI-arpy1nmPvIWMIIbS*P%r!ROF38dgenL!5M9S1+r4t8(10z4ytv>>fx z1D|OInV3*5c1eZYvj#fL1Qf^+aqv15H}E;t;JsOhS=H1c_-VoL6+58n5PVKD$^nV+ zjd-Z-T##d|6kr#&St*2rc0z*|v4ExxKo`8ECW4yl3aS-)prR0ZoNci}PHGx-b{?h| za+0v24rKQhcs|w&d`T#%T0m7~M2sS1{EDm;!oZi@DS$&nL06#^a`Ht*GL2 zHWj26#JES8}L}!Z)e-V55vq&{ zm_^995Gx9bK(S1QcOlvd`xkr>DyR}H1>Hbefh|;wbQFkCWlTU7A^$?GAlttX?S%ac zzP^>9e~D0KtfPQe6(RpZG?VRLh;|hJ2D=71If4883?<3wsU?XeB}EJ+$;D6>DAPJ8 z=79?f&|;yqoWyjbt+FsFaGOjaFFz05j!^)qf)rVq`N<_Y8cHFa{>~LnLEcK53`ior z?yezdBEevh{G^oBGQGqS2FI`CzdIbC7SMb{X>tj8A3bEk4qbIV=qhATjRBf@ zMyVrksstTIlboTDom!Nanxo+1>7tNQlvxHkdIdCCgYY2S=;WNl%v|K%$H9;@y7d?w z!Dn?Vq@?C$rl#n@R@;J{1K$4+7s)IJok~`z$Ka{&uK+$aU5^2_qy$ouf)8v;%}Zf` z4W7YQG=tl7$r+`2*^rD6j~39PcTnFP zhn84@({6EU5j@!U)NS_0+F%%oD#`RbsVEUY^7QcK{rpmb*y zAudOj_f5=82c1HfkzZV51-eKW)HDGFJz^I>vT~=y6!3M!pq4x6A`S zg=w#IVjd_xf|@4^#retEsU--XBU=bPkO;c34xt7VI>o6a;3MBasSRFiX~52ThX**S zvSLV?23H1g8e|hiJZQ&ad`^CTHsow#$U^MA{5)OIO(rRcMJeDdZQwnPR-gmt;dX$B z7eMZS#43112z1UHlUY#AgPDM259voWLrfl zA8;Z~53k#r-u8?>7ZySq_!lXJreR%d7=k$zQ4 z0pyq=$U$)mpmSnivfy2vrSTbA%GG(8+#KJ|`6UNJ`0!aU>J4 zM>CQFJdt3f0F6Fq$rO)Rc|phzm^#Sx3Z_BWeT1nFk!TUiH(<#Ww2B=idN8%)4Hs~$ z6O@$Ti64A6b80ax#1KMOxSfd6R#J!M8BtEkkd>I1HXh2nlY7pUq164O# zfTK!+>PpaAH>xQpr5~yyoMDMvutLVc!L1pbxde}TQpEAgd+E zN)-Jh*0h+u2bo4fV8N7=<8Y||K_z(^WL+lIVo+NpKdB@!Gfx3}_bDW$V%JcVno^n! zswtpqAy*TEOH9z9p`KwHY7LLHNE>U^AcqN(T2g(8!x(sV1|A;AUBiQ~g2fgdkdOjj z7z-~=!9fVBen1*v!H^5OqY@O9NvR6y;9CHp$6CYhCI+3O2@W2llnXKnbn7q3q%^Ps zaJ8fWy4EfuGd)8Gdd4HTy7Kj?!iX6Z&7}$+RbZ_-`Q_l{6CPCxxtY*S&`8l)oSYpG zSsxCvw*YJ}c#Sw%Gx$0^gvDS9414h#0X`N2!w7KIZV(UvsoV`f`;8EL%shhwVB5!# zm;rD>u-~ zHC{nmULk!1xJL;X1U-WcROUfWo}kD;XJ422h=3q}_xNDf5YVm~jfj9Cckuq2c+mNF zkgAZ2Atb;P(gQ8Y#^*k;W{{b#ej%0d`N(2 zyfLibO;nJcK)s@1&nQe&O$`jnjN+jcDJVx3XMm=W zic$+eo4z4iD;S*fb8^5Nrx~Ez9bplPp&Q&e0Nw2gO46X7I4CAjQU?QE1g9ZT*Pur^ zhGnpt9kNabT1vuW6hk>AAu8l%7N-^^CgoIux)iAusmY}!sjx-TSj>PAbwIU)x_5*Q zwSX5_c`5O^+2DmwB4R zi3)L28EE|vu zErE<)K$gl{vp_KdJ^mY% zP(kDFP@khIhA#_*`4XPE(PRke122|>9;%|FkO8`_4Sb3}0^})O?FHfCcg=tUC>9 zTER>PRcfH_PihhP@T|n*;?i7DI}B2*qPY*rMDPp%XigVl0B*&QCK@R5lQMo*W`sDk z1%6xyxIBQE0&*sJWj!%YfTR$F6R>Eu0v)uX$pzab3k_f>r2txn3T{`xH^{<58&PLM zJ7_5R9;Mw{W&}DC2(}|1x#U4UUjZ^~1P@Mx`B0A{Z%=~PfIhB{VXl~!a#DVN3HYRV z&>B}v7lX!2;fwuYX#%>L88Il2QmdnAfm;u{njzlT)fc^LKsX-Ug(J}}di0^Bn2 zJyVdD1DF}_?C5ivjMztJn5ahZmyv_!-#USgjK!q19h`^$-g;6*H3akdaf(xV* zEm44KVU%D+RSkC`u5g9ap`e}{tc!}8nm{t(L(5W&5o2zM$bi@e4i%8&pwpchiFqkG zsgQMe;Pcq*6if|`uq8y)gUd({6}ZjB1q)m`$lZ`T7D1h&+|rzq%z~U$(1e_ksTpC1 z!h@BFh(}F(dHD)%K90d2kXyVUSKvX)Kv2CN65t6P_Qc`_RDa^(KvkR}F^Y_k6oD%PV@TCw z0-;R7lo4p&A}GHUG(V{T8&HKgF&I1_2NwqKyaYKt$T{BAMWFA&L`BB6JOr+yK#n6iXs>4Ut`CY!s?%gk-CMp-G6YA+kHoOhR=H z%@JmlIvYC~=o%q83}lNDvKCNK7@<1USJw#HS`(8{T_YrygN;B64Ui=!7P>}A_8J%) z`RW=Wd&b1XSJxQX?O*{Uhk-p~g6=XCB$tIc8#@}BnCKcKDGGHq_A$^kMsjYbv$3;* zt}&APpdv`lgPVk8dMU_s0|Q+nq$n`}#WRvGKqeXL8Y8KIiXf>m0HqyNyPS=5O_00} z(qp7+0{44Jpj&_m+)NM;;X@G55I%^Z8|?4t42xZ`lnLDDA(?rV5yqi#+2COR03=zE z9SF67ZUJT{h!pM^;_K?}Xk=;zccrh7n;BfWV@L!@KE!|_Fa(q#Aj*x6OmqW%kyU{d z85&sxxj7obRfc%_MOs+s28LL`g}{ax8d*3R>IQ}wn!&}5jX<%9Vx~u!D?G9tLqKLB zavjM32-{1YjdcwX{)IZ((8$8j5gyPko&m6?5~QAmPAH=F7qJ&S*r$GsV233@W|$1X zb3z~jG{a<+2Hw36oqd9>l?C4yst1$9oP7e1-hq1Z(6$7`sYr7;h!z22YdEN_4{H0O zPj!?TVHw(jwl_(<01U-BP$N+1h(L8WDDaY@*F@##fsfvS-C_yvW?^auZFhhS*MY9{ z$x8*FPzTivs&^DLAmzU%7x*SnaBGwyC^!Vd0L{sP0)+v35F5xHuv=?jVnwN-V-izA z2g;`wm87OX%mK}1z>NXjF{+~w6da-hp3R1v3Q_=42p0e;L{)+kHi(7+=>C|@0_X2y;V&Jn*SY}yZK7whXXr2XX7|LV`WB~wp@Q%<-3pVYggy&kI z+VD@65Sncv%8(q;ag`YJEug4_hkrq85$MjY`26DJ3|#jPwXoz+xh}Vu4g3 zpcqB3T0r$jY_tK&3_i3>#Zy~G8^l6J-&H})dicTyM8d!{0=vbAq*`o<)ncUO4G^0_ zgDYsA98j?bDmx(+GNg44i7|MLg2M_FBA}3hrTyfL#5~Xr1kfrx@c5B|yQ`mTkf$@G zu!Za~NGr|BsRZw`NKJvRkt#EUj-)B*>MB4Nkd_vwD(EJ|6+o@WZG;gaBcNlNu)qb~ z4w?!%_8saeL(pBkP__}$YA*2MQi;U{U{8SO6hOD?CM6aZ#KZ2|Lljd`d1x;t7ut=o zf}JLslAl@(TJN8jS6rT2q^F=-p#bq2R3Bu54l-?%QVbsTSv)xaF7P(+)a{Jj~NY zKfu#P5q6s>5f@P`v_b(}GSn0BJ{2 z1*&~PlAvkZV)#DB(qeG>A*YQ5zWNoELyMEMVfXTBB&8-Nf^rP_PGyDE!qUW?VuifY zoE&IL47$e^JXc<#04k~>OLjml9MyD%Vg(Ib1=UOik1D8Qkl`Rzpv$vC7cGG2=D`Xe z0SZ5X5gMQ%^$5r4!E!Ko9vNIaKzxfxC6H7DZP%9;gEnhH3vtASkC1H@n43jPi<97L zq4tA<7#KYfUX}ZPA$sIN2FymAEEjr1zG~+CYB^;K*AGEJtBK3K<|n~StyTH4>-wzI!lmI z`TV@J%=FSC@Xlfd)fAjggJ=Wq1_PzhOxUTU`1C+-7Y2uUYF-ND);{Da0?jwjI0BbU ziI5GiFm14I1|HohnJM4~K16$7rD`##e1R49kXTmG0EcB}Ub-eMo2xUJ0~a3`!|!nK?P}Nu_BZBS8G5(wuB?TUIHw!UbVOu9np&Wo2+gngX`sE+ zrNybq&>3cM{DEtulFYnHwCc#eAQhehz=4R|ODX~HK+nho71T&)7ZEv>0y@bU-O~>I>r-0#9|l4?sVv)50K{-G>~p?)lmSgV}Kv>q6#{z0&=5MN-5|PaOlc= zE65&1D+Onax)2mHuml4dDXh>ps89u+4+L%rp@kqQ(GYS&aB2xSmmx(As9Bey0Erk- z4NzK~1hN)1@ekP!hSD`e-PoU52D)Dsv?mghoUqJ}!rE7$y_TSMtAe^}vO1_~3@J!q zm)3&L3IJVHqX4#`9CpcXu|i@|sulQ*h$01BNES>1SHEDfas^v(4VDTGB(Pwaf-UGi zlFYP9m?$`F!5o6!UXagWDnR%5g3A8f#1aK{)nY8JO)Y}>7gUmf3Ln*CX!i|z-5;WJ z08#<+5@^a7u1ZItC>eeiFsug7FD)r3ErDz$f)ozA3^v6jDfy)(c3=;H6oM{RfhYkx z3}O$eTQc*|i~$(}+M@>YBFGG=gW zo1X_MHm$*Cr{0Rtn0Ap?tm5d(9ADFaJ^83W@4GX|CmW(=$i<_wGz%o&&tm@_bZsA6DxP|d*V zP|Ls^P{+Wqp_zeoLMsE~fmQ~lhBgMq32h8a4DAez8`>F|3_2N@3%VFs3%VH?1$r2m z9`rCUe&}Ifa_D7XP3UJ}-q6p$ATW`EF<~MDgToXCW`U^;3=`%tFh7{jz|gRWfmLA% z1Ea%I28M)H42%m_F)$abW?*nw!@#^@4FgNVS_Xy(+ZmWQ>|kIB*u}tfU>5`9gIx?P z3wARwG3;SrOxVM~O=^!-3Zf%opA;uwHn}z&PPO1H*+c42&PXFtBX+%E0*GD+9}d zZw$-=-x*jQd}m-a_{G3*;2#6?g#QdoAO15i3NSFTEMR10oWR7$SrUY(AMh6~7h7H<`j2Cnm85m3$nJ1VqGA=M-Wcpyj$jD&I z$jo5I$dF*c$a=w&k)gqpk@15kBU6JHBjW-uMur6ejLaK?7#SEs8JPvb7?}=)F)}^~ zV`OkBVq|qFVPv>a$;il1&B&0@%*b5O!pPXr!pL-?g^}?=3nN3q97e_ua~K&W%wuGH zFrSfO!vaRe2MZY)4lH71WLUz;@L&leBf~OAh6~FW85veEG8pV*WK7u4$l!2*k@>(u zM%D#~85snwGO`w2V`Nac!^raB4kL5IT}Bp#dyGs0_Zb-)9x^gMc*w|l;1MI^f+viu z8=f*UOnAn~Snz_8^}q{8hJsg&j0;{dGHrOn$oSzcBXhtzMh1oVjI0yhGcq)MXJq>D zosn_EPezu2-;7KPelxNj_`}G&;V&aY0xJ_^0V@-O0tXXQ00$Fe0|yg}11A#$gCG;L zfCv-A0x2eD1!*Qm2Wcke1u{&G4`i7b9w;+0A5dXpyr9CwprFCT%%I7{P@u)cs-Vrp z)S%78&|u8OxWJf+rNM-W$-$I~g~6PO>3}&C!vjkumJilU3=15Y7#}z@F3hXn3x}A zF)=peGBGpcF)<#A*l!Nkx|$;9YT z!^Ci*fr({7GZUjgI}?LL7Zc-zE+&S8sZ1;e)0h}8tYKo=u$GBIVILD?!#*Y!h5bxS z3HzBC8xAnBI2>eREI7!-;&6zG`NAP4mI;TMm=umMu^c$U#IWE56O+J6CPsskOsooL zm>3GKFflE-!o;xQ78B!z+f2*?_m~(B?lCbRxW~kB;UN=~z#}G>36Gc<3Z5~sOnA=3 z#PEWNQQ-v>!-m&PEDmoV7={HdN81R;-1C;&+rCFf<;e*l=P&xvdE|Z{i4wNo~(hX3$3rbIc((|D73Mjn^O7DTv z$Ds5DD18e`KY`NkptKUy9Xe1NmTxrcAn~9FrA?r;4U~3)(!NkS3`!?K={zW11Et%b z^h7AV7D{h{(z~GaAt-$UO2gd4Tn}-NFqGzl(wtD*z8fO%4W(nDbUKu-m!^kPKVMk_pE_3a@IifEr9adp!^k3{zNE$6_mdM%3lKI?}74H zLiyLA{H0L-D=2>vl+UmhV&7sYUjoWs2<00>`D>wkcPM`ulphb}uZHpqq5S1gek+t8 z_#9$SpD%=tgz^)hbPkkux(|^DHBv!FD8Gg9LG4fw-x$hg1#uV{7@VPe4k$ku%IAXe zlc9VbD8CrW=Y{f{p?m=-e=?LW2<0z<@`a)Ntx&!wlz$A$mw@uGL-~?W{tGBy3d;Wh z*@_#`222eiddx(EQ z{SlCmER=5n;xI5U=tKF|P`)FSZwKWEL-}q{emayN3guTr`5jPxHwk zpO>I~So(Yg<;z0N{|Dv6(ks_Th<{=6AqC}ULe*8qu<+G}@}b%pOrU&N{_ueEVeyjy<+DRI6hZm0`00Z3VdcwgDF1^8#2rv=40mH8 z`~$j>cH|={pFa*&Tm;HjhSC8h5cQf+ems=kU=9&ah4QPQG=l|1ybj8r3#C6m#TP;O z$Dy=?B}DxhDE|kP4zPxZ|AX?i;vw!_02McY^8KLn1{;X_5GcO@N-Nkw#7m+4c~F|c z0V2K#%0CFD1soybN1^=NP}%@0ejm#J1*Hq1;xN9955%45;{T!Q6`UaE!}t!+@sI!i z|NjTYRR9MQxSbASgRuaFF94+(gdqF_Q2GOu2CHRYVCaAr{1YS~>J~^tXahM2y#Y!G zC_wlH$`IN?6+*+(ae)k^AF<#jL>y+mz5@(7-!LBEJB%eukmJVuC|TWllxO;8__Ee*%P`n^>G(RGOCx5}E-O zO3h6!s06tYB)9+~Se#c-l$lqO1`}QZ6-E`^02PIM5;R&5GGzx$q9{4B1ZKtogdoDc z6A;0Y{2b6FvLL+|U?Qaj1*t_KksFMn4)KX8De)PZ#U=Sgl_0SPAXSMasTG+eAnpqY zH$M%;`2gZ1C+6hjCxf^@z}&Rr)RIi_QH3C}1||`Q_+*e+K3uE=ECxE$KD7vJ?*xcI zelaAtz`XoC(7Jh$5eq>4l*}>^dj*IMbIS$@r@#m#vjfCQ126glaSuSac_ld@-U%=d z9!D3zT+lvYkmL<8FEb}K4;-Nnz+BLhG?3&AFb@(NApQpkzqAD6V;HX(B-g+!;t-z( znsET}I-oqTpC*7gpy?7YcLs=?o(eH!0hE)P2k|153p!6SsS-4)4>D~7R5ZT;91T05 zT=2@rw3I|}R2={bf)ASo={N!A6(^RIfF&=0xH~b3rlDRKzzs=anV=v6TW|p?QkGN- zPOUe<{LJ*cL~xpT0Oo>s|AF+s0CS6z6Z61|KY+OqT~#)ogFYPM0NsNeCS3m`FQu9D&Z-8?1 zknGz57lYVv0M3V4aRSPRIp_kEUt9uq-wi0YBtHdY!vi=s8^nEq;KqZMe}D^sgX{;K zTMFhkut7Xul3$tw7U%#8z)vRy894zW0zHTnBr<~yUdBV$CxAp3poqdV$_kh;c*RFN ze7Ofm%LarTwB*R+P%{jXj6qI9GXMPIf%QG43RWx7?Wwzj^Z**6^h#V)8CV!V^H>c01q?fw zav0t)#WT!dE=pxM%M2<1+E~(xQd1cwv49L<_{IVXMusD-QW|FT2da3UN|hz%FuapyV5(r~X3k4z_$AH4&~THHF+L@= zxTGk*lA(c(fh8GyxE9njhU3h|3{RO;Qgc#EQek2}ENM9mGe8#fGBGeP6_+Fyl`!0g z`IU`@;ldn{czI??az=bfK1^E!OLAgfJi`$d7KR54m>5_X7Ayjh8^Gj(#UL#Rk1=dw zNv((n-x0>JPnv~c!(x!y3rj#`!!nTCB!C;|nVT6C{+Dv8LvwGwfhxVVJN6 zq;~3vXKov(`KEorBkuShTzJr?ei(8-mPpPX2d8V?d!&&9w5-Y5{C z0%xW^9NI?<9Dv@G_!y-kwWej&k(o;(qev4%0G0YKV zU;^dfrQAiZ>r@!Fi?J{)n9IxDWkn!|7Bf8L zhOO*QEh=W%E5^d`VIIhp7v_VMWtJo*=B39o{N*lXILXVvk&+5Z90z!cQYzzfQd1a? z@uU_NfmvsG3K%Z&l%+w$Kl3Cr{NyPv$Yki^1*J*ImLi6|yete8mVk^u045(S0a=os z3pU{`55y19UA7F{d07}5mVy*7SPD{>o5Ik-o53)FmxbW~M0gEIII{qn2{!Vkg3j(M zN-at)EX^#=1QjNSd07}XYyg?@U?Z5^1R^JF2Wc!W$SeY750Lvnx%WM9Nl9u^T23WA z!+r%>wG*V{!v~O#Jcd@j6ow=G3{06Nu;f3B548G-;iC)-!+{wrpxR_6i2N{doackA`e9fr#lo;*77GIdb5Uw)JVf#{Uv3GgG1e-W znUk8C&(JN%!mwaA3u7_EUp^Lw2eUzjH_T&Uj0as@#PC;!g<-;ckO?IWYxxt?QbAQ) zJi}qJ)FOsoVhl{6<^{tp{%nRh;w%gk7P2tLGxW={FkDy!GG@XO76t~EB8Ip8m6hNE zwM`(gh~b`SdTxAPYB@ub7^qk+fx4?fAU~a?Da4_1N5hBctz1+7K|ZT2W;m?OxrNRWkL!y1s} zgSB8uSiJ5M^o(aXAjraS;SCD|17~q6!(^e7)Wo8c{PH}8WkR5(s|=fjKv`;s5Tt*2 zP6(#=mQV`A1EGSH%y^i{Um?gHgfRX#VFsp>(gKDBLU}0+YlK)BHXLLHrGi5svf(g@ zyl|8iRMl4IB{Q550=bvriVzFKgexGq2Y*52hZZ&l7KRTUYzz!c<#4OM3qdvnF*FN< z3PO;Q3)k2f7?@#puM$o{sNNuq?94sFEDR5BfwVN-2az8hfyfIJ*%=s^K#c^33&M#d z4A(_i7!I5Ti9s6?&xI395*hZ2Ffhd@Coy~yX80k@!q9M@9aI=z0Ff6iuruW|^oW!) zOcG&X_;48{w%{6=ya6INfXM?lz-E>)Y!}JQD`B`H%EE8~Eb#y=ky(|>a8aZvIfLPn zC=0^}uuQ{Ekd}CcXCe$|L>ZX#7`}?6FdPug$zwPs3i1lb@C$d?8RHpRMH!g#7$$(E zrh&BI0ZZKlX)lgvSSbo>E`65)so4TjvrCkP;lMqxng<|q!y^#+;4z4t@Dxlw1CbA& zu`@6*!vp`1XmM(MegVTmsS-$5YnEkUnD7du^1v&QO3)busYMJ6#6aE03)0|@_%&$; zCeX%6a22{yteBw_r0F9_(+4nl;4?@oxSj`Hki_sp4AcSuF^d`AiRGr|LYQB~SQs{Z z0cm^i4MZ+z;Q&=uNpROq6VC)Sus=$H8WPi`Sr{g?axgG3nHm@{tP%$u13Foffi<4t ziFlb&Ji`RqpTRRJru+}DUqIHUy!~JOJWoG8u0@B*yr1DM>f6QpCuP60;9I(&vT(ku)= zz=9hNgQdXa0Wf(4Or8Lf7a-(mkeVA{@(!4M04866$q!)i2bgR)15(*>2IMqQi)V&R z0mD2{H3Sv`HAdFR6y>KgY?5JNm;qM104!6$a9pMsvQhc945-zT2;RtiAEX$Xm!8V7 zFl+#8*>DA9$%Z>%@(GCC0VWTC$rE7m!V{1aK)G+8EVwe4+JJK zfwZ$cV4T3SfpY`*1`dUS1O&p1|S0iyl@bHD0- zuw7toU{nCd6wd=jfeFk9m>)2HVA{Z#@PK0hyTSv;1B?fl4=^rZnZVM(vVeI4%Lk?l zj30yr8W<;VG%$g@VsL?D0;|FW)(I>N*g=LZU<5^zzyihwMg;){g$GOm0w8CC*q|hl zZ~^3u4NMQ1K)ee~A3zbu{($)d;{isH$Og861I!axAFyoTIKT)}+rU17;{fXcz6RC@ zj0-p#xG!)tuqG^ER8UyJ1dikjj1w3SFiv1xz&L^B0&{`F2i6CyAGi!aZk@n*fq4Pb z0Tuy)35*YzH!wLgFdkrDz_Ng;Kw$#=1jY%B(D@1<4F-lcj4TW#_6!U?3@i+PQWzK* zSXdYoau^sA7+4r?G%+x&VPau;V#)~S&xmAXPyvZ&GBW5eurRPxFfy!RWMSZ`VPrVN zz``&?n2EuKfrX*Kjfp{lfra5qC=){k6AJ@J3=;zfBMZZXMNAB!OnGG$6N3x`3&V*m z5OpO7nHWky{G$+hHa`Oc$SF`~GVDR)ALeIZNMmMXuzt!O4N?R0j~*if18Chli2aG5 zfk6d{|AU`_p#`K6ia}~XYi1Te7vg~UejxQoe2{q#T9El@J^_e%Fg{2+^e@nX z=y!tZhw(w$K>9)R>!2V3@j><@^FjI_K=u1U^~3le^~C5`fUc)Vfa-_wVfta~IzW7o z{m6Wf{SHw5Sy25jK1e+=_BTNFH$nBo_%QvZAkQO(AB;a&fPn$#7Lbx<0t^glJPZsD zvMk{B2kW7H4=Dctlpg@)ABFN0p!|nW{tPJpFO2}!sP2hD zgY+ZY2hxws2kD2c_xT0Y z597o13xI~Sk+?1!y`a)j!K@j>cA_9K_CApOXEkbc;@C@-jf7$2s8 z16uk;=7aPrK-W)&K=s4;F#WJ~u^>Lkeq=sKzX4Q#98^Dy4^j_uKXUyB(vQps=}&;_ zFM{fa@nQO9p$qjue2{(^zflOad}|Y8U{K>`V32^Wvzh|p^Dr=MfR=~LpnL;4NO`;! z%C~^>LFVHt&-M$UmS<;$Amy1kT6?0w6HxS`3(XPekqi1APC`CL-`M&{1zx*KnNn=FN_*r)6w|z(fA<$;fs$I!l?1FK^PJr z7U=Pj0|~#c(C}-3^8et74*}@HSdjgo_(0}^;$uQ9#5@)eNc_V1AoZa5KrY`w`jPn{ z{S9pp{nAkVFg{Fw0*HZBULo^A`X97I^y@Q{&Ahw+Kk9{|;F4Al?g6RSS~s^1=}AI2wEe*sj#FH}E_Pptk1sQz%M zei)xv{S%=2lc4%xd}8%4fa=eO>WA@()xQC%zXqxw#)s)g&TpXni_8b5|Ay(1^xF;9 z597o1!}d*q_#pi-{xnfYd%^))pU;Ky#USBp#C(pz4jE!cY*TXL-`(1K7$yfe;feii$eJkP`)CRp8)0S zL-{FCz6X?_0p%w^`2|pZ4wPR3<#$5)4N(3(F;w?2LF2DRK1e^qEQtOfsD2n9rr#B<{72^F3%^8h)bL9e#~ywGQ2SRw?T7JU z_9M5~K<-E8gWSJiHpKl0q55Hbn0`Xx&oBp~{~}aBj1SZQ0Ik1|%m>;3U>-#OZK!@2 zAEqCoI5AErM5#6XIFWIjkg!$OGuKT!QJK1drV{tciTyFh%9 z{m6WfeuJeD{UQ>O^b6yI)PwXtK#PB5K1jd7GKhW^sD2n9re6WAKZVQ(={Hyj(XS8H z597o1Bl{QReq=sKf5R$>emkgs7$2q|IlX}NBlAJ}AFPJx_k!w&@nQOr+e;w*$b67~ zg|!g<@lgFRK1@G&uo5Z$kojQ!>md3|VEUnanEv@_;Sb}tNI=Tt4ruu}3(B7W;b0^@_s2c;L}@o!LgA@f20eXt(lUp1(H7$2@5 zt-qvz#0TkT*b32a3Dpnd!}JqsFA6~QdqVZY_{8d0fa;Hc>WA@()o%dRp8?em;}fgj z0jj?qsvpLO=|?VKK;e(f2Zf)&Hc0qQg6fCyiPirAs(&6-Ka3C4kK8{4*^kTz*&nbS zV*hHWei$F7AKASi{m6WfeuW(n{X3!hVSJc=0}ul#zajHM`U7@C^q+z1hw(w$Khw0ysR$e0W@s)o`QmEx$juiIt z&*2!v{hOio!}u`!6VU8O=7Ze70IL5mR6mSQtbT^$5c@Ae^~3lu{m9`B3O{5%$o>MT z{`*kK_%Qv1+Uo^S{ga^jVSJc=4%-uB@fjP;}feNcD|PZR6mSQtbW)zV2)7zFg~&R4?x2&2&x~(hv`S2 zj|TZ4nGf>6!Zk?xi-+om@nQOr=W{{&k@+C~u=CDxp!#8an11B)0;C_A57PetdM;W6 zR6mRl(~q2AK>CsSApHq9A?}|6)eqyt^c$e1Ut~T=|AgBR{cE85VSJc=g8BarME^;s z{smAzOh0mZ1Gyi@zb*smugrkBLrUP10pg4~PD2ZfiwJ&1p^p!#8an0`Y24F#zFTBv>)AEqC*& z0jj?jsvpLO=|?UfK>CsSApHlR`sYFQ!}u`$3DARcKzxvXWIjm0!V8H1H$e5n_#pM5 z@I$U&K>CsSApHlR`VT|(!}u`$$nFK{N9Kd{e}L-03Dpnd!}KHfr$PFW`C$DoA?|+z z(+}knt^XB7KcgHZ{d|D&85kHq{wI`Q7~VkiOGEX;_%QpC%LkDAk@+C^Z-DAIgzAU! z;rh|?`vxRFNPoh6i2V*w{V+aEKXUyBvLBfb(!by%M1LeyKa3C4zX8NR>MtPkLHYwe zL-dzG^~3leZJ_XDKyok0eq=sa|5u3qNih9TK1@HM@K5*#(LV>OAI2wEf5CT%{_Rlx zFg{HGZ?yIMKvOIeuhgzQfki%Y{75sp>$59@V9$|c#dyvP6LE(wa2ZiT{ zpAh{aQ2j7IOh2LWjNunVe>zk@j8Ck70jT~esD2oqSp5o6{k>5AFg~&RL1+Ae)PmNX zg4U0h z!}KH1&x72L%m=wYfPoQQM81RShw)+h3AsN3s-IB-lK$X)Sb2z+ACS!h*CsSApHrP5dHh1`eA&Se&p~1=||>+ z^c!$N^xuT)hw)+hk^6ff{m6Wf{s~b1ub}#2e3*V%dlke7=||>+^lyOb{|D6%AEqC9yb7cr#@AGY)F%@1ko9)nP`)ITp9|$HK=~l^ z@U@@&6jAG&>5ACv8_>DtAhYg5-3#M`#6bQ{Z>%@Fg~&R1%x2_?V$Q$e3*XZ z_yYMKnGbS*1602|R6mRl(~sQV2I)uUgY+8+L+lTM>WA@R`jOKsNIxf1NFg{HGEVT9%j6Y8qvVMrc z2C}{fq#j>*tV9csP0;YLL|fm>AO>;I52$-!e31E|@IdaLgZzWc2l>YUsvp!j2Dh)F ze3*V@|AX`+^FjI_K-CMXK;i?&hv`p2Ti=b$$LD`Z71Z>gtO7|7=>88dgZMuSYCnt* zvmd#92Du-Z4|0EjIYfUoR6mRl({F&b{vMeR(!anCqQ4)iAI692M^1kr`;qw|{RZ|B z{R^P_VSJc=9b4);48pH?bN9Kd{CwM^gD?|0e_#pM5{D-{$2&5mG57O`84bg87 z)eqyt^j|<*4}{DI=@$rq==Xu@hw)+h1<>>(^FjI*LLmARp!#8an11B;G|2tPe2{(z zsQyx@ei$F7pJ4if>hFc>p8(~<^dsjNkp0Mfko^jw5cki4>WA@R`jOoW(vQps>34wY zUkB9>s%Tz%}LhFTwmt6{H?HY7mYGau?67$4*ePe*o1F z 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 b=X~R7xH2`K=p~zY-3L1R6n+#N+5|2D@s^*C literal 0 HcmV?d00001 diff --git a/buildroot/share/atom/avrdude_linux.conf b/buildroot/share/atom/avrdude_linux.conf new file mode 100644 index 0000000000..46e7ace34b --- /dev/null +++ b/buildroot/share/atom/avrdude_linux.conf @@ -0,0 +1,15478 @@ +# $Id: avrdude.conf.in 916 2010-01-15 16:36:13Z joerg_wunsch $ +# +# 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 | +# stk600 | stk600pp | stk600hvsp | +# avr910 | butterfly | usbasp | +# jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw | +# jtagmkII_avr32 | jtagmkii_pdi | +# dragon_dw | dragon_jtag | dragon_isp | dragon_pp | +# dragon_hvsp | dragon_pdi | arduino; # 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 +# has_pdi = ; # part has PDI i/f +# has_tpi = ; # part has TPI 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) +# is_avr32 = ; # AVR32 part +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# 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 /* the _old_ one that never existed! */ +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 +#define AT90CAN64 0xB3 +#define AT90CAN32 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults +# +default_parallel = "/dev/parport0"; +default_serial = "/dev/ttyS0"; + + +# +# PROGRAMMER DEFINITIONS +# + +programmer + id = "arduino"; + desc = "Arduino"; + type = arduino; +; + +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; +; + +programmer + id = "buspirate"; + desc = "The Bus Pirate"; + type = buspirate; +; + +# 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 = "mib510"; + desc = "Crossbow MIB510 programming board"; + 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 = "stk600"; + desc = "Atmel STK600"; + type = stk600; +; + +programmer + id = "stk600pp"; + desc = "Atmel STK600 in parallel programming mode"; + type = stk600pp; +; + +programmer + id = "stk600hvsp"; + desc = "Atmel STK600 in high-voltage serial programming mode"; + type = stk600hvsp; +; + +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, http://www.ladyada.net/make/usbtinyisp/"; + 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; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtagmkII_avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtag2avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in PDI mode +programmer + id = "jtag2pdi"; + desc = "Atmel JTAG ICE mkII PDI mode"; + baudrate = 115200; + type = jtagmkii_pdi; +; + +# 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; +; + +# AVR Dragon in PDI mode +programmer + id = "dragon_pdi"; + desc = "Atmel AVR Dragon in PDI mode"; + baudrate = 115200; + type = dragon_pdi; +; + +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; +; + +# The AT98ISP Cable is a simple parallel dongle for AT89 family. +# http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2877 +programmer +id = "89isp"; +desc = "Atmel at89isp cable"; +type = par; +reset = 17; +sck = 1; +mosi = 2; +miso = 10; +; + + +# +# 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; +; + +# C2N232i (jumper configuration "auto") +# reset=dtr sck=!rts mosi=!txd miso=!cts + +programmer + id = "c2n232i"; + desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; + type = serbb; + 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"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATMEGA103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATMEGA64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN64 +#------------------------------------------------------------ + +part + id = "c64"; + desc = "AT90CAN64"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x96 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN32 +#------------------------------------------------------------ + +part + id = "c32"; + desc = "AT90CAN32"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x95 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 256; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATMEGA16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + 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, use 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, use 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, use 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, use 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"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega1284P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m1284p"; + desc = "ATMEGA1284P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x05; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 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, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATMEGA162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATMEGA163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 20; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o x x o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x 1 o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x 0 x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATMEGA169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part + id = "m329p"; + desc = "ATMEGA329P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0b; + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part + id = "m3290p"; + desc = "ATMEGA3290P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0c; + 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; + page_size = 4; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + 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"; + ; +; + +#------------------------------------------------------------ +# ATtiny88 +#------------------------------------------------------------ + +part + id = "t88"; + desc = "attiny88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x11; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 64; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 64; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x 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 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega328P +#------------------------------------------------------------ + +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"; + ; + ; + +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM + +part + id = "m128rfa1"; + desc = "ATMEGA128RFA1"; + signature = 0x1e 0xa7 0x01; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xE2; + 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 = 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"; + ; + ; + +#------------------------------------------------------------ +# 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega32u4 +#------------------------------------------------------------ + +part + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + 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 = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + 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 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; + signature = 0x1e 0x96 0x82; + 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; + 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"; + ; + ; + + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + +part + id = "usb162"; + desc = "AT90USB162"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB82 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 8192; +# num_pages = 64; + +part + id = "usb82"; + desc = "AT90USB82"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 128; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega325 +#------------------------------------------------------------ + +part + id = "m325"; + desc = "ATMEGA325"; + signature = 0x1e 0x95 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATXMEGA64A1 +#------------------------------------------------------------ + +part + id = "x64a1"; + desc = "ATXMEGA64A1"; + signature = 0x1e 0x96 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1 +#------------------------------------------------------------ + +part + id = "x128a1"; + desc = "ATXMEGA128A1"; + signature = 0x1e 0x97 0x4c; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1REVD +#------------------------------------------------------------ + +part + id = "x128a1d"; + desc = "ATXMEGA128A1REVD"; + signature = 0x1e 0x97 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A1 +#------------------------------------------------------------ + +part + id = "x192a1"; + desc = "ATXMEGA192A1"; + signature = 0x1e 0x97 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A1 +#------------------------------------------------------------ + +part + id = "x256a1"; + desc = "ATXMEGA256A1"; + signature = 0x1e 0x98 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A3 +#------------------------------------------------------------ + +part + id = "x64a3"; + desc = "ATXMEGA64A3"; + signature = 0x1e 0x96 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A3 +#------------------------------------------------------------ + +part + id = "x128a3"; + desc = "ATXMEGA128A3"; + signature = 0x1e 0x97 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A3 +#------------------------------------------------------------ + +part + id = "x192a3"; + desc = "ATXMEGA192A3"; + signature = 0x1e 0x97 0x44; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3 +#------------------------------------------------------------ + +part + id = "x256a3"; + desc = "ATXMEGA256A3"; + signature = 0x1e 0x98 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3B +#------------------------------------------------------------ + +part + id = "x256a3b"; + desc = "ATXMEGA256A3B"; + signature = 0x1e 0x98 0x43; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA16A4 +#------------------------------------------------------------ + +part + id = "x16a4"; + desc = "ATXMEGA16A4"; + signature = 0x1e 0x94 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00004000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00803000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00804000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00005000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA32A4 +#------------------------------------------------------------ + +part + id = "x32a4"; + desc = "ATXMEGA32A4"; + signature = 0x1e 0x95 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00008000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00807000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00808000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00009000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A4 +#------------------------------------------------------------ + +part + id = "x64a4"; + desc = "ATXMEGA64A4"; + signature = 0x1e 0x96 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A4 +#------------------------------------------------------------ + +part + id = "x128a4"; + desc = "ATXMEGA128A4"; + signature = 0x1e 0x97 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + + +#------------------------------------------------------------ +# AVR32UC3A0512 +#------------------------------------------------------------ + +part + id = "ucr2"; + desc = "32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + memory "flash" + paged = yes; + page_size = 512; # bytes + readsize = 512; # bytes + num_pages = 1024; # could be set dynamicly + size = 0x00080000; # could be set dynamicly + offset = 0x80000000; + ; +; + +#------------------------------------------------------------ +# ATtiny4 +#------------------------------------------------------------ + +part + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ + +part + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny9 +#------------------------------------------------------------ + +part + id = "t8"; + desc = "ATtiny9"; + signature = 0x1e 0x90 0x08; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ + +part + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + diff --git a/buildroot/share/atom/avrdude_macOS.conf b/buildroot/share/atom/avrdude_macOS.conf new file mode 100644 index 0000000000..d933567452 --- /dev/null +++ b/buildroot/share/atom/avrdude_macOS.conf @@ -0,0 +1,15272 @@ +# $Id: avrdude.conf.in 916 2010-01-15 16:36:13Z joerg_wunsch $ +# +# 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 | +# stk600 | stk600pp | stk600hvsp | +# avr910 | butterfly | usbasp | +# jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw | +# jtagmkII_avr32 | jtagmkii_pdi | +# dragon_dw | dragon_jtag | dragon_isp | dragon_pp | +# dragon_hvsp | dragon_pdi | arduino; # 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 +# has_pdi = ; # part has PDI i/f +# has_tpi = ; # part has TPI 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) +# is_avr32 = ; # AVR32 part +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# 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 /* the _old_ one that never existed! */ +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 +#define AT90CAN64 0xB3 +#define AT90CAN32 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults +# +default_parallel = "unknown"; +default_serial = "unknown"; + + +# +# PROGRAMMER DEFINITIONS +# + +programmer + id = "arduino"; + desc = "Arduino"; + type = arduino; +; + +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; +; + +programmer + id = "buspirate"; + desc = "The Bus Pirate"; + type = buspirate; +; + +# 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 = "mib510"; + desc = "Crossbow MIB510 programming board"; + 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 = "stk600"; + desc = "Atmel STK600"; + type = stk600; +; + +programmer + id = "stk600pp"; + desc = "Atmel STK600 in parallel programming mode"; + type = stk600pp; +; + +programmer + id = "stk600hvsp"; + desc = "Atmel STK600 in high-voltage serial programming mode"; + type = stk600hvsp; +; + +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, http://www.ladyada.net/make/usbtinyisp/"; + 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; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtagmkII_avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtag2avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in PDI mode +programmer + id = "jtag2pdi"; + desc = "Atmel JTAG ICE mkII PDI mode"; + baudrate = 115200; + type = jtagmkii_pdi; +; + +# 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; +; + +# AVR Dragon in PDI mode +programmer + id = "dragon_pdi"; + desc = "Atmel AVR Dragon in PDI mode"; + baudrate = 115200; + type = dragon_pdi; +; + +programmer + id = "pavr"; + desc = "Jason Kyle's pAVR Serial Programmer"; + type = avr910; +; + + +# +# 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; +; + +# C2N232i (jumper configuration "auto") +# reset=dtr sck=!rts mosi=!txd miso=!cts + +programmer + id = "c2n232i"; + desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; + type = serbb; + 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"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATMEGA103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATMEGA64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + 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"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN64 +#------------------------------------------------------------ + +part + id = "c64"; + desc = "AT90CAN64"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x96 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN32 +#------------------------------------------------------------ + +part + id = "c32"; + desc = "AT90CAN32"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x95 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 256; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATMEGA16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + 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, use 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, use 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, use 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, use 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"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega1284P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m1284p"; + desc = "ATMEGA1284P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x05; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 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, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATMEGA162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATMEGA163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 20; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o x x o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x 1 o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x 0 x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATMEGA169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part + id = "m329p"; + desc = "ATMEGA329P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0b; + 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part + id = "m3290p"; + desc = "ATMEGA3290P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0c; + 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; + page_size = 4; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + 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"; + ; +; + +#------------------------------------------------------------ +# ATtiny88 +#------------------------------------------------------------ + +part + id = "t88"; + desc = "attiny88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x11; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 64; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 64; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x 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 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega328P +#------------------------------------------------------------ + +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"; + ; + ; + +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM + +part + id = "m128rfa1"; + desc = "ATMEGA128RFA1"; + signature = 0x1e 0xa7 0x01; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xE2; + 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 = 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"; + ; + ; + +#------------------------------------------------------------ +# 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega32u4 +#------------------------------------------------------------ + +part + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + 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 = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + 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 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; + signature = 0x1e 0x96 0x82; + 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; + 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"; + ; + ; + + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + +part + id = "usb162"; + desc = "AT90USB162"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB82 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 8192; +# num_pages = 64; + +part + id = "usb82"; + desc = "AT90USB82"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 128; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega325 +#------------------------------------------------------------ + +part + id = "m325"; + desc = "ATMEGA325"; + signature = 0x1e 0x95 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + 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"; + ; + ; + +#------------------------------------------------------------ +# ATXMEGA64A1 +#------------------------------------------------------------ + +part + id = "x64a1"; + desc = "ATXMEGA64A1"; + signature = 0x1e 0x96 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1 +#------------------------------------------------------------ + +part + id = "x128a1"; + desc = "ATXMEGA128A1"; + signature = 0x1e 0x97 0x4c; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1REVD +#------------------------------------------------------------ + +part + id = "x128a1d"; + desc = "ATXMEGA128A1REVD"; + signature = 0x1e 0x97 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A1 +#------------------------------------------------------------ + +part + id = "x192a1"; + desc = "ATXMEGA192A1"; + signature = 0x1e 0x97 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A1 +#------------------------------------------------------------ + +part + id = "x256a1"; + desc = "ATXMEGA256A1"; + signature = 0x1e 0x98 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A3 +#------------------------------------------------------------ + +part + id = "x64a3"; + desc = "ATXMEGA64A3"; + signature = 0x1e 0x96 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A3 +#------------------------------------------------------------ + +part + id = "x128a3"; + desc = "ATXMEGA128A3"; + signature = 0x1e 0x97 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A3 +#------------------------------------------------------------ + +part + id = "x192a3"; + desc = "ATXMEGA192A3"; + signature = 0x1e 0x97 0x44; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3 +#------------------------------------------------------------ + +part + id = "x256a3"; + desc = "ATXMEGA256A3"; + signature = 0x1e 0x98 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3B +#------------------------------------------------------------ + +part + id = "x256a3b"; + desc = "ATXMEGA256A3B"; + signature = 0x1e 0x98 0x43; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA16A4 +#------------------------------------------------------------ + +part + id = "x16a4"; + desc = "ATXMEGA16A4"; + signature = 0x1e 0x94 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00004000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00803000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00804000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00005000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA32A4 +#------------------------------------------------------------ + +part + id = "x32a4"; + desc = "ATXMEGA32A4"; + signature = 0x1e 0x95 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00008000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00807000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00808000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00009000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A4 +#------------------------------------------------------------ + +part + id = "x64a4"; + desc = "ATXMEGA64A4"; + signature = 0x1e 0x96 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A4 +#------------------------------------------------------------ + +part + id = "x128a4"; + desc = "ATXMEGA128A4"; + signature = 0x1e 0x97 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + + +#------------------------------------------------------------ +# AVR32UC3A0512 +#------------------------------------------------------------ + +part + id = "ucr2"; + desc = "32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + memory "flash" + paged = yes; + page_size = 512; # bytes + readsize = 512; # bytes + num_pages = 1024; # could be set dynamicly + size = 0x00080000; # could be set dynamicly + offset = 0x80000000; + ; +; + +#------------------------------------------------------------ +# ATtiny4 +#------------------------------------------------------------ + +part + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ + +part + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny9 +#------------------------------------------------------------ + +part + id = "t8"; + desc = "ATtiny9"; + signature = 0x1e 0x90 0x08; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ + +part + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + diff --git a/buildroot/share/atom/create_custom_upload_command_CDC.py b/buildroot/share/atom/create_custom_upload_command_CDC.py index 7c32b24b48..2fea2d5b53 100644 --- a/buildroot/share/atom/create_custom_upload_command_CDC.py +++ b/buildroot/share/atom/create_custom_upload_command_CDC.py @@ -9,107 +9,133 @@ # Will continue on if a COM port isn't found so that the compilation can be done. # -import sys - import subprocess - - +import os +import sys +from SCons.Script import DefaultEnvironment import platform current_OS = platform.system() -from SCons.Script import DefaultEnvironment - env = DefaultEnvironment() -com_first = '' -com_last = '' -com_CDC = '' -description_first = '' -description_last = '' -description_CDC = '' - -# -# grab the first com port that pops up unless we find one we know for sure -# is a CDC device -# -def get_com_port(com_search_text, descr_search_text, start): - - global com_first - global com_last - global com_CDC - global description_first - global description_last - global description_CDC +build_type = os.environ.get("BUILD_TYPE", 'Not Set') - print '\nLooking for Serial Port\n' +if not(build_type == 'upload' or build_type == 'traceback' or build_type == 'Not Set') : + env.Replace(UPLOAD_PROTOCOL = 'teensy-gui') # run normal Teensy2 scripts +else: + com_first = '' + com_last = '' + com_CDC = '' + description_first = '' + description_last = '' + description_CDC = '' - # stream output from subprocess and split it into lines - pio_subprocess = subprocess.Popen(['platformio', 'device', 'list'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + # + # grab the first com port that pops up unless we find one we know for sure + # is a CDC device + # + def get_com_port(com_search_text, descr_search_text, start): - looking_for_description = False - for line in iter(pio_subprocess.stdout.readline, ''): - if 0 <= line.find(com_search_text): - looking_for_description = True - com_last = line.replace('\n', '') - if com_first == '': - com_first = com_last - if 0 <= line.find(descr_search_text) and looking_for_description: - looking_for_description = False - description_last = line[ start : ] - if description_first == '': - description_first = description_last - if 0 <= description_last.find('CDC'): - com_CDC = com_last - description_CDC = description_last - - if com_CDC == '' and not(com_first == ''): - com_CDC = com_first - description_CDC = description_first - elif com_CDC == '': - com_CDC = 'COM_PORT_NOT_FOUND' - - if com_CDC == 'COM_PORT_NOT_FOUND': - print com_CDC, '\n' - else: - print 'FOUND: ' ,com_CDC - print 'DESCRIPTION: ', description_CDC , '\n' - -if current_OS == 'Windows': - - get_com_port('COM', 'Hardware ID:', 13) - - avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf' - - source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex' - - upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i' + global com_first + global com_last + global com_CDC + global description_first + global description_last + global description_CDC -if current_OS == 'Darwin': # MAC + print '\nLooking for Serial Port\n' - get_com_port('usbmodem', 'Description:', 13) + # stream output from subprocess and split it into lines + pio_subprocess = subprocess.Popen(['platformio', 'device', 'list'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf' + looking_for_description = False + for line in iter(pio_subprocess.stdout.readline, ''): + if 0 <= line.find(com_search_text): + looking_for_description = True + com_last = line.replace('\n', '') + if com_first == '': + com_first = com_last + if 0 <= line.find(descr_search_text) and looking_for_description: + looking_for_description = False + description_last = line[ start : ] + if description_first == '': + description_first = description_last + if 0 <= description_last.find('CDC'): + com_CDC = com_last + description_CDC = description_last - source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex' + if com_CDC == '' and not(com_first == ''): + com_CDC = com_first + description_CDC = description_first + elif com_CDC == '': + com_CDC = 'COM_PORT_NOT_FOUND' - upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i' + while 0 <= com_CDC.find('\n'): + com_CDC = com_CDC.replace('\n', '') + while 0 <= com_CDC.find('\r'): + com_CDC = com_CDC.replace('\r', '') + + if com_CDC == 'COM_PORT_NOT_FOUND': + print com_CDC, '\n' + else: + print 'FOUND: ' ,com_CDC + print 'DESCRIPTION: ', description_CDC , '\n' + + if current_OS == 'Windows': + + get_com_port('COM', 'Hardware ID:', 13) + + # avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf' + avrdude_conf_path = 'buildroot\\share\\atom\\avrdude.conf' + + avrdude_exe_path = 'buildroot\\share\\atom\\avrdude_5.10.exe' + + # source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex' + source_path = '.pioenvs\\' + env.get("PIOENV") + '\\firmware.hex' + + upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i' -if current_OS == 'Linux': + if current_OS == 'Darwin': # MAC - get_com_port('/dev/tty', 'Description:', 13) + get_com_port('usbmodem', 'Description:', 13) - avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf' - - source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex' - - upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i' +# avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf' + avrdude_conf_path = 'buildroot/share/atom/avrdude_macOS.conf' -env.Replace( - UPLOADCMD = upload_string, - MAXIMUM_RAM_SIZE = 8192, - MAXIMUM_SIZE = 130048 -) + avrdude_exe_path = 'buildroot/share/atom/avrdude_5.10_macOS' + +# source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex' + source_path = '.pioenvs/' + env.get("PIOENV") + '/firmware.hex' + + +# upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i' + upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i' + print 'upload_string: ', upload_string + + + + if current_OS == 'Linux': + + get_com_port('/dev/tty', 'Description:', 13) + +# avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf' + avrdude_conf_path = 'buildroot/share/atom/avrdude_linux.conf' + + + avrdude_exe_path = 'buildroot/share/atom/avrdude_5.10_linux' +# source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex' + source_path = '.pioenvs/' + env.get("PIOENV") + '/firmware.hex' + +# upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i' + upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i' + + + env.Replace( + UPLOADCMD = upload_string, + MAXIMUM_RAM_SIZE = 8192, + MAXIMUM_SIZE = 130048 + ) diff --git a/buildroot/share/atom/create_custom_upload_command_DFU.py b/buildroot/share/atom/create_custom_upload_command_DFU.py index 208ab2c4cc..9082699bf4 100644 --- a/buildroot/share/atom/create_custom_upload_command_DFU.py +++ b/buildroot/share/atom/create_custom_upload_command_DFU.py @@ -9,29 +9,34 @@ # Will continue on if a COM port isn't found so that the compilation can be done. # +import os import sys from SCons.Script import DefaultEnvironment - import platform current_OS = platform.system() env = DefaultEnvironment() -if current_OS == 'Windows': - avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf' - - source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex' - - upload_string = 'avrdude -p usb1286 -c flip1 -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i' - +build_type = os.environ.get("BUILD_TYPE", 'Not Set') +if not(build_type == 'upload' or build_type == 'traceback' or build_type == 'Not Set') : + env.Replace(UPLOAD_PROTOCOL = 'teensy-gui') # run normal Teensy2 scripts else: - source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex' - upload_string = 'avrdude -p usb1286 -c flip1 -U flash:w:' + source_path + ':i' + if current_OS == 'Windows': + avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf' + + source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex' + + upload_string = 'avrdude -p usb1286 -c flip1 -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i' + + else: + source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex' + + upload_string = 'avrdude -p usb1286 -c flip1 -U flash:w:' + source_path + ':i' -env.Replace( - UPLOADCMD = upload_string, - MAXIMUM_RAM_SIZE = 8192, - MAXIMUM_SIZE = 130048 -) + env.Replace( + UPLOADCMD = upload_string, + MAXIMUM_RAM_SIZE = 8192, + MAXIMUM_SIZE = 130048 + )

kZ7`KA-dV&kNZJ^Z-;7jqqD}oqY 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%0AeM13otN%u!J;IQUK`I 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%0AcaTE@{>b3?R(O&g={-20&Os)de&S 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