From a07a7e7b05471927bf3046ee265792231711f8a4 Mon Sep 17 00:00:00 2001 From: Tobias Date: Thu, 23 Feb 2017 09:15:27 +0100 Subject: [PATCH] add SHT3X support / new smaller SHT2X (V2) --- DS18B20_VOC_DS2438_SHT/DS18B20_DS2438.c | 33 +- .../DS18B20_VOC_DS2438_SHT.cproj | 74 +- DS18B20_VOC_DS2438_SHT/Makefile | 2 +- DS2438_SHT2X/DS2438_SHT2X.c | 44 +- DS2438_SHT2X/DS2438_SHT2X.cproj | 8 +- DS2438_SHT2X/Makefile | 2 +- DS2438_SHT3X/DS2438_SHT3X.atsln | 20 + DS2438_SHT3X/DS2438_SHT3X.c | 200 + DS2438_SHT3X/DS2438_SHT3X.cproj | 149 + DS2438_SHT3X/Makefile | 202 + common/I2C/CDM7160.c | 2 +- common/I2C/SHT2xV2.c | 105 + common/I2C/SHT2xV2.h | 39 + common/I2C/SHT3x.c | 71 + common/I2C/SHT3x.h | 39 + programmer/flash/avrdude.conf | 12649 +++++++--------- programmer/flash/avrdude.exe | Bin 380816 -> 465422 bytes 17 files changed, 6235 insertions(+), 7404 deletions(-) create mode 100644 DS2438_SHT3X/DS2438_SHT3X.atsln create mode 100644 DS2438_SHT3X/DS2438_SHT3X.c create mode 100644 DS2438_SHT3X/DS2438_SHT3X.cproj create mode 100644 DS2438_SHT3X/Makefile create mode 100644 common/I2C/SHT2xV2.c create mode 100644 common/I2C/SHT2xV2.h create mode 100644 common/I2C/SHT3x.c create mode 100644 common/I2C/SHT3x.h diff --git a/DS18B20_VOC_DS2438_SHT/DS18B20_DS2438.c b/DS18B20_VOC_DS2438_SHT/DS18B20_DS2438.c index f097198..a85c988 100644 --- a/DS18B20_VOC_DS2438_SHT/DS18B20_DS2438.c +++ b/DS18B20_VOC_DS2438_SHT/DS18B20_DS2438.c @@ -41,7 +41,7 @@ #include #include "../common/I2C/USI_TWI_Master.h" #include "../common/I2C/MAX1164x.h" -#include "../common/I2C/SHT2x.h" +#include "../common/I2C/SHT2xV2.h" #include "../common/calibr.h" extern void OWINIT(void); @@ -51,7 +51,7 @@ extern void EXTERN_SLEEP(void); volatile uint8_t owid1[8]={0x28, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x18};/**/ volatile uint8_t owid2[8]={0x26, 0xA3, 0xD9, 0x84, 0x00, 0x16, 0x05, 0x67};/**/ -volatile uint8_t config_info1[26]={0x08,0x01, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,17,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +volatile uint8_t config_info1[26]={0x08,18, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x02,17,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; volatile uint8_t config_info2[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 11,0x08, 0x02,0x07,0x00,0x07,17,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; #if (owid>128) @@ -276,9 +276,8 @@ int main(void){ USI_TWI_Master_Initialise(); - SHT2x_SoftReset(); - SHT2x_ReadUserRegister(userRegister); - SHT2x_WriteUserRegister(userRegister); //write changed user reg + initSHT2x(); + _delay_ms(100); MAX1164x_config(MAX1164x_S_SEL2|MAX1164x_S_SEL0,CH0_M);//#define MAX1164x_C_CS0 _delay_ms(30); //Internal Referenz start //2970 -> 1,5V @@ -334,29 +333,24 @@ int main(void){ pack2.r_day_max=0; } if (startup!=0) startup--; - SHT2x_MeasurePoll(HUMIDITY, &sRH); - // --- measure temperature with "Polling Mode" (no hold master) --- - SHT2x_MeasurePoll(TEMP, &sT); - //-- calculate humidity and temperature -- - temperatureC = SHT2x_CalcTemperatureC(sT); - humidityRH = SHT2x_CalcRH(sRH); + getSHT2xHumTemp(&temperatureC,&humidityRH); ip=interp(temperatureC,humidityRH); pack2.ip=ip*1000; - humidityRH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0; + double RH=calibr_hum(temperatureC,-0.2,humidityRH)*10.0; //humidityRH=humidityRH*10.0; - temperatureC =temperatureC *10.0-2; + double TC =temperatureC *10.0-2; if (testSW()) { - am2302_hum= humidityRH*10.0; - am2302_temp=temperatureC*25.6; + am2302_hum=RH*10.0; + am2302_temp=TC*25.6; //am2302_temp=am2302_temp-45; config_info2[5]=8; }else{ - hhum=(1.0546-0.000216*temperatureC)*(humidityRH); + hhum=(1.0546-0.000216*TC)*(RH); //am2302_hum=0.318*hhum +76.0; am2302_hum=0.31*hhum +80; - am2302_temp=temperatureC*25.6; + am2302_temp=TC*25.6; config_info2[5]=7; } //PORTB&=~(1<1 - - - - - - - - - + + + + + + + + + com.atmel.avrdbg.tool.atmelice @@ -69,30 +69,30 @@ - -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a" - True - True - True - True - False - True - True - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include - - - Optimize (-O1) - True - True - True - - - libm - - - Default (-Wa,-g) - + -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a" + True + True + True + True + False + True + True + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include + + + Optimize (-O1) + True + True + True + + + libm + + + Default (-Wa,-g) + @@ -135,14 +135,14 @@ compile calibr.c - - compile - SHT2x.c - compile MAX1164x.c + + compile + SHT2xV2.c + compile USI_TWI_Master.c diff --git a/DS18B20_VOC_DS2438_SHT/Makefile b/DS18B20_VOC_DS2438_SHT/Makefile index a74fade..18ffb2e 100644 --- a/DS18B20_VOC_DS2438_SHT/Makefile +++ b/DS18B20_VOC_DS2438_SHT/Makefile @@ -8,7 +8,7 @@ MCU = attiny84 FORMAT = ihex TARGET =DS18B20_VOC_DS2438_SHT -SRC = ../common/calibr.c ../common/I2C/SHT2x.c ../common/I2C/MAX1164x.c ../common/I2C/USI_TWI_Master.c DS18B20_DS2438.c +SRC = ../common/calibr.c ../common/I2C/MAX1164x.c ../common/I2C/SHT2xV2.c ../common/I2C/USI_TWI_Master.c DS18B20_DS2438.c ASRC = ../common/OWDS18B20_DS2438.S # Name of this Makefile (used for "make depend"). diff --git a/DS2438_SHT2X/DS2438_SHT2X.c b/DS2438_SHT2X/DS2438_SHT2X.c index eb182ef..632a112 100644 --- a/DS2438_SHT2X/DS2438_SHT2X.c +++ b/DS2438_SHT2X/DS2438_SHT2X.c @@ -39,8 +39,7 @@ #include #include #include "../common/I2C/USI_TWI_Master.h" -#include "../common/I2C/MAX44009.h" -#include "../common/I2C/SHT2x.h" +#include "../common/I2C/SHT2xV2.h" #include "../common/calibr.h" extern void OWINIT(); @@ -86,8 +85,7 @@ volatile int16_t am2302_temp; volatile uint16_t am2302_hum; uint8_t userRegister[1]; -int16_t sRH,sT; -volatile double temperatureC,humidityRH; +double temperatureC,humidityRH; volatile double l; #if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__) @@ -150,47 +148,31 @@ int main(void){ for(i=0;i<64;i++) pack.bytes[i]=0; MCUSR=0; USI_TWI_Master_Initialise(); - SHT2x_SoftReset(); - SHT2x_ReadUserRegister(userRegister); - //(userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT; - SHT2x_WriteUserRegister(userRegister); //write changed user reg - // --- measure humidity with "Hold Master Mode (HM)" --- - SHT2x_MeasurePoll(HUMIDITY, &sRH); - // --- measure temperature with "Polling Mode" (no hold master) --- - SHT2x_MeasurePoll(TEMP, &sT); - //-- calculate humidity and temperature -- - temperatureC = SHT2x_CalcTemperatureC(sT); - humidityRH = SHT2x_CalcRH(sRH); - + initSHT2x(); + _delay_ms(100); sei(); - while(1) { + while(1) { if (gcontrol) { wdcounter=3; gcontrol=0; } if (wdcounter>2) { - //PORTB|=(1<2 1 - + - + @@ -129,9 +129,9 @@ compile calibr.c - + compile - SHT2x.c + SHT2xV2.c compile diff --git a/DS2438_SHT2X/Makefile b/DS2438_SHT2X/Makefile index 89a88a8..f7edcf0 100644 --- a/DS2438_SHT2X/Makefile +++ b/DS2438_SHT2X/Makefile @@ -8,7 +8,7 @@ MCU = attiny84 FORMAT = ihex TARGET =DS2438_SHT2X -SRC = ../common/calibr.c ../common/I2C/SHT2x.c ../common/I2C/USI_TWI_Master.c DS2438_SHT2X.c +SRC = ../common/calibr.c ../common/I2C/SHT2xV2.c ../common/I2C/USI_TWI_Master.c DS2438_SHT2X.c ASRC = ../common/OWDS2438.S # Name of this Makefile (used for "make depend"). diff --git a/DS2438_SHT3X/DS2438_SHT3X.atsln b/DS2438_SHT3X/DS2438_SHT3X.atsln new file mode 100644 index 0000000..d6bf1ee --- /dev/null +++ b/DS2438_SHT3X/DS2438_SHT3X.atsln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Atmel Studio Solution File, Format Version 11.00 +Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "DS2438_SHT3X", "DS2438_SHT3X.cproj", "{91468D4F-8AE2-4C59-8A35-549C49E00934}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|AVR = Debug|AVR + Release|AVR = Release|AVR + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.ActiveCfg = Debug|AVR + {91468D4F-8AE2-4C59-8A35-549C49E00934}.Debug|AVR.Build.0 = Debug|AVR + {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.ActiveCfg = Release|AVR + {91468D4F-8AE2-4C59-8A35-549C49E00934}.Release|AVR.Build.0 = Release|AVR + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/DS2438_SHT3X/DS2438_SHT3X.c b/DS2438_SHT3X/DS2438_SHT3X.c new file mode 100644 index 0000000..d283508 --- /dev/null +++ b/DS2438_SHT3X/DS2438_SHT3X.c @@ -0,0 +1,200 @@ +// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. +// * All advertising materials mentioning features or use of this +// software must display the following acknowledgement: This product +// includes software developed by tm3d.de and its contributors. +// * Neither the name of tm3d.de nor the names of its contributors may +// be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#define F_CPU 8000000UL +#include +#include +#include +#include +#include +#include +#include "../common/I2C/USI_TWI_Master.h" +#include "../common/I2C/SHT3x.h" +#include "../common/calibr.h" + +extern void OWINIT(); +extern void EXTERN_SLEEP(); + +uint8_t owid[8]={0x26, 0xA2, 0xD9, 0x84, 0x00, 0x00, 0x05, 0x16};/**/ +uint8_t config_info[26]={0x01,0x06, 0x05,0x08, 0x04,0x07, 0x00,0x00, 0x02,21,0x00,21,0x00,0x00,0x00,0x00, 0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + + +extern uint8_t mode; +extern uint8_t gcontrol; +extern uint8_t reset_indicator; +extern uint8_t alarmflag; + +volatile uint8_t wdcounter=5; + + +typedef union { + + volatile uint8_t bytes[64]; + struct { + uint8_t status; //1 + int16_t temp; //2 + uint16_t voltage; //4 + uint16_t current; //6 + uint8_t threshold; //8 + + uint8_t page1[8]; //9 + uint8_t page2[8]; //17 + uint8_t page3[8]; //25 + uint8_t page4[8]; //33 + uint8_t page5[8]; //41 + uint8_t page6[8]; //49 + uint8_t page7[8]; //57 + //uint8_t crc; //65 + }; +} pack_t; +volatile pack_t pack; + + + +volatile int16_t am2302_temp; +volatile uint16_t am2302_hum; + +uint8_t userRegister[1]; +int16_t sRH,sT; + double temperatureC,humidityRH; +volatile double l; + +#if defined(__AVR_ATtiny24__)||defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny24A__)||defined(__AVR_ATtiny44A__) || defined(__AVR_ATtiny84A__) +ISR(WATCHDOG_vect) { +#else +ISR(WDT_vect) { +#endif + wdcounter++; + if (reset_indicator==1) reset_indicator++; + else if (reset_indicator==2) mode=0; + + +} + +int testSW(void) { + uint8_t r; + DDRB&=~(1<2) { + getSHT3xHumTemp(0,&temperatureC,&humidityRH); + double T=temperatureC*10.0; + double RH=humidityRH*10.0; + if (testSW()) { + am2302_hum= RH; + am2302_temp=T*25.6; + //am2302_temp=am2302_temp-45; + config_info[5]=12; + + }else{ + + double hhum=(1.0546-0.000216*T)*(RH); + //am2302_hum=0.318*hhum +76.0; + am2302_hum=0.31*hhum +80; + am2302_temp=T*25.6; + //am2302_temp=am2302_temp-45; + config_info[5]=7; + } + //PORTB&=~(1< + + + 2.0 + 7.0 + com.Atmel.AVRGCC8.C + {91468d4f-8ae2-4c59-8a35-549c49e00934} + ATtiny84A + none + Executable + C + $(MSBuildProjectName) + .elf + $(MSBuildProjectDirectory)\$(Configuration) + DS2438_SHT3X + DS2438_SHT3X + DS2438_SHT3X + Native + true + false + true + true + 0x20000000 + + true + exception_table + 2 + 1 + + + + + + + + + + + + + com.atmel.avrdbg.tool.atmelice + + + + + debugWIRE + + com.atmel.avrdbg.tool.atmelice + J41800000789 + Atmel-ICE + + debugWIRE + + J41800000789 + 0x1E930C + + + + + -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a" + True + True + True + True + False + True + True + + + DEBUG + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + Default (-Wa,-g) + + + + + + + -mmcu=attiny84a -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\gcc\dev\attiny84a" + True + True + True + True + False + True + True + + + DEBUG + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.0.68\include + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + Default (-Wa,-g) + + + + + + compile + calibr.c + + + compile + SHT3X.c + + + compile + USI_TWI_Master.c + + + compile + OWDS2438.S + + + compile + + + + \ No newline at end of file diff --git a/DS2438_SHT3X/Makefile b/DS2438_SHT3X/Makefile new file mode 100644 index 0000000..1a7fb7a --- /dev/null +++ b/DS2438_SHT3X/Makefile @@ -0,0 +1,202 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny84 +FORMAT = ihex +TARGET =DS2438_SHT3X +SRC = ../common/calibr.c ../common/I2C/SHT3X.c ../common/I2C/USI_TWI_Master.c DS2438_SHT3X.c +ASRC = ../common/OWDS2438.S + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + + +CFLAGS = -x c -funsigned-char -funsigned-bitfields -I. -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -std=gnu99 -MD -MP + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +#LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +LDFLAGS = -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--gc-sections -mmcu=$(MCU) + +# Programming support using avrdude. Settings and variables. + +#AVRDUDE_PROGRAMMER = stk500 +#AVRDUDE_PORT = /dev/term/a + +#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +#AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +#AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +#AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +#eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) $< $@ +# $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend + + diff --git a/common/I2C/CDM7160.c b/common/I2C/CDM7160.c index 65fc393..e82a138 100644 --- a/common/I2C/CDM7160.c +++ b/common/I2C/CDM7160.c @@ -1,4 +1,4 @@ -// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de +// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de // All rights reserved. // // Redistribution and use in source and binary forms, with or without diff --git a/common/I2C/SHT2xV2.c b/common/I2C/SHT2xV2.c new file mode 100644 index 0000000..130e85b --- /dev/null +++ b/common/I2C/SHT2xV2.c @@ -0,0 +1,105 @@ +// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. +// * All advertising materials mentioning features or use of this +// software must display the following acknowledgement: This product +// includes software developed by tm3d.de and its contributors. +// * Neither the name of tm3d.de nor the names of its contributors may +// be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#define F_CPU 8000000UL +#include +#include +#include "USI_TWI_Master.h" +#include "SHT2xV2.h" + +uint8_t initSHT2x(){ + + I2c_StartCondition(); + I2c_WriteByte(0b10000000); + I2c_WriteByte(0xFE);//Softreset + I2c_StopCondition(); + //Default 12 Bit RH 14 Bit T + return 1; +} + +uint8_t crcmove(uint8_t crc) { + uint8_t bit; + for(bit=8;bit>0;--bit) { + if (crc&0x80) crc=(crc<<1)^ 0x131; + else crc=(crc<<1); + } + return crc; +} + +uint8_t calcCRCSHT2x(uint8_t b1, uint8_t b2) { + uint8_t crc=0; + crc^=b1; + crc=crcmove(crc); + crc^=b2; + return crcmove(crc); + +} + + + +uint8_t getSHT2xHumTemp(double *temp,double *hum) { + uint8_t ret=1; + I2c_StartCondition(); + I2c_WriteByte(0b10000000); + I2c_WriteByte(0xF3); //No Hold Temp + _delay_us(20); + I2c_StopCondition(); + _delay_ms(85); + I2c_StartCondition(); + I2c_WriteByte (0b10000001); + uint8_t t1 =I2c_ReadByte(ACK); + uint8_t t2 =I2c_ReadByte(ACK); + uint8_t tc =I2c_ReadByte(NO_ACK); + I2c_StopCondition(); + + I2c_StartCondition(); + I2c_WriteByte(0b10000000); + I2c_WriteByte(0xF5); //No Hold Hum + _delay_us(20); + I2c_StopCondition(); + _delay_ms(29); + I2c_StartCondition(); + I2c_WriteByte (0b10000001); + uint8_t f1 =I2c_ReadByte(ACK); + uint8_t f2 =I2c_ReadByte(ACK); + uint8_t fc =I2c_ReadByte(NO_ACK); + I2c_StopCondition(); + if (calcCRCSHT2x(t1,t2)==tc) + *temp=-46.85 + 175.72/65536 *(double)(((uint16_t)t1<<8)|(t2&0xF8)); + else ret=0; + if (calcCRCSHT2x(f1,f2)==fc) + *hum=-6.0+125.0/65536*(double)(((uint16_t)f1<<8)|(f2&0xF8)); + else ret=0; + return ret; +} + diff --git a/common/I2C/SHT2xV2.h b/common/I2C/SHT2xV2.h new file mode 100644 index 0000000..4287934 --- /dev/null +++ b/common/I2C/SHT2xV2.h @@ -0,0 +1,39 @@ +// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. +// * All advertising materials mentioning features or use of this +// software must display the following acknowledgement: This product +// includes software developed by tm3d.de and its contributors. +// * Neither the name of tm3d.de nor the names of its contributors may +// be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#ifndef SHT2xV2_H +#define SHT2xV2_H +uint8_t initSHT2x(); +uint8_t getSHT2xHumTemp(double *temp,double *hum); + +#endif diff --git a/common/I2C/SHT3x.c b/common/I2C/SHT3x.c new file mode 100644 index 0000000..b20de79 --- /dev/null +++ b/common/I2C/SHT3x.c @@ -0,0 +1,71 @@ +//============================================================================== +// S E N S I R I O N AG, Laubisruetistr. 50, CH-8712 Staefa, Switzerland +//============================================================================== +// Project : SHT2x Sample Code (V1.2) +// File : SHT2x.c +// Author : MST +// Controller: NEC V850/SG3 (uPD70F3740) +// Compiler : IAR compiler for V850 (3.50A) +// Brief : Sensor layer. Functions for sensor access +//============================================================================== +//---------- Includes ---------------------------------------------------------- +#define F_CPU 8000000UL +#include +#include +#include "USI_TWI_Master.h" +#include "SHT3x.h" + +uint8_t initSHT3x(uint8_t adrline){ + /*I2c_StartCondition(); + I2c_WriteByte(0b10001000|(adrline<<1)); + I2c_WriteByte(0x27); + I2c_WriteByte(0x37); + I2c_StopCondition();*/ + return 1; +} + +uint8_t calcCRCSHT3x(uint8_t b1, uint8_t b2) { + uint8_t bit; + uint8_t crc=0xFF; + crc^=b1; + for(bit=8;bit>0;--bit) { + if (crc&0x80) crc=(crc<<1)^ 0x131; + else crc=(crc<<1); + } + crc^=b2; + for(bit=8;bit>0;--bit) { + if (crc&0x80) crc=(crc<<1)^ 0x131; + else crc=(crc<<1); + } + return crc; + +} + + + +uint8_t getSHT3xHumTemp(uint8_t adrline,double *temp,double *hum) { + uint8_t ret=1; + I2c_StartCondition(); + I2c_WriteByte(0b10001000|(adrline<<1)); + I2c_WriteByte(0x24); + I2c_WriteByte(0x00); //NotClock Scr + I2c_StopCondition(); + _delay_ms(16); + + I2c_StartCondition(); + I2c_WriteByte (0b10001001|(adrline<<1)); + volatile uint8_t t1 =I2c_ReadByte(ACK); + volatile uint8_t t2 =I2c_ReadByte(ACK); + volatile uint8_t tc =I2c_ReadByte(ACK); + volatile uint8_t f1 =I2c_ReadByte(ACK); + volatile uint8_t f2 =I2c_ReadByte(ACK); + volatile uint8_t fc =I2c_ReadByte(NO_ACK); + I2c_StopCondition(); + if (calcCRCSHT3x(t1,t2)==tc) + *temp=175.0f*(double)(((uint16_t)t1<<8)|t2)/65535.0f-45.0f; + else ret=0; + if (calcCRCSHT3x(f1,f2)==fc) + *hum=100.0f*(double)(((uint16_t)f1<<8)|f2)/65535.0f; + else ret=0; + return ret; +} diff --git a/common/I2C/SHT3x.h b/common/I2C/SHT3x.h new file mode 100644 index 0000000..9843d9f --- /dev/null +++ b/common/I2C/SHT3x.h @@ -0,0 +1,39 @@ +// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the +// distribution. +// * All advertising materials mentioning features or use of this +// software must display the following acknowledgement: This product +// includes software developed by tm3d.de and its contributors. +// * Neither the name of tm3d.de nor the names of its contributors may +// be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +#ifndef SHT3x_H +#define SHT3x_H +uint8_t initSHT3x(uint8_t adrline); +uint8_t getSHT3xHumTemp(uint8_t adrline,double *temp,double *hum); + +#endif diff --git a/programmer/flash/avrdude.conf b/programmer/flash/avrdude.conf index 4ecdd78..6569357 100644 --- a/programmer/flash/avrdude.conf +++ b/programmer/flash/avrdude.conf @@ -1,4 +1,4 @@ -# $Id: avrdude.conf.in 1012 2011-09-15 14:57:51Z joerg_wunsch $ -*- text -*- +# $Id: avrdude.conf.in 1371 2016-02-15 20:15:07Z joerg_wunsch $ -*- text -*- # # AVRDUDE Configuration File # @@ -10,20 +10,22 @@ # identifies which part AVRDUDE is going to be programming and must match # one of the parts' "id" parameter. # +# DO NOT MODIFY THIS FILE. Modifications will be overwritten the next +# time a "make install" is run. For user-specific additions, use the +# "-C +filename" commandline option. +# # Possible entry formats are: # # programmer +# parent # optional parent # id = [, [, ] ...] ; # are quoted strings # desc = ; # quoted string -# type = 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 | wiring; # programmer type +# type = ; # programmer type, quoted string +# # supported programmer types can be listed by "-c ?type" +# connection_type = parallel | serial | usb # baudrate = ; # baudrate for avr910-programmer # vcc = [, ... ] ; # pin number(s) +# buff = [, ... ] ; # pin number(s) # reset = ; # pin number # sck = ; # pin number # mosi = ; # pin number @@ -32,14 +34,19 @@ # rdyled = ; # pin number # pgmled = ; # pin number # vfyled = ; # pin number -# usbvid = ; # USB VID (Vendor ID) -# usbpid = ; # USB PID (Product ID) -# usbdev = ; # USB interface or other device info -# usbvendor = ; # USB Vendor Name -# usbproduct = ; # USB Product Name +# usbvid = ; # USB VID (Vendor ID) +# usbpid = [, ...] # USB PID (Product ID) (1) +# usbdev = ; # USB interface or other device info +# usbvendor = ; # USB Vendor Name +# usbproduct = ; # USB Product Name # usbsn = ; # USB Serial Number # # To invert a bit, use = ~ , the spaces are important. +# For a pin list all pins must be inverted. +# A single pin can be specified as usual = ~ , for lists +# specify it as follows = ~ ( [, ... ] ) . +# +# (1) Not all programmer types can process a list of PIDs. # ; # # part @@ -53,6 +60,7 @@ # stk500_devcode = ; # numeric # avr910_devcode = ; # numeric # signature = ; # signature bytes +# usbpid = ; # DFU USB PID # chip_erase_delay = ; # micro-seconds # reset = dedicated | io; # retry_pulse = reset | sck; @@ -108,6 +116,7 @@ # spmcr = ; # mem addr of SPMC[S]R reg. # eecr = ; # mem addr of EECR reg. # # (only when != 0x3c) +# is_at90s1200 = ; # AT90S1200 part # is_avr32 = ; # AVR32 part # # memory @@ -137,6 +146,17 @@ # values. If a required parameter is left empty, AVRDUDE will # complain. # +# Parts can also inherit parameters from previously defined parts +# using the following syntax. In this case specified integer and +# string values override parameter values from the parent part. New +# memory definitions are added to the definitions inherited from the +# parent. +# +# part parent # quoted string +# id = ; # quoted string +# +# ; +# # NOTES: # * 'devicecode' is the device code used by the STK500 (see codes # listed below) @@ -155,7 +175,7 @@ # 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 +# http://www.atmel.com/dyn/resources/prod_documents/doc1280.pdf # # INSTRUCTION FORMATS # @@ -192,7 +212,7 @@ # section avr061.zip which accompanies the application note # AVR061 available from: # -# http://www.atmel.com/atmel/acrobat/doc2525.pdf +# http://www.atmel.com/dyn/resources/prod_documents/doc2525.pdf # #define ATTINY10 0x10 /* the _old_ one that never existed! */ @@ -312,11 +332,14 @@ # ATmega169 0x78 # -# Overall avrdude defaults +# Overall avrdude defaults; suitable for ~/.avrduderc # default_parallel = "lpt1"; default_serial = "com1"; -# default_bitclock = 2.5 +# default_bitclock = 2.5; + +# Turn off safemode by default +#default_safemode = no; # @@ -329,13 +352,15 @@ default_serial = "com1"; programmer id = "wiring"; desc = "Wiring"; - type = wiring; + type = "wiring"; + connection_type = serial; ; programmer id = "arduino"; desc = "Arduino"; - type = arduino; + type = "arduino"; + connection_type = serial; ; # this will interface with the chips on these programmers: # @@ -351,111 +376,278 @@ programmer # The drivers will look for a specific device and use the first one found. # If you have mulitple devices, then look for unique information (like SN) # And fill that in here. +# +# Note that the pin numbers for the main ISP signals (reset, sck, +# mosi, miso) are fixed and cannot be changed, since they must match +# the way the Multi-Protocol Synchronous Serial Engine (MPSSE) of +# these FTDI ICs has been designed. programmer - id = "avrftdi"; - desc = "FT2232D based generic programmer"; - type = avrftdi; + id = "avrftdi"; + desc = "FT2232D based generic programmer"; + type = "avrftdi"; + connection_type = usb; usbvid = 0x0403; usbpid = 0x6010; usbvendor = ""; usbproduct = ""; usbdev = "A"; usbsn = ""; -#ISP-signals - lower ACBUS-Nibble (default) - reset = 4; - sck = 1; - mosi = 2; - miso = 3; -#LED SIGNALs - higher ACBUS-Nibble -# errled = 5; -# rdyled = 6; -# pgmled = 7; -# vfyled = 8; -#Buffer Signal - ADBUS - Nibble -# buff = 9; +#ISP-signals - lower ADBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +#LED SIGNALs - higher ADBUS-Nibble +# errled = 4; +# rdyled = 5; +# pgmled = 6; +# vfyled = 7; +#Buffer Signal - ACBUS - Nibble +# buff = 8; ; # This is an implementation of the above with a buffer IC (74AC244) and -# 4 LEDs directly attached, active low. The buff and reset pins are -# understood (by avrdude) to be active low, so there's no -# need to invert the bits. +# 4 LEDs directly attached, all active low. programmer - id = "2232HIO"; - desc = "FT2232H based generic programmer"; - type = avrftdi; + id = "2232HIO"; + desc = "FT2232H based generic programmer"; + type = "avrftdi"; + connection_type = usb; usbvid = 0x0403; # Note: This PID is reserved for generic H devices and # should be programmed into the EEPROM # usbpid = 0x8A48; - usbpid = 0x6010; - usbdev = "A"; + usbpid = 0x6010; + usbdev = "A"; usbvendor = ""; usbproduct = ""; usbsn = ""; #ISP-signals - reset = 4; - sck = 1; - mosi = 2; - miso = 3; - buff = 5; + reset = 3; + sck = 0; + mosi = 1; + miso = 2; + buff = ~4; #LED SIGNALs - errled = ~ 12; - rdyled = ~ 15; - pgmled = ~ 14; - vfyled = ~ 13; + errled = ~ 11; + rdyled = ~ 14; + pgmled = ~ 13; + vfyled = ~ 12; +; + +#The FT4232H can be treated as FT2232H, but it has a different USB +#device ID of 0x6011. +programmer parent "avrftdi" + id = "4232h"; + desc = "FT4232H based generic programmer"; + usbpid = 0x6011; ; programmer - id = "jtagkey"; - desc = "Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2"; - type = avrftdi; + id = "jtagkey"; + desc = "Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2"; + type = "avrftdi"; + connection_type = usb; usbvid = 0x0403; # Note: This PID is used in all JTAGKey variants - usbpid = 0xCFF8; - usbdev = "A"; + usbpid = 0xCFF8; + usbdev = "A"; usbvendor = ""; usbproduct = ""; usbsn = ""; #ISP-signals => 20 - Pin connector on JTAGKey - reset = 4; # TMS 7 violet - sck = 1; # TCK 9 white - mosi = 2; # TDI 5 green - miso = 3; # TDO 13 orange - buff = 5; + reset = 3; # TMS 7 violet + sck = 0; # TCK 9 white + mosi = 1; # TDI 5 green + miso = 2; # TDO 13 orange + buff = ~4; # VTG VREF 1 brown with red tip # GND GND 20 black # The colors are on the 20 pin breakout cable # from Amontec ; +# UM232H module from FTDI and Glyn.com.au. +# See helix.air.net.au for detailed usage information. +# J1: Connect pin 2 and 3 for USB power. +# J2: Connect pin 2 and 3 for USB power. +# J2: Pin 7 is SCK +# : Pin 8 is MOSI +# : Pin 9 is MISO +# : Pin 11 is RST +# : Pin 6 is ground +# Use the -b flag to set the SPI clock rate eg -b 3750000 is the fastest I could get +# a 16MHz Atmega1280 to program reliably. The 232H is conveniently 5V tolerant. +programmer + id = "UM232H"; + desc = "FT232H based module from FTDI and Glyn.com.au"; + type = "avrftdi"; + usbvid = 0x0403; +# Note: This PID is reserved for generic 232H devices and +# should be programmed into the EEPROM + usbpid = 0x6014; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals + sck = 0; + mosi = 1; + miso = 2; + reset = 3; +; + +# C232HM module from FTDI and Glyn.com.au. +# : Orange is SCK +# : Yellow is MOSI +# : Green is MISO +# : Brown is RST +# : Black is ground +# Use the -b flag to set the SPI clock rate eg -b 3750000 is the fastest I could get +# a 16MHz Atmega1280 to program reliably. The 232H is conveniently 5V tolerant. +programmer + id = "C232HM"; + desc = "FT232H based module from FTDI and Glyn.com.au"; + type = "avrftdi"; + usbvid = 0x0403; +# Note: This PID is reserved for generic 232H devices and +# should be programmed into the EEPROM + usbpid = 0x6014; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals + sck = 0; + mosi = 1; + miso = 2; + reset = 3; +; + + +# On the adapter you can read "O-Link". On the PCB is printed "OpenJTAG v3.1" +# You can find it as "OpenJTAG ARM JTAG USB" in the internet. +# (But there are also several projects called Open JTAG, eg. +# http://www.openjtag.org, which are completely different.) +# http://www.100ask.net/shop/english.html (website seems to be outdated) +# http://item.taobao.com/item.htm?id=1559277013 +# http://www.micro4you.com/store/openjtag-arm-jtag-usb.html (schematics!) +# some other sources which call it O-Link +# http://www.andahammer.com/olink/ +# http://www.developmentboard.net/31-o-link-debugger.html +# http://armwerks.com/catalog/o-link-debugger-copy/ +# or just have a look at ebay ... +# It is basically the same entry as jtagkey with different usb ids. +programmer parent "jtagkey" + id = "o-link"; + desc = "O-Link, OpenJTAG from www.100ask.net"; + usbvid = 0x1457; + usbpid = 0x5118; + usbvendor = "www.100ask.net"; + usbproduct = "USB<=>JTAG&RS232"; +; + +# http://wiki.openmoko.org/wiki/Debug_Board_v3 +programmer + id = "openmoko"; + desc = "Openmoko debug board (v3)"; + type = "avrftdi"; + usbvid = 0x1457; + usbpid = 0x5118; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; + reset = 3; # TMS 7 + sck = 0; # TCK 9 + mosi = 1; # TDI 5 + miso = 2; # TDO 13 +; + +# Only Rev. A boards. +# Schematic and user manual: http://www.cs.put.poznan.pl/wswitala/download/pdf/811EVBK.pdf +programmer + id = "lm3s811"; + desc = "Luminary Micro LM3S811 Eval Board (Rev. A)"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0xbcd9; + usbvendor = "LMI"; + usbproduct = "LM3S811 Evaluation Board"; + usbdev = "A"; + usbsn = ""; +#ISP-signals - lower ACBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +# Enable correct buffers + buff = 7; +; + +# submitted as bug #46020 +programmer + id = "tumpa"; + desc = "TIAO USB Multi-Protocol Adapter"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0x8A98; + usbdev = "A"; + usbvendor = "TIAO"; + usbproduct = ""; + usbsn = ""; + sck = 0; # TCK 9 + mosi = 1; # TDI 5 + miso = 2; # TDO 13 + reset = 3; # TMS 7 +; + programmer id = "avrisp"; desc = "Atmel AVR ISP"; - type = stk500; + type = "stk500"; + connection_type = serial; ; programmer id = "avrispv2"; desc = "Atmel AVR ISP V2"; - type = stk500v2; + type = "stk500v2"; + connection_type = serial; ; programmer id = "avrispmkII"; desc = "Atmel AVR ISP mkII"; - type = stk500v2; + type = "stk500v2"; + connection_type = usb; ; -programmer +programmer parent "avrispmkII" id = "avrisp2"; - desc = "Atmel AVR ISP mkII"; - type = stk500v2; ; programmer id = "buspirate"; desc = "The Bus Pirate"; - type = buspirate; + type = "buspirate"; + connection_type = serial; +; + +programmer + id = "buspirate_bb"; + desc = "The Bus Pirate (bitbang interface, supports TPI)"; + type = "buspirate_bb"; + connection_type = serial; + # pins are bits in bitbang byte (numbers are 87654321) + # 1|POWER|PULLUP|AUX|MOSI|CLK|MISO|CS + reset = 1; + sck = 3; + mosi = 4; + miso = 2; + #vcc = 7; This is internally set independent of this setting. ; # This is supposed to be the "default" STK500 entry. @@ -465,158 +657,302 @@ programmer programmer id = "stk500"; desc = "Atmel STK500"; - type = stk500generic; + type = "stk500generic"; + connection_type = serial; ; programmer id = "stk500v1"; desc = "Atmel STK500 Version 1.x firmware"; - type = stk500; + type = "stk500"; + connection_type = serial; ; programmer id = "mib510"; desc = "Crossbow MIB510 programming board"; - type = stk500; + type = "stk500"; + connection_type = serial; ; programmer id = "stk500v2"; desc = "Atmel STK500 Version 2.x firmware"; - type = stk500v2; + type = "stk500v2"; + connection_type = serial; ; programmer id = "stk500pp"; desc = "Atmel STK500 V2 in parallel programming mode"; - type = stk500pp; + type = "stk500pp"; + connection_type = serial; ; programmer id = "stk500hvsp"; desc = "Atmel STK500 V2 in high-voltage serial programming mode"; - type = stk500hvsp; + type = "stk500hvsp"; + connection_type = serial; ; programmer id = "stk600"; desc = "Atmel STK600"; - type = stk600; + type = "stk600"; + connection_type = usb; ; programmer id = "stk600pp"; desc = "Atmel STK600 in parallel programming mode"; - type = stk600pp; + type = "stk600pp"; + connection_type = usb; ; programmer id = "stk600hvsp"; desc = "Atmel STK600 in high-voltage serial programming mode"; - type = stk600hvsp; + type = "stk600hvsp"; + connection_type = usb; ; programmer id = "avr910"; desc = "Atmel Low Cost Serial Programmer"; - type = avr910; + type = "avr910"; + connection_type = serial; +; + +programmer + id = "ft245r"; + desc = "FT245R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # D1 + sck = 0; # D0 + mosi = 2; # D2 + reset = 4; # D4 +; + +programmer + id = "ft232r"; + desc = "FT232R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # RxD + sck = 0; # TxD + mosi = 2; # RTS + reset = 4; # DTR +; + +# see http://www.bitwizard.nl/wiki/index.php/FTDI_ATmega +programmer + id = "bwmega"; + desc = "BitWizard ftdi_atmega builtin programmer"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 5; # DSR + sck = 6; # DCD + mosi = 3; # CTS + reset = 7; # RI +; + +# see http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html +# Note: pins are numbered from 1! +programmer + id = "arduino-ft232r"; + desc = "Arduino: FT232R connected to ISP"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 3; # CTS X3(1) + sck = 5; # DSR X3(2) + mosi = 6; # DCD X3(3) + reset = 7; # RI X3(4) +; + +# website mentioned above uses this id +programmer parent "arduino-ft232r" + id = "diecimila"; + desc = "alias for arduino-ft232r"; +; + +# There is a ATmega328P kit PCB called "uncompatino". +# This board allows ISP via its on-board FT232R. +# This is designed like Arduino Duemilanove but has no standard ICPS header. +# Its 4 pairs of pins are shorted to enable ftdi_syncbb. +# http://akizukidenshi.com/catalog/g/gP-07487/ +# http://akizukidenshi.com/download/ds/akizuki/k6096_manual_20130816.pdf +programmer + id = "uncompatino"; + desc = "uncompatino with all pairs of pins shorted"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 3; # cts + sck = 5; # dsr + mosi = 6; # dcd + reset = 7; # ri +; + +# FTDI USB to serial cable TTL-232R-5V with a custom adapter for ICSP +# http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm +# http://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_TTL-232R_CABLES.pdf +# For ICSP pinout see for example http://www.atmel.com/images/doc2562.pdf +# (Figure 1. ISP6PIN header pinout and Table 1. Connections required for ISP ...) +# TTL-232R GND 1 Black -> ICPS GND (pin 6) +# TTL-232R CTS 2 Brown -> ICPS MOSI (pin 4) +# TTL-232R VCC 3 Red -> ICPS VCC (pin 2) +# TTL-232R TXD 4 Orange -> ICPS RESET (pin 5) +# TTL-232R RXD 5 Yellow -> ICPS SCK (pin 3) +# TTL-232R RTS 6 Green -> ICPS MISO (pin 1) +# Except for VCC and GND, you can connect arbitual pairs as long as +# the following table is adjusted. +programmer + id = "ttl232r"; + desc = "FTDI TTL232R-5V with ICSP adapter"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 2; # rts + sck = 1; # rxd + mosi = 3; # cts + reset = 0; # txd ; programmer id = "usbasp"; desc = "USBasp, http://www.fischl.de/usbasp/"; - type = usbasp; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + usbvendor = "www.fischl.de"; + usbproduct = "USBasp"; + + # following variants are autodetected for id "usbasp" + + # original usbasp from fischl.de + # see above "usbasp" + + # old usbasp from fischl.de + #usbvid = 0x03EB; # ATMEL + #usbpid = 0xC7B4; # (unoffical) USBasp + #usbvendor = "www.fischl.de"; + #usbproduct = "USBasp"; + + # NIBObee (only if -P nibobee is given on command line) + # see below "nibobee" +; + +programmer + id = "nibobee"; + desc = "NIBObee"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x092F; # NIBObee PID + usbvendor = "www.nicai-systems.com"; + usbproduct = "NIBObee"; +; + +programmer + id = "usbasp-clone"; + desc = "Any usbasp clone with correct VID/PID"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + #usbvendor = ""; + #usbproduct = ""; ; programmer id = "usbtiny"; desc = "USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/"; - type = usbtiny; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x1781; + usbpid = 0x0c9f; ; programmer id = "butterfly"; desc = "Atmel Butterfly Development Board"; - type = butterfly; + type = "butterfly"; + connection_type = serial; ; programmer id = "avr109"; desc = "Atmel AppNote AVR109 Boot Loader"; - type = butterfly; + type = "butterfly"; + connection_type = serial; ; programmer id = "avr911"; desc = "Atmel AppNote AVR911 AVROSP"; - type = butterfly; + type = "butterfly"; + connection_type = serial; ; # suggested in http://forum.mikrokopter.de/topic-post48317.html programmer id = "mkbutterfly"; desc = "Mikrokopter.de Butterfly"; - type = butterfly_mk; + type = "butterfly_mk"; + connection_type = serial; ; -programmer +programmer parent "mkbutterfly" id = "butterfly_mk"; - desc = "Mikrokopter.de Butterfly"; - type = butterfly_mk; ; programmer id = "jtagmkI"; desc = "Atmel JTAG ICE (mkI)"; baudrate = 115200; # default is 115200 - type = jtagmki; + type = "jtagmki"; + connection_type = serial; ; # easier to type -programmer +programmer parent "jtagmkI" id = "jtag1"; - desc = "Atmel JTAG ICE (mkI)"; - baudrate = 115200; # default is 115200 - type = jtagmki; ; # easier to type -programmer +programmer parent "jtag1" id = "jtag1slow"; - desc = "Atmel JTAG ICE (mkI)"; baudrate = 19200; - type = jtagmki; ; +# The JTAG ICE mkII has both, serial and USB connectivity. As it is +# mostly used through USB these days (AVR Studio 5 only supporting it +# that way), we make connection_type = usb the default. Users are +# still free to use a serial port with the -P option. + programmer id = "jtagmkII"; desc = "Atmel JTAG ICE mkII"; baudrate = 19200; # default is 19200 - type = jtagmkii; + type = "jtagmkii"; + connection_type = usb; ; # easier to type -programmer +programmer parent "jtagmkII" id = "jtag2slow"; - desc = "Atmel JTAG ICE mkII"; - baudrate = 19200; # default is 19200 - type = jtagmkii; ; # JTAG ICE mkII @ 115200 Bd -programmer +programmer parent "jtag2slow" id = "jtag2fast"; - desc = "Atmel JTAG ICE mkII"; baudrate = 115200; - type = jtagmkii; ; # make the fast one the default, people will love that -programmer +programmer parent "jtag2fast" id = "jtag2"; - desc = "Atmel JTAG ICE mkII"; - baudrate = 115200; - type = jtagmkii; ; # JTAG ICE mkII in ISP mode @@ -624,7 +960,8 @@ programmer id = "jtag2isp"; desc = "Atmel JTAG ICE mkII in ISP mode"; baudrate = 115200; - type = jtagmkii_isp; + type = "jtagmkii_isp"; + connection_type = usb; ; # JTAG ICE mkII in debugWire mode @@ -632,7 +969,8 @@ programmer id = "jtag2dw"; desc = "Atmel JTAG ICE mkII in debugWire mode"; baudrate = 115200; - type = jtagmkii_dw; + type = "jtagmkii_dw"; + connection_type = usb; ; # JTAG ICE mkII in AVR32 mode @@ -640,7 +978,8 @@ programmer id = "jtagmkII_avr32"; desc = "Atmel JTAG ICE mkII im AVR32 mode"; baudrate = 115200; - type = jtagmkii_avr32; + type = "jtagmkii_avr32"; + connection_type = usb; ; # JTAG ICE mkII in AVR32 mode @@ -648,7 +987,8 @@ programmer id = "jtag2avr32"; desc = "Atmel JTAG ICE mkII im AVR32 mode"; baudrate = 115200; - type = jtagmkii_avr32; + type = "jtagmkii_avr32"; + connection_type = usb; ; # JTAG ICE mkII in PDI mode @@ -656,7 +996,8 @@ programmer id = "jtag2pdi"; desc = "Atmel JTAG ICE mkII PDI mode"; baudrate = 115200; - type = jtagmkii_pdi; + type = "jtagmkii_pdi"; + connection_type = usb; ; # AVR Dragon in JTAG mode @@ -664,7 +1005,8 @@ programmer id = "dragon_jtag"; desc = "Atmel AVR Dragon in JTAG mode"; baudrate = 115200; - type = dragon_jtag; + type = "dragon_jtag"; + connection_type = usb; ; # AVR Dragon in ISP mode @@ -672,7 +1014,8 @@ programmer id = "dragon_isp"; desc = "Atmel AVR Dragon in ISP mode"; baudrate = 115200; - type = dragon_isp; + type = "dragon_isp"; + connection_type = usb; ; # AVR Dragon in PP mode @@ -680,7 +1023,8 @@ programmer id = "dragon_pp"; desc = "Atmel AVR Dragon in PP mode"; baudrate = 115200; - type = dragon_pp; + type = "dragon_pp"; + connection_type = usb; ; # AVR Dragon in HVSP mode @@ -688,7 +1032,8 @@ programmer id = "dragon_hvsp"; desc = "Atmel AVR Dragon in HVSP mode"; baudrate = 115200; - type = dragon_hvsp; + type = "dragon_hvsp"; + connection_type = usb; ; # AVR Dragon in debugWire mode @@ -696,7 +1041,8 @@ programmer id = "dragon_dw"; desc = "Atmel AVR Dragon in debugWire mode"; baudrate = 115200; - type = dragon_dw; + type = "dragon_dw"; + connection_type = usb; ; # AVR Dragon in PDI mode @@ -704,13 +1050,125 @@ programmer id = "dragon_pdi"; desc = "Atmel AVR Dragon in PDI mode"; baudrate = 115200; - type = dragon_pdi; + type = "dragon_pdi"; + connection_type = usb; +; + +programmer + id = "jtag3"; + desc = "Atmel AVR JTAGICE3 in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3pdi"; + desc = "Atmel AVR JTAGICE3 in PDI mode"; + type = "jtagice3_pdi"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3dw"; + desc = "Atmel AVR JTAGICE3 in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3isp"; + desc = "Atmel AVR JTAGICE3 in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "xplainedpro"; + desc = "Atmel AVR XplainedPro in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2111; +; + +programmer + id = "xplainedmini"; + desc = "Atmel AVR XplainedMini in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2145; +; + +programmer + id = "xplainedmini_dw"; + desc = "Atmel AVR XplainedMini in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2145; +; + +programmer + id = "atmelice"; + desc = "Atmel-ICE (ARM/AVR) in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "atmelice_pdi"; + desc = "Atmel-ICE (ARM/AVR) in PDI mode"; + type = "jtagice3_pdi"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "atmelice_dw"; + desc = "Atmel-ICE (ARM/AVR) in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2141; +; + +programmer + id = "atmelice_isp"; + desc = "Atmel-ICE (ARM/AVR) in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2141; ; + programmer id = "pavr"; desc = "Jason Kyle's pAVR Serial Programmer"; - type = avr910; + type = "avr910"; + connection_type = serial; +; + +programmer + id = "pickit2"; + desc = "MicroChip's PICkit2 Programmer"; + type = "pickit2"; + connection_type = usb; +; + +programmer + id = "flip1"; + desc = "FLIP USB DFU protocol version 1 (doc7618)"; + type = "flip1"; + connection_type = usb; +; + +programmer + id = "flip2"; + desc = "FLIP USB DFU protocol version 2 (AVR4023)"; + type = "flip2"; + connection_type = usb; ; # Parallel port programmers. @@ -718,7 +1176,8 @@ programmer programmer id = "bsd"; desc = "Brian Dean's Programmer, http://www.bsdhome.com/avrdude/"; - type = par; + type = "par"; + connection_type = parallel; vcc = 2, 3, 4, 5; reset = 7; sck = 8; @@ -729,7 +1188,8 @@ programmer programmer id = "stk200"; desc = "STK200"; - type = par; + type = "par"; + connection_type = parallel; buff = 4, 5; sck = 6; mosi = 7; @@ -742,63 +1202,33 @@ programmer # except that there is a LED indicating that the # programming is currently in progress. -programmer +programmer parent "stk200" 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; + type = "par"; + connection_type = parallel; reset = 4; sck = 5; mosi = 2; miso = 11; ; -programmer - id = "dasaftdi"; - desc = "FTDI serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; - type = serbb; - reset = ~7; - sck = ~4; - mosi = ~3; - miso = ~8; -; - -programmer - id = "dasaftdit1"; - desc = "FTDI serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; - type = serbb; - reset = ~7; - sck = ~4; - mosi = ~3; - miso = ~8; -; - - -programmer +programmer parent "dt006" 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; + type = "par"; + connection_type = parallel; vcc = 2, 3, 4, 5; buff = 6; reset = 7; @@ -814,7 +1244,8 @@ programmer programmer id = "sp12"; desc = "Steve Bolt's Programmer"; - type = par; + type = "par"; + connection_type = parallel; vcc = 4,5,6,7,8; reset = 3; sck = 2; @@ -825,7 +1256,8 @@ programmer programmer id = "picoweb"; desc = "Picoweb Programming Cable, http://www.picoweb.net/"; - type = par; + type = "par"; + connection_type = parallel; reset = 2; sck = 3; mosi = 4; @@ -835,7 +1267,8 @@ programmer programmer id = "abcmini"; desc = "ABCmini Board, aka Dick Smith HOTCHIP"; - type = par; + type = "par"; + connection_type = parallel; reset = 4; sck = 3; mosi = 2; @@ -845,7 +1278,8 @@ programmer programmer id = "futurlec"; desc = "Futurlec.com programming cable."; - type = par; + type = "par"; + connection_type = parallel; reset = 3; sck = 2; mosi = 1; @@ -863,7 +1297,8 @@ programmer programmer id = "xil"; desc = "Xilinx JTAG cable"; - type = par; + type = "par"; + connection_type = parallel; mosi = 2; sck = 3; reset = 4; @@ -876,7 +1311,8 @@ programmer programmer id = "dapa"; desc = "Direct AVR Parallel Access cable"; - type = par; + type = "par"; + connection_type = parallel; vcc = 3; reset = 16; sck = 1; @@ -887,7 +1323,8 @@ programmer programmer id = "atisp"; desc = "AT-ISP V1.1 programming cable for AVR-SDK1 from micro-research.co.th"; - type = par; + type = "par"; + connection_type = parallel; reset = ~6; sck = ~8; mosi = ~7; @@ -897,7 +1334,8 @@ programmer programmer id = "ere-isp-avr"; desc = "ERE ISP-AVR "; - type = par; + type = "par"; + connection_type = parallel; reset = ~4; sck = 3; mosi = 2; @@ -907,7 +1345,8 @@ programmer programmer id = "blaster"; desc = "Altera ByteBlaster"; - type = par; + type = "par"; + connection_type = parallel; sck = 2; miso = 11; reset = 3; @@ -916,33 +1355,50 @@ programmer ; # It is almost same as pony-stk200, except vcc on pin 5 to auto -# disconnect port (download on http://electropol.free.fr) -programmer +# disconnect port (download on http://electropol.free.fr/spip/spip.php?article27) +programmer parent "pony-stk200" id = "frank-stk200"; desc = "Frank STK200"; - type = par; + buff = ; # delete buff pin assignment 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; + id = "89isp"; + desc = "Atmel at89isp cable"; + type = "par"; + connection_type = parallel; + reset = 17; + sck = 1; + mosi = 2; + miso = 10; ; +#This programmer bitbangs GPIO lines using the Linux sysfs GPIO interface +# +#To enable it set the configuration below to match the GPIO lines connected to the +#relevant ISP header pins and uncomment the entry definition. In case you don't +#have the required permissions to edit this system wide config file put the +#entry in a separate .conf file and use it with -C+.conf +#on the command line. # +#To check if your avrdude build has support for the linuxgpio programmer compiled in, +#use -c?type on the command line and look for linuxgpio in the list. If it's not available +#you need pass the --enable-linuxgpio=yes option to configure and recompile avrdude. +# +#programmer +# id = "linuxgpio"; +# desc = "Use the Linux sysfs interface to bitbang GPIO lines"; +# type = "linuxgpio"; +# reset = ?; +# sck = ?; +# mosi = ?; +# miso = ?; +#; + # some ultra cheap programmers use bitbanging on the # serialport. # @@ -967,7 +1423,8 @@ miso = 10; programmer id = "ponyser"; desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts"; - type = serbb; + type = "serbb"; + connection_type = serial; reset = ~3; sck = 7; mosi = 4; @@ -977,14 +1434,9 @@ programmer # Same as above, different name # reset=!txd sck=rts mosi=dtr miso=cts -programmer +programmer parent "ponyser" id = "siprog"; desc = "Lancos SI-Prog "; - type = serbb; - reset = ~3; - sck = 7; - mosi = 4; - miso = 8; ; # unknown (dasa in uisp) @@ -993,7 +1445,8 @@ programmer programmer id = "dasa"; desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; - type = serbb; + type = "serbb"; + connection_type = serial; reset = 7; sck = 4; mosi = 3; @@ -1006,7 +1459,8 @@ programmer programmer id = "dasa3"; desc = "serial port banging, reset=!dtr sck=rts mosi=txd miso=cts"; - type = serbb; + type = "serbb"; + connection_type = serial; reset = ~4; sck = 7; mosi = 3; @@ -1019,7 +1473,8 @@ programmer programmer id = "c2n232i"; desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; - type = serbb; + type = "serbb"; + connection_type = serial; reset = 4; sck = ~7; mosi = ~3; @@ -1282,6 +1737,8 @@ part programfusepolltimeout = 25; programlockpolltimeout = 25; + ocdrev = 0; + memory "eeprom" size = 64; page_size = 4; @@ -2577,7 +3034,7 @@ part part id = "m103"; - desc = "ATMEGA103"; + desc = "ATmega103"; stk500_devcode = 0xB1; avr910_devcode = 0x41; signature = 0x1e 0x97 0x01; @@ -2717,7 +3174,7 @@ part part id = "m64"; - desc = "ATMEGA64"; + desc = "ATmega64"; has_jtag = yes; stk500_devcode = 0xA0; avr910_devcode = 0x45; @@ -2767,6 +3224,8 @@ part spmcr = 0x68; allowfullpagebitstream = yes; + ocdrev = 2; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -2898,7 +3357,7 @@ part part id = "m128"; - desc = "ATMEGA128"; + desc = "ATmega128"; has_jtag = yes; stk500_devcode = 0xB2; avr910_devcode = 0x43; @@ -2949,6 +3408,8 @@ part rampz = 0x3b; allowfullpagebitstream = yes; + ocdrev = 1; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -3128,6 +3589,8 @@ part eecr = 0x3f; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -3318,6 +3781,8 @@ part eecr = 0x3f; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -3508,6 +3973,8 @@ part eecr = 0x3f; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -3647,7 +4114,7 @@ part part id = "m16"; - desc = "ATMEGA16"; + desc = "ATmega16"; has_jtag = yes; stk500_devcode = 0x82; avr910_devcode = 0x74; @@ -3697,6 +4164,8 @@ part spmcr = 0x57; allowfullpagebitstream = yes; + ocdrev = 2; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ @@ -3823,16 +4292,39 @@ part # close to ATmega16 -part +part parent "m16" id = "m164p"; - desc = "ATMEGA164P"; + desc = "ATmega164P"; + signature = 0x1e 0x94 0x0a; + + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + allowfullpagebitstream = no; + chip_erase_delay = 55000; + + ocdrev = 3; + ; + + +#------------------------------------------------------------ +# ATmega324P +#------------------------------------------------------------ + +# similar to ATmega164P + +part + id = "m324p"; + desc = "ATmega324P"; has_jtag = yes; stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one avr910_devcode = 0x74; - signature = 0x1e 0x94 0x0a; + signature = 0x1e 0x95 0x08; pagel = 0xd7; bs2 = 0xa0; - chip_erase_delay = 9000; + chip_erase_delay = 55000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; @@ -3874,21 +4366,23 @@ part spmcr = 0x57; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ - size = 512; + 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", + " 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 x a9 a8", + " 0 0 x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; @@ -3898,7 +4392,7 @@ part " 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", + " 0 0 x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; @@ -3910,20 +4404,20 @@ part memory "flash" paged = yes; - size = 16384; + size = 32768; page_size = 128; - num_pages = 128; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; @@ -3938,13 +4432,13 @@ part " 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", + " 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 = 128; + blocksize = 256; readsize = 256; ; @@ -4009,21 +4503,36 @@ part #------------------------------------------------------------ -# ATmega324P +# ATmega324PA #------------------------------------------------------------ -# similar to ATmega164P +# similar to ATmega324P + +part parent "m324p" + id = "m324pa"; + desc = "ATmega324PA"; + signature = 0x1e 0x95 0x11; + + ocdrev = 3; + ; + + +#------------------------------------------------------------ +# ATmega644 +#------------------------------------------------------------ + +# similar to ATmega164 part - id = "m324p"; - desc = "ATMEGA324P"; + id = "m644"; + desc = "ATmega644"; has_jtag = yes; stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one avr910_devcode = 0x74; - signature = 0x1e 0x95 0x08; + signature = 0x1e 0x96 0x09; pagel = 0xd7; bs2 = 0xa0; - chip_erase_delay = 9000; + chip_erase_delay = 55000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; @@ -4045,13 +4554,13 @@ part 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -4065,32 +4574,34 @@ part spmcr = 0x57; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ - size = 1024; + 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 x a10 a9 a8", + " 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 x a10 a9 a8", + " 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 0 a1 a0", + " 0 0 0 0 0 a2 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x a10 a9 a8", - " a7 a6 a5 a4 a3 a2 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", " x x x x x x x x"; mode = 0x41; @@ -4101,36 +4612,36 @@ part memory "flash" paged = yes; - size = 32768; - page_size = 128; + 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", - " 0 a14 a13 a12 a11 a10 a9 a8", + "a15 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " 0 a14 a13 a12 a11 a10 a9 a8", + "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 x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " 0 0 x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - " 0 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + "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; @@ -4198,23 +4709,38 @@ part ; ; +#------------------------------------------------------------ +# ATmega644P +#------------------------------------------------------------ + +# similar to ATmega164p + +part parent "m644" + id = "m644p"; + desc = "ATmega644P"; + signature = 0x1e 0x96 0x0a; + + ocdrev = 3; + ; + + #------------------------------------------------------------ -# ATmega324PA +# ATmega1284 #------------------------------------------------------------ -# similar to ATmega324P +# similar to ATmega164 part - id = "m324pa"; - desc = "ATmega324PA"; + id = "m1284"; + desc = "ATmega1284"; has_jtag = yes; stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one avr910_devcode = 0x74; - signature = 0x1e 0x95 0x11; + signature = 0x1e 0x97 0x06; pagel = 0xd7; bs2 = 0xa0; - chip_erase_delay = 9000; + chip_erase_delay = 55000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; @@ -4230,16 +4756,16 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 0; + 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; + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 5; + latchcycles = 6; togglevtg = 1; poweroffdelay = 15; resetdelayms = 1; @@ -4256,32 +4782,34 @@ part spmcr = 0x57; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ - size = 1024; + 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 x a10 a9 a8", + " 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 x a10 a9 a8", + " 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 0 a1 a0", + " 0 0 0 0 0 a2 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x a10 a9 a8", - " a7 a6 a5 a4 a3 a2 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", " x x x x x x x x"; mode = 0x41; @@ -4292,40 +4820,40 @@ part memory "flash" paged = yes; - size = 32768; - page_size = 128; - num_pages = 256; + size = 131072; + page_size = 256; + num_pages = 512; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", - " 0 a14 a13 a12 a11 a10 a9 a8", + "a15 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " 0 a14 a13 a12 a11 a10 a9 a8", + "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 x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " 0 0 x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - " 0 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + "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; + mode = 0x41; + delay = 10; blocksize = 256; readsize = 256; ; @@ -4390,22 +4918,23 @@ part ; + #------------------------------------------------------------ -# ATmega644 +# ATmega1284P #------------------------------------------------------------ -# similar to ATmega164 +# similar to ATmega164p part - id = "m644"; - desc = "ATMEGA644"; + id = "m1284p"; + desc = "ATmega1284P"; has_jtag = yes; stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one avr910_devcode = 0x74; - signature = 0x1e 0x96 0x09; + signature = 0x1e 0x97 0x05; pagel = 0xd7; bs2 = 0xa0; - chip_erase_delay = 9000; + chip_erase_delay = 55000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; @@ -4421,7 +4950,7 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 0; + pollmethod = 1; pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, @@ -4431,9 +4960,9 @@ part hventerstabdelay = 100; progmodedelay = 0; latchcycles = 6; - togglevtg = 0; - poweroffdelay = 0; - resetdelayms = 0; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -4447,10 +4976,12 @@ part spmcr = 0x57; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ - size = 2048; + size = 4096; min_write_delay = 9000; max_write_delay = 9000; readback_p1 = 0xff; @@ -4483,9 +5014,9 @@ part memory "flash" paged = yes; - size = 65536; + size = 131072; page_size = 256; - num_pages = 256; + num_pages = 512; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; @@ -4515,8 +5046,8 @@ part " a7 x x x x x x x", " x x x x x x x x"; - mode = 0x21; - delay = 6; + mode = 0x41; + delay = 10; blocksize = 256; readsize = 256; ; @@ -4580,28 +5111,76 @@ part ; ; + + #------------------------------------------------------------ -# ATmega644P +# ATmega162 #------------------------------------------------------------ -# similar to ATmega164p - part - id = "m644p"; - desc = "ATMEGA644P"; + id = "m162"; + desc = "ATmega162"; has_jtag = yes; - stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one - avr910_devcode = 0x74; - signature = 0x1e 0x96 0x0a; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; pagel = 0xd7; bs2 = 0xa0; - chip_erase_delay = 9000; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; + ocdrev = 2; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + timeout = 200; stabdelay = 100; cmdexedelay = 25; @@ -4617,7 +5196,7 @@ part 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 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; + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; latchcycles = 6; @@ -4633,319 +5212,248 @@ part 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; + 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 a11 a10 a9 a8", + + 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 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + 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 a2 a1 a0", + " 0 0 0 0 0 0 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 128; + delay = 20; + blocksize = 4; readsize = 256; - ; + ; - memory "flash" - paged = yes; - size = 65536; - page_size = 256; - num_pages = 256; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - read_hi = " 0 0 1 0 1 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 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"; + 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"; - min_write_delay = 9000; - max_write_delay = 9000; - ; + ; 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"; - min_write_delay = 9000; - max_write_delay = 9000; - ; + ; 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"; - min_write_delay = 9000; - max_write_delay = 9000; ; + 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 x x x x x x x x", + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; - ; + ; memory "calibration" size = 1; - read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; ; - ; +; #------------------------------------------------------------ -# ATmega1284P +# ATmega163 #------------------------------------------------------------ -# 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; + id = "m163"; + desc = "ATmega163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; 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", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; - timeout = 200; - stabdelay = 100; - cmdexedelay = 25; - synchloops = 32; - bytedelay = 0; - pollindex = 3; - pollvalue = 0x53; - predelay = 1; - postdelay = 1; - pollmethod = 1; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 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; + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 6; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; - chiperasepolltimeout = 10; + chiperasepolltimeout = 30; programfusepulsewidth = 0; - programfusepolltimeout = 5; + programfusepolltimeout = 2; programlockpulsewidth = 0; - programlockpolltimeout = 5; + programlockpolltimeout = 2; - 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; + 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", - " 0 0 x x a11 a10 a9 a8", + " x x x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 a2 a1 a0", - " 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; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; ; memory "flash" paged = yes; - size = 131072; - page_size = 256; - num_pages = 512; - min_write_delay = 4500; - max_write_delay = 4500; + 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", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 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", - "a15 a14 a13 a12 a11 a10 a9 a8", + " x x x a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " 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 x x x x x x x", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", " x x x x x x x x"; - mode = 0x41; - delay = 10; - blocksize = 256; + mode = 0x11; + delay = 20; + 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; + 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"; + "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 i i i i i i"; - min_write_delay = 9000; - max_write_delay = 9000; + "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 o o o o o o o o"; + "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 i i i i i i i i"; - min_write_delay = 9000; - max_write_delay = 9000; + "x x x x x x x x 1 1 1 1 1 i i i"; ; - memory "efuse" + 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"; - read = "0 1 0 1 0 0 0 0 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; + write = "1 0 1 0 1 1 0 0 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" @@ -4956,80 +5464,28 @@ part memory "calibration" size = 1; - - read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + read = "0 0 1 1 1 0 0 0 x x x x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + ; ; - - #------------------------------------------------------------ -# ATmega162 +# ATmega169 #------------------------------------------------------------ part - id = "m162"; - desc = "ATMEGA162"; + id = "m169"; + desc = "ATmega169"; has_jtag = yes; - stk500_devcode = 0x83; - avr910_devcode = 0x63; - signature = 0x1e 0x94 0x04; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; 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", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; - - memory "flash" - paged = yes; - size = 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; @@ -5039,7 +5495,7 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 0; + pollmethod = 1; pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, @@ -5048,10 +5504,10 @@ part 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 6; - togglevtg = 0; - poweroffdelay = 0; - resetdelayms = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -5061,7 +5517,12 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - memory "eeprom" + idr = 0x31; + spmcr = 0x57; + + ocdrev = 2; + + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ size = 512; @@ -5069,15 +5530,14 @@ part 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", + 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", - " 0 0 x x x x a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + 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", @@ -5086,7 +5546,7 @@ part " 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", + " 0 0 x x x x x a8", " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; @@ -5094,142 +5554,6 @@ part 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" @@ -5237,8 +5561,8 @@ part size = 16384; page_size = 128; num_pages = 128; - min_write_delay = 16000; - max_write_delay = 16000; + min_write_delay = 4500; + max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", @@ -5266,8 +5590,8 @@ part " a7 a6 x x x x x x", " x x x x x x x x"; - mode = 0x11; - delay = 20; + mode = 0x41; + delay = 6; blocksize = 128; readsize = 256; ; @@ -5277,10 +5601,10 @@ part 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"; + "x x x x x 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 1 1 i i i i"; + "x x x x x x x x i i i i i i i i"; ; memory "hfuse" @@ -5288,10 +5612,19 @@ part 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"; + "x x x x x 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 1 1 1 1 1 i i i"; + "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" @@ -5299,7 +5632,7 @@ part min_write_delay = 2000; max_write_delay = 2000; read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x 0 x x x x x o o o o o o"; + "x x x x 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"; @@ -5307,28 +5640,29 @@ part memory "signature" size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", + 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 x x x x x x x x", + 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"; ; ; #------------------------------------------------------------ -# ATmega169 +# ATmega329 #------------------------------------------------------------ part - id = "m169"; - desc = "ATMEGA169"; + id = "m329"; + desc = "ATmega329"; has_jtag = yes; - stk500_devcode = 0x85; - avr910_devcode = 0x78; - signature = 0x1e 0x94 0x05; +# 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"; @@ -5369,22 +5703,24 @@ part idr = 0x31; spmcr = 0x57; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ - size = 512; + 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 x a8", + " 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 x a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + " 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", @@ -5393,32 +5729,32 @@ part " 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", + " 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; + blocksize = 8; readsize = 256; ; memory "flash" paged = yes; - size = 16384; + size = 32768; page_size = 128; - num_pages = 128; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", - " x x x a12 a11 a10 a9 a8", + " 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 x x a12 a11 a10 a9 a8", + " x a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; @@ -5439,14 +5775,14 @@ part mode = 0x41; delay = 6; - blocksize = 128; + blocksize = 256; readsize = 256; ; memory "lfuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + 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"; @@ -5456,8 +5792,8 @@ part memory "hfuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + 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"; @@ -5467,17 +5803,19 @@ part memory "efuse" size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x i i i i"; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; ; memory "lock" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + 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"; @@ -5499,17 +5837,58 @@ part ; #------------------------------------------------------------ -# ATmega329 +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part parent "m329" + id = "m329p"; + desc = "ATmega329P"; + signature = 0x1e 0x95 0x0b; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290 +#------------------------------------------------------------ + +# identical to ATmega329 + +part parent "m329" + id = "m3290"; + desc = "ATmega3290"; + signature = 0x1e 0x95 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part parent "m3290" + id = "m3290p"; + desc = "ATmega3290P"; + signature = 0x1e 0x95 0x0c; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega649 #------------------------------------------------------------ part - id = "m329"; - desc = "ATMEGA329"; + 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 0x95 0x03; + 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"; @@ -5550,32 +5929,34 @@ part idr = 0x31; spmcr = 0x57; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ - size = 1024; + 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 x a9 a8", + " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " x x x x x x a9 a8", + " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", + " 0 0 0 0 0 a2 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x x a9 a8", - " a7 a6 a5 a4 a3 a2 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", " x x x x x x x x"; mode = 0x41; @@ -5586,36 +5967,36 @@ part memory "flash" paged = yes; - size = 32768; - page_size = 128; + 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", + "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", - " x a14 a13 a12 a11 a10 a9 a8", + "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", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", " x x x a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + " a7 x x x x x x x", " x x x x x x x x"; mode = 0x41; @@ -5682,19 +6063,34 @@ part ; #------------------------------------------------------------ -# ATmega329P +# ATmega6490 +#------------------------------------------------------------ + +# identical to ATmega649 + +part parent "m649" + id = "m6490"; + desc = "ATmega6490"; + signature = 0x1e 0x96 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega32 #------------------------------------------------------------ -# Identical to ATmega329 except of the signature part - id = "m329p"; - desc = "ATMEGA329P"; + id = "m32"; + desc = "ATmega32"; 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; + 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"; @@ -5709,7 +6105,7 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 1; + pollmethod = 0; pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, @@ -5718,10 +6114,10 @@ part 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -5733,22 +6129,25 @@ part idr = 0x31; spmcr = 0x57; + allowfullpagebitstream = yes; + + ocdrev = 2; memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ + 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", + 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", - " x x x x x x a9 a8", + 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"; @@ -5762,9 +6161,9 @@ part " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; - mode = 0x41; - delay = 20; - blocksize = 8; + mode = 0x04; + delay = 10; + blocksize = 64; readsize = 256; ; @@ -5778,40 +6177,40 @@ part readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", - " x a14 a13 a12 a11 a10 a9 a8", + " 0 0 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " x a14 a13 a12 a11 a10 a9 a8", + " 0 0 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", + " 0 0 x x x x x x", " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", + " 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", - " x x x a12 a11 a10 a9 a8", + " 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; + mode = 0x21; delay = 6; - blocksize = 256; + blocksize = 64; readsize = 256; ; memory "lfuse" size = 1; - min_write_delay = 4500; - max_write_delay = 4500; + 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"; @@ -5821,8 +6220,8 @@ part memory "hfuse" size = 1; - min_write_delay = 4500; - max_write_delay = 4500; + 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"; @@ -5830,21 +6229,10 @@ part "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; + 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"; @@ -5854,32 +6242,30 @@ part memory "signature" size = 3; - read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; + read = "0 0 1 1 0 0 0 0 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"; + 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"; ; ; #------------------------------------------------------------ -# ATmega3290 +# ATmega161 #------------------------------------------------------------ -# 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; + 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"; @@ -5894,7 +6280,7 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 1; + pollmethod = 0; pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, @@ -5903,72 +6289,57 @@ part 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; - chiperasepolltimeout = 10; + chiperasepolltimeout = 30; programfusepulsewidth = 0; - programfusepolltimeout = 5; + programfusepolltimeout = 2; programlockpulsewidth = 0; - programlockpolltimeout = 5; - - idr = 0x31; - spmcr = 0x57; + programlockpolltimeout = 2; memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ - size = 1024; - min_write_delay = 9000; - max_write_delay = 9000; + 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 a9 a8", + " x x x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " x x x x x x a9 a8", + " 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 a9 a8", - " a7 a6 a5 a4 a3 a3 0 0", - " x x x x x x x x"; - - mode = 0x41; - delay = 20; - blocksize = 8; + mode = 0x04; + delay = 5; + blocksize = 128; readsize = 256; ; memory "flash" paged = yes; - size = 32768; + size = 16384; page_size = 128; - num_pages = 256; - min_write_delay = 4500; - max_write_delay = 4500; + 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 a14 a13 a12 a11 a10 a9 a8", + " 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 a14 a13 a12 a11 a10 a9 a8", + " x x x a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; @@ -5987,89 +6358,60 @@ part " a7 a6 x x x x x x", " x x x x x x x x"; - mode = 0x41; - delay = 6; - blocksize = 256; + mode = 0x21; + delay = 16; + 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" + memory "fuse" 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"; + 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 0 0 1 0 0", - "x x x x x x x x x x x x x i i i"; + 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 = 4500; - max_write_delay = 4500; + 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", + 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"; - ; ; + #------------------------------------------------------------ -# ATmega3290P +# ATmega8 #------------------------------------------------------------ -# 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; + 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 0 0 0 0 0", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; + timeout = 200; stabdelay = 100; cmdexedelay = 25; @@ -6079,21 +6421,22 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 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; + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 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; + resetdelayms = 2; resetdelayus = 0; hvleavestabdelay = 15; + resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -6101,87 +6444,72 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - idr = 0x31; - spmcr = 0x57; - - memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ - size = 1024; + 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", - " x x x x x x a9 a8", + " 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", - " x x x x x x a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", - " i i i i i i i i"; - - 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; + mode = 0x04; delay = 20; - blocksize = 8; + blocksize = 128; readsize = 256; ; - memory "flash" paged = yes; - size = 32768; - page_size = 128; - num_pages = 256; + 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 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + 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", - " 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", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " 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", - " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " 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", - " x x x a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + " 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 = 256; + mode = 0x21; + delay = 10; + blocksize = 64; readsize = 256; ; memory "lfuse" size = 1; - min_write_delay = 4500; - max_write_delay = 4500; + 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"; @@ -6191,8 +6519,8 @@ part memory "hfuse" size = 1; - min_write_delay = 4500; - max_write_delay = 4500; + 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"; @@ -6200,21 +6528,10 @@ part "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; + 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"; @@ -6222,37 +6539,38 @@ part "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 0 0 0 x x x x x", + read = "0 0 1 1 0 0 0 0 x x x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; - - 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 +# ATmega8515 #------------------------------------------------------------ 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; + 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 0 0 0 0 0", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; + timeout = 200; stabdelay = 100; cmdexedelay = 25; @@ -6262,7 +6580,7 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 1; + pollmethod = 0; pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, @@ -6271,10 +6589,10 @@ part 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -6284,80 +6602,64 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - idr = 0x31; - spmcr = 0x57; - - memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 8; /* for parallel programming */ - size = 2048; + 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", - " x x x x x a10 a9 a8", + 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", - " x x x x x a10 a9 a8", + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 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; + mode = 0x04; delay = 20; - blocksize = 8; + blocksize = 128; readsize = 256; ; - memory "flash" paged = yes; - size = 65536; - page_size = 256; - num_pages = 256; + 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", - "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_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", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " 0 0 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", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " 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", - " x x x a12 a11 a10 a9 a8", - " a7 x x x x x x x", + " 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; + mode = 0x21; delay = 6; - blocksize = 256; + blocksize = 64; readsize = 256; ; @@ -6383,17 +6685,6 @@ part "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; @@ -6405,39 +6696,41 @@ part "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 0 0 0 x x x x x", + read = "0 0 1 1 0 0 0 0 x x x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; - - 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 +# ATmega8535 #------------------------------------------------------------ -# 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; + 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 0 0 0 0 0", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; + timeout = 200; stabdelay = 100; cmdexedelay = 25; @@ -6447,7 +6740,7 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 1; + pollmethod = 0; pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, @@ -6456,10 +6749,10 @@ part 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -6469,97 +6762,71 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - idr = 0x31; - spmcr = 0x57; - - memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 8; /* for parallel programming */ - size = 2048; + 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", - " x x x x x a10 a9 a8", + " 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", - " x x x x x a10 a9 a8", + " 0 0 x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 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; + mode = 0x04; delay = 20; - blocksize = 8; + blocksize = 128; readsize = 256; ; - memory "flash" paged = yes; - size = 65536; - page_size = 256; - num_pages = 256; + 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", - "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_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", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " 0 0 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", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " 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", - " x x x a12 a11 a10 a9 a8", - " a7 x x x x x x x", + " 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; + mode = 0x21; delay = 6; - blocksize = 256; + blocksize = 64; readsize = 256; ; memory "lfuse" size = 1; - min_write_delay = 4500; - max_write_delay = 4500; + 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"; @@ -6569,8 +6836,8 @@ part memory "hfuse" size = 1; - min_write_delay = 4500; - max_write_delay = 4500; + 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"; @@ -6578,21 +6845,10 @@ part "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; + 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"; @@ -6600,39 +6856,39 @@ part "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 0 0 0 x x x x x", + read = "0 0 1 1 0 0 0 0 x x x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; - - 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 +# ATtiny26 #------------------------------------------------------------ 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"; + 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"; - 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; @@ -6645,16 +6901,16 @@ part 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; + 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 = 6; - togglevtg = 0; - poweroffdelay = 0; - resetdelayms = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -6664,148 +6920,138 @@ part 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; + 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", - " 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"; + 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"; - 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"; + 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 = 32768; - page_size = 128; - num_pages = 256; + 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 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_lo = " 0 0 1 0 0 0 0 0", + " 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", - " 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", + " 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", - " 0 0 x x x x x x", - " x x a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 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", - " 0 0 x x x x x x", - " x x a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x 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 a13 a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 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 = 64; + blocksize = 16; readsize = 256; - ; + ; - memory "lfuse" + 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; - 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"; + 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 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; + write = "1 0 1 0 1 1 0 0 1 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 "hfuse" + memory "lfuse" 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 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; ; - memory "lock" + 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 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"; - ; + write = "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"; - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; ; memory "calibration" size = 4; - read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", - "0 0 0 0 0 0 a1 a0 o o o o o o o o"; - ; - ; + 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"; + ; + +; + #------------------------------------------------------------ -# ATmega161 +# ATtiny261 #------------------------------------------------------------ +# Close to ATtiny26 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"; + 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"; - 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; @@ -6818,134 +7064,184 @@ part 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; + 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 = 0; - togglevtg = 0; - poweroffdelay = 0; - resetdelayms = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; - chiperasepolltimeout = 30; + chiperasepolltimeout = 10; programfusepulsewidth = 0; - programfusepolltimeout = 2; + programfusepolltimeout = 5; programlockpulsewidth = 0; - programlockpolltimeout = 2; + programlockpolltimeout = 5; - memory "eeprom" - size = 512; - min_write_delay = 3400; - max_write_delay = 3400; + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 128; + page_size = 4; + num_pages = 32; + min_write_delay = 4000; + max_write_delay = 4000; readback_p1 = 0xff; readback_p2 = 0xff; - read = " 1 0 1 0 0 0 0 0", - " x x x x x x x a8", - " a7 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"; + 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"; - mode = 0x04; - delay = 5; - blocksize = 128; + 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 = 16384; - page_size = 128; - num_pages = 128; - min_write_delay = 14000; - max_write_delay = 14000; + 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 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"; + 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"; - 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"; + 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_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_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"; - 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"; + 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"; - mode = 0x21; - delay = 16; - blocksize = 128; + 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 "fuse" + 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; - 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"; + 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 0 1 x x x x x", - "x x x x x x x x 1 i 1 i i i i i"; + 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 "lock" + 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 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 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 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 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 "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 "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; ; - ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; #------------------------------------------------------------ -# ATmega8 +# ATtiny461 #------------------------------------------------------------ +# Close to ATtiny261 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"; + 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; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 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; @@ -6959,10 +7255,10 @@ part 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; + 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; @@ -6971,7 +7267,6 @@ part resetdelayms = 2; resetdelayus = 0; hvleavestabdelay = 15; - resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -6979,132 +7274,165 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" - size = 512; + paged = no; + size = 256; page_size = 4; - min_write_delay = 9000; - max_write_delay = 9000; + 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", - " 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"; + 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"; - mode = 0x04; - delay = 20; - blocksize = 128; + 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 = 8192; + size = 4096; page_size = 64; - num_pages = 128; + num_pages = 64; 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"; + readback_p2 = 0xff; - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_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"; - 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"; + 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_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"; + 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"; - 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"; + 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"; - mode = 0x21; - delay = 10; + 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; - 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"; - write = "1 0 1 0 1 1 0 0 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; - 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"; - write = "1 0 1 0 1 1 0 0 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 "lock" + memory "efuse" 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 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; ; 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"; - ; - ; + 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"; + ; +; #------------------------------------------------------------ -# ATmega8515 +# ATtiny861 #------------------------------------------------------------ +# Close to ATtiny461 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"; + 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; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 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; @@ -7118,16 +7446,16 @@ part 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; + 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 = 6; - togglevtg = 0; - poweroffdelay = 0; - resetdelayms = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; resetdelayus = 0; hvleavestabdelay = 15; chiperasepulsewidth = 0; @@ -7137,27 +7465,40 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" + paged = no; size = 512; - min_write_delay = 9000; - max_write_delay = 9000; + 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", - " 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"; + 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"; - mode = 0x04; - delay = 20; - blocksize = 128; + 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; @@ -7167,99 +7508,175 @@ part max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_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"; - 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"; + 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_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"; + 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"; - 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"; + 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"; - mode = 0x21; + 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 "lfuse" + 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; - read = "0 1 0 1 0 0 0 0 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" + 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; - read = "0 1 0 1 1 0 0 0 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" + 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; - read = "0 1 0 1 1 0 0 0 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 "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; ; memory "calibration" - size = 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"; - ; + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny28 +#------------------------------------------------------------ + +# This is an HVPP-only device. + +part + id = "t28"; + desc = "ATtiny28"; + stk500_devcode = 0x22; + avr910_devcode = 0x5c; + signature = 0x1e 0x91 0x07; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "flash" + size = 2048; + page_size = 2; + readsize = 256; + delay = 5; + ; memory "signature" size = 3; - 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 "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + memory "fuse" + size = 1; + ; +; #------------------------------------------------------------ -# ATmega8535 +# ATmega48 #------------------------------------------------------------ part - id = "m8535"; - desc = "ATMEGA8535"; - stk500_devcode = 0x64; - avr910_devcode = 0x69; - signature = 0x1e 0x93 0x08; + 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 = 0xa0; - chip_erase_delay = 9000; + 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"; @@ -7275,21 +7692,22 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 0; + pollmethod = 1; pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 6; - togglevtg = 0; - poweroffdelay = 0; - resetdelayms = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; + resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -7297,62 +7715,76 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" - size = 512; - min_write_delay = 9000; - max_write_delay = 9000; + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; readback_p1 = 0xff; readback_p2 = 0xff; read = " 1 0 1 0 0 0 0 0", - " 0 0 x x x x x a8", + " 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 x x x x x a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - mode = 0x04; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; delay = 20; - blocksize = 128; + blocksize = 4; readsize = 256; ; memory "flash" paged = yes; - size = 8192; + size = 4096; page_size = 64; - num_pages = 128; + num_pages = 64; min_write_delay = 4500; max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; + readback_p1 = 0x00; + readback_p2 = 0x00; read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", + " 0 0 0 0 0 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", + " 0 0 0 0 0 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 0 x x x x", + " 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 0 x x x x", + " 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", + " 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 = 0x21; + mode = 0x41; delay = 6; blocksize = 64; readsize = 256; @@ -7360,8 +7792,8 @@ part memory "lfuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + 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"; @@ -7371,8 +7803,8 @@ part memory "hfuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + 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"; @@ -7380,10 +7812,21 @@ part "x x x x x x x x i i i i i i i i"; ; + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + memory "lock" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + 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"; @@ -7392,37 +7835,65 @@ part ; 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"; + 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", + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; ; +#------------------------------------------------------------ +# ATmega48P +#------------------------------------------------------------ + +part parent "m48" + id = "m48p"; + desc = "ATmega48P"; + signature = 0x1e 0x92 0x0a; + + ocdrev = 1; + ; #------------------------------------------------------------ -# ATtiny26 +# ATmega48PB +#------------------------------------------------------------ + +part parent "m48" + id = "m48pb"; + desc = "ATmega48PB"; + signature = 0x1e 0x92 0x10; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega88 #------------------------------------------------------------ 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"; + 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"; + chip_erase = "1 0 1 0 1 1 0 0 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; @@ -7433,21 +7904,22 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 0; + pollmethod = 1; 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; + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 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; + resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; + resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -7455,162 +7927,211 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" - size = 128; - min_write_delay = 9000; - max_write_delay = 9000; + 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 x x x x x x x x", - "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - write = "1 1 0 0 0 0 0 0 x x x x x x x x", - "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - mode = 0x04; - delay = 10; - blocksize = 64; - readsize = 256; - ; + 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 = 2048; - page_size = 32; - num_pages = 64; + 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 x x a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " 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", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x x x x a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x x x x a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " 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"; + 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; + mode = 0x41; delay = 6; - blocksize = 16; + 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 "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; - memory "lock" + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" size = 1; - read = "0 1 0 1 1 0 0 0 x x x x x x x x", - "x x x x x x x x x x x x x x o o"; + 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 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; - ; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; - memory "lfuse" + memory "efuse" 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"; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 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; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; ; - memory "hfuse" + memory "lock" 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"; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 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; + write = "1 0 1 0 1 1 0 0 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 x x x x x x x x", - "0 0 0 0 0 0 a1 a0 o o o o o o o o"; - ; + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; -; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega88P +#------------------------------------------------------------ + +part parent "m88" + id = "m88p"; + desc = "ATmega88P"; + signature = 0x1e 0x93 0x0f; + ocdrev = 1; + ; #------------------------------------------------------------ -# ATtiny261 +# ATmega88PB +#------------------------------------------------------------ + +part parent "m88" + id = "m88pb"; + desc = "ATmega88PB"; + signature = 0x1e 0x93 0x16; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega168 #------------------------------------------------------------ -# Close to ATtiny26 part - id = "t261"; - desc = "ATTINY261"; + id = "m168"; + desc = "ATmega168"; 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"; + 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"; + chip_erase = "1 0 1 0 1 1 0 0 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; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; 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; + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 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; + resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; + resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -7618,21 +8139,25 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" paged = no; - size = 128; page_size = 4; - num_pages = 32; - min_write_delay = 4000; - max_write_delay = 4000; + 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 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"; + 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", @@ -7640,141 +8165,161 @@ part " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x x x x", - " x a6 a5 a4 a3 a2 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 10; + delay = 20; blocksize = 4; readsize = 256; - ; + ; memory "flash" paged = yes; - size = 2048; - page_size = 32; - num_pages = 64; + size = 16384; + page_size = 128; + num_pages = 128; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 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"; - 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; - ; + 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 = 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; - write = "1 0 1 0 1 1 0 0 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; - ; - + read = "0 1 0 1 1 0 0 0 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 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; - ; - + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + memory "calibration" size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATmega168P +#------------------------------------------------------------ + +part parent "m168" + id = "m168p"; + desc = "ATmega168P"; + signature = 0x1e 0x94 0x0b; + ocdrev = 1; ; +#------------------------------------------------------------ +# ATmega168PB +#------------------------------------------------------------ + +part parent "m168" + id = "m168pb"; + desc = "ATmega168PB"; + signature = 0x1e 0x94 0x15; + + ocdrev = 1; +; #------------------------------------------------------------ -# ATtiny461 +# ATtiny88 #------------------------------------------------------------ -# Close to ATtiny261 part - id = "t461"; - desc = "ATTINY461"; + id = "t88"; + desc = "ATtiny88"; 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"; + 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"; + chip_erase = "1 0 1 0 1 1 0 0 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; @@ -7785,21 +8330,22 @@ part pollvalue = 0x53; predelay = 1; postdelay = 1; - pollmethod = 0; + pollmethod = 1; 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; + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 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; + resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; + resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -7807,21 +8353,25 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" paged = no; - size = 256; page_size = 4; - num_pages = 64; - min_write_delay = 4000; - max_write_delay = 4000; + 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"; - 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"; + 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", @@ -7830,327 +8380,355 @@ part writepage = " 1 1 0 0 0 0 1 0", " 0 0 x x x x x x", - " a7 a6 a5 a4 a3 a2 0 0", + " x a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 10; + delay = 20; blocksize = 4; - readsize = 256; - ; - + readsize = 64; + ; memory "flash" paged = yes; - size = 4096; + size = 8192; page_size = 64; - num_pages = 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_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"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 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", + " 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", - " x x x x x a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; mode = 0x41; delay = 6; blocksize = 64; readsize = 256; - ; - - 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; + read = "0 1 0 1 0 0 0 0 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; - write = "1 0 1 0 1 1 0 0 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; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; ; memory "efuse" size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", "x x x x x x x x x x x x x x x i"; + ; - read = "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"; + 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 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; - -; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; #------------------------------------------------------------ -# ATtiny861 +# ATmega328 #------------------------------------------------------------ -# 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"; + id = "m328"; + desc = "ATmega328"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x95 0x14; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 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; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; - 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; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 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; - size = 512; - num_pages = 128; - page_size = 4; - min_write_delay = 4000; - max_write_delay = 4000; - readback_p1 = 0xff; - readback_p2 = 0xff; + ocdrev = 1; - 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"; + 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 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 = " 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"; + 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"; + 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; + delay = 20; blocksize = 4; readsize = 256; ; memory "flash" - paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - - read_lo = " 0 0 1 0 0 0 0 0", - " x x x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " 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", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x 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 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 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 x a11 a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 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 = 64; + 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 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"; + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; - 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"; + ; 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"; + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - 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"; + ; 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"; + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x x x x x x x x o"; - min_write_delay = 4500; - max_write_delay = 4500; - ; + write = "1 0 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 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; ; +part parent "m328" + id = "m328p"; + desc = "ATmega328P"; + signature = 0x1e 0x95 0x0F; + + ocdrev = 1; +; #------------------------------------------------------------ -# ATmega48 +# ATmega32m1 +#------------------------------------------------------------ + +part parent "m328" + id = "m32m1"; + desc = "ATmega32M1"; + # stk500_devcode = 0x; + # avr910_devcode = 0x; + signature = 0x1e 0x95 0x84; + bs2 = 0xe2; + + memory "efuse" + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x i i i i i i"; + ; +; + +#------------------------------------------------------------ +# ATtiny2313 #------------------------------------------------------------ part - id = "m48"; - desc = "ATMEGA48"; + id = "t2313"; + desc = "ATtiny2313"; 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"; + 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; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 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; @@ -8164,10 +8742,10 @@ part pollmethod = 1; pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + 0x0E, 0x1E, 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; @@ -8176,7 +8754,6 @@ part resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; - resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -8184,23 +8761,21 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - memory "eeprom" + ocdrev = 0; + + memory "eeprom" + size = 128; 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"; + 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", - " a7 a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", @@ -8209,135 +8784,140 @@ part writepage = " 1 1 0 0 0 0 1 0", " 0 0 x x x x x x", - " a7 a6 a5 a4 a3 a2 0 0", + " x a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 20; + 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 = 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"; + ; + 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 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; +# 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"; - 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"; +# 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"; - 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"; +# 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 = 64; + blocksize = 32; 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"; + ; +# 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; + ; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - 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"; + read = "0 1 0 1 0 0 0 0 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; + ; - write = "1 0 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 "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - memory "lock" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; - write = "1 0 1 0 1 1 0 0 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 "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "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 "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 = 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"; + ; ; - #------------------------------------------------------------ -# ATmega88 +# ATtiny4313 #------------------------------------------------------------ part - id = "m88"; - desc = "ATMEGA88"; + id = "t4313"; + desc = "ATtiny4313"; 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"; + flash_instr = 0xB2, 0x0F, 0x1F; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x23; +## Use the ATtiny26 devcode: + avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x0d; + pagel = 0xD4; + bs2 = 0xD6; + reset = io; + chip_erase_delay = 9000; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 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; @@ -8351,10 +8931,10 @@ part pollmethod = 1; pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + 0x0E, 0x1E, 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; @@ -8363,7 +8943,6 @@ part resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; - resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -8371,23 +8950,21 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - memory "eeprom" + ocdrev = 0; + + memory "eeprom" + size = 256; 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"; + 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 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", @@ -8395,146 +8972,146 @@ part " 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", + " 0 0 x x x x x x", " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 20; + delay = 6; blocksize = 4; readsize = 256; - ; - memory "flash" - paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + ; + memory "flash" + paged = yes; + size = 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 a11 a10 a9 a8", - " a7 a6 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_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 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; + blocksize = 32; 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"; + ; +# ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - 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"; + read = "0 1 0 1 0 0 0 0 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; + ; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x x i i i"; - ; + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - memory "lock" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; - write = "1 0 1 0 1 1 0 0 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 "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; - 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 = 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"; + ; ; #------------------------------------------------------------ -# ATmega88P +# AT90PWM2 #------------------------------------------------------------ part - id = "m88p"; - desc = "ATMEGA88P"; + 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 = 0x73; -# avr910_devcode = 0x; - signature = 0x1e 0x93 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"; + 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; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; - timeout = 200; - stabdelay = 100; - cmdexedelay = 25; - synchloops = 32; - bytedelay = 0; - pollindex = 3; - pollvalue = 0x53; - predelay = 1; - postdelay = 1; - pollmethod = 1; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + 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, @@ -8549,7 +9126,6 @@ part resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; - resetdelay = 15; chiperasepulsewidth = 0; chiperasepolltimeout = 10; programfusepulsewidth = 0; @@ -8557,226 +9133,180 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - memory "eeprom" + memory "eeprom" + size = 512; 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"; + 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"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; - writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x x x a8", - " a7 a6 a5 a4 a3 a2 0 0", - " x x x x x x x x"; + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; - mode = 0x41; - delay = 20; - blocksize = 4; - readsize = 256; - ; - memory "flash" - paged = yes; - size = 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"; + 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"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; - mode = 0x41; - delay = 6; - blocksize = 64; - readsize = 256; - ; + mode = 0x41; + delay = 6; + blocksize = 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"; - memory "lfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 1 0 0 0 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; + ; - write = "1 0 1 0 1 1 0 0 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 "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - memory "hfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 0 0 0 0 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; + ; - write = "1 0 1 0 1 1 0 0 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 "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - memory "efuse" - size = 1; - 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"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; - write = "1 0 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 "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; - memory "lock" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; - write = "1 0 1 0 1 1 0 0 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 "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 +#------------------------------------------------------------ - 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"; - ; - ; +# Completely identical to AT90PWM2 (including the signature!) +part parent "pwm2" + id = "pwm3"; + desc = "AT90PWM3"; + ; #------------------------------------------------------------ -# ATmega168 +# AT90PWM2B #------------------------------------------------------------ +# Same as AT90PWM2 but different signature. -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"; +part parent "pwm2" + id = "pwm2b"; + desc = "AT90PWM2B"; + signature = 0x1e 0x93 0x83; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + ocdrev = 1; + ; - timeout = 200; - stabdelay = 100; - cmdexedelay = 25; - synchloops = 32; - bytedelay = 0; - pollindex = 3; - pollvalue = 0x53; - predelay = 1; - postdelay = 1; - pollmethod = 1; +#------------------------------------------------------------ +# AT90PWM3B +#------------------------------------------------------------ - pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; - hventerstabdelay = 100; - progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; - resetdelayus = 0; - hvleavestabdelay = 15; - resetdelay = 15; - chiperasepulsewidth = 0; - chiperasepolltimeout = 10; - programfusepulsewidth = 0; - programfusepolltimeout = 5; - programlockpulsewidth = 0; - programlockpolltimeout = 5; +# Completely identical to AT90PWM2B (including the signature!) - 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"; +part parent "pwm2b" + id = "pwm3b"; + desc = "AT90PWM3B"; - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", - " i i i i i i i i"; + ocdrev = 1; + ; - writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x x x a8", - " a7 a6 a5 a4 a3 a2 0 0", - " x x x x x x x x"; +#------------------------------------------------------------ +# AT90PWM316 +#------------------------------------------------------------ - mode = 0x41; - delay = 20; - blocksize = 4; - readsize = 256; - ; +# Similar to AT90PWM3B, but with 16 kiB flash, 512 B EEPROM, and 1024 B SRAM. + +part parent "pwm3b" + id = "pwm316"; + desc = "AT90PWM316"; + signature = 0x1e 0x94 0x83; + + ocdrev = 1; memory "flash" paged = yes; @@ -8787,2123 +9317,55 @@ part 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"; + 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"; - mode = 0x41; - delay = 6; - blocksize = 128; - readsize = 256; + 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"; - ; - - 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"; - ; -; - -#------------------------------------------------------------ -# ATmega168P -#------------------------------------------------------------ - -part - id = "m168p"; - desc = "ATMEGA168P"; - 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 0x0b; - 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 = 20; - blocksize = 4; - readsize = 256; - ; - - memory "flash" - paged = yes; - size = 16384; - page_size = 128; - num_pages = 128; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", - " x x a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; - - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; - - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", - " x x x x x x x x"; - - mode = 0x41; - delay = 6; - blocksize = 128; - readsize = 256; - - ; - - memory "lfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; - - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; - - memory "hfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; - - memory "efuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x 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 = 20; - blocksize = 4; - readsize = 64; - ; - memory "flash" - paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; - - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; - - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; - - mode = 0x41; - delay = 6; - blocksize = 64; - readsize = 256; - ; - - memory "lfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; - - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; - - memory "hfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; - - memory "efuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x 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 = 20; - blocksize = 4; - readsize = 256; - ; - - memory "flash" - paged = yes; - size = 32768; - page_size = 128; - num_pages = 256; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", - " x x a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; - - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; - - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 a13 a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", - " x x x x x x x x"; - - mode = 0x41; - delay = 6; - blocksize = 128; - readsize = 256; - - ; - - memory "lfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; - - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; - - memory "hfuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; - ; - - memory "efuse" - size = 1; - min_write_delay = 4500; - max_write_delay = 4500; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x 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"; - ; - ; - -#------------------------------------------------------------ -# ATtiny4313 -#------------------------------------------------------------ - -part - id = "t4313"; - desc = "ATtiny4313"; - has_debugwire = yes; - flash_instr = 0xB2, 0x0F, 0x1F; - eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, - 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, - 0x99, 0xE1, 0xBB, 0xAC; - stk500_devcode = 0x23; -## Use the ATtiny26 devcode: - avr910_devcode = 0x5e; - signature = 0x1e 0x92 0x0d; - pagel = 0xD4; - bs2 = 0xD6; - reset = io; - chip_erase_delay = 9000; - - pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", - "x x x x x x x x x x x x x x x x"; - - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; - - timeout = 200; - stabdelay = 100; - cmdexedelay = 25; - synchloops = 32; - bytedelay = 0; - pollindex = 3; - pollvalue = 0x53; - predelay = 1; - postdelay = 1; - pollmethod = 1; - - pp_controlstack = - 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, - 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, - 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, - 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; - hventerstabdelay = 100; - progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; - resetdelayus = 0; - hvleavestabdelay = 15; - chiperasepulsewidth = 0; - chiperasepolltimeout = 10; - programfusepulsewidth = 0; - programfusepolltimeout = 5; - programlockpulsewidth = 0; - programlockpolltimeout = 5; - - memory "eeprom" - size = 256; - paged = no; - page_size = 4; - min_write_delay = 4000; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", - "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; - - write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", - "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; - - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", - " i i i i i i i i"; - - writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x x x x", - " a7 a6 a5 a4 a3 a2 0 0", - " x x x x x x x x"; - - mode = 0x41; - delay = 6; - blocksize = 4; - readsize = 256; - ; - memory "flash" - paged = yes; - size = 4096; - page_size = 64; - num_pages = 64; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 0 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 0 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; - - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; - - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 0 a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; - - mode = 0x41; - delay = 6; - blocksize = 32; - readsize = 256; - ; -# ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D. - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; - memory "lock" - size = 1; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "lfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "hfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; - - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "efuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x x x x i"; - - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "calibration" - size = 2; - read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", - "0 0 0 0 0 0 0 a0 o o o o o o o o"; - ; - ; - -#------------------------------------------------------------ -# AT90PWM2 -#------------------------------------------------------------ - -part - id = "pwm2"; - desc = "AT90PWM2"; - has_debugwire = yes; - flash_instr = 0xB6, 0x01, 0x11; - eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, - 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, - 0x99, 0xF9, 0xBB, 0xAF; - stk500_devcode = 0x65; -## avr910_devcode = ?; - signature = 0x1e 0x93 0x81; - pagel = 0xD8; - bs2 = 0xE2; - reset = io; - chip_erase_delay = 9000; - - pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", - "x x x x x x x x x x x x x x x x"; - - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; - - timeout = 200; - stabdelay = 100; - cmdexedelay = 25; - synchloops = 32; - bytedelay = 0; - pollindex = 3; - pollvalue = 0x53; - predelay = 1; - postdelay = 1; - pollmethod = 1; - - pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; - hventerstabdelay = 100; - progmodedelay = 0; - latchcycles = 5; - togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; - resetdelayus = 0; - hvleavestabdelay = 15; - chiperasepulsewidth = 0; - chiperasepolltimeout = 10; - programfusepulsewidth = 0; - programfusepolltimeout = 5; - programlockpulsewidth = 0; - programlockpolltimeout = 5; - - memory "eeprom" - size = 512; - paged = no; - page_size = 4; - min_write_delay = 4000; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", - "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; - - write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", - "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; - - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", - " i i i i i i i i"; - - writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x x x x", - " a7 a6 a5 a4 a3 a2 0 0", - " x x x x x x x x"; - - mode = 0x41; - delay = 6; - blocksize = 4; - readsize = 256; - ; - memory "flash" - paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; - - loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; - - loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; - - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; - - mode = 0x41; - delay = 6; - blocksize = 64; - readsize = 256; - ; -# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81. - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; - memory "lock" - size = 1; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; - - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "lfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "hfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; - - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "efuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x 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_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 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 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 0 0 0 a10 a9 a8", - " a7 a6 a5 x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; - mode = 0x41; + mode = 0x21; 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"; - ; + blocksize = 128; + readsize = 256; + ; ; #------------------------------------------------------------ -# ATtiny85 +# AT90PWM216 +#------------------------------------------------------------ +# Completely identical to AT90PWM316 (including the signature!) + +part parent "pwm316" + id = "pwm216"; + desc = "AT90PWM216"; + ; + +#------------------------------------------------------------ +# ATtiny25 #------------------------------------------------------------ part - id = "t85"; - desc = "ATtiny85"; + id = "t25"; + desc = "ATtiny25"; has_debugwire = yes; flash_instr = 0xB4, 0x02, 0x12; eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, @@ -10914,7 +9376,7 @@ part ## avr910_devcode = ?; ## Try the AT90S2313 devcode: avr910_devcode = 0x20; - signature = 0x1e 0x93 0x0b; + signature = 0x1e 0x91 0x08; reset = io; chip_erase_delay = 4500; @@ -10955,19 +9417,21 @@ part programfusepolltimeout = 25; programlockpolltimeout = 25; + ocdrev = 1; + memory "eeprom" - size = 512; + 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 a8", - "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; - write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", - "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", @@ -10975,8 +9439,8 @@ part " 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", + " 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; @@ -10986,36 +9450,36 @@ part ; memory "flash" paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; + 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 a11 a10 a9 a8", + " 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 a11 a10 a9 a8", + " 0 0 0 0 0 0 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x a3 a2 a1 a0", " i i i i i i i i"; - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", " x x x x x x x x"; mode = 0x41; @@ -11023,7 +9487,7 @@ part blocksize = 32; readsize = 256; ; -# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08. +# 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", @@ -11033,6 +9497,8 @@ part size = 1; write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; @@ -11071,221 +9537,37 @@ part ; memory "calibration" - size = 2; + size = 1; read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", "0 0 0 0 0 0 0 a0 o o o o o o o o"; ; ; #------------------------------------------------------------ -# ATmega640 +# ATtiny45 #------------------------------------------------------------ -# 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 -#------------------------------------------------------------ + 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; -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"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x 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"; + chip_erase = "1 0 1 0 1 1 0 0 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; @@ -11298,183 +9580,178 @@ part postdelay = 1; pollmethod = 1; - pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; hventerstabdelay = 100; progmodedelay = 0; - latchcycles = 5; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; togglevtg = 1; - poweroffdelay = 15; + poweroffdelay = 25; resetdelayms = 1; resetdelayus = 0; - hvleavestabdelay = 15; - chiperasepulsewidth = 0; - chiperasepolltimeout = 10; - programfusepulsewidth = 0; - programfusepolltimeout = 5; - programlockpulsewidth = 0; - programlockpolltimeout = 5; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; - idr = 0x31; - spmcr = 0x57; - rampz = 0x3b; - allowfullpagebitstream = no; + ocdrev = 1; - memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 8; /* for parallel programming */ - size = 4096; - min_write_delay = 9000; - max_write_delay = 9000; - readback_p1 = 0x00; - readback_p2 = 0x00; - read = " 1 0 1 0 0 0 0 0", - " x x x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + memory "eeprom" + size = 256; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; - write = " 1 1 0 0 0 0 0 0", - " x x x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 a2 a1 a0", + " 0 0 0 0 0 0 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 0 0 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 8; + delay = 6; + blocksize = 4; readsize = 256; - ; - - memory "flash" - paged = yes; - size = 131072; - page_size = 256; - num_pages = 512; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0x00; - readback_p2 = 0x00; - read_lo = " 0 0 1 0 0 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + ; + memory "flash" + paged = yes; + size = 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", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - writepage = " 0 1 0 0 1 1 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 x x x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 256; + delay = 6; + blocksize = 32; readsize = 256; - ; - - memory "lfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; + ; +# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!) + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "hfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "efuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x x i i i"; + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "lock" - size = 1; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; - - memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + ; - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; ; #------------------------------------------------------------ -# ATmega1281 +# ATtiny85 #------------------------------------------------------------ -# 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"; +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 0 0 0 0 0", - "x x x x x 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; @@ -11487,170 +9764,161 @@ part postdelay = 1; pollmethod = 1; - pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; hventerstabdelay = 100; - progmodedelay = 0; - latchcycles = 5; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; togglevtg = 1; - poweroffdelay = 15; + poweroffdelay = 25; resetdelayms = 1; resetdelayus = 0; - hvleavestabdelay = 15; - chiperasepulsewidth = 0; - chiperasepolltimeout = 10; - programfusepulsewidth = 0; - programfusepolltimeout = 5; - programlockpulsewidth = 0; - programlockpolltimeout = 5; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; - idr = 0x31; - spmcr = 0x57; - rampz = 0x3b; - allowfullpagebitstream = no; + ocdrev = 1; - memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 8; /* for parallel programming */ - size = 4096; - min_write_delay = 9000; - max_write_delay = 9000; - readback_p1 = 0x00; - readback_p2 = 0x00; - read = " 1 0 1 0 0 0 0 0", - " x x x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; - write = " 1 1 0 0 0 0 0 0", - " x x x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 a2 a1 a0", + " 0 0 0 0 0 0 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x a11 a10 a9 a8", - " a7 a6 a5 a4 a3 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 8; + delay = 6; + blocksize = 4; readsize = 256; - ; - - memory "flash" - paged = yes; - size = 131072; - page_size = 256; - num_pages = 512; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0x00; - readback_p2 = 0x00; - read_lo = " 0 0 1 0 0 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + ; + memory "flash" + paged = yes; + size = 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", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - writepage = " 0 1 0 0 1 1 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 x x x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 256; + delay = 6; + blocksize = 32; readsize = 256; - ; - - memory "lfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; + ; +# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "hfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "efuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x x i i i"; + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "lock" - size = 1; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; - - memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + ; - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; ; #------------------------------------------------------------ -# ATmega2560 +# ATmega640 #------------------------------------------------------------ +# Almost same as ATmega1280, except for different memory sizes part - id = "m2560"; - desc = "ATMEGA2560"; - signature = 0x1e 0x98 0x01; + id = "m640"; + desc = "ATmega640"; + signature = 0x1e 0x96 0x08; has_jtag = yes; # stk500_devcode = 0xB2; # avr910_devcode = 0x43; @@ -11679,7 +9947,7 @@ part 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 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; + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; latchcycles = 5; @@ -11700,6 +9968,8 @@ part rampz = 0x3b; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -11736,20 +10006,20 @@ part memory "flash" paged = yes; - size = 262144; + size = 65536; page_size = 256; - num_pages = 1024; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; readback_p2 = 0x00; read_lo = " 0 0 1 0 0 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; @@ -11764,15 +10034,10 @@ part " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 0 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; @@ -11837,13 +10102,13 @@ part ; #------------------------------------------------------------ -# ATmega2561 +# ATmega1280 #------------------------------------------------------------ part - id = "m2561"; - desc = "ATMEGA2561"; - signature = 0x1e 0x98 0x02; + id = "m1280"; + desc = "ATmega1280"; + signature = 0x1e 0x97 0x03; has_jtag = yes; # stk500_devcode = 0xB2; # avr910_devcode = 0x43; @@ -11872,7 +10137,7 @@ part 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 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; + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; latchcycles = 5; @@ -11893,6 +10158,8 @@ part rampz = 0x3b; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -11929,9 +10196,9 @@ part memory "flash" paged = yes; - size = 262144; + size = 131072; page_size = 256; - num_pages = 1024; + num_pages = 512; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; @@ -11961,11 +10228,6 @@ part " 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; @@ -12030,20 +10292,32 @@ part ; #------------------------------------------------------------ -# ATmega128RFA1 +# ATmega1281 +#------------------------------------------------------------ +# Identical to ATmega1280 + +part parent "m1280" + id = "m1281"; + desc = "ATmega1281"; + signature = 0x1e 0x97 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega2560 #------------------------------------------------------------ -# Identical to ATmega2561 but half the ROM part - id = "m128rfa1"; - desc = "ATMEGA128RFA1"; - signature = 0x1e 0xa7 0x01; + id = "m2560"; + desc = "ATmega2560"; + signature = 0x1e 0x98 0x01; has_jtag = yes; -# stk500_devcode = 0xB2; + stk500_devcode = 0xB2; # avr910_devcode = 0x43; - chip_erase_delay = 55000; + chip_erase_delay = 9000; pagel = 0xD7; - bs2 = 0xE2; + 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"; @@ -12087,12 +10361,14 @@ part rampz = 0x3b; allowfullpagebitstream = no; + ocdrev = 4; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ size = 4096; - min_write_delay = 50000; - max_write_delay = 50000; + min_write_delay = 9000; + max_write_delay = 9000; readback_p1 = 0x00; readback_p2 = 0x00; read = " 1 0 1 0 0 0 0 0", @@ -12123,11 +10399,11 @@ part memory "flash" paged = yes; - size = 131072; + size = 262144; page_size = 256; - num_pages = 512; - min_write_delay = 50000; - max_write_delay = 50000; + 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", @@ -12155,8 +10431,13 @@ part " 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 = 20; + delay = 10; blocksize = 256; readsize = 256; ; @@ -12219,376 +10500,260 @@ part ; #------------------------------------------------------------ -# ATtiny24 +# ATmega2561 #------------------------------------------------------------ -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; +part parent "m2560" + id = "m2561"; + desc = "ATmega2561"; + signature = 0x1e 0x98 0x02; - pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", - "x x x x x x x x x x x x x x x x"; + ocdrev = 4; + ; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM - timeout = 200; - stabdelay = 100; - cmdexedelay = 25; - synchloops = 32; - bytedelay = 0; - pollindex = 3; - pollvalue = 0x53; - predelay = 1; - postdelay = 1; - pollmethod = 1; +part parent "m2561" + id = "m128rfa1"; + desc = "ATmega128RFA1"; + signature = 0x1e 0xa7 0x01; + chip_erase_delay = 55000; + bs2 = 0xE2; - hvsp_controlstack = - 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, - 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, - 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, - 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; - hventerstabdelay = 100; - hvspcmdexedelay = 0; - synchcycles = 6; - latchcycles = 1; - togglevtg = 1; - poweroffdelay = 25; - resetdelayms = 0; - resetdelayus = 70; - hvleavestabdelay = 100; - resetdelay = 25; - chiperasepolltimeout = 40; - chiperasetime = 0; - programfusepolltimeout = 25; - programlockpolltimeout = 25; + ocdrev = 3; - 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"; + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 50000; + max_write_delay = 50000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - 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"; + 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 = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - writepage = " 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"; + 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 = 4; + delay = 20; + blocksize = 256; 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"; +#------------------------------------------------------------ +# ATmega256RFR2 +#------------------------------------------------------------ - 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"; +part parent "m2561" + id = "m256rfr2"; + desc = "ATmega256RFR2"; + signature = 0x1e 0xa8 0x02; + chip_erase_delay = 18500; + bs2 = 0xE2; - 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"; + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 8192; + min_write_delay = 13000; + max_write_delay = 13000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - 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"; + write = " 1 1 0 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - 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; - ; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; - memory "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"; + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; - read = "0 1 0 1 0 0 0 0 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; - ; + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; - 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; - ; + ocdrev = 4; + ; - 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"; +#------------------------------------------------------------ +# ATmega128RFR2 +#------------------------------------------------------------ - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; +part parent "m128rfa1" + id = "m128rfr2"; + desc = "ATmega128RFR2"; + signature = 0x1e 0xa7 0x02; - 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"; - ; + + ocdrev = 3; ; #------------------------------------------------------------ -# ATtiny44 +# ATmega64RFR2 #------------------------------------------------------------ -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"; +part parent "m128rfa1" + id = "m64rfr2"; + desc = "ATmega64RFR2"; + signature = 0x1e 0xa6 0x02; - chip_erase = "1 0 1 0 1 1 0 0 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; + ocdrev = 3; - hvsp_controlstack = - 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, - 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, - 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, - 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 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 "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 50000; + max_write_delay = 50000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - 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"; + 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"; - 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 = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_lo = " 1 1 0 0 0 0 0 1", - " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", - " i i i i i i i i"; + loadpage_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 = " 1 1 0 0 0 0 1 0", - " 0 0 x x x x x x", - " x a6 a5 a4 a3 a2 0 0", - " x x x x x x x x"; + writepage = " 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 = 4; + delay = 20; + blocksize = 256; readsize = 256; - ; - memory "flash" - paged = yes; - size = 4096; - page_size = 64; - num_pages = 64; - min_write_delay = 4500; - max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 0 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + ; - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 0 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 13000; + max_write_delay = 13000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - 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"; + 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_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 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 = " 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"; + 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 = 6; - blocksize = 32; + delay = 10; + blocksize = 8; 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"; +#------------------------------------------------------------ +# ATmega2564RFR2 +#------------------------------------------------------------ - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; +part parent "m256rfr2" + id = "m2564rfr2"; + desc = "ATmega2564RFR2"; + signature = 0x1e 0xa8 0x03; + ; - 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"; +#------------------------------------------------------------ +# ATmega1284RFR2 +#------------------------------------------------------------ - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; +part parent "m128rfr2" + id = "m1284rfr2"; + desc = "ATmega1284RFR2"; + signature = 0x1e 0xa7 0x03; + ; - 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"; - ; +#------------------------------------------------------------ +# ATmega644RFR2 +#------------------------------------------------------------ + +part parent "m64rfr2" + id = "m644rfr2"; + desc = "ATmega644RFR2"; + signature = 0x1e 0xa6 0x03; ; #------------------------------------------------------------ -# ATtiny84 +# ATtiny24 #------------------------------------------------------------ part - id = "t84"; - desc = "ATtiny84"; + id = "t24"; + desc = "ATtiny24"; has_debugwire = yes; flash_instr = 0xB4, 0x07, 0x17; eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, @@ -12599,7 +10764,7 @@ part ## avr910_devcode = ?; ## Try the AT90S2313 devcode: avr910_devcode = 0x20; - signature = 0x1e 0x93 0x0c; + signature = 0x1e 0x91 0x0b; reset = io; chip_erase_delay = 4500; @@ -12640,19 +10805,21 @@ part programfusepolltimeout = 25; programlockpolltimeout = 25; + ocdrev = 1; + memory "eeprom" - size = 512; + 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 a8", - "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; - write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", - "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", @@ -12671,36 +10838,36 @@ part ; memory "flash" paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; + 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 a11 a10 a9 a8", + " 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 a11 a10 a9 a8", + " 0 0 0 0 0 0 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x a3 a2 a1 a0", " i i i i i i i i"; - writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", " x x x x x x x x"; mode = 0x41; @@ -12708,13 +10875,12 @@ part blocksize = 32; readsize = 256; ; -# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C. +# ATtiny24 has Signature Bytes: 0x1E 0x91 0x0B. memory "signature" size = 3; read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; - memory "lock" size = 1; write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", @@ -12766,213 +10932,31 @@ part ; #------------------------------------------------------------ -# 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 +# ATtiny44 #------------------------------------------------------------ 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"; + 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; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", - "x x x x x x x x x x x x x x x x"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; timeout = 200; stabdelay = 100; @@ -12985,183 +10969,178 @@ part postdelay = 1; pollmethod = 1; - pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; hventerstabdelay = 100; - progmodedelay = 0; - latchcycles = 5; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; - resetdelayus = 0; - hvleavestabdelay = 15; - chiperasepulsewidth = 0; - chiperasepolltimeout = 10; - programfusepulsewidth = 0; - programfusepolltimeout = 5; - programlockpulsewidth = 0; - programlockpolltimeout = 5; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; - idr = 0x31; - spmcr = 0x57; - rampz = 0x3b; - allowfullpagebitstream = no; + ocdrev = 1; - 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"; + 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", - " x x x x x a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 a2 a1 a0", + " 0 0 0 0 0 0 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x a10 a9 a8", - " a7 a6 a5 a4 a3 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 8; + delay = 6; + blocksize = 4; readsize = 256; - ; - - memory "flash" - paged = yes; - size = 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"; + ; + 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 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_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 a14 a13 a12 a11 a10 a9 a8", - " a7 x x x x x x x", - " x x x x x x x x"; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; mode = 0x41; delay = 6; - blocksize = 256; + blocksize = 32; readsize = 256; - ; - - memory "lfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; - - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; + ; +# 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 "hfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "efuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x i i i i"; + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "lock" - size = 1; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; - - memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + ; - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; ; #------------------------------------------------------------ -# AT90USB647 +# ATtiny84 #------------------------------------------------------------ -# 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"; +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 0 0 0 0 0", - "x x x x x 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; @@ -13174,292 +11153,291 @@ part postdelay = 1; pollmethod = 1; - pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; hventerstabdelay = 100; - progmodedelay = 0; - latchcycles = 5; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; togglevtg = 1; - poweroffdelay = 15; - resetdelayms = 1; - resetdelayus = 0; - hvleavestabdelay = 15; - chiperasepulsewidth = 0; - chiperasepolltimeout = 10; - programfusepulsewidth = 0; - programfusepolltimeout = 5; - programlockpulsewidth = 0; - programlockpolltimeout = 5; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; - idr = 0x31; - spmcr = 0x57; - rampz = 0x3b; - allowfullpagebitstream = no; + ocdrev = 1; - 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"; + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; - write = " 1 1 0 0 0 0 0 0", - " x x x x x a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 a2 a1 a0", + " 0 0 0 0 0 0 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 x x x a10 a9 a8", - " a7 a6 a5 a4 a3 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 8; + delay = 6; + blocksize = 4; readsize = 256; - ; - - memory "flash" - paged = yes; - size = 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"; + ; + 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 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x 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"; + 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 = 256; + blocksize = 32; readsize = 256; - ; - - memory "lfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; + ; +# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "hfuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x i i i i i i i i"; + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "efuse" - size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x i i i i"; + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x o o o o o o o o"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; + ; - memory "lock" - size = 1; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; - ; - - memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + ; - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; ; #------------------------------------------------------------ -# AT90USB1286 +# ATtiny43U #------------------------------------------------------------ -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"; +part + id = "t43u"; + desc = "ATtiny43u"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x0C; + reset = io; + chip_erase_delay = 1000; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", - "x x x x x x x x x x x x x x x x"; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; - timeout = 200; - stabdelay = 100; - cmdexedelay = 25; - synchloops = 32; - bytedelay = 0; - pollindex = 3; - pollvalue = 0x53; - predelay = 1; - postdelay = 1; - pollmethod = 1; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; - pp_controlstack = - 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, - 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, - 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, - 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, 0x4E, 0x5E, + 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, 0x06, 0x16, 0x46, 0x56, + 0x0A, 0x1A, 0x4A, 0x5A, 0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00; hventerstabdelay = 100; progmodedelay = 0; + hvspcmdexedelay = 0; latchcycles = 5; togglevtg = 1; - poweroffdelay = 15; + poweroffdelay = 20; resetdelayms = 1; resetdelayus = 0; hvleavestabdelay = 15; + resetdelay = 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; - ; - + size = 64; + paged = yes; + page_size = 4; + num_pages = 16; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "0 0 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "0 0 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " 0 0 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; memory "flash" paged = yes; - size = 131072; - page_size = 256; - num_pages = 512; + 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", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + readback_p1 = 0xff; + readback_p2 = 0xff; - read_hi = " 0 0 1 0 1 0 0 0", - "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_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - writepage = " 0 1 0 0 1 1 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 x x x x x x x", - " x x x x x x x x"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; - mode = 0x41; - delay = 6; - blocksize = 256; - readsize = 256; - ; + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 4500; + max_write_delay = 4500; + ; memory "lfuse" size = 1; @@ -13468,9 +11446,9 @@ part read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; + min_write_delay = 4500; + max_write_delay = 4500; + ; memory "hfuse" size = 1; @@ -13479,54 +11457,37 @@ part read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; + min_write_delay = 4500; + max_write_delay = 4500; + ; memory "efuse" size = 1; write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x i i i i"; + "x x x x x x x x x x x x x x x i"; read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; - min_write_delay = 9000; - max_write_delay = 9000; - ; - - memory "lock" - size = 1; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; - - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; - min_write_delay = 9000; - max_write_delay = 9000; - ; + min_write_delay = 4500; + max_write_delay = 4500; + ; memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; - - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; - ; + 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"; + ; +; #------------------------------------------------------------ -# AT90USB1287 +# ATmega32u4 #------------------------------------------------------------ -# identical to AT90USB1286 part - id = "usb1287"; - desc = "AT90USB1287"; - signature = 0x1e 0x97 0x82; + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + usbpid = 0x2ff4; has_jtag = yes; # stk500_devcode = 0xB2; # avr910_devcode = 0x43; @@ -13576,21 +11537,23 @@ part rampz = 0x3b; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ - page_size = 8; /* for parallel programming */ - size = 4096; + page_size = 4; /* for parallel programming */ + size = 1024; min_write_delay = 9000; max_write_delay = 9000; readback_p1 = 0x00; readback_p2 = 0x00; read = " 1 0 1 0 0 0 0 0", - " x x x x a11 a10 a9 a8", + " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " x x x x a11 a10 a9 a8", + " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; @@ -13605,48 +11568,48 @@ part " x x x x x x x x"; mode = 0x41; - delay = 10; - blocksize = 8; + delay = 20; + blocksize = 4; readsize = 256; ; memory "flash" paged = yes; - size = 131072; - page_size = 256; - num_pages = 512; + size = 32768; + page_size = 128; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; readback_p2 = 0x00; read_lo = " 0 0 1 0 0 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " x x x x x x x x", - " x a6 a5 a4 a3 a2 a1 a0", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 x x x x x x x", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", " x x x x x x x x"; mode = 0x41; delay = 6; - blocksize = 256; + blocksize = 128; readsize = 256; ; @@ -13707,25 +11670,27 @@ part ; ; - #------------------------------------------------------------ -# AT90USB162 +# AT90USB646 #------------------------------------------------------------ part - id = "usb162"; - desc = "AT90USB162"; - has_jtag = no; - has_debugwire = yes; - signature = 0x1e 0x94 0x82; + id = "usb646"; + desc = "AT90USB646"; + signature = 0x1e 0x96 0x82; + usbpid = 0x2ff9; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; chip_erase_delay = 9000; - reset = io; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; - pagel = 0xD7; - bs2 = 0xC6; timeout = 200; stabdelay = 100; @@ -13737,6 +11702,7 @@ part predelay = 1; postdelay = 1; pollmethod = 1; + pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, @@ -13757,78 +11723,84 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + memory "eeprom" - paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ - size = 512; - num_pages = 128; + 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", - " 0 0 0 0 a11 a10 a9 a8", + " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", + " 0 0 0 0 0 a2 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", " x x x x x x x x"; mode = 0x41; - delay = 20; - blocksize = 4; + delay = 10; + blocksize = 8; readsize = 256; ; memory "flash" paged = yes; - size = 16384; - page_size = 128; - num_pages = 128; + size = 65536; + page_size = 256; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; readback_p2 = 0x00; read_lo = " 0 0 1 0 0 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", " x x x x x x x x"; mode = 0x41; delay = 6; - blocksize = 128; + blocksize = 256; readsize = 256; ; @@ -13857,7 +11829,7 @@ part memory "efuse" size = 1; write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x i i i i i i i i"; + "x x x x x x x x x x x x i i i i"; read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; @@ -13878,38 +11850,51 @@ part memory "calibration" size = 1; - read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + read = "0 0 1 1 1 0 0 0 x x x x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; ; + memory "signature" size = 3; - read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + read = "0 0 1 1 0 0 0 0 x x x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; ; #------------------------------------------------------------ -# AT90USB82 +# AT90USB647 +#------------------------------------------------------------ +# identical to AT90USB646 + +part parent "usb646" + id = "usb647"; + desc = "AT90USB647"; + signature = 0x1e 0x96 0x82; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AT90USB1286 #------------------------------------------------------------ -# 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; + id = "usb1286"; + desc = "AT90USB1286"; + signature = 0x1e 0x97 0x82; + usbpid = 0x2ffb; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; chip_erase_delay = 9000; - reset = io; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; - pagel = 0xD7; - bs2 = 0xC6; timeout = 200; stabdelay = 100; @@ -13921,6 +11906,7 @@ part predelay = 1; postdelay = 1; pollmethod = 1; + pp_controlstack = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, @@ -13941,46 +11927,52 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ - page_size = 4; /* for parallel programming */ - size = 512; - num_pages = 128; + page_size = 8; /* for parallel programming */ + size = 4096; min_write_delay = 9000; max_write_delay = 9000; readback_p1 = 0x00; readback_p2 = 0x00; read = " 1 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", + " x x x x a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_lo = " 1 1 0 0 0 0 0 1", " 0 0 0 0 0 0 0 0", - " 0 0 0 0 0 0 a1 a0", + " 0 0 0 0 0 a2 a1 a0", " i i i i i i i i"; writepage = " 1 1 0 0 0 0 1 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", " x x x x x x x x"; mode = 0x41; - delay = 20; - blocksize = 4; + delay = 10; + blocksize = 8; readsize = 256; ; memory "flash" paged = yes; - size = 8192; - page_size = 128; - num_pages = 64; + size = 131072; + page_size = 256; + num_pages = 512; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; @@ -13997,22 +11989,22 @@ part loadpage_lo = " 0 1 0 0 0 0 0 0", " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", "a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + " a7 x x x x x x x", " x x x x x x x x"; mode = 0x41; delay = 6; - blocksize = 128; + blocksize = 256; readsize = 256; ; @@ -14041,7 +12033,7 @@ part memory "efuse" size = 1; write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x i i i i i i i i"; + "x x x x x x x x x x x x i i i i"; read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; @@ -14062,32 +12054,41 @@ part memory "calibration" size = 1; - read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + read = "0 0 1 1 1 0 0 0 x x x x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; ; + memory "signature" size = 3; - read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + read = "0 0 1 1 0 0 0 0 x x x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; ; #------------------------------------------------------------ -# ATmega32U2 +# AT90USB1287 #------------------------------------------------------------ -# Changes against AT90USB162 (beside IDs) -# memory "flash" -# size = 32768; -# num_pages = 256; -# memory "eeprom" -# size = 1024; -# num_pages = 256; +# identical to AT90USB1286 + +part parent "usb1286" + id = "usb1287"; + desc = "AT90USB1287"; + signature = 0x1e 0x97 0x82; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + part - id = "m32u2"; - desc = "ATmega32U2"; + id = "usb162"; + desc = "AT90USB162"; has_jtag = no; has_debugwire = yes; - signature = 0x1e 0x95 0x8a; + signature = 0x1e 0x94 0x82; + usbpid = 0x2ffa; chip_erase_delay = 9000; reset = io; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", @@ -14127,11 +12128,13 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ - size = 1024; - num_pages = 256; + size = 512; + num_pages = 128; min_write_delay = 9000; max_write_delay = 9000; readback_p1 = 0x00; @@ -14164,9 +12167,9 @@ part memory "flash" paged = yes; - size = 32768; + size = 16384; page_size = 128; - num_pages = 256; + num_pages = 128; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; @@ -14257,22 +12260,22 @@ part "x x x x x x a1 a0 o o o o o o o o"; ; ; + #------------------------------------------------------------ -# ATmega16U2 +# AT90USB82 #------------------------------------------------------------ -# Changes against ATmega32U2 (beside IDs) +# Changes against AT90USB162 (beside IDs) # memory "flash" -# size = 16384; -# num_pages = 128; -# memory "eeprom" -# size = 512; -# num_pages = 128; +# size = 8192; +# num_pages = 64; + part - id = "m16u2"; - desc = "ATmega16U2"; + id = "usb82"; + desc = "AT90USB82"; has_jtag = no; has_debugwire = yes; - signature = 0x1e 0x94 0x89; + signature = 0x1e 0x93 0x82; + usbpid = 0x2ff7; chip_erase_delay = 9000; reset = io; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", @@ -14312,6 +12315,8 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ @@ -14349,9 +12354,9 @@ part memory "flash" paged = yes; - size = 16384; + size = 8192; page_size = 128; - num_pages = 128; + num_pages = 64; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; @@ -14444,20 +12449,22 @@ part ; #------------------------------------------------------------ -# ATmega8U2 +# ATmega32U2 #------------------------------------------------------------ -# Changes against ATmega16U2 (beside IDs) +# Changes against AT90USB162 (beside IDs) # memory "flash" -# size = 8192; -# page_size = 64; -# blocksize = 64; - +# size = 32768; +# num_pages = 256; +# memory "eeprom" +# size = 1024; +# num_pages = 256; part - id = "m8u2"; - desc = "ATmega8U2"; + id = "m32u2"; + desc = "ATmega32U2"; has_jtag = no; has_debugwire = yes; - signature = 0x1e 0x93 0x89; + signature = 0x1e 0x95 0x8a; + usbpid = 0x2ff0; chip_erase_delay = 9000; reset = io; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", @@ -14497,11 +12504,13 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; + ocdrev = 1; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ - size = 512; - num_pages = 128; + size = 1024; + num_pages = 256; min_write_delay = 9000; max_write_delay = 9000; readback_p1 = 0x00; @@ -14534,9 +12543,9 @@ part memory "flash" paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; + size = 32768; + page_size = 128; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0x00; @@ -14568,7 +12577,7 @@ part mode = 0x41; delay = 6; - blocksize = 64; + blocksize = 128; readsize = 256; ; @@ -14628,37 +12637,41 @@ part ; ; #------------------------------------------------------------ -# ATmega325 +# ATmega16U2 #------------------------------------------------------------ +# Changes against ATmega32U2 (beside IDs) +# memory "flash" +# size = 16384; +# num_pages = 128; +# memory "eeprom" +# size = 512; +# num_pages = 128; +part + id = "m16u2"; + desc = "ATmega16U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x89; + usbpid = 0x2fef; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; -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; - + 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, @@ -14679,175 +12692,174 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - idr = 0x31; - spmcr = 0x57; - allowfullpagebitstream = no; + ocdrev = 1; memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ - size = 1024; + size = 512; + num_pages = 128; min_write_delay = 9000; max_write_delay = 9000; - readback_p1 = 0xff; - readback_p2 = 0xff; + readback_p1 = 0x00; + readback_p2 = 0x00; read = " 1 0 1 0 0 0 0 0", - " 0 0 0 0 0 0 a9 a8", + " 0 0 0 0 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 0 0 0 0 a9 a8", + " 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"; + 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", + 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"; + " x x x x x x x x"; - mode = 0x41; - delay = 10; - blocksize = 4; - readsize = 256; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; ; memory "flash" paged = yes; - size = 32768; + size = 16384; page_size = 128; - num_pages = 256; + num_pages = 128; min_write_delay = 4500; max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; + readback_p1 = 0x00; + readback_p2 = 0x00; read_lo = " 0 0 1 0 0 0 0 0", - " 0 a14 a13 a12 a11 a10 a9 a8", + "a15 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " 0 a14 a13 a12 a11 a10 a9 a8", + "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", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 0 0 0 0 0", - " a7 a6 a5 a4 a3 a2 a1 a0", + " 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", - " 0 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", + "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 = 10; - blocksize = 128; - readsize = 256; + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; ; - memory "lock" + memory "lfuse" 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 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", - "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; - memory "lfuse" + memory "hfuse" 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 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "0 0 0 0 0 0 0 0 i i i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; - memory "hfuse" + memory "efuse" 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 0 1 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "0 0 0 0 0 0 0 0 i i i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; - memory "efuse" + 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"; - 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"; + write = "1 0 1 0 1 1 0 0 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 0 0 0 0 0", - "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; ; - - 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 +# ATmega8U2 #------------------------------------------------------------ +# Changes against ATmega16U2 (beside IDs) +# memory "flash" +# size = 8192; +# page_size = 64; +# blocksize = 64; 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; + id = "m8u2"; + desc = "ATmega8U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x89; + usbpid = 0x2fee; chip_erase_delay = 9000; + reset = io; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", - "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; + "x x x x x 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, @@ -14868,151 +12880,146 @@ part programlockpulsewidth = 0; programlockpolltimeout = 5; - idr = 0x31; - spmcr = 0x57; - allowfullpagebitstream = no; + ocdrev = 1; memory "eeprom" paged = no; /* leave this "no" */ - page_size = 8; /* for parallel programming */ - size = 2048; + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; min_write_delay = 9000; max_write_delay = 9000; - readback_p1 = 0xff; - readback_p2 = 0xff; + readback_p1 = 0x00; + readback_p2 = 0x00; read = " 1 0 1 0 0 0 0 0", - " 0 0 0 0 0 a10 a9 a8", + " 0 0 0 0 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 0 0 0 a10 a9 a8", + " 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 a2 a1 a0", - " i i i i i i i 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 a10 a9 a8", - " a7 a6 a5 a4 a3 0 0 0", - " x x x x x x x x"; + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 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 = 10; - blocksize = 8; - readsize = 256; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; ; memory "flash" paged = yes; - size = 65536; - page_size = 256; - num_pages = 256; + size = 8192; + page_size = 128; + num_pages = 64; min_write_delay = 4500; max_write_delay = 4500; - readback_p1 = 0xff; - readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " a15 a14 a13 a12 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + readback_p1 = 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"; + 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", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 0 0 0 0 0", - " a7 a6 a5 a4 a3 a2 a1 a0", + " 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 a5 a4 a3 a2 a1 a0", - " 0 0 0 0 0 0 0 0"; + 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 = 10; - blocksize = 128; - readsize = 256; + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; ; - memory "lock" + memory "lfuse" 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 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", - "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; - memory "lfuse" + memory "hfuse" 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 1 0 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "0 0 0 0 0 0 0 0 i i i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; - memory "hfuse" + memory "efuse" 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 0 1 0 0", + "x x x x x x x x i i i i i i i i"; - write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "0 0 0 0 0 0 0 0 i i i i i i i i"; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; min_write_delay = 9000; max_write_delay = 9000; ; - memory "efuse" + 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"; - 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"; + write = "1 0 1 0 1 1 0 0 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 0 0 0 0 0", - "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; ; - - 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 +# ATmega325 #------------------------------------------------------------ part - id = "m3250"; - desc = "ATMEGA3250"; - signature = 0x1E 0x95 0x06; + id = "m325"; + desc = "ATmega325"; + signature = 0x1e 0x95 0x05; has_jtag = yes; # stk500_devcode = 0x??; # No STK500v1 support? # avr910_devcode = 0x??; # Try the ATmega16 one @@ -15061,6 +13068,8 @@ part spmcr = 0x57; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 4; /* for parallel programming */ @@ -15195,13 +13204,13 @@ part ; #------------------------------------------------------------ -# ATmega6450 +# ATmega645 #------------------------------------------------------------ part - id = "m6450"; - desc = "ATMEGA6450"; - signature = 0x1E 0x96 0x06; + id = "m645"; + desc = "ATmega645"; + signature = 0x1E 0x96 0x05; has_jtag = yes; # stk500_devcode = 0x??; # No STK500v1 support? # avr910_devcode = 0x??; # Try the ATmega16 one @@ -15250,6 +13259,8 @@ part spmcr = 0x57; allowfullpagebitstream = no; + ocdrev = 3; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -15280,7 +13291,7 @@ part mode = 0x41; delay = 10; - blocksize = 4; + blocksize = 8; readsize = 256; ; @@ -15320,332 +13331,114 @@ part 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; - ; + blocksize = 128; + readsize = 256; + ; memory "lock" - size = 1; - offset = 0x8f0027; - ; -; - -#------------------------------------------------------------ -# ATXMEGA128A1 -#------------------------------------------------------------ + 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"; -part - id = "x128a1"; - desc = "ATXMEGA128A1"; - signature = 0x1e 0x97 0x4c; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; + 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 "eeprom" - size = 0x0800; - offset = 0x08c0000; - page_size = 0x20; - readsize = 0x100; - ; + 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"; - memory "application" - size = 0x00020000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; + 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 "apptable" - size = 0x00002000; - offset = 0x0081e000; - page_size = 0x100; - readsize = 0x100; - ; + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; - memory "boot" - size = 0x00002000; - offset = 0x00820000; - page_size = 0x100; - readsize = 0x100; - ; + 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 "flash" - size = 0x00022000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; + memory "efuse" + size = 1; - memory "prodsig" - size = 0x200; - offset = 0x8e0200; - page_size = 0x100; - readsize = 0x100; - ; + 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"; - memory "usersig" - size = 0x200; - offset = 0x8e0400; - page_size = 0x100; - readsize = 0x100; - ; + 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; - offset = 0x1000090; - ; + 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 "fuse0" - size = 1; - offset = 0x8f0020; - ; + memory "calibration" + size = 1; - memory "fuse1" - size = 1; - offset = 0x8f0021; - ; + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; - memory "fuse2" - size = 1; - offset = 0x8f0022; - ; +#------------------------------------------------------------ +# ATmega3250 +#------------------------------------------------------------ - memory "fuse4" - size = 1; - offset = 0x8f0024; - ; +part parent "m325" + id = "m3250"; + desc = "ATmega3250"; + signature = 0x1E 0x95 0x06; - memory "fuse5" - size = 1; - offset = 0x8f0025; - ; + ocdrev = 3; + ; - memory "lock" - size = 1; - offset = 0x8f0027; - ; -; +#------------------------------------------------------------ +# ATmega6450 +#------------------------------------------------------------ + +part parent "m645" + id = "m6450"; + desc = "ATmega6450"; + signature = 0x1E 0x96 0x06; + + ocdrev = 3; + ; #------------------------------------------------------------ -# ATXMEGA128A1REVD +# AVR XMEGA family common values #------------------------------------------------------------ part - id = "x128a1d"; - desc = "ATXMEGA128A1REVD"; - signature = 0x1e 0x97 0x41; - has_jtag = yes; + id = ".xmega"; + desc = "AVR XMEGA family common values"; 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; - ; + mcu_base = 0x0090; memory "signature" size = 3; offset = 0x1000090; ; - memory "fuse0" - size = 1; - offset = 0x8f0020; + memory "prodsig" + size = 0x32; + offset = 0x8e0200; + page_size = 0x32; + readsize = 0x32; ; memory "fuse1" @@ -15672,1114 +13465,1331 @@ part size = 1; offset = 0x8f0027; ; + + memory "data" + # SRAM, only used to supply the offset + offset = 0x1000000; + ; ; #------------------------------------------------------------ -# ATXMEGA192A1 +# ATxmega16A4U #------------------------------------------------------------ -part - id = "x192a1"; - desc = "ATXMEGA192A1"; - signature = 0x1e 0x97 0x4e; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x16a4u"; + desc = "ATxmega16A4U"; + signature = 0x1e 0x94 0x41; + usbpid = 0x2fe3; memory "eeprom" - size = 0x0800; - offset = 0x08c0000; + size = 0x400; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00030000; - offset = 0x0800000; + size = 0x4000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "apptable" - size = 0x00002000; - offset = 0x0082e000; + size = 0x1000; + offset = 0x803000; page_size = 0x100; readsize = 0x100; ; memory "boot" - size = 0x00002000; - offset = 0x00830000; + size = 0x1000; + offset = 0x804000; page_size = 0x100; readsize = 0x100; ; memory "flash" - size = 0x00032000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; + size = 0x5000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "usersig" - size = 0x200; + size = 0x100; offset = 0x8e0400; page_size = 0x100; readsize = 0x100; ; +; - memory "signature" - size = 3; - offset = 0x1000090; - ; +#------------------------------------------------------------ +# ATxmega16C4 +#------------------------------------------------------------ - memory "fuse0" - size = 1; - offset = 0x8f0020; - ; +part parent "x16a4u" + id = "x16c4"; + desc = "ATxmega16C4"; + signature = 0x1e 0x95 0x44; +; - memory "fuse1" - size = 1; - offset = 0x8f0021; - ; +#------------------------------------------------------------ +# ATxmega16D4 +#------------------------------------------------------------ - memory "fuse2" - size = 1; - offset = 0x8f0022; - ; +part parent "x16a4u" + id = "x16d4"; + desc = "ATxmega16D4"; + signature = 0x1e 0x94 0x42; +; - memory "fuse4" - size = 1; - offset = 0x8f0024; - ; +#------------------------------------------------------------ +# ATxmega16A4 +#------------------------------------------------------------ - memory "fuse5" - size = 1; - offset = 0x8f0025; - ; +part parent "x16a4u" + id = "x16a4"; + desc = "ATxmega16A4"; + signature = 0x1e 0x94 0x41; + has_jtag = yes; - memory "lock" + memory "fuse0" size = 1; - offset = 0x8f0027; + offset = 0x8f0020; ; ; #------------------------------------------------------------ -# ATXMEGA256A1 +# ATxmega32A4U #------------------------------------------------------------ -part - id = "x256a1"; - desc = "ATXMEGA256A1"; - signature = 0x1e 0x98 0x46; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x32a4u"; + desc = "ATxmega32A4U"; + signature = 0x1e 0x95 0x41; + usbpid = 0x2fe4; memory "eeprom" - size = 0x1000; - offset = 0x08c0000; + size = 0x400; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00040000; - offset = 0x0800000; + size = 0x8000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "apptable" - size = 0x00002000; - offset = 0x0083e000; + size = 0x1000; + offset = 0x807000; page_size = 0x100; readsize = 0x100; ; memory "boot" - size = 0x00002000; - offset = 0x00840000; + size = 0x1000; + offset = 0x808000; page_size = 0x100; readsize = 0x100; ; memory "flash" - size = 0x00042000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; + size = 0x9000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "usersig" - size = 0x200; + size = 0x100; offset = 0x8e0400; page_size = 0x100; readsize = 0x100; ; +; - memory "signature" - size = 3; - offset = 0x1000090; - ; +#------------------------------------------------------------ +# ATxmega32C4 +#------------------------------------------------------------ - memory "fuse0" - size = 1; - offset = 0x8f0020; - ; +part parent "x32a4u" + id = "x32c4"; + desc = "ATxmega32C4"; + signature = 0x1e 0x94 0x43; +; - memory "fuse1" - size = 1; - offset = 0x8f0021; - ; +#------------------------------------------------------------ +# ATxmega32D4 +#------------------------------------------------------------ - memory "fuse2" - size = 1; - offset = 0x8f0022; - ; +part parent "x32a4u" + id = "x32d4"; + desc = "ATxmega32D4"; + signature = 0x1e 0x95 0x42; +; - memory "fuse4" - size = 1; - offset = 0x8f0024; - ; +#------------------------------------------------------------ +# ATxmega32A4 +#------------------------------------------------------------ - memory "fuse5" - size = 1; - offset = 0x8f0025; - ; +part parent "x32a4u" + id = "x32a4"; + desc = "ATxmega32A4"; + signature = 0x1e 0x95 0x41; + has_jtag = yes; - memory "lock" + memory "fuse0" size = 1; - offset = 0x8f0027; + offset = 0x8f0020; ; ; #------------------------------------------------------------ -# ATXMEGA64A3 +# ATxmega64A4U #------------------------------------------------------------ -part - id = "x64a3"; - desc = "ATXMEGA64A3"; - signature = 0x1e 0x96 0x42; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x64a4u"; + desc = "ATxmega64A4U"; + signature = 0x1e 0x96 0x46; + usbpid = 0x2fe5; memory "eeprom" - size = 0x0800; - offset = 0x08c0000; + size = 0x800; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00010000; - offset = 0x0800000; + size = 0x10000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "apptable" - size = 0x00001000; - offset = 0x0080f000; + size = 0x1000; + offset = 0x80f000; page_size = 0x100; readsize = 0x100; ; memory "boot" - size = 0x00001000; - offset = 0x00810000; + size = 0x1000; + offset = 0x810000; page_size = 0x100; readsize = 0x100; ; memory "flash" - size = 0x00011000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; + size = 0x11000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "usersig" - size = 0x200; + size = 0x100; offset = 0x8e0400; page_size = 0x100; readsize = 0x100; ; +; - memory "signature" - size = 3; - offset = 0x1000090; - ; +#------------------------------------------------------------ +# ATxmega64C3 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64c3"; + desc = "ATxmega64C3"; + signature = 0x1e 0x96 0x49; + usbpid = 0x2fd6; +; + +#------------------------------------------------------------ +# ATxmega64D3 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64d3"; + desc = "ATxmega64D3"; + signature = 0x1e 0x96 0x4a; +; + +#------------------------------------------------------------ +# ATxmega64D4 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64d4"; + desc = "ATxmega64D4"; + signature = 0x1e 0x96 0x47; +; + +#------------------------------------------------------------ +# ATxmega64A1 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64a1"; + desc = "ATxmega64A1"; + signature = 0x1e 0x96 0x4e; + has_jtag = yes; memory "fuse0" size = 1; offset = 0x8f0020; ; +; - memory "fuse1" - size = 1; - offset = 0x8f0021; - ; +#------------------------------------------------------------ +# ATxmega64A1U +#------------------------------------------------------------ - memory "fuse2" - size = 1; - offset = 0x8f0022; - ; +part parent "x64a1" + id = "x64a1u"; + desc = "ATxmega64A1U"; + signature = 0x1e 0x96 0x4e; + usbpid = 0x2fe8; +; - memory "fuse4" - size = 1; - offset = 0x8f0024; - ; +#------------------------------------------------------------ +# ATxmega64A3 +#------------------------------------------------------------ - memory "fuse5" - size = 1; - offset = 0x8f0025; - ; +part parent "x64a1" + id = "x64a3"; + desc = "ATxmega64A3"; + signature = 0x1e 0x96 0x42; +; - memory "lock" - size = 1; - offset = 0x8f0027; - ; +#------------------------------------------------------------ +# ATxmega64A3U +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a3u"; + desc = "ATxmega64A3U"; + signature = 0x1e 0x96 0x42; + usbpid = 0x2fe5; ; #------------------------------------------------------------ -# ATXMEGA128A3 +# ATxmega64A4 #------------------------------------------------------------ -part - id = "x128a3"; - desc = "ATXMEGA128A3"; - signature = 0x1e 0x97 0x42; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent "x64a1" + id = "x64a4"; + desc = "ATxmega64A4"; + signature = 0x1e 0x96 0x46; +; + +#------------------------------------------------------------ +# ATxmega64B1 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64b1"; + desc = "ATxmega64B1"; + signature = 0x1e 0x96 0x52; + usbpid = 0x2fe1; +; + +#------------------------------------------------------------ +# ATxmega64B3 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64b3"; + desc = "ATxmega64B3"; + signature = 0x1e 0x96 0x51; + usbpid = 0x2fdf; +; + +#------------------------------------------------------------ +# ATxmega128C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128c3"; + desc = "ATxmega128C3"; + signature = 0x1e 0x97 0x52; + usbpid = 0x2fd7; memory "eeprom" - size = 0x0800; - offset = 0x08c0000; + size = 0x800; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00020000; - offset = 0x0800000; - page_size = 0x100; + size = 0x20000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "apptable" - size = 0x00002000; - offset = 0x0081e000; - page_size = 0x100; + size = 0x2000; + offset = 0x81e000; + page_size = 0x200; readsize = 0x100; ; memory "boot" - size = 0x00002000; - offset = 0x00820000; - page_size = 0x100; + size = 0x2000; + offset = 0x820000; + page_size = 0x200; readsize = 0x100; ; memory "flash" - size = 0x00022000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; - page_size = 0x100; + size = 0x22000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "usersig" size = 0x200; offset = 0x8e0400; - page_size = 0x100; + page_size = 0x200; readsize = 0x100; ; +; - memory "signature" - size = 3; - offset = 0x1000090; - ; +#------------------------------------------------------------ +# ATxmega128D3 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128d3"; + desc = "ATxmega128D3"; + signature = 0x1e 0x97 0x48; +; + +#------------------------------------------------------------ +# ATxmega128D4 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128d4"; + desc = "ATxmega128D4"; + signature = 0x1e 0x97 0x47; +; + +#------------------------------------------------------------ +# ATxmega128A1 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128a1"; + desc = "ATxmega128A1"; + signature = 0x1e 0x97 0x4c; + has_jtag = yes; memory "fuse0" size = 1; offset = 0x8f0020; ; +; - memory "fuse1" - size = 1; - offset = 0x8f0021; +#------------------------------------------------------------ +# ATxmega128A1 revision D +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a1d"; + desc = "ATxmega128A1revD"; + signature = 0x1e 0x97 0x41; +; + +#------------------------------------------------------------ +# ATxmega128A1U +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a1u"; + desc = "ATxmega128A1U"; + signature = 0x1e 0x97 0x4c; + usbpid = 0x2fed; +; + +#------------------------------------------------------------ +# ATxmega128A3 +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a3"; + desc = "ATxmega128A3"; + signature = 0x1e 0x97 0x42; +; + +#------------------------------------------------------------ +# ATxmega128A3U +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a3u"; + desc = "ATxmega128A3U"; + signature = 0x1e 0x97 0x42; + usbpid = 0x2fe6; +; + +#------------------------------------------------------------ +# ATxmega128A4 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128a4"; + desc = "ATxmega128A4"; + signature = 0x1e 0x97 0x46; + has_jtag = yes; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; ; - memory "fuse2" - size = 1; - offset = 0x8f0022; + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; ; - memory "fuse4" - size = 1; - offset = 0x8f0024; + memory "apptable" + size = 0x1000; + offset = 0x81f000; + page_size = 0x200; + readsize = 0x100; ; - memory "fuse5" - size = 1; - offset = 0x8f0025; + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; ; - memory "lock" + memory "fuse0" size = 1; - offset = 0x8f0027; + offset = 0x8f0020; ; ; #------------------------------------------------------------ -# ATXMEGA192A3 +# ATxmega128A4U #------------------------------------------------------------ -part - id = "x192a3"; - desc = "ATXMEGA192A3"; - signature = 0x1e 0x97 0x44; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x128a4u"; + desc = "ATxmega128A4U"; + signature = 0x1e 0x97 0x46; + usbpid = 0x2fde; memory "eeprom" - size = 0x0800; - offset = 0x08c0000; + size = 0x800; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00030000; - offset = 0x0800000; + size = 0x20000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "apptable" - size = 0x00002000; - offset = 0x0082e000; + size = 0x1000; + offset = 0x81f000; page_size = 0x100; readsize = 0x100; ; memory "boot" - size = 0x00002000; - offset = 0x00830000; + size = 0x2000; + offset = 0x820000; page_size = 0x100; readsize = 0x100; ; memory "flash" - size = 0x00032000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; + size = 0x22000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "usersig" - size = 0x200; + size = 0x100; 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 +# ATxmega128B1 #------------------------------------------------------------ -part - id = "x256a3"; - desc = "ATXMEGA256A3"; - signature = 0x1e 0x98 0x42; +part parent ".xmega" + id = "x128b1"; + desc = "ATxmega128B1"; + signature = 0x1e 0x97 0x4d; + usbpid = 0x2fea; has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; memory "eeprom" - size = 0x1000; - offset = 0x08c0000; + size = 0x800; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00040000; - offset = 0x0800000; + size = 0x20000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "apptable" - size = 0x00002000; - offset = 0x0083e000; + size = 0x2000; + offset = 0x81e000; page_size = 0x100; readsize = 0x100; ; memory "boot" - size = 0x00002000; - offset = 0x00840000; + size = 0x2000; + offset = 0x820000; page_size = 0x100; readsize = 0x100; ; memory "flash" - size = 0x00042000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; + size = 0x22000; + offset = 0x800000; page_size = 0x100; readsize = 0x100; ; memory "usersig" - size = 0x200; + size = 0x100; 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; - ; +#------------------------------------------------------------ +# ATxmega128B3 +#------------------------------------------------------------ - memory "lock" - size = 1; - offset = 0x8f0027; - ; +part parent "x128b1" + id = "x128b3"; + desc = "ATxmega128B3"; + signature = 0x1e 0x97 0x4b; + usbpid = 0x2fe0; ; #------------------------------------------------------------ -# ATXMEGA256A3B +# ATxmega192C3 #------------------------------------------------------------ -part - id = "x256a3b"; - desc = "ATXMEGA256A3B"; - signature = 0x1e 0x98 0x43; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x192c3"; + desc = "ATxmega192C3"; + signature = 0x1e 0x97 0x51; + # usbpid = 0x2f??; memory "eeprom" - size = 0x1000; - offset = 0x08c0000; + size = 0x800; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00040000; - offset = 0x0800000; - page_size = 0x100; + size = 0x30000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "apptable" - size = 0x00002000; - offset = 0x0083e000; - page_size = 0x100; + size = 0x2000; + offset = 0x82e000; + page_size = 0x200; readsize = 0x100; ; memory "boot" - size = 0x00002000; - offset = 0x00840000; - page_size = 0x100; + size = 0x2000; + offset = 0x830000; + page_size = 0x200; readsize = 0x100; ; memory "flash" - size = 0x00042000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; - page_size = 0x100; + size = 0x32000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "usersig" size = 0x200; offset = 0x8e0400; - page_size = 0x100; + page_size = 0x200; readsize = 0x100; ; +; - memory "signature" - size = 3; - offset = 0x1000090; - ; +#------------------------------------------------------------ +# ATxmega192D3 +#------------------------------------------------------------ + +part parent "x192c3" + id = "x192d3"; + desc = "ATxmega192D3"; + signature = 0x1e 0x97 0x49; +; + +#------------------------------------------------------------ +# ATxmega192A1 +#------------------------------------------------------------ + +part parent "x192c3" + id = "x192a1"; + desc = "ATxmega192A1"; + signature = 0x1e 0x97 0x4e; + has_jtag = yes; memory "fuse0" size = 1; offset = 0x8f0020; ; +; - memory "fuse1" - size = 1; - offset = 0x8f0021; - ; - - memory "fuse2" - size = 1; - offset = 0x8f0022; - ; +#------------------------------------------------------------ +# ATxmega192A3 +#------------------------------------------------------------ - memory "fuse4" - size = 1; - offset = 0x8f0024; - ; +part parent "x192a1" + id = "x192a3"; + desc = "ATxmega192A3"; + signature = 0x1e 0x97 0x44; +; - memory "fuse5" - size = 1; - offset = 0x8f0025; - ; +#------------------------------------------------------------ +# ATxmega192A3U +#------------------------------------------------------------ - memory "lock" - size = 1; - offset = 0x8f0027; - ; +part parent "x192a1" + id = "x192a3u"; + desc = "ATxmega192A3U"; + signature = 0x1e 0x97 0x44; + usbpid = 0x2fe7; ; #------------------------------------------------------------ -# ATXMEGA16A4 +# ATxmega256C3 #------------------------------------------------------------ -part - id = "x16a4"; - desc = "ATXMEGA16A4"; - signature = 0x1e 0x94 0x41; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x256c3"; + desc = "ATxmega256C3"; + signature = 0x1e 0x98 0x46; + usbpid = 0x2fda; memory "eeprom" - size = 0x0400; - offset = 0x08c0000; + size = 0x1000; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00004000; - offset = 0x0800000; - page_size = 0x100; + size = 0x40000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "apptable" - size = 0x00001000; - offset = 0x00803000; - page_size = 0x100; + size = 0x2000; + offset = 0x83e000; + page_size = 0x200; readsize = 0x100; ; memory "boot" - size = 0x00001000; - offset = 0x00804000; - page_size = 0x100; + size = 0x2000; + offset = 0x840000; + page_size = 0x200; readsize = 0x100; ; memory "flash" - size = 0x00005000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; - page_size = 0x100; + size = 0x42000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "usersig" size = 0x200; offset = 0x8e0400; - page_size = 0x100; + page_size = 0x200; readsize = 0x100; ; +; - memory "signature" - size = 3; - offset = 0x1000090; - ; +#------------------------------------------------------------ +# ATxmega256D3 +#------------------------------------------------------------ + +part parent "x256c3" + id = "x256d3"; + desc = "ATxmega256D3"; + signature = 0x1e 0x98 0x44; +; + +#------------------------------------------------------------ +# ATxmega256A1 +#------------------------------------------------------------ + +part parent "x256c3" + id = "x256a1"; + desc = "ATxmega256A1"; + signature = 0x1e 0x98 0x46; + has_jtag = yes; memory "fuse0" size = 1; offset = 0x8f0020; ; +; - memory "fuse1" - size = 1; - offset = 0x8f0021; - ; +#------------------------------------------------------------ +# ATxmega256A3 +#------------------------------------------------------------ - memory "fuse2" - size = 1; - offset = 0x8f0022; - ; +part parent "x256a1" + id = "x256a3"; + desc = "ATxmega256A3"; + signature = 0x1e 0x98 0x42; +; - memory "fuse4" - size = 1; - offset = 0x8f0024; - ; +#------------------------------------------------------------ +# ATxmega256A3U +#------------------------------------------------------------ - memory "fuse5" - size = 1; - offset = 0x8f0025; - ; +part parent "x256a1" + id = "x256a3u"; + desc = "ATxmega256A3U"; + signature = 0x1e 0x98 0x42; + usbpid = 0x2fec; +; + +#------------------------------------------------------------ +# ATxmega256A3B +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3b"; + desc = "ATxmega256A3B"; + signature = 0x1e 0x98 0x43; +; + +#------------------------------------------------------------ +# ATxmega256A3BU +#------------------------------------------------------------ - memory "lock" - size = 1; - offset = 0x8f0027; - ; +part parent "x256a1" + id = "x256a3bu"; + desc = "ATxmega256A3BU"; + signature = 0x1e 0x98 0x43; + usbpid = 0x2fe2; ; #------------------------------------------------------------ -# ATXMEGA32A4 +# ATxmega384C3 #------------------------------------------------------------ -part - id = "x32a4"; - desc = "ATXMEGA32A4"; - signature = 0x1e 0x95 0x41; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x384c3"; + desc = "ATxmega384C3"; + signature = 0x1e 0x98 0x45; + usbpid = 0x2fdb; memory "eeprom" - size = 0x0400; - offset = 0x08c0000; + size = 0x1000; + offset = 0x8c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00008000; - offset = 0x0800000; - page_size = 0x100; + size = 0x60000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "apptable" - size = 0x00001000; - offset = 0x00807000; - page_size = 0x100; + size = 0x2000; + offset = 0x85e000; + page_size = 0x200; readsize = 0x100; ; memory "boot" - size = 0x00001000; - offset = 0x00808000; - page_size = 0x100; + size = 0x2000; + offset = 0x860000; + page_size = 0x200; readsize = 0x100; ; memory "flash" - size = 0x00009000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; - - memory "prodsig" - size = 0x200; - offset = 0x8e0200; - page_size = 0x100; + size = 0x62000; + offset = 0x800000; + page_size = 0x200; readsize = 0x100; ; memory "usersig" size = 0x200; offset = 0x8e0400; - page_size = 0x100; + page_size = 0x200; readsize = 0x100; ; +; - memory "signature" - size = 3; - offset = 0x1000090; - ; +#------------------------------------------------------------ +# ATxmega384D3 +#------------------------------------------------------------ - memory "fuse0" - size = 1; - offset = 0x8f0020; +part parent "x384c3" + id = "x384d3"; + desc = "ATxmega384D3"; + signature = 0x1e 0x98 0x47; +; + +#------------------------------------------------------------ +# ATxmega8E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x8e5"; + desc = "ATxmega8E5"; + signature = 0x1e 0x93 0x41; + + memory "eeprom" + size = 0x0200; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; ; - memory "fuse1" - size = 1; - offset = 0x8f0021; + memory "application" + size = 0x2000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; ; - memory "fuse2" - size = 1; - offset = 0x8f0022; + memory "apptable" + size = 0x800; + offset = 0x00801800; + page_size = 0x80; + readsize = 0x100; ; - memory "fuse4" - size = 1; - offset = 0x8f0024; + memory "boot" + size = 0x800; + offset = 0x00802000; + page_size = 0x80; + readsize = 0x100; ; - memory "fuse5" - size = 1; - offset = 0x8f0025; + memory "flash" + size = 0x2800; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; ; - memory "lock" - size = 1; - offset = 0x8f0027; + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; ; ; #------------------------------------------------------------ -# ATXMEGA64A4 +# ATxmega16E5 #------------------------------------------------------------ -part - id = "x64a4"; - desc = "ATXMEGA64A4"; - signature = 0x1e 0x96 0x46; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; +part parent ".xmega" + id = "x16e5"; + desc = "ATxmega16E5"; + signature = 0x1e 0x94 0x45; memory "eeprom" - size = 0x0800; + size = 0x0200; offset = 0x08c0000; page_size = 0x20; readsize = 0x100; ; memory "application" - size = 0x00010000; + size = 0x4000; offset = 0x0800000; - page_size = 0x100; + page_size = 0x80; readsize = 0x100; ; memory "apptable" - size = 0x00001000; - offset = 0x0080f000; - page_size = 0x100; + size = 0x1000; + offset = 0x00803000; + page_size = 0x80; readsize = 0x100; ; memory "boot" - size = 0x00001000; - offset = 0x00810000; - page_size = 0x100; + size = 0x1000; + offset = 0x00804000; + page_size = 0x80; readsize = 0x100; ; memory "flash" - size = 0x00011000; + size = 0x5000; offset = 0x0800000; - page_size = 0x100; + page_size = 0x80; readsize = 0x100; ; - memory "prodsig" - size = 0x200; - offset = 0x8e0200; - page_size = 0x100; + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; readsize = 0x100; ; +; - memory "usersig" - size = 0x200; - offset = 0x8e0400; - page_size = 0x100; +#------------------------------------------------------------ +# ATxmega32E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x32e5"; + desc = "ATxmega32E5"; + signature = 0x1e 0x95 0x4c; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; readsize = 0x100; ; - memory "signature" - size = 3; - offset = 0x1000090; + memory "application" + size = 0x8000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; ; - memory "fuse0" - size = 1; - offset = 0x8f0020; + memory "apptable" + size = 0x1000; + offset = 0x00807000; + page_size = 0x80; + readsize = 0x100; ; - memory "fuse1" - size = 1; - offset = 0x8f0021; + memory "boot" + size = 0x1000; + offset = 0x00808000; + page_size = 0x80; + readsize = 0x100; ; - memory "fuse2" - size = 1; - offset = 0x8f0022; + memory "flash" + size = 0x9000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; ; - memory "fuse4" - size = 1; - offset = 0x8f0024; + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; ; +; - memory "fuse5" - size = 1; - offset = 0x8f0025; - ; +#------------------------------------------------------------ +# AVR32UC3A0512 +#------------------------------------------------------------ - memory "lock" - size = 1; - offset = 0x8f0027; +part + id = "uc3a0512"; + desc = "AT32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + memory "flash" + paged = yes; + page_size = 512; # bytes + readsize = 512; # bytes + num_pages = 1024; # could be set dynamicly + size = 0x00080000; # could be set dynamicly + offset = 0x80000000; ; ; +part parent "uc3a0512" + id = "ucr2"; + desc = "deprecated, use 'uc3a0512'"; +; + #------------------------------------------------------------ -# ATXMEGA128A4 +# ATtiny1634. #------------------------------------------------------------ part - id = "x128a4"; - desc = "ATXMEGA128A4"; - signature = 0x1e 0x97 0x46; - has_jtag = yes; - has_pdi = yes; - nvm_base = 0x01c0; + id = "t1634"; + desc = "ATtiny1634"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x94 0x12; + pagel = 0xB3; + bs2 = 0xB1; + reset = io; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; memory "eeprom" - size = 0x0800; - offset = 0x08c0000; - page_size = 0x20; - readsize = 0x100; - ; + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - memory "application" - size = 0x00020000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - memory "apptable" - size = 0x00002000; - offset = 0x0081e000; - page_size = 0x100; - readsize = 0x100; - ; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 32; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - memory "boot" - size = 0x00002000; - offset = 0x00820000; - page_size = 0x100; - readsize = 0x100; - ; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - memory "flash" - size = 0x00022000; - offset = 0x0800000; - page_size = 0x100; - readsize = 0x100; - ; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - memory "prodsig" - size = 0x200; - offset = 0x8e0200; - page_size = 0x100; - readsize = 0x100; - ; + 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"; - memory "usersig" - size = 0x200; - offset = 0x8e0400; - page_size = 0x100; - readsize = 0x100; - ; + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; - memory "signature" - size = 3; - offset = 0x1000090; - ; + ; - memory "fuse0" - size = 1; - offset = 0x8f0020; - ; + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; - memory "fuse1" - size = 1; - offset = 0x8f0021; - ; + write = "1 0 1 0 1 1 0 0 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 "fuse2" - size = 1; - offset = 0x8f0022; - ; + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - memory "fuse4" - size = 1; - offset = 0x8f0024; - ; + write = "1 0 1 0 1 1 0 0 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 "fuse5" - size = 1; - offset = 0x8f0025; - ; + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - memory "lock" - size = 1; - offset = 0x8f0027; - ; -; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x i i i i i"; + ; + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x o o"; -#------------------------------------------------------------ -# AVR32UC3A0512 -#------------------------------------------------------------ + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 1 1 1 1 i i"; + ; -part - id = "ucr2"; - desc = "32UC3A0512"; - signature = 0xED 0xC0 0x3F; - has_jtag = yes; - is_avr32 = yes; + 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 "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; - ; + 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"; + ; ; #------------------------------------------------------------ -# ATtiny4 +# Common values for reduced core tinys (4/5/9/10/20/40) #------------------------------------------------------------ part - id = "t4"; - desc = "ATtiny4"; - signature = 0x1e 0x8f 0x0a; + id = ".reduced_core_tiny"; + desc = "Common values for reduced core tinys"; has_tpi = yes; - memory "flash" - size = 512; - offset = 0x4000; - page_size = 16; - blocksize = 128; - ; - memory "signature" size = 3; offset = 0x3fc0; @@ -16806,16 +14816,14 @@ part ; ; - #------------------------------------------------------------ -# ATtiny5 +# ATtiny4 #------------------------------------------------------------ -part - id = "t5"; - desc = "ATtiny5"; - signature = 0x1e 0x8f 0x09; - has_tpi = yes; +part parent ".reduced_core_tiny" + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; memory "flash" size = 512; @@ -16823,43 +14831,26 @@ part page_size = 16; blocksize = 128; ; +; - memory "signature" - size = 3; - offset = 0x3fc0; - page_size = 16; - ; - - memory "fuse" - size = 1; - offset = 0x3f40; - page_size = 16; - blocksize = 4; - ; - - memory "calibration" - size = 1; - offset = 0x3f80; - page_size = 16; - ; +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ - memory "lockbits" - size = 1; - offset = 0x3f00; - page_size = 16; - ; +part parent "t4" + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; ; - #------------------------------------------------------------ # ATtiny9 #------------------------------------------------------------ -part +part parent ".reduced_core_tiny" id = "t9"; desc = "ATtiny9"; signature = 0x1e 0x90 0x08; - has_tpi = yes; memory "flash" size = 1024; @@ -16867,74 +14858,114 @@ part page_size = 16; blocksize = 128; ; +; - memory "signature" - size = 3; - offset = 0x3fc0; - page_size = 16; - ; +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ - memory "fuse" - size = 1; - offset = 0x3f40; - page_size = 16; - blocksize = 4; - ; +part parent "t9" + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; +; - memory "calibration" - size = 1; - offset = 0x3f80; - page_size = 16; - ; +#------------------------------------------------------------ +# ATtiny20 +#------------------------------------------------------------ - memory "lockbits" - size = 1; - offset = 0x3f00; - page_size = 16; +part parent ".reduced_core_tiny" + id = "t20"; + desc = "ATtiny20"; + signature = 0x1e 0x91 0x0F; + + memory "flash" + size = 2048; + offset = 0x4000; + page_size = 16; + blocksize = 128; ; ; - #------------------------------------------------------------ -# ATtiny10 +# ATtiny40 #------------------------------------------------------------ -part - id = "t10"; - desc = "ATtiny10"; - signature = 0x1e 0x90 0x03; - has_tpi = yes; +part parent ".reduced_core_tiny" + id = "t40"; + desc = "ATtiny40"; + signature = 0x1e 0x92 0x0E; memory "flash" - size = 1024; + size = 4096; offset = 0x4000; - page_size = 16; + page_size = 64; blocksize = 128; ; +; - memory "signature" - size = 3; - offset = 0x3fc0; - page_size = 16; +#------------------------------------------------------------ +# ATmega406 +#------------------------------------------------------------ + +part + id = "m406"; + desc = "ATMEGA406"; + has_jtag = yes; + signature = 0x1e 0x95 0x07; + + # STK500 parameters (parallel programming IO lines) + pagel = 0xa7; + bs2 = 0xa0; + serial = no; + parallel = yes; + + # STK500v2 HV programming parameters, from XML + pp_controlstack = 0x0e, 0x1e, 0x0f, 0x1f, 0x2e, 0x3e, 0x2f, 0x3f, + 0x4e, 0x5e, 0x4f, 0x5f, 0x6e, 0x7e, 0x6f, 0x7f, + 0x66, 0x76, 0x67, 0x77, 0x6a, 0x7a, 0x6b, 0x7b, + 0xbe, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + + # JTAG ICE mkII parameters, also from XML files + allowfullpagebitstream = no; + enablepageprogramming = yes; + idr = 0x51; + rampz = 0x00; + spmcr = 0x57; + eecr = 0x3f; + + memory "eeprom" + paged = no; + size = 512; + page_size = 4; + blocksize = 4; + readsize = 4; + num_pages = 128; ; - memory "fuse" - size = 1; - offset = 0x3f40; - page_size = 16; - blocksize = 4; + memory "flash" + paged = yes; + size = 40960; + page_size = 128; + blocksize = 128; + readsize = 128; + num_pages = 320; ; - memory "calibration" - size = 1; - offset = 0x3f80; - page_size = 16; + memory "hfuse" + size = 1; + ; + + memory "lfuse" + size = 1; ; memory "lockbits" size = 1; - offset = 0x3f00; - page_size = 16; + ; + + memory "signature" + size = 3; ; ; diff --git a/programmer/flash/avrdude.exe b/programmer/flash/avrdude.exe index bcdf2f418d79bd2f5614057dfd8662cf317e17a9..09962b12014282748eea3135d2986eb7558a87e2 100644 GIT binary patch literal 465422 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

6lNj(*W* z(gK)dp)+RAn+jRXhA+5Ee0R=IeTbZ2Za&#JHv|5k_Rd~_mJ^Tqc-50Q87bHb`QwWx zS;j*c`0(uW2Eh;$I<S!*`SmvX}j+#45Z8{tn#I5@}_4YtB> z2FdM0biP@~64kZ*Az2lH7zs7!Dr%DT#*%fGp5G&D7@)+MeRs(``=gZ04t@h@EE>{7 zVSE7mz>b=YC}7(25Fp-Sj};!yq|wMi9BJS_444VBufSZZ(C-qVs&XMKn&D8I{9Kd; zO9ntPa16{SmV3=5NZx<3U9NqG5#B za^jK14RL1ecOMnp9y3#GTpfNj%HYwkyT3%e`1S*O$FXNPQCrI})`*zOop?LG(5fQ$xLttAA{@xcVw=Sd3R4{<`|w(m;p5;fDXd6%z=Sv-es~C1xYEyp|zOW*(3b zCo}w~Hun`@$5c*cp1p>lWe9Z&949j?C3K?6%-lpN0fatlU|#x0R!wJUIYQY}8ERwd z)eLdZU9N;W5qc0M^9{emoL#+L1%Ar#3qdsZCTAss8Qq`P!WdxJd!}CF(PehUIt|0m zrjt0WK(S&?!3O_fY&9C6@~%!5EFBGdp}smp-qm>w>B!FgzmcCK%>JGtU&{b*DXiQz zV)^H@`)g^CUgLVH5zL>$ubKSfYe9ZwlBp-ATX*&-a+4|&wKHt-GA$G?88ws&4;$2 zPAxY($m~1{YP2%ITvL%tzpLkoob`p^EtIGmEli%s$u^nk)vv`CzD4s;P%1@Tz9dCo z`SVx60rWM{?Tp>)aBF4o;}rVm+n^r>v`uJ?*|^h>TC5Sj?MH`ON;Y*Zy~b9+_w5BF zt{tMkL^NOn>QAY>(Uy0FnU|Ud>mioJT6wdPH+CJ^2wqupb;?8`_5}fkf^HbYWLH&Y z2U%}kc&?S^ksBLR>iw0fmr%x2tCDkv(I^1rC;fq};anWkik8)_--Arb-_e0LS>-LT zjO)=E)mvaQ7-F}a{(XknEjz!*&~AiQA=PxPN!eqx%^V4AH;}`6;;y0`{GUtFAlZG8 z3tUqgQa6|;`e!v{X(pt1hMtA%TCr*Ximj6w0(@*7Ot9mSpE!-359iRuaoSbvfZ>&h zWoj#a!Do7^MD7vJ5V9{2XQ0u5M``c^Bs%yDMi^nM$KzM#PjJY}R21LecwK0nltI%mRFu^RwmFNU7xTaCpH11X2$>?eR z9q5S$*XVh$IWnzVB5{#A3CGP25C7_qCKWHK!oFknIdzkbr8q#>7^L&yD!b>y4xK9czzetI;Z4L&2%TU&R{}c^Rgweo+&Mqvj7EX|K0;_0|sk zeB|p;g@sYq^HEn5{)4?ea&y$RI`IXWC~E#t-4{%O$9Eo($^`;kG%5s3isNN1e#ItZ z?@uw)&K!YTn!Uz$h6@q)G`|9bQiPy-tjMZRKfDsM+7HH|9|g;Sd!Qt@Ij|DM$+{D5 z%o5F=Yb-{wsv9j;J8PVtyB7m6rTlDL`MD@xglzF95=M+&lqyaZ%{UK@8Rr1?Z@Gl> zk2Z2}cBxIMr%PR44zsI~)rmy>pF4I=Ztna%y`Q>AqLsPh8`PbusdWgM%>6%i^ub}n zTOl1Oh;C7cq6CL=`%@sq=^1t7!K!lp#j*(=##+d|i1A9j_blDjcs4I|hOA!+8cAn; z%~rsrD8P!}Yl}Y<@fC9Tsel_WLt~wRKY{`-mW4sVIOSAqBVu=QyWMMGAi-y0vb2!B$%K>v&uyZbcj#?qczY>BFitT%p$y1)?8V%H;2J%%KpjD1f- zoT>c&%%)Tdk;?*H1wdo`zlrAiAPWu_2nOAi?Fyh7s}sFw*>|`WBcZc6PeQ&Lb1;eX zb1=IfR!?d;dojle7~d2(dN(-vw`NU7zEq8|!V`9@qVgE#wZE1)rOZFSQKm-VN$EuICgTIh0+@6 zOr#|%X2FmJ2e#`PS;(i@NiCK-8jziY!$0G*Cxm2j6Z1jHk9kM#J&^bmGMhR^oC0mg zqXsg1<5Iv5*oyvn0<1)hn@V=7(bH#${ek^)*3dCmzZ`uzcf2S39IC+EjCCgGJ@-5g zG}npOr#u&HDcCq=lP7xb)muBzn4n&+1{=VIc8JpSg#9QDPJ<#(b0MTDIY_tgA|g-Z zb5+^ z4T-h`A+$fYTl*|FuW4lWjwU> zgyRX^9mav*CdZSR z08};Q=nku=4#Z98fxayC2Ow@u2v_*>;}BNX`4Rg&0;X-d_~1d5scbWhlr?A>-BIW- z4r4pO)cXm|HxUSeI^|yc${OJ^fKVVW1tbd}I}meXo)ZY;nqh~p!xR1* z6Jms@cfF!~#Uvv>h)y^fhD!t7$_YCQDL}vv1oF()dkWX5kIzCj=pZ)laKz!5G7Au; zdZk_rXt1>eYT&Sxl1e?u|_QAxNP?0pdB04FrAMrK9LQt*2^s8s0)=?& z<{uhmA>>OMWj%K{yKPlogDSxvG0bX_&os=Mx{KpMNRegCjX)kt%m20?cBHgezC$SC z*YF5fA0P_a8at1MI(fW9%tmv{jX7y{*S(uCTc?PDeIh&@3?X8P1Zy_mb?+8HYP=CT zA&x1qi{Iy-Ets|0JKyhn{EE;QUBM+hbY-r;h@V*;!KqbQ?*vhBO~-**72l;iaaG!( zvsstgh6UXQ5~FRYQnSTITF1jCH#v9#Uis7X{=0budTVeD$nN(%)yu#q%E`rNE+(M^ z>D$MK?nF%R@0MF_It&|h!&fnTk>_gQe5Tc%1$~$e3ZSt52T&NxJ#u!ZD%R_K5y`SA zmG8uNm^LS1xC)%9xwz-VWgLK&fGcBP$BW!qgRmHe^B&m?&jAln-%Qk3GZvd!@A%lW zjO*!Giq5;`ZzfjobKP?dBC*(u%i*RV6o1k3C1>l{zQBu;3sG-^sHPw&USsao09jLP zEcmeCFzP&}eZ2En=pARlYrxGeJBcj338FG|JR`Vs@!!Z3u0W#-%dL}u`x+JytG2|f zd)51p&Zm&FInc#k#+PYRu=`-utVdov)pzK^qSl-$TBF4iTxy8#_DuzEFnunu6~kWjs<8L2$DDY(!j)2z0GO z2F~qvh2C{GZw!poKETt(CgvMCmvH4>p6sGwtLAu^Nj0{l8>}R`>`lor#34r>jE6VP zvwVX^cCri-qMp>E+7vl9ZM74?v)}(K@O}S9coMy5`D#4O##lH8){vZlE7;>%ojDvA zl+1+YkGO_`w65SmHT{BXD~xhTmOB+$#8SNSf4}M)gKWujp37~ig-De`c<#dW3tP%* zR=#2AiXw#ed|y3i&-Y7PzITu!Bo)E1+JOGT3Mj9l4jUkAU=H?KEy}SP=R8i|avxO3 zC1~R(*y=FecO-Za1n|SHc=u<>3|KxI;&&d8_lfjDa-ct9&!GGq?Ft^mGmLVi7{qwY zB*r5)Tz>_4q8vN5Rw03e0j^2H6tq>~Wy>n76BK+H8v*rWjzyw-KoY?nSrh6< zgw7gj3J!z1#h`8$ajLtBzN9hmB}H79R6@-a2R~p|OMRqdO%U(_lYn+f{gvX=t%$p*T-FNaTaCA-M$R{`!QH~WNkPViu z+Oge4DXx^2?=HM)E8Y!jCpXLP#?_Fzdaq}#>Mf{j>@%jzo^=TJGUfksagswp zUtoT>LZ~&^Ub%-cO_50-mv)(Rwh4J9AU&(c*IQR@QnQt&bM&nx_U*lQ5$$~iD zgqUGM^f$j{EJF2PAB7wekGan(Tw{YFnP|6g&rm%LdGY?=1D46x+Xm5QgIJq@IDk

K? zH;SslDHnv#_9q9c*MDZw;CA+3kx4IPk{T};h9*rJ_;hcGP~mpGFG4B=e@qM$AlsPNBvgX}!L?|;QT_T7lpjA0GJwrbW*_Lfm++H4 z;jdY@)zcdh7p-xIjyZ36m96bWqPd(*8zn*Dlvb~2uT^WIiH1nw!GlC_11msZT7d%* z{1z(%-w&AIa*hJu5quM_7$;6bZB1BTgETS2R7E)y<1l`7pCxO&hNPvV7p-wLF;%4M zY%KO6hulJz(nxj|Ie^mbJjNVbU0ur)=AVEPmwa3Lek)yWuVd;ETWWhEmG^s{=moNE zwmx)k0y+w4+Zllf8i#4c1$tzfgOCX? z_TP&k=(m`UZ#2hju2I+M=W%UxJ0SEj@lH`_^ja^5Q{KIk3p(X7J8XXL|7(aB11DqX z*=%Ox^?26i&gDp5?M^u}(c~MrLxl(Y)b=_czDe7bk?8r)=#1i`Hz!8TF?|2e@ z@9r%S1SE*MbtzPk(_zd8DzPWjSOS9Q;r&-nH~Fto;Ovct58!lWYOI#m)XQpD>UzR# zYq6`wnu%R&E8z%CR4aa_Eq*`ZEAck1XZ0wqbUlT}spSN;b&%l(}EHu)Zixz{EHTpnMEuZ6Lj6#LovOICSf-O7W|8zN?qjg*? z*WHMO#V=}!{)w`n86$U(#cCqT_ z*B$nIo>Jt`$Y`yM-@E7^*uiW+Q#)%*702JV{Lyy8{N;*TaRNX$%x8cc0s1|2o{K3W5xE9Wh5Z@ z8RB@PEx5U$Z7qx7?3vl&opgJaJdS}D_0B=P5GsK6=_vL3$@cNX@Mj?Z4CbFK`~f0` z6w%uNjSElw@Sf&H!*a(Vl5*)QEYu%RcO(YAu@Zop_ak16;4I%0nfM8QNKG@#cQ0>9 z40e);n@*Rq$FS^I!Bh}L-AkzI;N^%svxhpU^2TT|fq#xH0FNAj!I%JFu26xS4mqrw z46PjhW#)KDRp7d>tkMxRbAaLx9%g}o%vqu8+{>IMNjgfcuZo82@w`E68czI`RkaBkur@@;>>4_L79aEwq7) zN3M|{N9%yXixiPh;aLF%nu|dJJv0pUl6+s{%d^_g^8pE3{TW;629sZ<8Wf94-DF2;tW1zPhUjWu*Pu5_F4%0kfdJ1d}Rf@iJV8CycE-4!x?cp6P44 ztrwn}2X!2kp4Bxj-zRtc*0;;k%y%(T_rI5aY?%KJ`4uT*ZZHpf;ZHL?=zP-BgwfL4 z-%H1!+}wt_cwz7sRSxN&ImWZP)CE887=1$DrBl*y-*aRm(5uomx4-9dqASM-V$5Ay z=NuGj8^F}Zkm@@W{E&U&PE?$tig()(J{keS7LG20>d#Pk^znV+wJ+3N83i9wJa7*b zdAdqeLmWF{G6G{N2!zuYy2~p~`oMGd?*W9nK;CgVKM=K6)z`Vhv$`a0Y^5vs7tfk2 zT>4dB-;RYZfC-sU7d_3=DjPGV6E~475l%~m-Lxz)Ix5Aa$TCER%D#jt$_@@6=9;=J0d_E^RRxUaHpmL7Ka zD=QrZTS|Rz2H(48BZh3`@PeM1+VRjwX@Lm^ZK9Kbx3)v_W#Y2SS1^(fl#DO>aWwI7 zp4Bg6clFrgzAb^i1#M6vTwlZWI0bE&){X7LkugT8XJ#R`UGY~~4>rKU;?Hb89JoX~ z8qL0}TRrGtDb?%_z8Be!GT{o2)Lr6aiBET}?27*#>mMm(_g5v=s=GO1xyf3IvN!X! zUD{vJ7v1QS8KEySJoo%g@z!;tE${ZQm~3}Hfe!BcR6C-4{4#x8WCQyhz{dObD}V1p zwuBZW=;Mm8@hjBfkDuJ4VbGq7Bkz^Iw*oky*E?F%Nf$=bvG2}5fU$5Cd0(T_RbgRU zVPz=HT1BPsEwQDIK$={pr*6*62JN2*&W`AfUA}z_M}sq$B_^JB%>N$ZDZf5}b3$F- zfN#8jFWAA-@3)n{RY3*cg!u5F0r&Fc5Z6aPbU4Pxx60h_7q$!!AVa~2$(9cTK6-zl zLpu#77YXrS$XpTn+8a2>7hiN3%RHl^Rh>;=e0Tn9q=`k25)&%;Cb6>9<3eJ!*&B*O zvOV|ohfvw6V`oEOK*oL#-Dj?osiWGz1fgrVfQGYV2eWZ>d44X1fz`aH+A`x3csXYS zfmVhHigtA6HXlWDOY2|o*Nkg@*cN`=7G7%$?@5N0UAzE&9W~~|IbRNfbPX=99q+gr z^}DIi@SA}j{=!%TD=nz%df;-XmqU;p5A&P!XyZN-NYUE|G2Otj{|36YF9&cDu|@@A zD{At(WKP%MLXZ}_&Sou!sn&K1ZoK z84i#bWzGd*C?xdXcMbMSnQ(|nar1CSV6OIY%PieF3wG?_S>w7K^G9v&eR*Z59UD9u z8H{i4?O0!Y1%@oHTgj01o4`QfU+lk8eWW*mK+OERU)7*eMP=kpDYPpJhe>MgP zAO<!KF%YP}X22alU6eY0eFqhy%cDk|b-lyX*zvyt zSJhYYA)&Ct%K7tPZWVsa`M2jDTz?~5`}QC&cyuPp&eq-x9qaG8dpDv&$4>X$&9u<5 zah|*1k-$RF-N4+j()HXz{Ah9CYw#lM#A%qE$n@MZ(B^FI4frU{4Yxm5xKZlR{w!nN zA}F30(l`&t1TcsC4A%zAUU;6?N6%7R3R5t$f|s?559I+^COw+H)Yk0pqgWZXZ8yE6 z{UhJ>G}CQPV}(>uoSg4i>3ps~Fp6DRg*0UP94WbpB&>bU<=v7YNcF)~yh}P3fA~1cUSEYf58BtD2FpvnjiY#&k z$0}0&81`QeQth{qs%T+?R76-v!n0iimq!;4 z1un+*!j|>p_)Xf!c*#qOUGk`{4S@w1lrBLI@EE?83>sZn>JB0gyygQQR+Zmzko_j( z8r-!DP>gU0TK-d7bvW^`XezSuUh>@dIVelp?fVN_wC8>9VQyzO6)-00l?YqAoj zK1b?<8PfZ+ijg~-x8Cs=l$2u}lb(9(KB*~wGRjKvak+)eEtrVpL9TOK&jo#rKVW4i z{&upDYOmqkd^Pl!n+vZXWe(Y4vf419o9TyXyfo^Ui!J8;4G}LuT~5_H*yT36vf$da z2|D%$ewY%`V$8#aC-AxFT{eEjaMX)6lG|y4#Q)T7EvV53^672xfBn>2+XMlg|0PmI zeC5Tw+j#F%pd9;y4x>G;IVcty3WDM=<`8YPBd|ytqc!5#_v|fV{c}#ct-nO)OBHQ;5Bqg<&B)@bk^IrtT#VyQ{}XZFr9b-f%(x3UDdH z^_2}~2w*rE4?O@eoCm>4f!uF{{P0$m7W)ohEV(L%EY(0F>bPf_-h~DRMsWb^r`Nma zs~-;eHcnzAMFc(JD?t}I1D|L4zC2;k*+H}|)RDonn79)wfG%H*HSBklGlt82dIjeG z>g{k|@}ve=W1tD~7U=pgZ`!Bt2B(E&+41KXnQ)gOv$5W2g**BuH!zZkAg3>kK;rX%ju}oE{*IsC9_6Kd*A3=7}9r7q(3hrJT*zF0h zZKx`_E?NeL!kk2p*b0MFPq)6Vej8t9)2+`c`J7>W`s8yaK2Jv5a_D)EosGB_hG?%R z_hwAbElfe`ph8Lpi1+4WriT46upQ7hv)~Y>N1K~8drbZV# zKZyGZq@@7oC}5!AFopnFsqvSLvL6XA-SHhM;B_`|BZ#F?%NM)fA@^TlP#Kewq0@%U z8f4(b878?{CrBmphZB*EBu2dQmq1Rzw|-ul76i-_yEx83OZ4$V;d^0rg2H2c z8}I11z)w2oU_fY-| zZEsMe3FE$t(*D)9L*EJaq(iE<{|tqFL)&}wn-#Xk?7unL_I@~7K=O8LyS?A61i01q zF?*B!M%0xj{1_1Ptf|d}`6GTNir6+=Z8ssiUN(c{*dq$`6gz0vcal`D6woY8bKmg* z#;a|Z)&7A?ec%eGO+ZwP-kG*M10@etW0sYy+mb)MiT)(HpUtzTEYkw{%!c50fG7l; zuj5z+xKk`RzpbbhfQwxV2+b*zyH%x~Bx(LB_Ouq- zVT%v8fee`DajOZY2>EN5BY?Fa+=mL<9Ua%dKx8ToJA{S%iNuSYP!sU6=x*Ctj%k>)Dc`jU49=U zmgl~TA1!V1rZ)Vt`_R{w@KZD)65n2PNPzh#-%<;ijn5{?M-!TA6hS`3&xBhy!bl)) z<3Tdwnu)ZUm=9l=$9H!OFGFstvt2$Hc3pRX7i<8-0HB8j>kgh+>5^wVL6$6#1uha# zGjD&6eTe9%t?;<;TkuGh z+fT|(E%T#9{oUHeiDmb;;e1Wk*>m6q;qP4YH(>ro%-=@ycc%Hf!2F$U{x+Gv4d!py z{GD$8E;D~y%-M`*^`+1&8DPTKIYU z4&TdnoaK4y<7i;m_6dOEh=n@tY*k_w8e29$(owOu98rQx+&8PGY2lt6PcuD!`n+Q9cUr>?wdLHv)__=?(Tch=q9w&z z#avA!=nOJojG-?{WkXQX~l(=imrn;-Q0&ZgVafG+)_ zdi~z?TDMkPu9a2A{(uPR^x)p~d2Vf9u~z1f6(NI-Kh^rRUi~5wu*1Pqle zF^&hQ^s+2WI6Ep1APSr<)Cc*t2cn)OK2#B{D)znTx$|-a)63ji#TJ~#?9QPJk*Fi3 z;@OUhHp-Q@p_M(6M07xB%mmRr zZqR{qO{N|^0O@ZIv594c(ekw7vFV;A7xS}zn_ilwI&+5}-16yT_}uLGI`m0x5SO9& z!lFO!c|+o}i2L+WJS|t>wi(9_P_$l?$$QJ1fQ?q)YV^k)uJpU;^{t*TiL;g|uq$}G zQe`%kTu0@Chi0DVq^_yV(!QIcUFFhFp(J|3*yZk6TG<%dk`}>V5mS0La5^DU@j9X? zqw?ZtSz)LRJ$AcZu}P~OqgQNCFU!*^^Yn>Dz&K}YNuDQ+gYFLPF47im*B0fX8-zMtk&10gD_#$EeyMdV zt=QJLLpusAB*`Co|9SIUo1CxBD?%qhIa(R-itM0Q_0!m$;9bEh9Tl5UHO2c?^kVI0 z^yB(Xw5?)0fFV3bZ{xRXd^Qg4PC*9X3lhXK&=ok!P`*t22IQ96#(lLQ3G9oofi!J{ zS$=H3=m=EX52es^L}wI@+#Z8fVJ=y9KRl~wyy8`JC4qrV9gvA_h2Q{>R<4r99B{!b zEpsdm&D*YLr3f@2xCP4Q5(Mbn1JUJzDSB(Q9*g{xw03D_I?}VRN<$K8! z8cF!t@~G# zO<|7MdB9G6!Yf9)o`#6f!ZrxdbBI7FEx4d~bg;2?48i@0+-E89IJl$o=ct zh^>g|n$)JN>bny4jaA8yBbmJpJUn|l*dwUX?*&}$PLy@7iddM47^foUAcFejgO{zW z=ct5QB(#o3I2KLRI8r4QG0&mcJ76*RVvWi9P`7%}t&bD6-xVC9FgZi=P-F8PFvd>Y z&E{4*TSY+r4<-8S0b?oaY9JU(2#UhOUk>)osh9+iLS%+Jzc6VAr}g zmo-*spTLp68~4S;?@^VLMDdW=ED%>1JH2&(25=~7+qw~W<5dR4i5P$IlEWc!GKJ3< zXis>t$P{*zW>;yY*%Tlyfanu)cn9-1CYEsT+Hl_nTxpLxXsFkH6&ao|j&I}eMZWIG zuGZj(kVWHRAWsUFjxp|Jup&cmoJl=D0-)vq)1qIOiT$;n_ys6ug)=xD9?227gL+=p z(y~0fJaJGj%Q0vZ@Y5N1Tf084wp3IY{^o#i|92N@2YscWV*4NLDkQ<{*{{3;v(>4kvvVL zEj$qa1-^;QqX3F8fldLQ4LFIn*N`92MjT`VQ zVx^Z98`Jp#H-tF9l&F|wlBF)w4#i6^u!tddAk{@6z$6$6>48By=C!@`+uhnx3*#33 z_6A&PaH^yvqv1ad9*A!?@z2Ky34RU)YCgOWrpHLyPhee9SmjzYBU8jekMi_rSTw z330e1frCXGvUN{jl;BaQ>K_QwjDu@J>rG)4`ml<5s)~0&bMY0LNl6?fR@RlV6>Br< zPp#upsl%_=Hb5Pn0S_mddJ1#}PRj-^v(<(2k^ci$=}=Yf{I>eGD)MWFV_&EmFbK(JHJE@<&dM4*Yy20C<9#-Pa}<7( zg8Ebzm{KWO*e7SAQ5Wm}s`yLM;Ain>HexJhgka6mB;BN#?sQwCA_k+-(3Y-P5S*f{ zKz~9y=u$D2gdcqtT5@?Crr29CZ$A+X@3Z(vFkB$$1|xbo+ah2fxcGP%hUHsMFX$o( z17{{treN?E0nkZ1vYsRo=Dwu_XbhXZ30(=q7^Bx#<9uA8a033$pP-5$v6Dr>F9Uea z??9$a_ISw3EbZnCw8pB?#JSE;mDee==J=f{JiuLoobIVUZ}u(F3}SsX5ID=%;0m6k zJ5-Od`cI~b0ecGOu2c>eDCB*LiSAG%WQ)-+Q-+1ZZAZy;6CcZm2+Id1qFu- zw#Ltc43~JdidX4<>K_gCRxcm~Umdy2cl?&&dP#?erepqk(t-F%1}qv8s-LI${X4aG&w;sSrvZ*rs3_qC%V4~;F! znD>@G0E%Pk$Rme)(dpt0T%=!-;d^=B=~36ExQ7bo0cb73uDsNN3#t$t?|b>?j};0< zs=9W>0y?%9zbb)vjA@IlNJMaZ7!dmzA}l{l=->kOiF!&@i7rcNmB6G1!yHY!U$|25~UjHOE zh};=vY{g35U#(TFpdfgb@V>8TeXCZ#d@ToG?R7o43X{P4m3nC%CcJV^!xN4pDZS!J zt)ev=+^z*%6zma!4K0LiG$4h&+@OIGkMmzxIVh@z-fUPf)Lqd@tu)ZG&sV)8bPPt> zYap>!zgrKk#MNECO0OsUII@ndZ}Tj9m{phMV!l_fC%UjzPN86`MI~6jl2-VSFiQfV zregv|!j$9)a{9tmda&iw$D)}-5xcY`FVy*U-|dl-JiPMW2lX^fZUjQBV%H?NEfa*c z*aSrA6;JAuR;HK0%g`D-35`J~#vn49N%h-NsaEl*F#sl*+4c<>D@p8-LE zkEfYS{fa83h>3lInUwle8ZY*CB4QNMA!pkWk(4uKXJsBPYjg!n+nx+6=t>$>%C@&f zKrf`djNYJ`l2s7H~QY1|7-2g z$lc^sR4xO-ICFs6^N<}R#^%kg;OoXm8z5vw{Q@r=2PEVQypZV2r=#St3*DYDJv`ik z;M_=@%--!mWdpP(gPF-k0 zNbjTR!Bx(e^uo_K&A?JiaQAr?8NSW8+#!x+bj@gaA563X9Ch_}ZqZ#Yv=OYLO}n-g z%4x3j+(1D(rW5dRNRP>gRTUJy4)RuGUbIB1+uSDIf_HhhUPhpMAp@YH+C2v~9J;;EY4r`| zYESGPgTJ$^Mus}G?~t3ey=6?Vwx_F3Y0Gae1*v^XZx*x}W7*HeD4!j=z1kT#+0Nm3 zvp#o>-k38>uNj4D&-e9o_>-4Bfl57VUeW5q9Tl$Xd_87ac0vM`A*gy48uOr8}s$K*|T*2xiDZ=HQmh4ARFXNr9;Td z#1JEZIl}(|{uyN>dBT^YMz+oqz7qxAu!~kYb?tpvAnr0&uE&=&34$e2p71o(Lbv`N zkUNHAU}dChhgL(@|PM8~vNx76$U2(M8+;IEG(e z`OfL%)F*|ty9r4D1*Kq)Vx!Q0bT?h4f~TevXz=sX@`nq(Kv0L&?_rK_!S* zv~;@mkg$4ElXkZ-tTLiiF4L|$DAa5|2MFkuE40ex`s7w^@`L*1RodhS^vRpF$(`)A zioOrh%T)QQB5mvwazFT}o<8y@UcCy2eTO`uA0keP2!?JBSU3!e<&v2+G9Y*ksIXWV zidmPIiI0A}Y>U-uXUEcjgb=pshBlgYdeb3FztGC5jT4tJH7;oO3pS&qIW5EY~oO z?u15}j#T5lXJjRoB9UXqT>!7JB->EfZBz!8WPGS^~ zLl@#?j~a#=W-dM^)3bAMt5a1qmUIJovaoxp%8{7Rn*I%K7p^c9xZrNR3iGNdW3+kY zp(@O)CVFuND#29Fbkx-fj Sm|HxIL931yE8G&^rxp$&Hm7T9jxem>(6fSgB&O~*N_!H8$guiAXY#?W#RwiZ()x_+( zoE>nY2dm_}a3AP38Kv+=E`x;1#?Nf}5@e_Y+$)GhrPBb1ZKU&NCp4dx6uxk-U2^1a@}w9?U>^sW>?+(KWthS+JWqkByb0buBDso%FrUrD2wz;`g11h zm2e9LGw|LAEvl1!4H?1DP49_iA1M(sBkgr!wjdrDxyMuaVo>q>N6~0C&3q)j%JkFe z3t78f;cYk40vBLJ8pU}Pwr1Lz+XN6-uC=?XvK`)}gs`iX@eky7XpQ6l~i z@C$l(d=$t5`LfOSR@XY^RXJB}-}YIW`)cNoMO_yw|3@mVkaZ|XHKgDb(5coLDWBrR zH50WF*A(W8OD@X?ZqlPieePPR4%z?p`dm|_I#m0O_5FYOfc*X+rWNLNiL_jpBMVi*hOP0MMuXZRr2odbhvtCBSVi`P)n2wd%KAp$!>j zzTLO1!rMKf)J%DT(`%9&{)P6xrw8gV@YfW)g1Mq=2j#O2;)#GaQU8Ksqgh$Rz+Q3t3d*eWV6n1Y9mxI z+n8py@wRj}@={wHU8;>}lxkxiX(O5pn*5t>Of-=#lP0pQXnLZJWiGRg(lTkIv=)v3 zmNsHwB_DgKV;r0(@aPNqiTi*(tEZ*6ze{$Zt=_(0lArjaxcjAcD$@I?bYUlxTmm5M z{8F0=@=xohAWkw%xGh5<`jQxc!0jc|JPP7u3&JfB{Y?n$37j@aK@7AY1ee^)O6bm9#${1`yU_bt}p$g(O3nEJ(PBkIW$Z5kB#4rmYTOdw1A+kdoazgDnm6(bw z;hHHPCKUmN9b(E0Xh{JDEqO%Zj6AlJpEK9c5q#8Hwak=_gCN+e&vwO5D*B zl4y`hA1LWwD;>Caqa`HJ5S4z4q-R>`nURvrXbH(PRHdIL=~-4f+LRTYiq~gLheH}Y zYf6W)8;Vhz-aVtu->MtY!G#2q(csouH+EuSxh(Ouq0c_A;nMRkOB$m zw0iKj%Hg^v9)J9CD8(c1w11EuxE;pOEpS^G9G3Y;gVKkMmOd;ZYZ_&=6FF>9`moW` zhmE2S8*Tcq;iUF=L4`)801*IFJ?k6$armG<47IsK?e0q7C%610>bf#z9z?rpQbrO# zZCCq8>46|Hyong%jG4FngRIDubpCoHQ_}dG5t-uDy^#UYDbO(ueInD)M;m%arlsM5 zKlb5iPOSY!rnsV0Gcb#7Kb94#O_zW-Qky1$j7TkDP>zY)c&voo7j@15R@_cNJ0RZO4kQ!OfrOx^ zMLYHj(#~nojzk1SleC+nhzQz|WbMa5I}#BzReb$M+R1F)G^wV-q^hTV<5^w3GhJ+n z1v^FJU@#T$q%pBzr?Rj#_bvh{qiVrU5j#m1vueRk5j@x&yIiHd?YBH-8CA(K%WhX) z3A<{ts<(Vcx@hzA9ciXjrPTSqXjS3m#iUi0n0tRiTirX&riz3}D`;7vts*0^AEm9z zxRR!cb+urpm{-zxv9JD}wu*g-riyjNrvB^J)rs4R{`%K#+qRkd1g61FrfI;1&;O`i zQFd0NWoL+2B#>Cri4Fl}vX>rnsY1FiJEGQt1OFUB*hLLnnEoQ!rLG z3{mN)NV<%bOwWu=$&5~cE^Qd9(od6g87rBNF(NBE1vXp5aFsqx(zC7cAUiT8J357A zK1-#aDd{;@dQN0YPIPK6?nN5`&E{ECbB?IFT&heezTC(ZlLOFqo+W=44y?8~kkAAF zWZ(D?j2p`K@o$coX5XM4*?_)*@l^E8fwgj%+~RK)UK1NcT#*>Kn8p8_+k9uKEVjGbLU14cd_n=o?5^eFN!PlCJs&%*izk z=o?5^eFN#)lCJv3)EuOvZy;Uu4W#EV-Rv7va#i18myo^zTOe0#0cxjj?Hd@EIUjO) z!oP%Dg1bL{hTp`ze1b9y)Vv&HB>gOw*G231kK8O1VM|Tur<@crUNE!xYi<*>^b2ib z#?lGy$VB(j3H>7z`vck|e&E|q?)$|oZQ{wH4c^d3uS|uxUfAC0vioYxc`$J2#xJT= zE~T2d|DWc;bQhHNQ}fJ|WS*H}%`-UWP$iX6dCTM@j_Yb|4JP z|8}kqVFs#Dw$>~D0liOB#Ih_CarsytAfflSx_pG*8L9};L8Ny-VVUTl6VUr)MQ_i4 zh~EF^e9xpe+z)F?L2t~b6umK@f{m2klinvQdV44!-$rljuFql-AsYGkZbE$4|Q-Y(X(VJc+=Y1U<@WboQMbqW zF;+67?(gXC=&!K4iK)?#^xOCxN(NWs%smx6T{r1K*ACoRauge?I`v5h)Pa?;Wf`~3 z!1CCSwc9gr)}^5qKZCDYz?wMNp>vj~V-KGD!Y7uH_aedpk&$)-t*-GPTp+X>tf+v!@)MYT6^7U>CO#g!NX z)KwVXzT0Qv&=VpCsfd9RF%S_$+B>0=Yfr)AK;P{MWXj*c?eApZ){IJM^Rl4|;xr2) zOCU})A&|LjxPlmFL1YWW=_Uj;df8bD;!F!7M+XaoQsI_RYbl-7(`sCA})}K3ql(ULz@f7 z`xe5(L)%HOKLl4m)O9Cj+}BzBRCeq)@#8|;vf#&gv}Ke07>d$R-GE5t0Bi+`C|*P= z2hGyU21Y6eMoH<~A(0x`bhW2MYSQr70>`ZyC-#FzDl?;%WYSQTeww6bS?O7k%B*N5 zs9ZZ-r4N(zY%4uGQkfmC1dVIYQt4+(dXANz6RFIJR)WH{BUJi1k}l&W>(7lav20|d za-?3C7pWA|M=H+)>gPr(h3=8c^Yya)NTtv`QaKt)qau|;@JMBWUN$CDDa4LcUWlX% zB9$qW<|ZCHrKhRB^6hk%IYUpm{}Xnm09mhM>i}UZ<$j=w7$gyt`%EQo5OgK?Lqy)t z4H9ynr63^a3Sy{0pc@DT+{qkO!kw#At~i8^)-J0*N3iE>IB{N<<1b zy3764|C8LGh3zn?4s!1mxgUU!K@fN)_k%3CzY6vu<=$z@Jv#uT(USYCU@z7}?vbwK z9_d+*8GUgobWglT_rw>Q zc#rOHMqiu?-4pN8J@F;P11)qv!q9ywA0r`nkM2kEbrBSA=>8%;z6!y6bdNXKab-}v zq5CpEE`i`Zy1!(gggKe+Z|$S|KKq_(PA(NV_lDvN3W8Dpe78o#KFb`&lIvn0aF*@# z*;(jov-p`4ZW_`k~mrqE&8iS8xUpKK1NkiBol%xJSJ>GQ}5$gVC@D zfoHBMdk`GL%1_BU8M!j_`|)NBZ%{ned-<5%`g&q~f2B@-bB4Bhlk}7?$pR4jv%m0+ zA3n`mdMYoik=24Z8R^7^p7XZZ(^tnA=3-YU_oCLSuVG1ob{foU;Wx{0z;)Sq>u1}M zJp_cjfE*LBmw-WDz~H>~sNtRxd5hLT^V-=e7-D`|QqIk5x2scxcoW&{hO$SQ_qr5! z^DA}IyoAw0?dk?1zMvH5?KJba=~Qw1^oH4!t%U9qzz>{NCxd=XKE9%HWcqqqVl4Du z%AtJ+e?7Z3E65cOI7_$%TjU1&I_6^y9Iwr;S&c`r^2jFZp+A%GP&21HQoOWAHuD=u ze+PQ8R(-*k+FTuM>gIdw3a~$M3a+)R6V|8TNS2-bLs1 zVstR(&B;U(Ue#V)#AfTrL$~Oml)our{?G9OLVf)YT%^8kkow=>Oudfjh}XMbr{-Xh<1bhwuy-*h|V;3Yk+um4Z&>wk|7ZlXWb|L#$&3o~sn9*QF;x549~ul2Xj zJ%>hS^wjwNsuOtRcMy|!MCbkEhb?RAF9-6-UU(!~z1^8*lY*rAn48!! z_~5>wN@3nC^SIXVN_E5R>#fAUW%yu+_<%NS6(7{Bhrm6b1#g=pD6?B}9x&S;mt{}I zOrgQPo^=bu2h&$4uL&DIh>`J76MUe1zkEJ$8^NHp3JQeK?=u!>UA$!H>DSoDbaDKN zrh78szMQ-+ghU$wo=l+C3fMtFu2+U>t#S`BWti4d#!gb?dnrt7mBLaAudVBCnz7O} z=-{tybM;r8nc2g)0k#n#AsWX@a4`e2)rEBdQzRSf8!$ z$-L;n=kem0e%Re_n07NBdIKf&);AblhEXZ9w=WLz?u$F;q_~0kzJxyekMa#B&O7hO z{-k{MU~7z5n(F-;Kju?|_~tgAW_&c40y*qH&I#F@XFE3yaySPyG2f{S+mTKu(lt9i zHfSZzL{xD02Y)&M2xrx_%~mO6R2s`kqg0w1QLo~SwStz)V9+6vF-pjKq^6C{VEdr= z8L|)7&&;v6d0&I-rwmTsn@jK5#~Tk6DlS)VVGg*E&xxh#ZwuN-RnTo&_R;#=vXcw) z?Z5a*&0CmEw+9uLtGBHB8%Ps&Vx4}XFg|*;xjq3mBfR9+Psn;C(pf)&Nfk#iQrWoT zxthUozxB|kH11F%Lg7}Bjqz?296Jl!8b2ze=0fup=8b)B1?KA2Z(MRg$X?iHzvU&J z2`;ITR8*>0)mc9yTR2-z9pkTn7~@(e32yP~p7Wro_g#XR^8`17Y|ikU4WgZ!LLMI* z4<2v(6=e4VlhqGQ@DVUw=)XO-A@lZN{S>*BHRlV! z3uEYQJc5y(PGqMUL-)_AJ`~xR9lHrC$d2sfBumz8oyofwH)K;XWHK{s*K~R`a!{~G z_L9_n`y?LO@A2^di~}c+N4)X)@4CAp>9YW7`DmiPl9XxtSz0)w>PJe*1 zYq|{IJ*`sUyC+qO;k*Cf&F4G&&DkC&%*@hM=H3wQr!r(|UPZ#ULBfQJgl~g{y9{6D z_VJZ@`&_=l=zDvH`JBl13}5l$@zwSWU$tddZ^q84Jkn`BR1Z5D`u>2I)`(Qkfcqjp z;;))b>bXMm#OQ>cCjjdez}h6SaWo?~=soVf>pdLt<((pDaUJ-6{G_Vk*d@z*rLGsoL27TxKw=qBfWSYpl~ zY;NqD{mxDK9>2=Vu-~|u*_qa5Wm*RbZK_ACc+JTXbs`wOufb~Epn;7O9n#JW9rBu? z!~H&0`;CLDdGpfg%}Z84C10#Q9Eccyw=@3U>{M?LR&RD9IJ8m&=R^+S11X009vGN$ zfTgC1A-lRu6ge~BuG#L9;~QXsc9X=N+eiD}IN0g&cxN2fmOA|J@whjJpB(4&ct53P zv$iylQg1`PL7s+Ek#8AF1!-O23Cv_D^&fGuIK7Wjg*}KigFRj|*xOz|GvBT5Yl$~% z8)(gWyS{OG;Mn^t=PUlv*!%EFaRc+ES@ZZu`E>Ni_%?jX_c^%Qf4<;9U-6&M`Ohc) z=hOc4dH>nqKUezC73Mjcd6NElcSDpQ>rapOWJklkpTVN0{J`>L^g`o^Q|t0h75?M7 zEu^HfIb~4wfH`F;oo5MAZzG_)1`qxabU{7J~i`S%QpW;@1Dchsbvk;uOy)3es!oN7#$oR`W)>G9%`x0yk~Vc;b1h7`3&h3p96l%T=SWg`3x_STnS}9iw`yS zrL3%duQ+zG)+TDLUtOukymM7EUx}>?zGyO5Mo(E{0MJ^+tp}UEk6IF^TbBDVWJzyT zyG?(X`-rq>pp#_W1fXkz4d&Qw+50Un5}a9yH{<-&j0C)_j@Cs1MJ4L@)a#svOie~H z@wyrMpJD&?X8X;lc5{6Hq-121$}OT?rPisae|ngn-fs?(|D0en2+mu_3e5(OoX(SE zu!_6uQ-nedhpsE5?;>E6)7NL5kyWZR)^8|K>mY^C;7)W=p6+*X?Ml$S>(tK}_i3 zQ1rjzhbyDM!Pl7Fr->pWZ7Og;DQ#3s{!Gm@**NMI@F3zCh)DgJ#eoy(`I!~;G-Noq z*$ZC1|NG+u7wIS7Gq^QJvEVwesMEj9iZkTavfYF@mnsnp{0UoM=XU9kRQek7cv4V3}sCH;CnYvMM5MO6<>*51FEWtl#XZ zJ(N;}=ij1K9ysxG%-Q0dGpuR$Kt7G_!9O_TSmwb2Fv33l@AxG~8UWghZ`yAxVP%Q= z9XOcyM(IZ5BXh|<#RiY`75+SMnX3wuFI*@WR4V4t7CM$uQV~Pqu$!JiLa=qD*Cl#J~R5u%|hlfM7oEhD0 zLXuNLPG!hGU9l`Vy79I72b+aI#9N_r?x_E$3dE20Ms+>0)m!kd<~tn(pRtdrrn7fk zAT{T7Id#VKJ>CGX6II%TE*VTl#wC{ ziIaEr+l z@RT(;HOFwyV1}JcX(38;PS4y5IT}P`c^TAw#|#=c_VrPDi+Les z?0p}O)*MCYFLjGw+v|SnXn_|gH2dX1Um5tv_^CTmJD~COPnY}Mn9?n!>7VuC@Wv@u z23X?fcBK3{r!R5!9?uJ0q^F6PpDt}AVCFZqer{$bMT`KW9o=?0sbs7(tE9r-jiy*H z8<(;V;pKWnu7rIq_xAmjEo9jUe4+f~c{kdhbbo9&Ge;f*oaLX)E5b(*`|KnK1qh+DIjRfZt{ek_7!jy=w_i1^q`QDt@rF8bjZoGWkTkMwZ56ZX9IWwAPA1pg$ zOb1L-$}ex4n@--wn9mSmziq7=W_OjpWz}uu(^}IW zKU$N#myHbgf%F%}SeKm{tUXGpPnZPh#D{j8d)Plp-kW756Hr(ATgeH*SbY!iUS7P!HEhzLlq}IyoDQr-Hax{MgAaiN90K{fQM+@GLnh z7W-Z{TY_~BvG?)w95Q!MB0UVh3Q~=E)~bm?>T<86tk>i$K#h2*Mlp%66Xq0@#P<}Z zPa#d+hUiPys@&ScRMA9&+QW-uDNSA)l-esN{Z>Yv_5&0>qhc{qU4U41@|0k}jO_!Y zTa)91Qa%igVaPTH+NWnDgqI0)FHvJ#f^H#C;?>}WAZ_;RW4x+8QWL$X_Q>KW zm){2Kw#N3mI^XWcdqquAThpB?pXcj9z|&KIz`<~m+db}27^g%Jb_)^@*Ot)<%>0uJ zg2_>@(oo$LnEJ~DJew08_W0b@*@Q(eO!V4ETE~Z!V9}Y$>SO6_=QiZ<5Cz2DP<&r7 zhI97}+lk)nRt+elYA?SS4;#2qx&;ydy$)AmB>yRhMD8qxy9?~D3j&qYrW;e%Y)NcQ z#(E(WyjzgG_V72Xy1mp;d-ztXPA*Jp4}S&sN|U%i6rHAx0K3&%Q`1`q;r^Hmh!k92 zSqUjd^4B4?V$c1&qhz+E+IWMPib`8#53xjPHkY<}^pa6HtW`6Dc605Kuf&Eh9k5oN z#%uJmvWB{?_`l-v(j_=44F=MAbXD!5-axd~K5TrC=7U@0eu{E@I<(eIH|}qTs3D7k z=SLp|?r@6RE=UO2hWo5l7W8ghQq(T&MbpyM-)>ER5I?fmn>AZ&W(4D{SHI>TWYP1z4*lWPz%JiW+>9-Yj}*hPhpv>38(=E%nxVe#t)#`oE>jAPJ_n$2)aAo8~eb&`lLkPYr}o_&>Hf#x5;zE zO(7hZCqqwY_gMNF8n9HEv&lh6G(}6D2STU}xYS7A5Dc~k*W1^l&b;hQg}xd629!$$ zW}JYdnok;^>HB;W=gS`!I=bBX{r!`f$#~8da#C8a6Cj_Yn#>!zZFDeS+xgPeW!eJO zTX5@betDV?-E8JU_t^OTs$QWce3d37#q;5KXIJV+tN@g*<*JK(=suTOhcVg8CXLc| z6l?uU%oM=KOES`yI_wcbZf2f>uWX>c$yvC$Y=gBXD>)|^|DYJKDusVs$>zm-5W4c$ zp4hP5N?guMyaxttMk>U6zGBtA%uCsZc+aiY#oRsoiK0E=f=>L{D$C z*QY`dmL$NJ2@!QxFp|{*X$1q>0-jE6^=r$~&ig#+t37s2Lrdh@S^j1{GfBCdgE;WB zMw6WC&8?C3Swh_F@pnUZ%~SU4OWqCCD&O|_!u1HN9(Y_0ocAS9OSS4Yk>06ZE#O{L zwJK049-L3g$SaQA!mm|l#2d2g$n(b6Wc>xo%{sj#nOQ3vguBOZ?A_$OqX2?^D+uIS z--nES*9-FXF-qk%;w3Iw6|_VJbGe?cRPHJlzM>0N^6j^*L?ZaR>JrXpvxNvYF46i6)aEPD#&hzEv(6BK$hp@ z0%<(63%XxC9D6%;2*U195PRDpXCr&ZXs((#q)v$mo6#>O4%rKGTPx{E7(hRP=rCOB z(KE{q0|3?oPW4*81ld{#tipZAO+Q)*`7-zAEujF>W}xF53fAYfZx<$quZ)EqvC7t z4+fHRve+ah#C@3`Em2fI=TyG}A*l};-arIBnkuHH3ZK4`BkuV_oa*N)W<|eI@zv-R zcFl86%_|_qT2=k5-BzD}Hu?aKcWRz<(}Hh$uHBQWL=c!Es5P=4S`C<6ETK?$JxMb9 zPR&zjhlyUIothO=6hm-W>IZZA_N1y$;l0}u4TdkRDy(B7>)oB;P_`1Qg^7h=BG^{m zY{k1N$tX22=3(AzkIagF(fx=w(|&H4?-lPpOF+d}vAwDL7vAj6$tk^DTKn)-O>On)K!95Fn+JoF|K$AW3viZE= zP7$dHkWTdqpsoE&ZR%lo&HXR1(;CrwN5GAc4e^RR-TdiL<~od6e7AkBaxeP66Z$v%TxG2t zd(pGXY}NgO{MMRa#YNDZg#PKB1f%2Jd}wVrc3-?_B>oXwa}=mKtyLEkh@p}vzr#w; zWA~Avdb?z|Zh(45sp9Ly&+7S%YJOHtSxpZMTVB^t>N)W}VQSd*jDSkc47#@}!3$=6 zDsQvN9q;7cuk;Rll}`!UryEFDO+op$>ZXvk_Q*w6Vk>~uF319;2L=I#{EA!4j1gKx zmT6nY3T`1Tn~Pd=c2b%C(C8y;nIx&Pg9ZA3>FrY0k-R+&2@71D1uCr_+l<0%$2Qr= z8Hljg5(G~Z;Z$!*pJC)#BV32UpJpbWSI^7C(S5Z?u8hvJcXL3*8P^q$Y?nH)h9R@p zs*^xQg!cCxvN{JNEqk;xRQPaC7of?jgNdyMdl=lHz#&CBt`Tf?CTL`+o2;M-#9*wc!DJ|@ z?J#rz`>su?dk%=jG0bNfKAfz;Pgi2YqO(yQGxEIPVY^@{-BsQgJBa9mPm&%jdo!p+J2m+b1bjN%Vo=qy}oPhYS3>6Bx3!ISY+sJut{HKdnr&W>z1 zd8wA1$%56U)-Q-YoT8<6(L;WH*%)~ld^v_6ox3*a`iO-bBw}zXaHk<<%|_;96KNde zOS3>?0pp$gi1DBY2Ra}B9YQt3SbqDGxAgj$GF9}G8F+KsB!t&AKf4^ROirdx*!3>3 zhkERV%|-!?70szVG7=Bn(+dFFT6I&f_Q>V2)4Z)?+G7I4%nGZ+ zBsTPOSaeV=Do%_I#m)AWk^m4w224-BAOPGW07GlJ3h4>a+NF<^5S1wLmMJYdxVD@t z-DBBIiajY}W>SA769_YsqrYtk2`BWhZRF{*hJEh()QrVOLL`xtc>X~HZ zJ*7__`6nXB=NsgD)4p5*J3ikH@buXdyjY13=~g5cn7dCckK~v3Xlr7bVKlafTeEQU z_N);Gp{1rh{Y`cM1I{r-Qul$V<6L!~)RK0-tW`tmP`v-5h**L2%VxbsIMOiI?$I)h zR=MmRg#F_UEcEqMj8x>~P4p`CZ+GQxt`|*gMu#b|TXb_Z;4r&AQoC?Fn{TG1DWV9w zD`vS*Q&=B8%o@8fLl1HQX+ViJFLx{WfDp`;e-a2DEjwnRJFUSygX?%hr8K2Kd=H2X zNjgR}xLp+B_qXU)fBon%!-FBQ(+&NwYIO?Y%ENy>qqMc^W^9l)ySLH#@kJpvfG(sr z$|L#KvO$t6Fke%a!L>&|(2>Eo+lvnLj42bDrIYIYmA2+&0C8_q>pT(IzVJ)-4mys_ zh;7b;KRs67Zdd#?Ikoq}E-LW`Y&-NAlMyo>dUC)XD%jn((GfgWc#MinW1XR@yT7LX z+G%oPg9oftcbaILp&sfVh}c;o&yx^)%iW0VccGqsMpeH&qZWul0u>iULlq-&&8@G> zpkpvv)=_ae>|#C9oSgNG%M)8OT=Sa8H4Fbou31p2S?fFB1t6oB|NH&D85c@N}8|u~=@R_icY{AFMqLcQw`?9cew@oSYHN zZMU~sRd3fU}p_9rK>QdT2KB; zFdoWu@t?dduK6Fk*b|J$@1idT{{zAJjv^-v6pSAMA!8?JAA)bi7mF#sN|(Tti_U|A z;*CB-8s>0(5$NWdUi&;kHLP+Hp>D{u;$^QD)Bnd-+*_$Ng|U6DFoZhh1o3{(fL1`L zqiBNB|M0{rQ;ATC1e58MsuE@NEGE<+d7r}FYm1tVzN6cFs!A$J52q`A0iP8-brt7W zKmQm%|7f0})CQ&&+^LJ<1eR9zhja|&gg?z>N&tO~!zJ1*X^v&VwE~s) zViq!unS++&Sc7G0PDCmsrDihV;zDeES4-#;7W+zA>@%x&nPebO=`zVnN$#Z*{Qm4o zzWLdn{gF_HJw@dp8C72DNfIfrk|t*Y$qZ`&?yo4S!=?CgGJ_yl}-`%M*KWSa9}$rLa#NbmMo zF7KVmirKg6cDo&&^bEVu+NQuw*zR~5=N@iNiM({0zz2OKwa}I_U%mfe+RoHlBI1k+%KSDVD z7bsMAOKh#3X{~8WPE?8ZpRJ`khy-xE(MtSCkeC)a=g_!u@lK{g$?t8j5`Xj(vED?I zXM_U>%ZAXDcxRSrzIU;_6D^s>WWdKGbT$GBocM`Kom3)jDunKe*y1nrHz?Cq>d)UY z)91kX)S&H|3Zn@Mzo3MsXoVHb)V+_~R(Eh8Sen<0(N;o3B#C#pExsey7c#-?iIruvyLOzO$q_xWi629vvQR{KB^KStUhthR+{b zKB=T|-kH9>uZ{r10Bv#?03f_p2q6@u4|uB*0z~mPL=*Uy`k8*(=suvfh~E`&Bnj)6 zop+!iEG34Hi{1?1XELW+h#@Bgd1HLvWrj)~)4n+4)mpB6xV3DnmR(d{YAQ)zHYf;u zk$QDLr3ZgEc|x}Qba`D3SG6#bG9ibtq_gnFKy2_9%FML{(3TDc_O zrtPXKxr6_Aw;yQV(BbZCf8g5o#`gDq@pk8~w%Hd1BD1f=6m4>Q!^uHcw5PoE_kXj! zG4{<}?Yr93S-aZfYo}>@E)e_UuC`rm>D*oZeq1{{X^P%8tE7nD+qHhtWK}hZ zu|J{q_SC?T_f3cgvgKf>6xfwB<*xC8_Kh9;cI~j@(;=i?IWq})d!H3=?TOrkb-BQ)vb z%Sz}f0>!s;fhXa-&?|4dyV~ZTk-pC$bC_2^dXV>Q&zYz~5+t6z+#~>FWXq{i@IMpm zqfh95oE^OOl(5&~wi*f+3g->?iwyfu`imZe-rEnjqf~+cf7gzAL)tgK?amwQ&J~n9 zAb`#ecm75nr%QFqSNj2QzEqbzs0=eP8Bl-0=hkmMtlh=Gt7QIwO00*6DT(O{Yw7g9 zimvx70?;^|0C@YXhi?n9fwqbc1pW@!iVx=-j6)U8jQ;J7WgYGBJW~mJ+8g1Fa6A8Z zyX_5an;`Oc+MC+n*_CrQvBLVCT*bbAyzSnwGpD{UWVs*mWM9bBCZsLrIrD5!?M%0C z*!_C@#b+k9&cZJ0ik2b`y_YdMAj+)l#E>r}Ah%tlVrMSI8giE_jc{{~Q z;a$x3+h=L)p!43azR(9wW>ugIfk-J;LzY=rLp%Ni#_jMy36P(st#n zxO042xB{yXTm`JzBKzbDU|X$Kcy*uz_)UezL@_b$PH?CZfM(MARNJ$S8p*fetD<*1m;KlQwSh8Nb>$U?-O4%N4)jd8(Lw!tU;9zL+X68|=KZ)tRgqp?o0tZO$n z9tj1vm}C2;O+I_JZ`{4X>`YE8nIs7$()jI6G!NZCLd!oNwp_ucq%W6}G{xkW2DbO( zk&Aa}+H&_Qa3(0t4Swnny0*i;9kd#yCNm$Z!08WsB;wJ;Nh)1xG(fN$-5fo|My+|X zje?q$rh&F+(&Q^mFN?n42*l=!5lsOkYVs24GxZTz$LI|X4?Xj#*2pPt+s%Q%v*rV1 zc9p6OifAISrgNDZ{zKoi^L{dz+?l0dqrcd9ZO_zd=4}2HF`-ON$*RDq+S~uxn`Ymx zs$?i9E4Tb$ua4?9a9ENhOj&#|*Hgtel7}lc?ELYprm}EJDkc*w?Q%SLskEKh@t#@H zQ}|`$^b`n-38Nj`>BRQVzM|^utV7=b)~pw+cg&Xc!Vx8yzSDj)T`)U-_^VO;R$P~r zye5mt=-2Hg!e+(Zw_eOrq3pOdp|qO!=%=b6dH~-6(P7GCzv<IWe2u^I-R6<|lTS^dK56sPyl^zC0;P--f4)hd?Ix`O8_VcdG$Zx7ivXXT$}g)>5Q>&U9!Id%5~~W zrtr{?-B~=@0krCL9TC@3x{= zeI#$r#X{h%m&Q}~!T)SsDj=b=-qg`4AZqLx7zD9Wd9i7TJ6REXh-eJ}HBB=#nc8eZ z3J6JWO*NYjEr1byt}^_$2|2?H8A8ZF`vt9EK~L1`JXNAmUW2%B;IsKoh@uX-C zNk6*&2pYj^ODrtObpzQjg4C&y=2R9RYv`q3ub}k%es_82 z0Zn%a>2y~m4~jjtzu4PMvC*?ruTIVYvSh7NgA;GPH`8-ToDO(BcQ$#{b1mG=t#184 z=`zD}_8(MttDz)tLJwtNQFn;({qC6PcgNQTc1P?idLd@D8X6Nq%zedl zN_sy_eCnqO$J0CeUey^5na(&f{aX)h973X1@*jALQ!5&dugz~x{jxfPp4BRt>&_2l z?2-EUp{`^a=`(E6VAXfi1a+6z-4Hv9mGpgs;P{`^GVCbU^MM2|Ox{y6Dt#07VE;!b z9e~PvJZ0yVNmObM7)0NeMe!old-ht`HXIf5)0%QPM}ZCc3)?mR6ZCN|6eQY3K!PI1=KQL{?! zwok(pv_cEktj*qO_8|}=C{|Cgxk|8Bj_=@EK(ets^Lc7HJ2w?A7HLepwfWH6%IH^A zvgCuQXm#^zkjT$HdQyy(ZYDKb(~n}WC%_a)_p^w8LGR)~;G(N45dcyvW-o{R3!Upi zht?J20{)i5@>_})g=^mn$If)lcCIU|4-FwuJMR4IY};~2y1O6)_)zM+>uDDsCnh>c ze(UV$>)4lpM3LQS$xz<=rUyFcux<xKhhfenhCx3j+8EMF7J*V zh~L9No_@jJvAURAQU}E}<8rZUq`IlOi$933on%N0=}nH_^iqz%07oW$^NHzWAGqHp z)pG3TovZVWmHF$YHBFh;ER1Gaa)DYB8-8MWb5AahEryF(&+dc!CK6zJANz0sl#9;F zfHUUA?2A8;M1}q{(Eqo;Ug_-zfxXtNbyT7^dX@9N5CUOn3oFnUfy?~(d&OmktW`x{ zi@*DJUb?>MGAz#G$FpPmlQXhQn^NbHiPdO>8tq?vFVwwG)`8K}Rl-OWrBc$XJu2v4 zR|$5bmLiM$B7dPI9IyC^**~-2(is@h$S8aIPUpt_vJLoDqM6ttUb`{gcxHK{RoxhG zFm~1FZ1Cq^c&FLxj0>%(jSj^?to~VGC|S%l8M7L^oS+`t>+^cpHmGT{Uq{1~-JE8D z5Z(!!aAzVo;tlwr)ZNsdo8sf^;G9-_b6$_VE%rxz+Bj43rC@inIULzr+7)a{Y+ZC( zvf>O+e{TtvA8#4oJ398+6$|%Tb>{(=TGFs+nlpWG>5*U)Fq3;~?xOL(X%OB9VW=i2 zRVvh~e+q0#hLm#bA$c7KSMdA1s3_CRlbHex=>EkYcnGLY&JVT>zNnl#qZjU-`xU5! z6C{xOaFUlFk9{;COFzYAom^IC9?UX*G}n|kGX4CDO8a>9-$7o>;NtWzXD_##kY=c+ zOO8mzvl23Y9001dOh@w|+Lj5uxH;@+r~U4YL~v$rcl@nD_uIJku@~-ir-*8=&)59+ zEnZs&kJi4CR;4rN8?~O$fBwAaWhqkeqd#O8xcXFHnFm-;;HeIWTR8IB%Pw-VXxCt+ z!Hb1+U4GeC%D#3>5SMhh&P}=8cs~i_B11@9TSQ29Pabx9omSlhHD^`zPP;SyPH}y8 zNBWDVKkFy5*HgWh3mboXeA`Ed8jGz+w-q^JAI|$Ydba%u1Ks&MlGlx{JzTzMd%Wqg zQ>J&+Pw7o>lFyU61M2&QxjILKk-G>K&&H)q!7ciHoX=zh_qPPgds-?zdLhpWq2d9 zS1DO;=})V(mpEL=^D>8`_g%5DbKV8IYn-Krnogzz3v=UXs3+S#l6r@g9{ezT1S>f; zon$);Kf^{?k_4mUM&dc;oM>3QFGD)AFV9^=M`JCxmtO2`tu(^Z7-SoKIyHOkmH~x4 z*k1@fpJk_*ysy`~wz0H@6P9ibMI8GjrO zd&3r%JVe;tRIjhf&;_E`D?M_3htS}0h^)L@MZ`Yy;WRM28;CVHYqb*Ehv90ULsx_2 zIvMncr~{+jn-#7O;v!d^EA!=3?RY-|&smY&C3l2+jeSU`F+P_f;_1g`eas&bwMK^N z6c%n1a;;_eLx2dn3Z8()7D?4&Yh88-ee`esPN4UPD-pPDB@z-Z^^_s;)T{3 z3o;#8@t1LC;Fm%&#!CDrzqRiVVmBEINax!}yg~1{V4UD{=?n%vSx>`^(h^C7p+g|G zLuqCpix-`SweJ9A)_p7>FmetX);YuMN@IyR2x-CII~4S9WQA5@doZ^_6J7QVGQ<~$ z|7O))E2v(aQ6OJN2~?86>WfX4se24WkaF~Vw~Zic)#sEu!AsDFpX9-ax-ARD$A*X1Oz=iCJV_-f~S=4Zv^=IhX?-*1(@{= z_bM;3xEfvey%j()JV~M zzkXEO1h&$@?wh}PX9ue|>5Fza2kFoBLQ{`0n*N9m8boQM>A^z2NAWD6;|P)kR*2_V zo?5byg;xG*_%4vT9CIoeo-8>Ws0HsW(NQ=*&}s!U!8PDg%M$N@6`0rJov^ueT)q~T zR%?t*$2FdtwC$;P!M&3HsV}MNf2Nyq{8DKEw(9?tZ2vb9Yp#^4=h({th+Ct#_Cu`w znE`r3zq&G2&AdLB(E*V;7g0qQrG^<`<;68)zmRF48fn%x`x=;~29jq7q!u@xU!@

^krU8uKe?)Q22<4k8hZY=0Q0x&E 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

OP*w?G7!-q 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%0AM- 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%0AiGYx(JojTvA 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

VLn*Z)Zk1K}U%3L&JQ4H_>SW8&HKLeU4 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 VUZKes1~E6un`}`<%bGVD{~vyLrKkV^ -- 2.34.1