From 2e17d7cd6114c0a024bfc2aeb3e618e733b719d5 Mon Sep 17 00:00:00 2001 From: dennisdebel Date: Thu, 10 May 2018 14:20:35 +0200 Subject: [PATCH] first real commit --- binaries/source.webloc | 8 + binaries/tiny.hex | 425 + code/LICENSE | 29 + code/blink/Makefile | 59 + code/blink/_schemes/leds.fzz | Bin 0 -> 4017 bytes code/blink/avrdude.conf | 14792 +++++++++++++++++ code/blink/main.c | 87 + code/blink/main.elf | Bin 0 -> 5172 bytes code/blink/main.o | Bin 0 -> 1144 bytes howto.txt | 223 + wiring-diagrams/arduino-to-attiny-wiring.png | Bin 0 -> 66696 bytes wiring-diagrams/attiny-pinout.png | Bin 0 -> 49869 bytes wiring-diagrams/attiny-to-microsd.png | Bin 0 -> 3032 bytes wiring-diagrams/attiny-to-sdcard.png | Bin 0 -> 9584 bytes wiring-diagrams/sdcard-pinout.png | Bin 0 -> 69644 bytes wiring-diagrams/test-sd-card.jpg | Bin 0 -> 155455 bytes 16 files changed, 15623 insertions(+) create mode 100644 binaries/source.webloc create mode 100755 binaries/tiny.hex create mode 100755 code/LICENSE create mode 100755 code/blink/Makefile create mode 100755 code/blink/_schemes/leds.fzz create mode 100644 code/blink/avrdude.conf create mode 100755 code/blink/main.c create mode 100755 code/blink/main.elf create mode 100644 code/blink/main.o create mode 100644 howto.txt create mode 100644 wiring-diagrams/arduino-to-attiny-wiring.png create mode 100644 wiring-diagrams/attiny-pinout.png create mode 100644 wiring-diagrams/attiny-to-microsd.png create mode 100644 wiring-diagrams/attiny-to-sdcard.png create mode 100644 wiring-diagrams/sdcard-pinout.png create mode 100644 wiring-diagrams/test-sd-card.jpg diff --git a/binaries/source.webloc b/binaries/source.webloc new file mode 100644 index 0000000..77a6106 --- /dev/null +++ b/binaries/source.webloc @@ -0,0 +1,8 @@ + + + + + URL + http://www.instructables.com/id/Attiny85-Sd-Wav-Player/ + + diff --git a/binaries/tiny.hex b/binaries/tiny.hex new file mode 100755 index 0000000..c3f990a --- /dev/null +++ b/binaries/tiny.hex @@ -0,0 +1,425 @@ +:1000000011C02BC02AC029C028C027C026C025C0C7 +:1000100024C023C0C5C021C0B8C11FC01EC02573E5 +:100020002F25730011241FBECFE5D2E0DEBFCDBF68 +:1000300010E0A0E6B0E0E2E5FAE102C005900D9222 +:10004000A237B107D9F711E0A2E7B0E001C01D92D5 +:10005000AC3CB107E1F79AD1FACCD2CFA895019781 +:1000600028F0E0EAFFE03197F1F7F8CF089572E069 +:100070007A95F1F70197D9F7A895089588E08DB999 +:10008000C19AC39A0895C3980895C39A089584E0C5 +:1000900086BB86BB86BB86BB86BB86BB86BB86BB58 +:1000A00086BB86BB86BB86BB86BB86BB86BB86BB48 +:1000B00000008FB1089594E068B378E087FB61F9A0 +:1000C00068BB880F96BB96BB7A95C1F7C19A089515 +:1000D000DC01FB0122E032E02E1B3F0B241B350B21 +:1000E00084E0319788F086BB86BB86BB86BB86BB27 +:1000F00086BB86BB86BB86BB86BB86BB86BB86BBF8 +:1001000086BB86BB86BBEDCF109731F0C0DF8D93E9 +:1001100041505040D9F72FC08C9956958C994795EE +:10012000899956958999479560917600A0E9B0E044 +:10013000A60FB11D8091A0018C3FE0F78C99A7DF3D +:10014000A6DF8C998058E82F899B07C08C999FDF88 +:100150009EDF8C998058E80FE795ED93F894809195 +:10016000A00183958093A0017894639541505040FD +:10017000E9F66093760084E086BB86BB86BB86BBCF +:1001800086BB86BB86BB86BB86BB86BB86BB86BB67 +:1001900086BB86BB86BB86BB2150304069F708957D +:1001A0008F938FB78F93EF93FF93E0917700FF27A3 +:1001B000E057FF4F8091A001815038F08093A0015B +:1001C00081918BBDE059E0937700FF91EF918F9182 +:1001D0008FBF8F9118958A3019F48DE001D08AE095 +:1001E000FF93EF93E0917200F0917300309709F064 +:1001F0000995EF91FF910895FC018591803011F0F0 +:10020000EADFFBCF0895FF27E0E230E247FF0CC0B2 +:10021000419597FF09C0EDE26095709580959095A6 +:10022000611D711D811D911D27FF02C0219530E3C5 +:1002300050E2AA27660F771F881F991FAA1FA417CD +:1002400010F0A41B63955A95A9F7AA3008F0A95F8E +:10025000A05DAF93F395611571058105910541F797 +:10026000ED3211F4EF93F395F21718F43F93F395F1 +:10027000FBCF8F91B0DFFA95E1F70895E991F991FD +:100280008591803021F0853219F0A5DFF9CF0895EE +:1002900020E0E89455915532C1F3503311F468943D +:1002A00055915A3348F4505390F3220F022E220FE7 +:1002B000220F200D250FF4CF0EF4219589919991ED +:1002C000533619F3533729F1533559F1BC018827B7 +:1002D0009927E8945C3621F4899199916894559115 +:1002E000543639F446EF7EF077FF0DC08FEF9FEF65 +:1002F0000AC055374AE039F0583540E121F052360E +:1003000042E009F00895FF93EF937DDFEF91FF91B5 +:10031000B7CFFF93EF93FC0181918030B9F35BDF9E +:10032000FBCFFF93EF9368DFF1CFDF93CF93CDB790 +:10033000DEB72596A3DFCF91DF910895F701819372 +:100340007F010895DF93CF93CDB7DEB72596E09177 +:100350007200F0917300EF93FF93EEE9F1E0E09308 +:100360007200F0937300FF92EF92E990F99086DFAC +:10037000F7011082EF90FF90FF91EF91E0937200F0 +:10038000F0937300CF91DF9108951895A0E0B0E04D +:10039000EBECF1E025CB61B614BE8EE081BD89E2C5 +:1003A00088BB8EE387BB789471E8272E70E0372EE8 +:1003B000C0E9D0E06EE1462E60E0562E81EA91E081 +:1003C000B0D8892B09F0FEC1A8951092900080E664 +:1003D00090E028D7892B39F480E990E061E070E063 +:1003E0004EE850E073D780919000860D81BF80E980 +:1003F00091E067E670E0CFD69C018430910529F04A +:1004000057E6A52E50E0B52EDAC180E991E06BE603 +:1004100070E0C1D69C014BE6A42E40E0B42ECFC1C3 +:10042000812C22E0922E90E8792E80E991E060E024 +:1004300070E0EDD49C0182E0C82EBEC1A89580E991 +:1004400091E068E770E0E3D49C01009709F0B7C140 +:1004500080918100882349F380918000827171F737 +:1004600081E890E06CE670E066DA009739F3A895D1 +:100470008DB79EB708970FB6F8949EBF0FBE8DBF7D +:10048000EDB7FEB73196ADB7BEB71296DC93CE93FB +:10049000119753824282B582A4823782268252DF2C +:1004A0008DB79EB708960FB6F8949EBF0FBE8DBF4E +:1004B000CE01B8D69C01009709F078C1CE016CE05E +:1004C00070E04EE850E002D7892B09F07BC18091A3 +:1004D0008E0090918F000C9709F074C18091980064 +:1004E00090919900A0919A00B0919B0087559144FA +:1004F000A645B54409F066C1DD24A89580E990E0E1 +:1005000068E070E04EE850E0E1D680918E00909176 +:100510008F00089709F056C1E0909400F090950084 +:100520000091960010919700809190009091910019 +:10053000A0919200B09193008C3449E4940743E574 +:10054000A40744E5B40709F4B6C08D3469E49607FE +:1005500063E5A60764E5B60778F486362DE69207CC +:1005600024E7A20720E2B207B9F084549944A345D6 +:10057000B04509F027C19FC0843661E6960764E75D +:10058000A60761E6B60709F463C086569146A346FE +:10059000B44709F017C18FC0C70181709070892BD3 +:1005A00029F00894E11CF11C011D111DD801C7019F +:1005B0004097A109B10985359105A105B10508F05C +:1005C00001C180E990E0B7014EE850E07FD680910C +:1005D0008E0090918F00A0E0B0E08E159F05A007DF +:1005E000B10709F0EFC080919000813009F0EAC0B6 +:1005F000D09092008D2D8150823008F0E3C0D1BAA6 +:1006000090919E00983019F0903109F0DBC081B3D1 +:10061000892B81BB94FDDD0C2091940030919500D5 +:100620004091960050919700DA01C90180549F4192 +:10063000A040B04081549C49A040B04008F0C2C0E6 +:1006400060E874E88EE190E0A9D9215029BD55CF2A +:10065000DD2009F4B7C080E0E81684E0F80680E009 +:10066000080780E0180708F4ADC08D2D90E00197D1 +:100670009C01442737FD4095542FDA01C9018E2192 +:100680009F21A023B1230097A105B10509F09AC0CD +:100690008091B7019091B801A091B901B091BA01D0 +:1006A000282339234A235B232115310541055105B0 +:1006B00009F088C01AC0C70181709070892B29F099 +:1006C0000894E11CF11C011D111D8091B70190914E +:1006D000B801A091B901B091BA01E80EF91E0A1F44 +:1006E0001B1FC801B7017ED208CF1092A001109243 +:1006F00077001092760080B78823A1F496E097BD2A +:10070000A0E6ACBDB1E0B0BFCABCC3BE20E129BF0A +:10071000DD24D394DEBCDBBC84E690E0A8DC40E8BA +:10072000D416B9F78091B7019091B8019170B401D6 +:10073000681B790B80E090E04EE850E0C7D58091CF +:100740008E0090918F00A0E0B0E0E81AF90A0A0B41 +:100750001B0BDD24D39408C080E09CEFAFEFBFEF0C +:10076000E80EF91E0A1F1B1FA89591E0E91694E0F8 +:10077000F90690E0090790E0190718F060E074E0CE +:1007800001C0B70180E090E04EE850E09FD59C01A9 +:1007900080918E0090918F008050944039F4DD0C50 +:1007A000B099DACFD394B1E0DB16B1F68091A00115 +:1007B0008823E1F77EBC7BBC232B21F43FCE232B87 +:1007C00009F42ECEA89513BE1ABC80B7882359F021 +:1007D00010E811501EBD1BBD84E690E048DC1123DB +:1007E000C1F710BE1CBC8DE481BD85B7877E8061DA +:1007F00085BF85B7806285BF889585B78F7D85BFAA +:10080000A8958EE081BDDACDA0E0B0E0E9E0F4E0AB +:10081000F1C86C01C0917400D0917500FC01118287 +:10082000108224813581468157812130310541056F +:10083000510509F45BC08E819F81A885B985281771 +:1008400039074A075B0708F051C0211531054105FA +:10085000510539F48881833021F42E853F854889FC +:100860005989F60120873187428753872115310541 +:100870004105510579F18EEFE82E8FEFF82E8FEFBD +:10088000082F8FEF182FE20EF31E041F151F8E8105 +:100890009F81A885B9850297A109B109E816F906D3 +:1008A0000A071B0728F020E030E040E050E016C0C7 +:1008B0002A8130E040E050E0C801B70156D89B01E2 +:1008C000AC018A899B89AC89BD89280F391F4A1FD1 +:1008D0005B1F04C02E853F8548895989F60124870E +:1008E00035874687578720E030E002C021E030E0BE +:1008F000C901CDB7DEB7E8E099C8A4E0B0E0E2E80E +:10090000F4E072C84B015C01609074007090750057 +:1009100082E088169104A104B10408F4B0C0F30188 +:1009200086819781A085B18588169906AA06BB069F +:1009300008F0A5C08081823009F45DC0833009F4DD +:1009400078C0813009F09BC0C40196958795880DC9 +:10095000991D9C013170892F992786956C01EE2491 +:10096000FF24F3014285538564857585CE01019688 +:10097000F1E02F3F3F0749F0C40ED51EE61EF71EDB +:10098000B701A60102E010E01DC04C0D5D1D6E1DFB +:100990007F1D2FEF31E001E010E004D7892B09F033 +:1009A0006EC0F30142855385648575854F5F5F4F47 +:1009B0006F4F7F4F4C0D5D1D6E1D7F1DCE0102964A +:1009C00020E030E0EFD6892B09F059C069817A81A7 +:1009D000C40181709070892B39F0A4E076956795F9 +:1009E000AA95E1F79B0122C09B0140E050E03F70D7 +:1009F0004070507048C077276B2D5A2D492DF30158 +:100A000082859385A485B585480F591F6A1F7B1F72 +:100A100094013070220F331FCE01019602E010E0E6 +:100A2000C1D6892B61F589819A819C0140E050E013 +:100A30002AC0B501A40127E076956795579547959B +:100A40002A95D1F7F30182859385A485B585480F52 +:100A5000591F6A1F7B1F94012F773070220F331F9D +:100A6000220F331FCE01019604E010E09BD6892BA4 +:100A700031F429813A814B815C815F7004C021E0AF +:100A800030E040E050E0B901CA012496EEE0C8C76A +:100A9000A0E0B0E0EDE4F5E0ABC75C01C09174000C +:100AA000D0917500FC01C080D1800894C11CD11C7C +:100AB000C114D10409F48FC0248535854685578536 +:100AC000211531054105510509F485C0C6018F7016 +:100AD0009070892B09F079C02F5F3F4F4F4F5F4FC8 +:100AE000248735874687578740855185628573857A +:100AF000411551056105710539F48C819D81C81638 +:100B0000D90608F462C067C08A8190E00197960117 +:100B1000E4E036952795EA95E1F782239323892B24 +:100B200009F053C0CB01BA01E8DE9B01AC01623091 +:100B300071058105910518F421E030E04EC08E81E9 +:100B40009F81A885B985281739074A075B0708F0F0 +:100B500042C0F5012087318742875387C0917400D6 +:100B6000D09175000EEFE02E0FEFF02E0FEF002F5B +:100B70000FEF102FE20EF31E041F151F8E819F81B1 +:100B8000A885B9850297A109B109E816F9060A07EF +:100B90001B0728F020E030E040E050E011C02A813F +:100BA00030E040E050E0C801B701DFD69B01AC0166 +:100BB0008A899B89AC89BD89280F391F4A1F5B1F11 +:100BC000F5012487358746875787F501D182C08292 +:100BD00020E030E002C023E030E0C901CDB7DEB74D +:100BE000EAE022C7A0E0B0E0E7EFF5E0F9C6E82FC1 +:100BF000C0917400D0917500209719F426E030E080 +:100C000001C1898180FD03C025E030E0FBC0EA8C92 +:100C1000FB8C0C8D1D8D4E2F592FCB01DA013C0121 +:100C20004D01E614F7040805190510F437014801D1 +:100C3000EE88FF88088D198D1E8A1F8A188E198EDE +:100C4000611471048104910409F4D6C08A81A82E2C +:100C5000BB24CC24DD24B9E0AA0CBB1CCC1CDD1CBD +:100C6000BA95D1F7E114F10401051105A1F11701BD +:100C7000280108942108310841085108C401B30132 +:100C80006150704080409040A601950187D679015F +:100C90008A01C201B101A601950180D6E216F306D0 +:100CA00004071507C0F088279927DC018A199B09DA +:100CB000AC09BD0982219321A421B5218E8B9F8B84 +:100CC000A88FB98F681A790A8A0A9B0A2AA13BA1C0 +:100CD0004CA15DA132C02E8D3F8D48A159A12AA300 +:100CE0003BA34CA35DA329C0CA01B90106DE9B0149 +:100CF000AC01623071058105910508F480C08E81D8 +:100D00009F81A885B985281739074A075B0708F02E +:100D100076C02AA33BA34CA35DA38E899F89A88D8F +:100D2000B98D8A0D9B1DAC1DBD1D8E8B9F8BA88F11 +:100D3000B98F6A187B088C089D08A614B704C804EC +:100D4000D90490F2EE88FF88088D198DE60CF71C07 +:100D5000081D191DEE8AFF8A088F198F8090740074 +:100D600090907500AEEFAA2EAFEFBA2EAFEFCA2E5D +:100D7000AFEFDA2EA20EB31EC41ED51EF40186817B +:100D80009781A085B1850297A109B109A816B90676 +:100D9000CA06DB06A0F5228130E040E050E0C60143 +:100DA000B501E3D59B01AC01F40182899389A48943 +:100DB000B589280F391F4A1F5B1F211531054105D1 +:100DC0005105E9F0F9E016950795F794E794FA953F +:100DD000D1F78A8190E00197AA2797FDA095BA2FB5 +:100DE000E822F9220A231B232E0D3F1D401F511F0D +:100DF0002EA33FA348A759A720E030E003C01982E3 +:100E000021E030E0C901CDB7DEB7E2E105C6ACE2D2 +:100E1000B0E0ECE0F7E0ECC57C016B018091740080 +:100E200090917500892B19F426E030E0B6C0CE0110 +:100E30000196D70113969C938E93129761157105B5 +:100E400041F023E030E08DE0A82EB12CAC0EBD1EA9 +:100E500028C0C701D9DC9C01A0C0F70120813181E5 +:100E60002F70307015E0220F331F1A95E1F7C5017E +:100E700000E210E097D4892B19F021E030E020C087 +:100E80009D85992309F48DC0888D953E29F09E3269 +:100E900019F08F7383FF20C0C701FADD9C01009712 +:100EA00079F4D7011C964D915D916D917C911F97BE +:100EB000411551056105710581F62115310561F076 +:100EC000F70114861586168617862330310521F022 +:100ED0002115310509F061C09601275F3F4FF701E9 +:100EE00084859585A685B7850097A105B10509F488 +:100EF00043C0FE013D96AE014B5E5F4F8081803264 +:100F000051F0853009F485EED9018D939D0131961C +:100F1000E417F50799F78D89803299F08EE2F9018F +:100F200081939F01FE017596AE01485E5F4F8081FF +:100F3000803239F0D9018D939D013196E417F50780 +:100F4000B1F7888DF6018087FE013D96448D558D61 +:100F5000668D778DD6014D935D936D937C9313973A +:100F6000808D918D15969C938E9314978689978981 +:100F700017969C938E931697F9011082C70188DD0E +:100F80009C018330910549F4D7011C961D921D9256 +:100F90001D921C921F9720E030E0C901AC96EAE058 +:100FA00043C523E030E08CCFA0E0B0E0E9EDF7E00E +:100FB0001AC57C015B016A0103C00894C11CD11CE5 +:100FC000D6018C918032C9F38F3219F40894C11C78 +:100FD000D11CF7011482158216821782D6018C91DA +:100FE000813230F4C70110DCEC01F5011082C2C07F +:100FF000A0E25A2E88248394FBE06F2E712C6A0C99 +:101000007B1CD7011296CD91DC911397FE01CE0186 +:101010000B9601C05192E817F907E1F730E09924E7 +:1010200048E002C038E04BE0F601E90DF11D2081F7 +:1010300093942132A8F12F3299F12E3211F0341706 +:1010400028F0483069F52E3269F32AC0822F815882 +:101050008F3118F08F558D31C0F4A32FB0E0842F5D +:1010600090E00197A817B90784F4F601E90DF11D86 +:1010700090819394AC0FBD1F2C93832F8F5FFE0143 +:10108000E80FF11D90833E5FCFCF822F81568A31CA +:1010900008F42052FE01E30FF11D20833F5FC4CF0F +:1010A0001B86213208F48B86C701AEDBEC0100976A +:1010B000A1F5F701448555856685778520813181C5 +:1010C0002F703070E5E0220F331FEA95E1F7C5017C +:1010D00000E210E067D3892B19F081E090E01CC09A +:1010E000D5018C91882309F44AC0F301808183FDE6 +:1010F0000FC0F701A281B381F501E615F70509F4E8 +:1011000041C090818C91981719F431961196F5CFC2 +:10111000C701BEDC009769F2EC01C330D10551F57F +:10112000D7011296ED91FC9113978385882301F1E5 +:1011300021C0F301808184FF1BC0C90CD11CD501E3 +:1011400054968D919C915597A0E0B0E0DC019927D1 +:101150008827F501228D338D40E050E0822B932BC0 +:10116000A42BB52BF70184839583A683B78349CF3E +:10117000C4E0D0E0CE01CDB7DEB7EFE050C4C3E0AD +:10118000D0E0CBCFD7011296ED91FC9113978385D8 +:10119000882379F2EFCFACE2B0E0E0EDF8E02CC4C8 +:1011A0008C01AB018091740090917500892B19F42A +:1011B00026E030E033C0CE010196F80193838283AC +:1011C0003DE0E32EF12CEC0EFD1EC801B701ECDE74 +:1011D0009C010097F1F48D858823C1F0888D84FFF0 +:1011E0001BC0F70184899589A0E0B0E0DC01992754 +:1011F0008827228D338D40E050E0822B932BA42B47 +:10120000B52BF80184839583A683B783C801FCDAE4 +:101210009C012330310511F424E030E0C901AC9683 +:10122000E6E006C4ACE3B0E0E7E1F9E0E5C3AC0119 +:1012300000917400109175000115110519F466E014 +:1012400070E040C0F8011182CE010196988B8F8723 +:101250006DE1E62EF12CEC0EFD1ECE010D96B701D0 +:10126000A3DEBC01009771F58D8D882349F188A517 +:1012700084FD26C0F70184899589A0E0B0E0DC01F7 +:1012800099278827228D338D40E050E0822B932BC5 +:10129000A42BB52BF801868F978FA0A3B1A3F701DC +:1012A000848D958DA68DB78DF801828F938FA48F35 +:1012B000B58F168A178A108E118E81E0818302C045 +:1012C00063E070E0CB01EC96E6E0B2C3A0E0B0E0F2 +:1012D000EBE6F9E087C33C016B014A01C091740061 +:1012E000D0917500FA0111821082209719F426E03E +:1012F00030E0CAC0898180FD03C025E030E0C4C071 +:101300002A8D3B8D4C8D5D8D8E899F89A88DB98DE1 +:10131000281B390B4A0B5B0BCB01A0E0B0E0281770 +:1013200039074A075B0708F469015301412CE2E0E1 +:101330005E2EA0C02E893F89488D598DDA01C901E2 +:101340009170A070B0700097A105B10509F05EC062 +:10135000DA01C90179E0B695A795979587957A95B1 +:10136000D1F7FA80FA94F822C9F421153105410524 +:10137000510529F46E8D7F8D88A199A105C06AA1C0 +:101380007BA18CA19DA1B9DA62307105810591051F +:1013900008F477C06AA37BA38CA39DA3009174007B +:1013A000109175002AA13BA14CA15DA122503040B3 +:1013B00040405040F80186819781A085B185029711 +:1013C000A109B109281739074A075B0708F059C076 +:1013D000628170E080E090E0C8D29B01AC01F8012E +:1013E00082899389A489B589280F391F4A1F5B1FF9 +:1013F000211531054105510509F443C02F0D311D5B +:10140000411D511D2EA33FA348A759A72E893F89EF +:101410003170C201821B930B76018C159D0508F477 +:101420007C016114710419F480E090E001C0C501F1 +:101430004EA15FA168A579A58701B4D1892B09F5D3 +:10144000C701A0E0B0E02E893F89488D598D280F53 +:10145000391F4A1F5B1F2E8B3F8B488F598FAE0C55 +:10146000BF1CCE18DF08F401808191818E0D9F1D75 +:1014700091838083C114D10409F05CCF20E030E077 +:1014800003C0198221E030E0C901CDB7DEB7E0E149 +:10149000C5C2A0E0B0E0EEE4FAE0AAC2B82EA92EE0 +:1014A0006A017B012EEF31E002E010E07BD1892B55 +:1014B00011F023E031C0CB2DDA2D8881998185553B +:1014C0009A4A11F022E028C08B2D9A2DB701A6016F +:1014D00026E330E002E010E065D1892B39F4888101 +:1014E00099818654914411F420E016C08B2D9A2DD9 +:1014F000B701A60122E530E002E010E053D1892BCC +:1015000011F021E009C020E088819981865491443E +:1015100009F421E081E02827822FCDB7DEB7EAE089 +:1015200083C2A4E2B0E0E6E9FAE05EC25C01109298 +:10153000750010927400009709F4E6C063D180FF33 +:1015400003C022E030E0E8C04E010894811C911CE9 +:10155000C40140E050E060E070E09BDF813021F0AA +:10156000CC24DD24760119C0C40140E050E060E0E5 +:1015700070E02EEB31E000E110E014D1892B09F08E +:10158000C6C08D81882309F4C5C0C984DA84EB8480 +:10159000FC84C401B701A6017CDF833009F4B7C025 +:1015A000882309F0B7C0CE010196B701A6012DE04E +:1015B00030E004E210E0F6D0892B09F0A8C08A855B +:1015C0009B85BC0180E090E0611571058105910566 +:1015D00021F4688D798D8A8D9B8D2C8130E040E0DF +:1015E00050E0C3D13B014C018A819B81A0E0B0E077 +:1015F000C80ED91EEA1EFB1EF501C286D386E486FC +:10160000F586898182832D813E81358324838F8174 +:1016100098857C0100E010E0E114F104010511055A +:1016200021F4EC88FD880E891F898A819B81A0E0C6 +:10163000B0E0E81AF90A0A0B1B0BE618F7080809CC +:101640001909B4E036952795BA95E1F7C901A0E0EC +:10165000B0E0E81AF90A0A0B1B0BF501228130E011 +:1016600040E050E0C801B70199D12E5F3F4F4F4F86 +:101670005F4FF5012683378340875187273FFFE07F +:101680003F07F0E04F07F0E05F0710F481E001C092 +:1016900082E0275F3F4F4040504008F083E0F50173 +:1016A0008083833029F488A199A1AAA1BBA109C094 +:1016B000F50182859385A485B585860D971DA81DA6 +:1016C000B91D86879787A08BB18BF50184819581A1 +:1016D000A4E096958795AA95E1F7A0E0B0E0228571 +:1016E000338544855585820F931FA41FB51F860D32 +:1016F000971DA81DB91D828B938BA48BB58B11826E +:10170000B0927500A092740020E030E005C021E0A6 +:1017100030E002C027E030E0C901A496EEE080C1CD +:10172000DF92EF92FF920F931F93D82E7A018B01D5 +:1017300087FF0AC087E740E050E060E070E0F0DF3C +:10174000823050F58FE7D822A0D4A1D49CD49FD466 +:101750008D2DB1D4812F9927AA27BB27ACD4C801DE +:10176000AA27BB27A8D4BB27A12F902F8F2DA3D4A6 +:101770008E2DA1D480E4D81611F485E906C088E442 +:10178000D81611F487E801C081E095D41AE07FD41F +:1017900087FF02C01150D9F71F910F91FF90EF9072 +:1017A000DF900895A0E0B0E0E7EDFBE023C16C011D +:1017B00079018091CB0183FD07C039E0440F551FAB +:1017C000661F771F3A95D1F781E5AADF882389F450 +:1017D000C0E3D5E75CD48F3F19F42197D9F709C04E +:1017E0008E3F39F4C601B701A80172D400E010E0C1 +:1017F00002C001E010E049D44AD4C801CDB7DEB739 +:10180000E8E014C1A4E0B0E0E7E0FCE0F3C036D4C7 +:101810000AE010E03CD401501040E1F734D408E570 +:1018200012E035D401501040E1F780E440E050E090 +:1018300060E070E075DF813009F05EC088E44AEA5C +:1018400051E060E070E06CDF8130B1F56E0108942A +:10185000C11CD11C76018E010B5F1F4F18D4F701FC +:1018600081937F01E017F107C9F78B81813009F07F +:1018700043C08C818A3A09F03FC008EA11E603C0F0 +:1018800001501040C9F189EE40E050E060E070E4A2 +:1018900047DF8823A9F73CC0FAD3F60181936F0193 +:1018A000EE15FF05C9F7898186FD03C0E4E0FE2E31 +:1018B00024C07CE0F72E21C089EE40E050E060E0DB +:1018C00070E02EDF823028F0FF24F39461E4E62EEE +:1018D00004C052E0F52E49EEE42E08EA11E603C0FA +:1018E0000150104049F08E2D40E050E060E070E083 +:1018F00017DF8823A9F716C0FF24F092CB01C5D3C8 +:10190000C6D380E0FF2009F481E02496E8E08EC091 +:101910008AE740E050E060E070E002DF882309F4ED +:10192000BBCFEACF80E540E052E060E070E0F8DE57 +:10193000882311F7E2CFFB0151915523A9F0BF0194 +:10194000DC014D9145174111E1F759F4CD010190AA +:10195000002049F04D9140154111C9F3FB0141119F +:10196000EFCF81E090E001970895FF27EE27BB2796 +:10197000AA2760FF04C0A20FB31FE41FF51F220FA8 +:10198000331F441F551F969587957795679589F75F +:101990000097760771F7CF01BD010895A1E21A2ED5 +:1019A000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F03 +:1019B000A217B307E407F50720F0A21BB30BE40B53 +:1019C000F50B661F771F881F991F1A9469F760959A +:1019D0007095809590959B01AC01BD01CF01089554 +:1019E0002F923F924F925F926F927F928F929F922F +:1019F000AF92BF92CF92DF92EF92FF920F931F931D +:101A0000CF93DF93CDB7DEB7CA1BDB0B0FB6F894CD +:101A1000DEBF0FBECDBF09942A88398848885F840D +:101A20006E847D848C849B84AA84B984C884DF807E +:101A3000EE80FD800C811B81AA81B981CE0FD11D62 +:101A40000FB6F894DEBF0FBECDBFED010895F89438 +:021A5000FFCFC6 +:101A52006F736363616C0077617600002E574156A5 +:021A6200000082 + diff --git a/code/LICENSE b/code/LICENSE new file mode 100755 index 0000000..9b455b1 --- /dev/null +++ b/code/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2013, Markus Konrad +(http://www.mkonrad.net) + +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. +* Neither the name of the author 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 HOLDER 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. diff --git a/code/blink/Makefile b/code/blink/Makefile new file mode 100755 index 0000000..dfba433 --- /dev/null +++ b/code/blink/Makefile @@ -0,0 +1,59 @@ +# +# Makefile template for ATtiny85 +# Derived from AVR Crosspack template +# + +DEVICE = attiny85 # See avr-help for all possible devices +CLOCK = 8000000 # 1Mhz +PROGRAMMER = -c avrisp -P /dev/cu.usbmodem1421 # For using Adafruit USBtiny +OBJECTS = main.o # Add more objects for each .c file here +FUSES = -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m # settings as taken from http://www.engbedded.com/fusecalc/ + +#put avrdude.conf from /Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf in the folder of the code you want to compile! +AVRDUDE = /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C avrdude.conf $(PROGRAMMER) -p $(DEVICE) +COMPILE = /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) + +# symbolic targets: +all: main.hex + +.c.o: + $(COMPILE) -c $< -o $@ + +.S.o: + $(COMPILE) -x assembler-with-cpp -c $< -o $@ + +.c.s: + $(COMPILE) -S $< -o $@ + +flash: all + $(AVRDUDE) -U flash:w:main.hex:i + +fuse: + $(AVRDUDE) $(FUSES) + +install: flash fuse + +# if you use a bootloader, change the command below appropriately: +load: all + bootloadHID main.hex + +clean: + rm -f main.hex main.elf $(OBJECTS) + +# file targets: +main.elf: $(OBJECTS) + $(COMPILE) -o main.elf $(OBJECTS) + +main.hex: main.elf + rm -f main.hex + /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-objcopy -j .text -j .data -O ihex main.elf main.hex + /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avr-size --format=avr --mcu=$(DEVICE) main.elf +# If you have an EEPROM section, you must also create a hex file for the +# EEPROM and add it to the "flash" target. + +# Targets for code debugging and analysis: +disasm: main.elf + avr-objdump -d main.elf + +cpp: + $(COMPILE) -E main.c diff --git a/code/blink/_schemes/leds.fzz b/code/blink/_schemes/leds.fzz new file mode 100755 index 0000000000000000000000000000000000000000..df5c04239543d0905049468b8e305eb9004703f4 GIT binary patch literal 4017 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 # optional parent +# id = [, [, ] ...] ; # are quoted strings +# desc = ; # quoted string +# type = ; # programmer type, quoted string +# # supported programmer types can be listed by "-c ?type" +# connection_type = parallel | serial | usb +# baudrate = ; # baudrate for avr910-programmer +# vcc = [, ... ] ; # pin number(s) +# buff = [, ... ] ; # pin number(s) +# reset = ; # pin number +# sck = ; # pin number +# mosi = ; # pin number +# miso = ; # pin number +# errled = ; # pin number +# rdyled = ; # pin number +# pgmled = ; # pin number +# vfyled = ; # pin number +# usbvid = ; # USB VID (Vendor ID) +# usbpid = [, ...] # USB PID (Product ID) (1) +# usbdev = ; # USB interface or other device info +# usbvendor = ; # USB Vendor Name +# usbproduct = ; # USB Product Name +# usbsn = ; # USB Serial Number +# +# To invert a bit, use = ~ , the spaces are important. +# For a pin list all pins must be inverted. +# A single pin can be specified as usual = ~ , for lists +# specify it as follows = ~ ( [, ... ] ) . +# +# (1) Not all programmer types can process a list of PIDs. +# ; +# +# part +# id = ; # quoted string +# desc = ; # quoted string +# has_jtag = ; # part has JTAG i/f +# has_debugwire = ; # part has debugWire i/f +# has_pdi = ; # part has PDI i/f +# has_tpi = ; # part has TPI i/f +# devicecode = ; # deprecated, use stk500_devcode +# stk500_devcode = ; # numeric +# avr910_devcode = ; # numeric +# signature = ; # signature bytes +# usbpid = ; # DFU USB PID +# chip_erase_delay = ; # micro-seconds +# reset = dedicated | io; +# retry_pulse = reset | sck; +# pgm_enable = ; +# chip_erase = ; +# chip_erase_delay = ; # chip erase delay (us) +# # STK500 parameters (parallel programming IO lines) +# pagel = ; # pin name in hex, i.e., 0xD7 +# bs2 = ; # pin name in hex, i.e., 0xA0 +# serial = ; # can use serial downloading +# parallel = ; # can use par. programming +# # STK500v2 parameters, to be taken from Atmel's XML files +# timeout = ; +# stabdelay = ; +# cmdexedelay = ; +# synchloops = ; +# bytedelay = ; +# pollvalue = ; +# pollindex = ; +# predelay = ; +# postdelay = ; +# pollmethod = ; +# mode = ; +# delay = ; +# blocksize = ; +# readsize = ; +# hvspcmdexedelay = ; +# # STK500v2 HV programming parameters, from XML +# pp_controlstack = , , ...; # PP only +# hvsp_controlstack = , , ...; # HVSP only +# hventerstabdelay = ; +# progmodedelay = ; # PP only +# latchcycles = ; +# togglevtg = ; +# poweroffdelay = ; +# resetdelayms = ; +# resetdelayus = ; +# hvleavestabdelay = ; +# resetdelay = ; +# synchcycles = ; # HVSP only +# chiperasepulsewidth = ; # PP only +# chiperasepolltimeout = ; +# chiperasetime = ; # HVSP only +# programfusepulsewidth = ; # PP only +# programfusepolltimeout = ; +# programlockpulsewidth = ; # PP only +# programlockpolltimeout = ; +# # JTAG ICE mkII parameters, also from XML files +# allowfullpagebitstream = ; +# enablepageprogramming = ; +# idr = ; # IO addr of IDR (OCD) reg. +# rampz = ; # IO addr of RAMPZ reg. +# spmcr = ; # mem addr of SPMC[S]R reg. +# eecr = ; # mem addr of EECR reg. +# # (only when != 0x3c) +# is_at90s1200 = ; # AT90S1200 part +# is_avr32 = ; # AVR32 part +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# Parts can also inherit parameters from previously defined parts +# using the following syntax. In this case specified integer and +# string values override parameter values from the parent part. New +# memory definitions are added to the definitions inherited from the +# parent. +# +# part parent # quoted string +# id = ; # quoted string +# +# ; +# +# NOTES: +# * 'devicecode' is the device code used by the STK500 (see codes +# listed below) +# * Not all memory types will implement all instructions. +# * AVR Fuse bits and Lock bits are implemented as a type of memory. +# * Example memory types are: +# "flash", "eeprom", "fuse", "lfuse" (low fuse), "hfuse" (high +# fuse), "signature", "calibration", "lock" +# * The memory type specified on the avrdude command line must match +# one of the memory types defined for the specified chip. +# * The pwroff_after_write flag causes avrdude to attempt to +# power the device off and back on after an unsuccessful write to +# the affected memory area if VCC programmer pins are defined. If +# VCC pins are not defined for the programmer, a message +# indicating that the device needs a power-cycle is printed out. +# This flag was added to work around a problem with the +# at90s4433/2333's; see the at90s4433 errata at: +# +# http://www.atmel.com/dyn/resources/prod_documents/doc1280.pdf +# +# INSTRUCTION FORMATS +# +# Instruction formats are specified as a comma seperated list of +# string values containing information (bit specifiers) about each +# of the 32 bits of the instruction. Bit specifiers may be one of +# the following formats: +# +# '1' = the bit is always set on input as well as output +# +# '0' = the bit is always clear on input as well as output +# +# 'x' = the bit is ignored on input and output +# +# 'a' = the bit is an address bit, the bit-number matches this bit +# specifier's position within the current instruction byte +# +# 'aN' = the bit is the Nth address bit, bit-number = N, i.e., a12 +# is address bit 12 on input, a0 is address bit 0. +# +# 'i' = the bit is an input data bit +# +# 'o' = the bit is an output data bit +# +# Each instruction must be composed of 32 bit specifiers. The +# instruction specification closely follows the instruction data +# provided in Atmel's data sheets for their parts. +# +# See below for some examples. +# +# +# The following are STK500 part device codes to use for the +# "devicecode" field of the part. These came from Atmel's software +# section avr061.zip which accompanies the application note +# AVR061 available from: +# +# http://www.atmel.com/dyn/resources/prod_documents/doc2525.pdf +# + +#define ATTINY10 0x10 /* the _old_ one that never existed! */ +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 +#define AT90CAN64 0xB3 +#define AT90CAN32 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults; suitable for ~/.avrduderc +# +default_parallel = "unknown"; +default_serial = "unknown"; +# default_bitclock = 2.5; + +# Turn off safemode by default +#default_safemode = no; + + +# +# PROGRAMMER DEFINITIONS +# + +# http://wiring.org.co/ +# Basically STK500v2 protocol, with some glue to trigger the +# bootloader. +programmer + id = "wiring"; + desc = "Wiring"; + type = "wiring"; + connection_type = serial; +; + +programmer + id = "arduino"; + desc = "Arduino"; + type = "arduino"; + connection_type = serial; +; +# this will interface with the chips on these programmers: +# +# http://real.kiev.ua/old/avreal/en/adapters +# http://www.amontec.com/jtagkey.shtml, jtagkey-tiny.shtml +# http://www.olimex.com/dev/arm-usb-ocd.html, arm-usb-tiny.html +# http://www.ethernut.de/en/hardware/turtelizer/index.html +# http://elk.informatik.fh-augsburg.de/hhweb/doc/openocd/usbjtag/usbjtag.html +# http://dangerousprototypes.com/docs/FT2232_breakout_board +# http://www.ftdichip.com/Products/Modules/DLPModules.htm,DLP-2232*,DLP-USB1232H +# http://flashrom.org/FT2232SPI_Programmer +# +# The drivers will look for a specific device and use the first one found. +# If you have mulitple devices, then look for unique information (like SN) +# And fill that in here. +# +# Note that the pin numbers for the main ISP signals (reset, sck, +# mosi, miso) are fixed and cannot be changed, since they must match +# the way the Multi-Protocol Synchronous Serial Engine (MPSSE) of +# these FTDI ICs has been designed. + +programmer + id = "avrftdi"; + desc = "FT2232D based generic programmer"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0x6010; + usbvendor = ""; + usbproduct = ""; + usbdev = "A"; + usbsn = ""; +#ISP-signals - lower ADBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +#LED SIGNALs - higher ADBUS-Nibble +# errled = 4; +# rdyled = 5; +# pgmled = 6; +# vfyled = 7; +#Buffer Signal - ACBUS - Nibble +# buff = 8; +; +# This is an implementation of the above with a buffer IC (74AC244) and +# 4 LEDs directly attached, all active low. +programmer + id = "2232HIO"; + desc = "FT2232H based generic programmer"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; +# Note: This PID is reserved for generic H devices and +# should be programmed into the EEPROM +# usbpid = 0x8A48; + usbpid = 0x6010; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals + reset = 3; + sck = 0; + mosi = 1; + miso = 2; + buff = ~4; +#LED SIGNALs + errled = ~ 11; + rdyled = ~ 14; + pgmled = ~ 13; + vfyled = ~ 12; +; + +#The FT4232H can be treated as FT2232H, but it has a different USB +#device ID of 0x6011. +programmer parent "avrftdi" + id = "4232h"; + desc = "FT4232H based generic programmer"; + usbpid = 0x6011; +; + +programmer + id = "jtagkey"; + desc = "Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; +# Note: This PID is used in all JTAGKey variants + usbpid = 0xCFF8; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals => 20 - Pin connector on JTAGKey + reset = 3; # TMS 7 violet + sck = 0; # TCK 9 white + mosi = 1; # TDI 5 green + miso = 2; # TDO 13 orange + buff = ~4; +# VTG VREF 1 brown with red tip +# GND GND 20 black +# The colors are on the 20 pin breakout cable +# from Amontec +; + +# UM232H module from FTDI and Glyn.com.au. +# See helix.air.net.au for detailed usage information. +# J1: Connect pin 2 and 3 for USB power. +# J2: Connect pin 2 and 3 for USB power. +# J2: Pin 7 is SCK +# : Pin 8 is MOSI +# : Pin 9 is MISO +# : Pin 11 is RST +# : Pin 6 is ground +# Use the -b flag to set the SPI clock rate eg -b 3750000 is the fastest I could get +# a 16MHz Atmega1280 to program reliably. The 232H is conveniently 5V tolerant. +programmer + id = "UM232H"; + desc = "FT232H based module from FTDI and Glyn.com.au"; + type = "avrftdi"; + usbvid = 0x0403; +# Note: This PID is reserved for generic 232H devices and +# should be programmed into the EEPROM + usbpid = 0x6014; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals + sck = 0; + mosi = 1; + miso = 2; + reset = 3; +; + +# C232HM module from FTDI and Glyn.com.au. +# : Orange is SCK +# : Yellow is MOSI +# : Green is MISO +# : Brown is RST +# : Black is ground +# Use the -b flag to set the SPI clock rate eg -b 3750000 is the fastest I could get +# a 16MHz Atmega1280 to program reliably. The 232H is conveniently 5V tolerant. +programmer + id = "C232HM"; + desc = "FT232H based module from FTDI and Glyn.com.au"; + type = "avrftdi"; + usbvid = 0x0403; +# Note: This PID is reserved for generic 232H devices and +# should be programmed into the EEPROM + usbpid = 0x6014; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; +#ISP-signals + sck = 0; + mosi = 1; + miso = 2; + reset = 3; +; + + +# On the adapter you can read "O-Link". On the PCB is printed "OpenJTAG v3.1" +# You can find it as "OpenJTAG ARM JTAG USB" in the internet. +# (But there are also several projects called Open JTAG, eg. +# http://www.openjtag.org, which are completely different.) +# http://www.100ask.net/shop/english.html (website seems to be outdated) +# http://item.taobao.com/item.htm?id=1559277013 +# http://www.micro4you.com/store/openjtag-arm-jtag-usb.html (schematics!) +# some other sources which call it O-Link +# http://www.andahammer.com/olink/ +# http://www.developmentboard.net/31-o-link-debugger.html +# http://armwerks.com/catalog/o-link-debugger-copy/ +# or just have a look at ebay ... +# It is basically the same entry as jtagkey with different usb ids. +programmer parent "jtagkey" + id = "o-link"; + desc = "O-Link, OpenJTAG from www.100ask.net"; + usbvid = 0x1457; + usbpid = 0x5118; + usbvendor = "www.100ask.net"; + usbproduct = "USB<=>JTAG&RS232"; +; + +# http://wiki.openmoko.org/wiki/Debug_Board_v3 +programmer + id = "openmoko"; + desc = "Openmoko debug board (v3)"; + type = "avrftdi"; + usbvid = 0x1457; + usbpid = 0x5118; + usbdev = "A"; + usbvendor = ""; + usbproduct = ""; + usbsn = ""; + reset = 3; # TMS 7 + sck = 0; # TCK 9 + mosi = 1; # TDI 5 + miso = 2; # TDO 13 +; + +# Only Rev. A boards. +# Schematic and user manual: http://www.cs.put.poznan.pl/wswitala/download/pdf/811EVBK.pdf +programmer + id = "lm3s811"; + desc = "Luminary Micro LM3S811 Eval Board (Rev. A)"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0xbcd9; + usbvendor = "LMI"; + usbproduct = "LM3S811 Evaluation Board"; + usbdev = "A"; + usbsn = ""; +#ISP-signals - lower ACBUS-Nibble (default) + reset = 3; + sck = 0; + mosi = 1; + miso = 2; +# Enable correct buffers + buff = 7; +; + +# submitted as bug #46020 +programmer + id = "tumpa"; + desc = "TIAO USB Multi-Protocol Adapter"; + type = "avrftdi"; + connection_type = usb; + usbvid = 0x0403; + usbpid = 0x8A98; + usbdev = "A"; + usbvendor = "TIAO"; + usbproduct = ""; + usbsn = ""; + sck = 0; # TCK 9 + mosi = 1; # TDI 5 + miso = 2; # TDO 13 + reset = 3; # TMS 7 +; + +programmer + id = "avrisp"; + desc = "Atmel AVR ISP"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "avrispv2"; + desc = "Atmel AVR ISP V2"; + type = "stk500v2"; + connection_type = serial; +; + +programmer + id = "avrispmkII"; + desc = "Atmel AVR ISP mkII"; + type = "stk500v2"; + connection_type = usb; +; + +programmer parent "avrispmkII" + id = "avrisp2"; +; + +programmer + id = "buspirate"; + desc = "The Bus Pirate"; + type = "buspirate"; + connection_type = serial; +; + +programmer + id = "buspirate_bb"; + desc = "The Bus Pirate (bitbang interface, supports TPI)"; + type = "buspirate_bb"; + connection_type = serial; + # pins are bits in bitbang byte (numbers are 87654321) + # 1|POWER|PULLUP|AUX|MOSI|CLK|MISO|CS + reset = 1; + sck = 3; + mosi = 4; + miso = 2; + #vcc = 7; This is internally set independent of this setting. +; + +# This is supposed to be the "default" STK500 entry. +# Attempts to select the correct firmware version +# by probing for it. Better use one of the entries +# below instead. +programmer + id = "stk500"; + desc = "Atmel STK500"; + type = "stk500generic"; + connection_type = serial; +; + +programmer + id = "stk500v1"; + desc = "Atmel STK500 Version 1.x firmware"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "mib510"; + desc = "Crossbow MIB510 programming board"; + type = "stk500"; + connection_type = serial; +; + +programmer + id = "stk500v2"; + desc = "Atmel STK500 Version 2.x firmware"; + type = "stk500v2"; + connection_type = serial; +; + +programmer + id = "stk500pp"; + desc = "Atmel STK500 V2 in parallel programming mode"; + type = "stk500pp"; + connection_type = serial; +; + +programmer + id = "stk500hvsp"; + desc = "Atmel STK500 V2 in high-voltage serial programming mode"; + type = "stk500hvsp"; + connection_type = serial; +; + +programmer + id = "stk600"; + desc = "Atmel STK600"; + type = "stk600"; + connection_type = usb; +; + +programmer + id = "stk600pp"; + desc = "Atmel STK600 in parallel programming mode"; + type = "stk600pp"; + connection_type = usb; +; + +programmer + id = "stk600hvsp"; + desc = "Atmel STK600 in high-voltage serial programming mode"; + type = "stk600hvsp"; + connection_type = usb; +; + +programmer + id = "avr910"; + desc = "Atmel Low Cost Serial Programmer"; + type = "avr910"; + connection_type = serial; +; + +programmer + id = "ft245r"; + desc = "FT245R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # D1 + sck = 0; # D0 + mosi = 2; # D2 + reset = 4; # D4 +; + +programmer + id = "ft232r"; + desc = "FT232R Synchronous BitBang"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 1; # RxD + sck = 0; # TxD + mosi = 2; # RTS + reset = 4; # DTR +; + +# see http://www.bitwizard.nl/wiki/index.php/FTDI_ATmega +programmer + id = "bwmega"; + desc = "BitWizard ftdi_atmega builtin programmer"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 5; # DSR + sck = 6; # DCD + mosi = 3; # CTS + reset = 7; # RI +; + +# see http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html +# Note: pins are numbered from 1! +programmer + id = "arduino-ft232r"; + desc = "Arduino: FT232R connected to ISP"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 3; # CTS X3(1) + sck = 5; # DSR X3(2) + mosi = 6; # DCD X3(3) + reset = 7; # RI X3(4) +; + +# website mentioned above uses this id +programmer parent "arduino-ft232r" + id = "diecimila"; + desc = "alias for arduino-ft232r"; +; + +# There is a ATmega328P kit PCB called "uncompatino". +# This board allows ISP via its on-board FT232R. +# This is designed like Arduino Duemilanove but has no standard ICPS header. +# Its 4 pairs of pins are shorted to enable ftdi_syncbb. +# http://akizukidenshi.com/catalog/g/gP-07487/ +# http://akizukidenshi.com/download/ds/akizuki/k6096_manual_20130816.pdf +programmer + id = "uncompatino"; + desc = "uncompatino with all pairs of pins shorted"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 3; # cts + sck = 5; # dsr + mosi = 6; # dcd + reset = 7; # ri +; + +# FTDI USB to serial cable TTL-232R-5V with a custom adapter for ICSP +# http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm +# http://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_TTL-232R_CABLES.pdf +# For ICSP pinout see for example http://www.atmel.com/images/doc2562.pdf +# (Figure 1. ISP6PIN header pinout and Table 1. Connections required for ISP ...) +# TTL-232R GND 1 Black -> ICPS GND (pin 6) +# TTL-232R CTS 2 Brown -> ICPS MOSI (pin 4) +# TTL-232R VCC 3 Red -> ICPS VCC (pin 2) +# TTL-232R TXD 4 Orange -> ICPS RESET (pin 5) +# TTL-232R RXD 5 Yellow -> ICPS SCK (pin 3) +# TTL-232R RTS 6 Green -> ICPS MISO (pin 1) +# Except for VCC and GND, you can connect arbitual pairs as long as +# the following table is adjusted. +programmer + id = "ttl232r"; + desc = "FTDI TTL232R-5V with ICSP adapter"; + type = "ftdi_syncbb"; + connection_type = usb; + miso = 2; # rts + sck = 1; # rxd + mosi = 3; # cts + reset = 0; # txd +; + +programmer + id = "usbasp"; + desc = "USBasp, http://www.fischl.de/usbasp/"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + usbvendor = "www.fischl.de"; + usbproduct = "USBasp"; + + # following variants are autodetected for id "usbasp" + + # original usbasp from fischl.de + # see above "usbasp" + + # old usbasp from fischl.de + #usbvid = 0x03EB; # ATMEL + #usbpid = 0xC7B4; # (unoffical) USBasp + #usbvendor = "www.fischl.de"; + #usbproduct = "USBasp"; + + # NIBObee (only if -P nibobee is given on command line) + # see below "nibobee" +; + +programmer + id = "nibobee"; + desc = "NIBObee"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x092F; # NIBObee PID + usbvendor = "www.nicai-systems.com"; + usbproduct = "NIBObee"; +; + +programmer + id = "usbasp-clone"; + desc = "Any usbasp clone with correct VID/PID"; + type = "usbasp"; + connection_type = usb; + usbvid = 0x16C0; # VOTI + usbpid = 0x05DC; # Obdev's free shared PID + #usbvendor = ""; + #usbproduct = ""; +; + +programmer + id = "usbtiny"; + desc = "USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/"; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x1781; + usbpid = 0x0c9f; +; + +programmer + id = "arduinoisp"; + desc = "Arduino ISP Programmer"; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x2341; + usbpid = 0x0049; +; + +programmer + id = "arduinoisporg"; + desc = "Arduino ISP Programmer"; + type = "usbtiny"; + connection_type = usb; + usbvid = 0x2A03; + usbpid = 0x0049; +; + +programmer + id = "butterfly"; + desc = "Atmel Butterfly Development Board"; + type = "butterfly"; + connection_type = serial; +; + +programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = "butterfly"; + connection_type = serial; +; + +programmer + id = "avr911"; + desc = "Atmel AppNote AVR911 AVROSP"; + type = "butterfly"; + connection_type = serial; +; + +# suggested in http://forum.mikrokopter.de/topic-post48317.html +programmer + id = "mkbutterfly"; + desc = "Mikrokopter.de Butterfly"; + type = "butterfly_mk"; + connection_type = serial; +; + +programmer parent "mkbutterfly" + id = "butterfly_mk"; +; + +programmer + id = "jtagmkI"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = "jtagmki"; + connection_type = serial; +; + +# easier to type +programmer parent "jtagmkI" + id = "jtag1"; +; + +# easier to type +programmer parent "jtag1" + id = "jtag1slow"; + baudrate = 19200; +; + +# The JTAG ICE mkII has both, serial and USB connectivity. As it is +# mostly used through USB these days (AVR Studio 5 only supporting it +# that way), we make connection_type = usb the default. Users are +# still free to use a serial port with the -P option. + +programmer + id = "jtagmkII"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = "jtagmkii"; + connection_type = usb; +; + +# easier to type +programmer parent "jtagmkII" + id = "jtag2slow"; +; + +# JTAG ICE mkII @ 115200 Bd +programmer parent "jtag2slow" + id = "jtag2fast"; + baudrate = 115200; +; + +# make the fast one the default, people will love that +programmer parent "jtag2fast" + id = "jtag2"; +; + +# JTAG ICE mkII in ISP mode +programmer + id = "jtag2isp"; + desc = "Atmel JTAG ICE mkII in ISP mode"; + baudrate = 115200; + type = "jtagmkii_isp"; + connection_type = usb; +; + +# JTAG ICE mkII in debugWire mode +programmer + id = "jtag2dw"; + desc = "Atmel JTAG ICE mkII in debugWire mode"; + baudrate = 115200; + type = "jtagmkii_dw"; + connection_type = usb; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtagmkII_avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = "jtagmkii_avr32"; + connection_type = usb; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtag2avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = "jtagmkii_avr32"; + connection_type = usb; +; + +# JTAG ICE mkII in PDI mode +programmer + id = "jtag2pdi"; + desc = "Atmel JTAG ICE mkII PDI mode"; + baudrate = 115200; + type = "jtagmkii_pdi"; + connection_type = usb; +; + +# AVR Dragon in JTAG mode +programmer + id = "dragon_jtag"; + desc = "Atmel AVR Dragon in JTAG mode"; + baudrate = 115200; + type = "dragon_jtag"; + connection_type = usb; +; + +# AVR Dragon in ISP mode +programmer + id = "dragon_isp"; + desc = "Atmel AVR Dragon in ISP mode"; + baudrate = 115200; + type = "dragon_isp"; + connection_type = usb; +; + +# AVR Dragon in PP mode +programmer + id = "dragon_pp"; + desc = "Atmel AVR Dragon in PP mode"; + baudrate = 115200; + type = "dragon_pp"; + connection_type = usb; +; + +# AVR Dragon in HVSP mode +programmer + id = "dragon_hvsp"; + desc = "Atmel AVR Dragon in HVSP mode"; + baudrate = 115200; + type = "dragon_hvsp"; + connection_type = usb; +; + +# AVR Dragon in debugWire mode +programmer + id = "dragon_dw"; + desc = "Atmel AVR Dragon in debugWire mode"; + baudrate = 115200; + type = "dragon_dw"; + connection_type = usb; +; + +# AVR Dragon in PDI mode +programmer + id = "dragon_pdi"; + desc = "Atmel AVR Dragon in PDI mode"; + baudrate = 115200; + type = "dragon_pdi"; + connection_type = usb; +; + +programmer + id = "jtag3"; + desc = "Atmel AVR JTAGICE3 in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3pdi"; + desc = "Atmel AVR JTAGICE3 in PDI mode"; + type = "jtagice3_pdi"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3dw"; + desc = "Atmel AVR JTAGICE3 in debugWIRE mode"; + type = "jtagice3_dw"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "jtag3isp"; + desc = "Atmel AVR JTAGICE3 in ISP mode"; + type = "jtagice3_isp"; + connection_type = usb; + usbpid = 0x2110, 0x2140; +; + +programmer + id = "xplainedpro"; + desc = "Atmel AVR XplainedPro in JTAG mode"; + type = "jtagice3"; + connection_type = usb; + usbpid = 0x2111; +; + +programmer + id = "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"; + 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; +; + + +#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. +# +# PC - DB9 - Pins for RS232: +# +# GND 5 -- |O +# | O| <- 9 RI +# DTR 4 <- |O | +# | O| <- 8 CTS +# TXD 3 <- |O | +# | O| -> 7 RTS +# RXD 2 -> |O | +# | O| <- 6 DSR +# DCD 1 -> |O +# +# Using RXD is currently not supported. +# Using RI is not supported under Win32 but is supported under Posix. + +# serial ponyprog design (dasa2 in uisp) +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "ponyser"; + desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts"; + type = "serbb"; + connection_type = serial; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# Same as above, different name +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer parent "ponyser" + id = "siprog"; + desc = "Lancos SI-Prog "; +; + +# unknown (dasa in uisp) +# reset=rts sck=dtr mosi=txd miso=cts + +programmer + id = "dasa"; + desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; + type = "serbb"; + connection_type = serial; + reset = 7; + sck = 4; + mosi = 3; + miso = 8; +; + +# unknown (dasa3 in uisp) +# reset=!dtr sck=rts mosi=txd miso=cts + +programmer + id = "dasa3"; + desc = "serial port banging, reset=!dtr sck=rts mosi=txd miso=cts"; + type = "serbb"; + connection_type = serial; + reset = ~4; + sck = 7; + mosi = 3; + miso = 8; +; + +# C2N232i (jumper configuration "auto") +# reset=dtr sck=!rts mosi=!txd miso=!cts + +programmer + id = "c2n232i"; + desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; + type = "serbb"; + connection_type = serial; + reset = 4; + sck = ~7; + mosi = ~3; + miso = ~8; +; + +# +# PART DEFINITIONS +# + +#------------------------------------------------------------ +# ATtiny11 +#------------------------------------------------------------ + +# This is an HVSP-only device. + +part + id = "t11"; + desc = "ATtiny11"; + stk500_devcode = 0x11; + signature = 0x1e 0x90 0x04; + chip_erase_delay = 20000; + + timeout = 200; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + blocksize = 64; + readsize = 256; + delay = 5; + ; + + memory "flash" + size = 1024; + blocksize = 128; + readsize = 256; + delay = 3; + ; + + memory "signature" + size = 3; + ; + + memory "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + + memory "fuse" + size = 1; + ; +; + +#------------------------------------------------------------ +# ATtiny12 +#------------------------------------------------------------ + +part + id = "t12"; + desc = "ATtiny12"; + stk500_devcode = 0x12; + avr910_devcode = 0x55; + signature = 0x1e 0x90 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 8; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4500; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# ATtiny13 +#------------------------------------------------------------ + +part + id = "t13"; + desc = "ATtiny13"; + has_debugwire = yes; + flash_instr = 0xB4, 0x0E, 0x1E; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x0E, 0xB4, 0x0E, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; + signature = 0x1e 0x90 0x07; + chip_erase_delay = 4000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 90; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 0; + + memory "eeprom" + size = 64; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 1024; + page_size = 32; + num_pages = 32; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny15 +#------------------------------------------------------------ + +part + id = "t15"; + desc = "ATtiny15"; + stk500_devcode = 0x13; + avr910_devcode = 0x56; + signature = 0x1e 0x90 0x06; + chip_erase_delay = 8200; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 5; + synchcycles = 6; + latchcycles = 16; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 8200; + max_write_delay = 8200; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4100; + max_write_delay = 4100; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o x x o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i 1 1 i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# AT90s1200 +#------------------------------------------------------------ + +part + id = "1200"; + desc = "AT90S1200"; + is_at90s1200 = yes; + stk500_devcode = 0x33; + avr910_devcode = 0x13; + signature = 0x1e 0x90 0x01; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 1; + bytedelay = 0; + pollindex = 0; + pollvalue = 0xFF; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 64; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 32; + readsize = 256; + ; + memory "flash" + size = 1024; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x02; + delay = 15; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4414 +#------------------------------------------------------------ + +part + id = "4414"; + desc = "AT90S4414"; + stk500_devcode = 0x50; + avr910_devcode = 0x28; + signature = 0x1e 0x92 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2313 +#------------------------------------------------------------ + +part + id = "2313"; + desc = "AT90S2313"; + stk500_devcode = 0x40; + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x i i x", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2333 +#------------------------------------------------------------ + +part + id = "2333"; +##### WARNING: No XML file for device 'AT90S2333'! ##### + desc = "AT90S2333"; + stk500_devcode = 0x42; + avr910_devcode = 0x34; + signature = 0x1e 0x91 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATmega103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATmega64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega128 +#------------------------------------------------------------ + +part + id = "m128"; + desc = "ATmega128"; + has_jtag = yes; + stk500_devcode = 0xB2; + avr910_devcode = 0x43; + signature = 0x1e 0x97 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + rampz = 0x3b; + allowfullpagebitstream = yes; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN128 +#------------------------------------------------------------ + +part + id = "c128"; + desc = "AT90CAN128"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x97 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN64 +#------------------------------------------------------------ + +part + id = "c64"; + desc = "AT90CAN64"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x96 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN32 +#------------------------------------------------------------ + +part + id = "c32"; + desc = "AT90CAN32"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x95 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 256; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATmega16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "calibration" + size = 4; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega164P +#------------------------------------------------------------ + +# close to ATmega16 + +part parent "m16" + id = "m164p"; + desc = "ATmega164P"; + signature = 0x1e 0x94 0x0a; + + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + allowfullpagebitstream = no; + chip_erase_delay = 55000; + + ocdrev = 3; + ; + + +#------------------------------------------------------------ +# ATmega324P +#------------------------------------------------------------ + +# similar to ATmega164P + +part + id = "m324p"; + desc = "ATmega324P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x95 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 55000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega324PA +#------------------------------------------------------------ + +# similar to ATmega324P + +part parent "m324p" + id = "m324pa"; + desc = "ATmega324PA"; + signature = 0x1e 0x95 0x11; + + ocdrev = 3; + ; + + +#------------------------------------------------------------ +# ATmega644 +#------------------------------------------------------------ + +# similar to ATmega164 + +part + id = "m644"; + desc = "ATmega644"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x09; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 55000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega644P +#------------------------------------------------------------ + +# similar to ATmega164p + +part parent "m644" + id = "m644p"; + desc = "ATmega644P"; + signature = 0x1e 0x96 0x0a; + + ocdrev = 3; + ; + + + +#------------------------------------------------------------ +# ATmega1284 +#------------------------------------------------------------ + +# similar to ATmega164 + +part + id = "m1284"; + desc = "ATmega1284"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x06; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 55000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega1284P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m1284p"; + desc = "ATmega1284P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x05; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 55000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATmega162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + ocdrev = 2; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATmega163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 20; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o x x o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x 1 o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x 0 x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATmega169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega329 +#------------------------------------------------------------ + +part + id = "m329"; + desc = "ATmega329"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part parent "m329" + id = "m329p"; + desc = "ATmega329P"; + signature = 0x1e 0x95 0x0b; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290 +#------------------------------------------------------------ + +# identical to ATmega329 + +part parent "m329" + id = "m3290"; + desc = "ATmega3290"; + signature = 0x1e 0x95 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part parent "m3290" + id = "m3290p"; + desc = "ATmega3290P"; + signature = 0x1e 0x95 0x0c; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega649 +#------------------------------------------------------------ + +part + id = "m649"; + desc = "ATmega649"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega6490 +#------------------------------------------------------------ + +# identical to ATmega649 + +part parent "m649" + id = "m6490"; + desc = "ATmega6490"; + signature = 0x1e 0x96 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega32 +#------------------------------------------------------------ + +part + id = "m32"; + desc = "ATmega32"; + has_jtag = yes; + stk500_devcode = 0x91; + avr910_devcode = 0x72; + signature = 0x1e 0x95 0x02; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + ocdrev = 2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega161 +#------------------------------------------------------------ + +part + id = "m161"; + desc = "ATmega161"; + stk500_devcode = 0x80; + avr910_devcode = 0x60; + signature = 0x1e 0x94 0x01; + chip_erase_delay = 28000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + memory "eeprom" + size = 512; + min_write_delay = 3400; + max_write_delay = 3400; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 14000; + max_write_delay = 14000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 16; + blocksize = 128; + readsize = 256; + ; + + memory "fuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x o x o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x 1 i 1 i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega8 +#------------------------------------------------------------ + +part + id = "m8"; + desc = "ATmega8"; + stk500_devcode = 0x70; + avr910_devcode = 0x76; + signature = 0x1e 0x93 0x07; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 10000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + page_size = 4; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + # Required for Arduino IDE + # see: https://github.com/arduino/Arduino/issues/2075 + # https://github.com/arduino/Arduino/issues/2075#issuecomment-238031689 + memory "efuse" + size = 0; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega8515 +#------------------------------------------------------------ + +part + id = "m8515"; + desc = "ATmega8515"; + stk500_devcode = 0x63; + avr910_devcode = 0x3A; + signature = 0x1e 0x93 0x06; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega8535 +#------------------------------------------------------------ + +part + id = "m8535"; + desc = "ATmega8535"; + stk500_devcode = 0x64; + avr910_devcode = 0x69; + signature = 0x1e 0x93 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATtiny26 +#------------------------------------------------------------ + +part + id = "t26"; + desc = "ATtiny26"; + stk500_devcode = 0x21; + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x09; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 16; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x x x x i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny261 +#------------------------------------------------------------ +# Close to ATtiny26 + +part + id = "t261"; + desc = "ATtiny261"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0c; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 128; + page_size = 4; + num_pages = 32; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny461 +#------------------------------------------------------------ +# Close to ATtiny261 + +part + id = "t461"; + desc = "ATtiny461"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x08; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 256; + page_size = 4; + num_pages = 64; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny861 +#------------------------------------------------------------ +# Close to ATtiny461 + +part + id = "t861"; + desc = "ATtiny861"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x93 0x0d; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + size = 512; + num_pages = 128; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny28 +#------------------------------------------------------------ + +# This is an HVPP-only device. + +part + id = "t28"; + desc = "ATtiny28"; + stk500_devcode = 0x22; + avr910_devcode = 0x5c; + signature = 0x1e 0x91 0x07; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "flash" + size = 2048; + page_size = 2; + readsize = 256; + delay = 5; + ; + + memory "signature" + size = 3; + ; + + memory "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + + memory "fuse" + size = 1; + ; +; + + + +#------------------------------------------------------------ +# ATmega48 +#------------------------------------------------------------ + +part + id = "m48"; + desc = "ATmega48"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x59; +# avr910_devcode = 0x; + signature = 0x1e 0x92 0x05; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 45000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega48P +#------------------------------------------------------------ + +part parent "m48" + id = "m48p"; + desc = "ATmega48P"; + signature = 0x1e 0x92 0x0a; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega48PB +#------------------------------------------------------------ + +part parent "m48" + id = "m48pb"; + desc = "ATmega48PB"; + signature = 0x1e 0x92 0x10; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega88 +#------------------------------------------------------------ + +part + id = "m88"; + desc = "ATmega88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x0a; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega88P +#------------------------------------------------------------ + +part parent "m88" + id = "m88p"; + desc = "ATmega88P"; + signature = 0x1e 0x93 0x0f; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega88PB +#------------------------------------------------------------ + +part parent "m88" + id = "m88pb"; + desc = "ATmega88PB"; + signature = 0x1e 0x93 0x16; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# ATmega168 +#------------------------------------------------------------ + +part + id = "m168"; + desc = "ATmega168"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x94 0x06; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATmega168P +#------------------------------------------------------------ + +part parent "m168" + id = "m168p"; + desc = "ATmega168P"; + signature = 0x1e 0x94 0x0b; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# ATmega168PB +#------------------------------------------------------------ + +part parent "m168" + id = "m168pb"; + desc = "ATmega168PB"; + signature = 0x1e 0x94 0x15; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# ATtiny88 +#------------------------------------------------------------ + +part + id = "t88"; + desc = "ATtiny88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x11; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 64; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 64; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega328 +#------------------------------------------------------------ + +part + id = "m328"; + desc = "ATmega328"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x95 0x14; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; + page_size = 4; + size = 1024; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +part parent "m328" + id = "m328p"; + desc = "ATmega328P"; + signature = 0x1e 0x95 0x0F; + + ocdrev = 1; +; + +#------------------------------------------------------------ +# 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 = "t2313"; + desc = "ATtiny2313"; + has_debugwire = yes; + flash_instr = 0xB2, 0x0F, 0x1F; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x23; +## Use the ATtiny26 devcode: + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0a; + pagel = 0xD4; + bs2 = 0xD6; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 0; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny2313 has Signature Bytes: 0x1E 0x91 0x0A. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +# The Tiny2313 has calibration data for both 4 MHz and 8 MHz. +# The information in the data sheet of April/2004 is wrong, this works: + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny4313 +#------------------------------------------------------------ + +part + id = "t4313"; + desc = "ATtiny4313"; + has_debugwire = yes; + flash_instr = 0xB2, 0x0F, 0x1F; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x23; +## Use the ATtiny26 devcode: + avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x0d; + pagel = 0xD4; + bs2 = 0xD6; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 0; + + memory "eeprom" + size = 256; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2 +#------------------------------------------------------------ + +part + id = "pwm2"; + desc = "AT90PWM2"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x81; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; +# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3 +#------------------------------------------------------------ + +# Completely identical to AT90PWM2 (including the signature!) + +part parent "pwm2" + id = "pwm3"; + desc = "AT90PWM3"; + ; + +#------------------------------------------------------------ +# AT90PWM2B +#------------------------------------------------------------ +# Same as AT90PWM2 but different signature. + +part parent "pwm2" + id = "pwm2b"; + desc = "AT90PWM2B"; + signature = 0x1e 0x93 0x83; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# AT90PWM3B +#------------------------------------------------------------ + +# Completely identical to AT90PWM2B (including the signature!) + +part parent "pwm2b" + id = "pwm3b"; + desc = "AT90PWM3B"; + + ocdrev = 1; + ; + +#------------------------------------------------------------ +# AT90PWM316 +#------------------------------------------------------------ + +# Similar to AT90PWM3B, but with 16 kiB flash, 512 B EEPROM, and 1024 B SRAM. + +part parent "pwm3b" + id = "pwm316"; + desc = "AT90PWM316"; + signature = 0x1e 0x94 0x83; + + ocdrev = 1; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + ; + +#------------------------------------------------------------ +# AT90PWM216 +#------------------------------------------------------------ +# Completely identical to AT90PWM316 (including the signature!) + +part parent "pwm316" + id = "pwm216"; + desc = "AT90PWM216"; + ; + +#------------------------------------------------------------ +# ATtiny25 +#------------------------------------------------------------ + +part + id = "t25"; + desc = "ATtiny25"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x08; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny25 has Signature Bytes: 0x1E 0x91 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny45 +#------------------------------------------------------------ + +part + id = "t45"; + desc = "ATtiny45"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x06; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 256; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!) + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny85 +#------------------------------------------------------------ + +part + id = "t85"; + desc = "ATtiny85"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0b; + reset = io; + chip_erase_delay = 400000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 12; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 30000; + max_write_delay = 30000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega640 +#------------------------------------------------------------ +# Almost same as ATmega1280, except for different memory sizes + +part + id = "m640"; + desc = "ATmega640"; + signature = 0x1e 0x96 0x08; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1280 +#------------------------------------------------------------ + +part + id = "m1280"; + desc = "ATmega1280"; + signature = 0x1e 0x97 0x03; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1281 +#------------------------------------------------------------ +# Identical to ATmega1280 + +part parent "m1280" + id = "m1281"; + desc = "ATmega1281"; + signature = 0x1e 0x97 0x04; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega2560 +#------------------------------------------------------------ + +part + id = "m2560"; + desc = "ATmega2560"; + signature = 0x1e 0x98 0x01; + has_jtag = yes; + stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 4; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 262144; + page_size = 256; + num_pages = 1024; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + load_ext_addr = " 0 1 0 0 1 1 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 a16", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega2561 +#------------------------------------------------------------ + +part parent "m2560" + id = "m2561"; + desc = "ATmega2561"; + signature = 0x1e 0x98 0x02; + + ocdrev = 4; + ; + +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM + +part parent "m2561" + id = "m128rfa1"; + desc = "ATmega128RFA1"; + signature = 0x1e 0xa7 0x01; + chip_erase_delay = 55000; + bs2 = 0xE2; + + ocdrev = 3; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 50000; + max_write_delay = 50000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 256; + readsize = 256; + ; + ; + +#------------------------------------------------------------ +# ATmega256RFR2 +#------------------------------------------------------------ + +part parent "m2561" + id = "m256rfr2"; + desc = "ATmega256RFR2"; + signature = 0x1e 0xa8 0x02; + chip_erase_delay = 18500; + bs2 = 0xE2; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 8192; + min_write_delay = 13000; + max_write_delay = 13000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + + ocdrev = 4; + ; + +#------------------------------------------------------------ +# ATmega128RFR2 +#------------------------------------------------------------ + +part parent "m128rfa1" + id = "m128rfr2"; + desc = "ATmega128RFR2"; + signature = 0x1e 0xa7 0x02; + + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega64RFR2 +#------------------------------------------------------------ + +part parent "m128rfa1" + id = "m64rfr2"; + desc = "ATmega64RFR2"; + signature = 0x1e 0xa6 0x02; + + + ocdrev = 3; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 50000; + max_write_delay = 50000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 256; + readsize = 256; + ; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 13000; + max_write_delay = 13000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + + ; + +#------------------------------------------------------------ +# ATmega2564RFR2 +#------------------------------------------------------------ + +part parent "m256rfr2" + id = "m2564rfr2"; + desc = "ATmega2564RFR2"; + signature = 0x1e 0xa8 0x03; + ; + +#------------------------------------------------------------ +# ATmega1284RFR2 +#------------------------------------------------------------ + +part parent "m128rfr2" + id = "m1284rfr2"; + desc = "ATmega1284RFR2"; + signature = 0x1e 0xa7 0x03; + ; + +#------------------------------------------------------------ +# ATmega644RFR2 +#------------------------------------------------------------ + +part parent "m64rfr2" + id = "m644rfr2"; + desc = "ATmega644RFR2"; + signature = 0x1e 0xa6 0x03; + ; + +#------------------------------------------------------------ +# ATtiny24 +#------------------------------------------------------------ + +part + id = "t24"; + desc = "ATtiny24"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x0b; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny24 has Signature Bytes: 0x1E 0x91 0x0B. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny44 +#------------------------------------------------------------ + +part + id = "t44"; + desc = "ATtiny44"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x07; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 256; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny44 has Signature Bytes: 0x1E 0x92 0x07. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny84 +#------------------------------------------------------------ + +part + id = "t84"; + desc = "ATtiny84"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0c; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + ocdrev = 1; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny43U +#------------------------------------------------------------ + +part + id = "t43u"; + desc = "ATtiny43u"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x0C; + reset = io; + chip_erase_delay = 1000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, 0x4E, 0x5E, + 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, 0x06, 0x16, 0x46, 0x56, + 0x0A, 0x1A, 0x4A, 0x5A, 0x1E, 0x7C, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 20; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + memory "eeprom" + size = 64; + paged = yes; + page_size = 4; + num_pages = 16; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "0 0 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "0 0 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " 0 0 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATmega32u4 +#------------------------------------------------------------ + +part + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + usbpid = 0x2ff4; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; + signature = 0x1e 0x96 0x82; + usbpid = 0x2ff9; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB647 +#------------------------------------------------------------ +# identical to AT90USB646 + +part parent "usb646" + id = "usb647"; + desc = "AT90USB647"; + signature = 0x1e 0x96 0x82; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AT90USB1286 +#------------------------------------------------------------ + +part + id = "usb1286"; + desc = "AT90USB1286"; + signature = 0x1e 0x97 0x82; + usbpid = 0x2ffb; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1287 +#------------------------------------------------------------ +# identical to AT90USB1286 + +part parent "usb1286" + id = "usb1287"; + desc = "AT90USB1287"; + signature = 0x1e 0x97 0x82; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + +part + id = "usb162"; + desc = "AT90USB162"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x82; + usbpid = 0x2ffa; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB82 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 8192; +# num_pages = 64; + +part + id = "usb82"; + desc = "AT90USB82"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x82; + usbpid = 0x2ff7; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 128; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega32U2 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 32768; +# num_pages = 256; +# memory "eeprom" +# size = 1024; +# num_pages = 256; +part + id = "m32u2"; + desc = "ATmega32U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x95 0x8a; + usbpid = 0x2ff0; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + num_pages = 256; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; +#------------------------------------------------------------ +# ATmega16U2 +#------------------------------------------------------------ +# Changes against ATmega32U2 (beside IDs) +# memory "flash" +# size = 16384; +# num_pages = 128; +# memory "eeprom" +# size = 512; +# num_pages = 128; +part + id = "m16u2"; + desc = "ATmega16U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x89; + usbpid = 0x2fef; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega8U2 +#------------------------------------------------------------ +# Changes against ATmega16U2 (beside IDs) +# memory "flash" +# size = 8192; +# page_size = 64; +# blocksize = 64; + +part + id = "m8u2"; + desc = "ATmega8U2"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x89; + usbpid = 0x2fee; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + ocdrev = 1; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 128; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; +#------------------------------------------------------------ +# ATmega325 +#------------------------------------------------------------ + +part + id = "m325"; + desc = "ATmega325"; + signature = 0x1e 0x95 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega645 +#------------------------------------------------------------ + +part + id = "m645"; + desc = "ATmega645"; + signature = 0x1E 0x96 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + ocdrev = 3; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega3250 +#------------------------------------------------------------ + +part parent "m325" + id = "m3250"; + desc = "ATmega3250"; + signature = 0x1E 0x95 0x06; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# ATmega6450 +#------------------------------------------------------------ + +part parent "m645" + id = "m6450"; + desc = "ATmega6450"; + signature = 0x1E 0x96 0x06; + + ocdrev = 3; + ; + +#------------------------------------------------------------ +# AVR XMEGA family common values +#------------------------------------------------------------ + +part + id = ".xmega"; + desc = "AVR XMEGA family common values"; + has_pdi = yes; + nvm_base = 0x01c0; + mcu_base = 0x0090; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "prodsig" + size = 0x32; + offset = 0x8e0200; + page_size = 0x32; + readsize = 0x32; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; + + memory "data" + # SRAM, only used to supply the offset + offset = 0x1000000; + ; +; + +#------------------------------------------------------------ +# ATxmega16A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x16a4u"; + desc = "ATxmega16A4U"; + signature = 0x1e 0x94 0x41; + usbpid = 0x2fe3; + + memory "eeprom" + size = 0x400; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x4000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x803000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x804000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x5000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega16C4 +#------------------------------------------------------------ + +part parent "x16a4u" + id = "x16c4"; + desc = "ATxmega16C4"; + signature = 0x1e 0x95 0x44; +; + +#------------------------------------------------------------ +# ATxmega16D4 +#------------------------------------------------------------ + +part parent "x16a4u" + id = "x16d4"; + desc = "ATxmega16D4"; + signature = 0x1e 0x94 0x42; +; + +#------------------------------------------------------------ +# ATxmega16A4 +#------------------------------------------------------------ + +part parent "x16a4u" + id = "x16a4"; + desc = "ATxmega16A4"; + signature = 0x1e 0x94 0x41; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega32A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x32a4u"; + desc = "ATxmega32A4U"; + signature = 0x1e 0x95 0x41; + usbpid = 0x2fe4; + + memory "eeprom" + size = 0x400; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x8000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x807000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x808000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x9000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega32C4 +#------------------------------------------------------------ + +part parent "x32a4u" + id = "x32c4"; + desc = "ATxmega32C4"; + signature = 0x1e 0x94 0x43; +; + +#------------------------------------------------------------ +# ATxmega32D4 +#------------------------------------------------------------ + +part parent "x32a4u" + id = "x32d4"; + desc = "ATxmega32D4"; + signature = 0x1e 0x95 0x42; +; + +#------------------------------------------------------------ +# ATxmega32A4 +#------------------------------------------------------------ + +part parent "x32a4u" + id = "x32a4"; + desc = "ATxmega32A4"; + signature = 0x1e 0x95 0x41; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega64A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x64a4u"; + desc = "ATxmega64A4U"; + signature = 0x1e 0x96 0x46; + usbpid = 0x2fe5; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x10000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x80f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x11000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega64C3 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64c3"; + desc = "ATxmega64C3"; + signature = 0x1e 0x96 0x49; + usbpid = 0x2fd6; +; + +#------------------------------------------------------------ +# ATxmega64D3 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64d3"; + desc = "ATxmega64D3"; + signature = 0x1e 0x96 0x4a; +; + +#------------------------------------------------------------ +# ATxmega64D4 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64d4"; + desc = "ATxmega64D4"; + signature = 0x1e 0x96 0x47; +; + +#------------------------------------------------------------ +# ATxmega64A1 +#------------------------------------------------------------ + +part parent "x64a4u" + id = "x64a1"; + desc = "ATxmega64A1"; + signature = 0x1e 0x96 0x4e; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega64A1U +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a1u"; + desc = "ATxmega64A1U"; + signature = 0x1e 0x96 0x4e; + usbpid = 0x2fe8; +; + +#------------------------------------------------------------ +# ATxmega64A3 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a3"; + desc = "ATxmega64A3"; + signature = 0x1e 0x96 0x42; +; + +#------------------------------------------------------------ +# ATxmega64A3U +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a3u"; + desc = "ATxmega64A3U"; + signature = 0x1e 0x96 0x42; + usbpid = 0x2fe5; +; + +#------------------------------------------------------------ +# ATxmega64A4 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64a4"; + desc = "ATxmega64A4"; + signature = 0x1e 0x96 0x46; +; + +#------------------------------------------------------------ +# ATxmega64B1 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64b1"; + desc = "ATxmega64B1"; + signature = 0x1e 0x96 0x52; + usbpid = 0x2fe1; +; + +#------------------------------------------------------------ +# ATxmega64B3 +#------------------------------------------------------------ + +part parent "x64a1" + id = "x64b3"; + desc = "ATxmega64B3"; + signature = 0x1e 0x96 0x51; + usbpid = 0x2fdf; +; + +#------------------------------------------------------------ +# ATxmega128C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128c3"; + desc = "ATxmega128C3"; + signature = 0x1e 0x97 0x52; + usbpid = 0x2fd7; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x81e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega128D3 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128d3"; + desc = "ATxmega128D3"; + signature = 0x1e 0x97 0x48; +; + +#------------------------------------------------------------ +# ATxmega128D4 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128d4"; + desc = "ATxmega128D4"; + signature = 0x1e 0x97 0x47; +; + +#------------------------------------------------------------ +# ATxmega128A1 +#------------------------------------------------------------ + +part parent "x128c3" + id = "x128a1"; + desc = "ATxmega128A1"; + signature = 0x1e 0x97 0x4c; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega128A1 revision D +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a1d"; + desc = "ATxmega128A1revD"; + signature = 0x1e 0x97 0x41; +; + +#------------------------------------------------------------ +# ATxmega128A1U +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a1u"; + desc = "ATxmega128A1U"; + signature = 0x1e 0x97 0x4c; + usbpid = 0x2fed; +; + +#------------------------------------------------------------ +# ATxmega128A3 +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a3"; + desc = "ATxmega128A3"; + signature = 0x1e 0x97 0x42; +; + +#------------------------------------------------------------ +# ATxmega128A3U +#------------------------------------------------------------ + +part parent "x128a1" + id = "x128a3u"; + desc = "ATxmega128A3U"; + signature = 0x1e 0x97 0x42; + usbpid = 0x2fe6; +; + +#------------------------------------------------------------ +# ATxmega128A4 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128a4"; + desc = "ATxmega128A4"; + signature = 0x1e 0x97 0x46; + has_jtag = yes; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x81f000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega128A4U +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128a4u"; + desc = "ATxmega128A4U"; + signature = 0x1e 0x97 0x46; + usbpid = 0x2fde; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x81f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega128B1 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x128b1"; + desc = "ATxmega128B1"; + signature = 0x1e 0x97 0x4d; + usbpid = 0x2fea; + has_jtag = yes; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x20000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x81e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x22000; + offset = 0x800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x100; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega128B3 +#------------------------------------------------------------ + +part parent "x128b1" + id = "x128b3"; + desc = "ATxmega128B3"; + signature = 0x1e 0x97 0x4b; + usbpid = 0x2fe0; +; + +#------------------------------------------------------------ +# ATxmega192C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x192c3"; + desc = "ATxmega192C3"; + signature = 0x1e 0x97 0x51; + # usbpid = 0x2f??; + + memory "eeprom" + size = 0x800; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x30000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x82e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x830000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x32000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega192D3 +#------------------------------------------------------------ + +part parent "x192c3" + id = "x192d3"; + desc = "ATxmega192D3"; + signature = 0x1e 0x97 0x49; +; + +#------------------------------------------------------------ +# ATxmega192A1 +#------------------------------------------------------------ + +part parent "x192c3" + id = "x192a1"; + desc = "ATxmega192A1"; + signature = 0x1e 0x97 0x4e; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega192A3 +#------------------------------------------------------------ + +part parent "x192a1" + id = "x192a3"; + desc = "ATxmega192A3"; + signature = 0x1e 0x97 0x44; +; + +#------------------------------------------------------------ +# ATxmega192A3U +#------------------------------------------------------------ + +part parent "x192a1" + id = "x192a3u"; + desc = "ATxmega192A3U"; + signature = 0x1e 0x97 0x44; + usbpid = 0x2fe7; +; + +#------------------------------------------------------------ +# ATxmega256C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x256c3"; + desc = "ATxmega256C3"; + signature = 0x1e 0x98 0x46; + usbpid = 0x2fda; + + memory "eeprom" + size = 0x1000; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x40000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x83e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x840000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x42000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega256D3 +#------------------------------------------------------------ + +part parent "x256c3" + id = "x256d3"; + desc = "ATxmega256D3"; + signature = 0x1e 0x98 0x44; +; + +#------------------------------------------------------------ +# ATxmega256A1 +#------------------------------------------------------------ + +part parent "x256c3" + id = "x256a1"; + desc = "ATxmega256A1"; + signature = 0x1e 0x98 0x46; + has_jtag = yes; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; +; + +#------------------------------------------------------------ +# ATxmega256A3 +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3"; + desc = "ATxmega256A3"; + signature = 0x1e 0x98 0x42; +; + +#------------------------------------------------------------ +# ATxmega256A3U +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3u"; + desc = "ATxmega256A3U"; + signature = 0x1e 0x98 0x42; + usbpid = 0x2fec; +; + +#------------------------------------------------------------ +# ATxmega256A3B +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3b"; + desc = "ATxmega256A3B"; + signature = 0x1e 0x98 0x43; +; + +#------------------------------------------------------------ +# ATxmega256A3BU +#------------------------------------------------------------ + +part parent "x256a1" + id = "x256a3bu"; + desc = "ATxmega256A3BU"; + signature = 0x1e 0x98 0x43; + usbpid = 0x2fe2; +; + +#------------------------------------------------------------ +# ATxmega384C3 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x384c3"; + desc = "ATxmega384C3"; + signature = 0x1e 0x98 0x45; + usbpid = 0x2fdb; + + memory "eeprom" + size = 0x1000; + offset = 0x8c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x60000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "apptable" + size = 0x2000; + offset = 0x85e000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "boot" + size = 0x2000; + offset = 0x860000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "flash" + size = 0x62000; + offset = 0x800000; + page_size = 0x200; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x200; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega384D3 +#------------------------------------------------------------ + +part parent "x384c3" + id = "x384d3"; + desc = "ATxmega384D3"; + signature = 0x1e 0x98 0x47; +; + +#------------------------------------------------------------ +# ATxmega8E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x8e5"; + desc = "ATxmega8E5"; + signature = 0x1e 0x93 0x41; + + memory "eeprom" + size = 0x0200; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x2000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "apptable" + size = 0x800; + offset = 0x00801800; + page_size = 0x80; + readsize = 0x100; + ; + + memory "boot" + size = 0x800; + offset = 0x00802000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "flash" + size = 0x2800; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega16E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x16e5"; + desc = "ATxmega16E5"; + signature = 0x1e 0x94 0x45; + + memory "eeprom" + size = 0x0200; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x4000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x00803000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x00804000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "flash" + size = 0x5000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# ATxmega32E5 +#------------------------------------------------------------ + +part parent ".xmega" + id = "x32e5"; + desc = "ATxmega32E5"; + signature = 0x1e 0x95 0x4c; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x8000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "apptable" + size = 0x1000; + offset = 0x00807000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "boot" + size = 0x1000; + offset = 0x00808000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "flash" + size = 0x9000; + offset = 0x0800000; + page_size = 0x80; + readsize = 0x100; + ; + + memory "usersig" + size = 0x80; + offset = 0x8e0400; + page_size = 0x80; + readsize = 0x100; + ; +; + +#------------------------------------------------------------ +# AVR32UC3A0512 +#------------------------------------------------------------ + +part + id = "uc3a0512"; + desc = "AT32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + memory "flash" + paged = yes; + page_size = 512; # bytes + readsize = 512; # bytes + num_pages = 1024; # could be set dynamicly + size = 0x00080000; # could be set dynamicly + offset = 0x80000000; + ; +; + +part parent "uc3a0512" + id = "ucr2"; + desc = "deprecated, use 'uc3a0512'"; +; + +#------------------------------------------------------------ +# ATtiny1634. +#------------------------------------------------------------ + +part + id = "t1634"; + desc = "ATtiny1634"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x94 0x12; + pagel = 0xB3; + bs2 = 0xB1; + reset = io; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 32; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 1 1 1 1 i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# Common values for reduced core tinys (4/5/9/10/20/40) +#------------------------------------------------------------ + +part + id = ".reduced_core_tiny"; + desc = "Common values for reduced core tinys"; + has_tpi = yes; + + memory "signature" + size = 3; + offset = 0x3fc0; + page_size = 16; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + page_size = 16; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + page_size = 16; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + page_size = 16; + ; +; + +#------------------------------------------------------------ +# ATtiny4 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ + +part parent "t4" + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; +; + +#------------------------------------------------------------ +# ATtiny9 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t9"; + desc = "ATtiny9"; + signature = 0x1e 0x90 0x08; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ + +part parent "t9" + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; +; + +#------------------------------------------------------------ +# ATtiny20 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t20"; + desc = "ATtiny20"; + signature = 0x1e 0x91 0x0F; + + memory "flash" + size = 2048; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATtiny40 +#------------------------------------------------------------ + +part parent ".reduced_core_tiny" + id = "t40"; + desc = "ATtiny40"; + signature = 0x1e 0x92 0x0E; + + memory "flash" + size = 4096; + offset = 0x4000; + page_size = 64; + blocksize = 128; + ; +; + +#------------------------------------------------------------ +# ATmega406 +#------------------------------------------------------------ + +part + id = "m406"; + desc = "ATMEGA406"; + has_jtag = yes; + signature = 0x1e 0x95 0x07; + + # STK500 parameters (parallel programming IO lines) + pagel = 0xa7; + bs2 = 0xa0; + serial = no; + parallel = yes; + + # STK500v2 HV programming parameters, from XML + pp_controlstack = 0x0e, 0x1e, 0x0f, 0x1f, 0x2e, 0x3e, 0x2f, 0x3f, + 0x4e, 0x5e, 0x4f, 0x5f, 0x6e, 0x7e, 0x6f, 0x7f, + 0x66, 0x76, 0x67, 0x77, 0x6a, 0x7a, 0x6b, 0x7b, + 0xbe, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + + # JTAG ICE mkII parameters, also from XML files + allowfullpagebitstream = no; + enablepageprogramming = yes; + idr = 0x51; + rampz = 0x00; + spmcr = 0x57; + eecr = 0x3f; + + memory "eeprom" + paged = no; + size = 512; + page_size = 4; + blocksize = 4; + readsize = 4; + num_pages = 128; + ; + + memory "flash" + paged = yes; + size = 40960; + page_size = 128; + blocksize = 128; + readsize = 128; + num_pages = 320; + ; + + memory "hfuse" + size = 1; + ; + + memory "lfuse" + size = 1; + ; + + memory "lockbits" + size = 1; + ; + + memory "signature" + size = 3; + ; +; + + diff --git a/code/blink/main.c b/code/blink/main.c new file mode 100755 index 0000000..af627b6 --- /dev/null +++ b/code/blink/main.c @@ -0,0 +1,87 @@ +/* Name: main.c + * This is just an example for AVR-C with ATtiny microcontrollers. The code + * implements digital switching of two pins, letting two connected LEDs blink. + * It is part of the following instructable: + * + * Author: Markus Konrad + * Copyright 2013. 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. + * Neither the name of the mkonrad.net 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 HOLDER 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. + */ + +#include +#include + +// Define pins + +#define PIN_LED1 PB0 +#define PIN_LED2 PB1 + +// Define the delay time in ms + +#define DELAY_MS 500 + +// Define helper macros + +// write digital "high" to pin on port +#define DIGIWRITE_H(prt, pn) prt |= (1< on port +#define DIGIWRITE_L(prt, pn) prt &= ~(1<0; ms--) _delay_ms(10); +} + +// program entry point +int main(void) { + // DDRB is the "data direction register" for port B + // the ATtinyX5 only has port B with usable pins + // we set both LED pins to "output" + DDRB |= (1 << PIN_LED1) | (1 << PIN_LED2); + + // initially set the pins to "low" + DIGIWRITE_L(PORTB, PIN_LED1); + DIGIWRITE_L(PORTB, PIN_LED2); + + // main loop + uint8_t toggle = 0; + for(;;){ + // alternate between the LEDs to let them blink + DIGIWRITE_L(PORTB, (toggle == 0 ? PIN_LED1 : PIN_LED2)); + DIGIWRITE_H(PORTB, (toggle == 0 ? PIN_LED2 : PIN_LED1)); + + // alternave the toggle variable + toggle = !toggle; + + // make a long delay + long_delay_ms(DELAY_MS); + } + + return 0; /* never reached */ +} diff --git a/code/blink/main.elf b/code/blink/main.elf new file mode 100755 index 0000000000000000000000000000000000000000..dadb3cbd9fec59a5e74a64b43d2899464d3c9a2b GIT binary patch literal 5172 zcmai&e@t7~700hJ2|rB0{77g*8cZMon#9;(2qciyzv8(3uw$DhOEIwQts^8=n^%eO1J0C z2B_aI<{hZZkg0taic8{#ZiA|)ohZpxtL@gBv_`E#tJmyWomQ*u(rPrDR;^WOm0EpA z>#sKc`oZRhckkV8c;BmivhnrJh0X5wle@3(2tWA#M|VE9yp;b;XhI~TSF1kVs9e3d z_Uxsb>)P#iZ)=;s*<4wBx4ulfbKj!9eE+%jmGzai_uA_pys&A}Ufg`{$jbV?&Trp; zVe_|t{>R1}E$c1kKB~~(XkBl8wfUV2`-4|o-m$H;{;>7p>d!vAv3hIumzH~$%GJ+* zP}m6h{U;nJK`eD;4=2Y# zsyv(wfK(50(hg#KoRcn)njj}0kX@skbb{2L5vga92CPA8Sa`F_&BhPbk5oGU+ob-e2yRDPrEKY&6 zyv%(@K=%KXlVOlYU*p6Ja^UBjd#p(C;}J13CO5CsB~jk2#5ebp4%^36SmwoQ#4z_AgGxL5}>F6PoGKGX0G%zL_-B zV-=jxc$~X9@q_dGU(&v49L(~PC_6jBAoa@P9`|%0~vmblU|UKDNfuV!cuQJRBOkM zS=J$}wKm%+n-KV_OtIWz2{&SUXcOVa9_+h2JuscHowS7;PuG-H3sE71N*Q2t*xsaC z1~wVg$Y7TYYGqI-1G^0BWzZmlMj158V7CnR$e>vUkH}!J4ED*OMF#t2@Td$9$e>jQ z4jHt`;GhiJWzZpmLozrlgH9QA$)H;XkICSO435g+m<*gU=#ha-25uSj%AijM9vSq@ zU_b`PWiTj%AsL*I!AThm%V0zXVh{GJGGV9E@}Jsjfx8&(1<1+e?6JAj)U>15>2kWn zQYxJrRC0Rl9)O@Is=AQP%!_Cwmhg!{Am$U%@Ptoz1O7N*z2VyRe@yQDY_floL z7}m*n*cTHh1A2*8ko_?+?w>>%3XjJ}QJ#s3sGr1O&>KSm=U@=_^MM4)gzl9fuY}(p zb9s%*hiW3>5)mCy=@TJx(9Le$>L#n(tCv2#^z(3rdms^wi$DTyD10Iw9jDpFW5JM! z#vnwCqs5rPBXPgqJ0|>Nqfv}{Y)oH?^B8d`8ji$zjmm9QF0A&KB&%_A)9))(QXpAzThtGOA}tsB0^J`^ZF%Jj^^ixHz7O(g zrnhg&B;*TpFD%8(7lxUg;y(fX&K9$Xi;!(Kdl*T`OO`sWK9(9Qm7J^lne3iBXx1N6U0?f*&bi^+lcd@k9o_#wjktEC?%tiK-U z^qDx2DgFp_-v6kipNFm>Q=SkhmIZY{>6_IIJ{lR-tgm`|qC&S~tZ@u+fEQ4C?s5U|DQLT-LR$*Qxu z{Ir_Qn99;jYI#00b0y_*X3(&tD(b>^eJ+y$QLm+Py60jpv!GxDpUo!c;kc|$=Q3Hv z4Kd(Ncop;;j!YpAlpnbmsI95plW)ib%UqrPHF`kUg^hvl5k%+IUooN%Ty zIn_CvUUK5*;ha&IQ`2fHeK{i_Pc6;j36|vK)KpeoHZAlPnlgGQerf-|(tnY`%{&q5 zTru}$YE7Rhr8Z>x`so{{eZ%;L2c?*dok56B=p@r#MTz|AtTYqZOgleyhXJ>riAIZX z(cf%;4StT|zDSH>QJO?HWzuis$p6ILaF}hH$>evVN(ef;&1A-)e?Ux`Y(Ih@oiS!I xMVcGyM*I=rY10X{=|{D>mSir+Z%Ki9P}O9J*arpv+1nnkyiSPUv4&>6{{i9#{!st` literal 0 HcmV?d00001 diff --git a/code/blink/main.o b/code/blink/main.o new file mode 100644 index 0000000000000000000000000000000000000000..eb5af387da6675d411879925afbd59c373bb79b8 GIT binary patch literal 1144 zcma)4TWb?h5S~q1ZM|WOim1q9K;wn=LJ$>iP-}`*DOT}CShvm6M!HFwY{mNGgF;gf zynt9AEdGZ)=4Jb?Q2)USJ_<>|_w@UA_oS!3=)mlJGjnFnw`b<%==g2JFhq$Vld|cF z1SyfvNamsgS=lKA@-(c3vhM7k?>E|Sf3E&AJ{f-`5OF5v2PGKzxYT&{WT_dftgQs$ zkFefY87xngGX_a2@!bJk_+ zf+D3^om-!Dx>`!oTbK*{w4R372lgV@d(lpJ2>6=j9|FFi`I#Oj=ycEGyUF42`}?1GoDjRa>n z2;~{(c0u{C^wowv0M http://highlowtech.org/?p=1695 +*Load: File>Examples>11.ArduinoISP +*Connect arduino to computer and select the right board, and port from the Tools menu (aka arduino Uno) +*Upload the sketch to the arduino board +*Disconnect arduino + + +-wiring- +*wire up the arduino to the attiny, see schematic arduino-to-attiny-wiring.png or http://highlowtech.org/wp-content/uploads/2011/06/Screen-shot-2011-06-06-at-1.46.39-PM.png +Pin connections: + ATtiny Pin 2 to Arduino Pin 13 (or SCK of another programmer) + ATtiny Pin 1 to Arduino Pin 12 (or MISO of another programmer) + ATtiny Pin 0 to Arduino Pin 11 (or MOSI of another programmer) + ATtiny Reset Pin to Arduino Pin 10 (or RESET of another programmer) + +(ATtiny pinout refer to schematic: https://cdn.sparkfun.com/assets/f/8/f/d/9/52713d5b757b7fc0658b4567.png ) + +NOTE REPEAT THE STEPS BELOW FOR EVERY ATTINY CHIP YOUR PLANNING TO USE/PROGRAM:x + +*Connect arduino to computer again +*In arduino ide select: + Tools – Board – Attiny85 @ 8Mhz (internal oscillator; BOD disabled) + Tools – Programmer – Arduino as ISP + Tools – Serial Port – COMx (x being the com port that your arduino is connected to) + +*Finally: + Tools – Burn Bootloader + +To clarify, you are not burning a bootloader here. You are resetting the fuses in the Attiny to clock it at 8Mhz (normally runs at 1Mhz). +Next, get the firmware into the chip. With that I mean the hex file you want in your chip + + +-flashing the firmware with avrdude (bundled with arduino on OSX)- +*On osx, open a Terminal and type: cd /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/ +*Press enter ;) +*Youre now in the folder with all the avr stuff. + +The commands ater the dollarsign below are all executed from this folder aka typed in the terminal followed by the ENTER key. +(so dont type the dollar sign) + +$ ./avrdude (lists available commands) + +-create makefile- +*to compile code (.c) to binary .hex using a 'makefile', create a new one or modify an exiting one (see led example) +*make sure all the paths are correct! (on osx avrdude etc is not in your 'path', or /usr/bin/, so you need full paths to these apps!) +(ref: http://www.instructables.com/id/Honey-I-Shrunk-the-Arduino-Moving-from-Arduino-t/ +and: https://github.com/internaut/attiny-instructable) + +type: $ make + +Now you have a main.hex + + +-flashing hex- + + +$ cd /Applications/Arduino.app/Contents/Java/hardware/tools/avr + +$ ./bin/avrdude -C etc/avrdude.conf -c avrisp -P /dev/cu.usbmodem1421 -b 19200 -p attiny85 -U flash:w:/Users/then/ownCloud/space/linuxpresday/attiny-instructable-master/1_leds/main.hex:i + + +BOOM! + +To test, just need to connect pin 5 (PB0) and/or 6 (PB1) of your ATtiny with an LED respectively (of course you need to add a resistor with at least 150 Ohm before). (http://www.instructables.com/id/Honey-I-Shrunk-the-Arduino-Moving-from-Arduino-t/) + + + + +-flash SDCARD CODE- + +$ ./bin/avrdude -C etc/avrdude.conf -c avrisp -P /dev/cu.usbmodem1421 -b 19200 -p attiny85 -U flash:w:/Users/then/ownCloud/space/linuxpresday/attinydj/install/tiny.hex:i + + +-put content on sd card- +place (48 kHz, 8-bit, mono) wav files in an FAT (32) formatted sd card folder called "wav". +(ref:http://www.instructables.com/id/Attiny85-Sd-Wav-Player/) + +>> oef check this>> http://elm-chan.org/works/sd20p/report.html (put 001.wav file in root) + +CONNECTING micro SD CARD TO ATTINY85 + see: schemasd8p_mo.png + and: sdcard-pinout.png + + +-soldering to the SD CARD (not micro sd) + vss1 and vss2 are GND (can be connected together) + see: sdcard-pinout.png + + +Sprites mod has an excellent schematic: http://spritesmods.com/?art=doorbell&page=2 +(schema.png) + + +ref: + http://www.sonsivri.to/forum/index.php?topic=7156.0 + https://www.esp32.com/viewtopic.php?t=2272 + http://spritesmods.com/?art=doorbell&page=2 + + + + +FURTHER READING AND CREDITS: +http://elm-chan.org/works/sd8p/report.html -- original creator, great site! +http://www.instructables.com/id/Attiny85-Sd-Wav-Player/ -- tut for raspberry pi as programmer + + + + + +--- +attiny sd player... attiny soldered directly on cheap sdcard + +diy programming shield: +https://www.youtube.com/watch?v=9LjfkjwMqXI + +better> https://www.youtube.com/watch?v=BexXvxmOGN8 + + +brogramming the chip +http://highlowtech.org/?p=1695 + + +smart sdcard microsd adaptor hack: +https://www.youtube.com/watch?v=RVC_nLZy-T8 + + + +uiteindelijk: +http://www.instructables.com/id/Attiny85-Sd-Wav-Player/ +http://elm-chan.org/works/sd8p/report.html (fuses not needed rite? see: https://www.youtube.com/watch?v=RVC_nLZy-T8 ) + +harde site http://elm-chan.org/ + + +interesting audacity tut halfway: +https://www.youtube.com/watch?v=tUapZ_JdHLE + + +hard: +http://txyzinfo.blogspot.nl/2012/11/AVR-attiny2313-wav-music-player-from-SD-card-microSD-MMC.html +https://www.youtube.com/watch?v=CDRRwNkzasQ + +more advanced, with pcb etcahble: +http://paja-trb.cz/konstrukce/wav_player.html + + +__ _____ ____ _ ______ _ _ ___ ____ +\ \ / / _ \| _ \| |/ / ___|| | | |/ _ \| _ \ + \ \ /\ / / | | | |_) | ' /\___ \| |_| | | | | |_) | + \ V V /| |_| | _ <| . \ ___) | _ | |_| | __/ + \_/\_/ \___/|_| \_\_|\_\____/|_| |_|\___/|_| + + +musical keycord + +PARTS NEEDED + + + (micro) SD CARDS (ebay) <1eur + https://www.ebay.nl/itm/Job-lot-of-44-Used-Micro-SD-Memory-Cards-All-2GB-Various/253593350905?hash=item3b0b5772f9:g:rsEAAOSwyi1a5s7G&autorefresh=true + +per unit: +1x atttiny85 (farnell) +1x speaker (eculit?) +1x cr2032 (3v lithium cell) +1x (micro)sdcard + + +BATTERY +the circuit draws 0.03A the cr2032 lithium battery delivers about 200 mah, so battery life is 200/3 = 66 hours, almost 3 days of operation time. + +SOUNDS +According to ELM CHang: “The SD audio player supports only RIFF-WAVE format sound files known as Microsoft wave file in LPCM, 8/16-bit, mono/stereo and upto 48kHz sampling rate”. +(http://elm-chan.org/works/sd8p/report.html) + + +But this is not the case….. + +workflow: convert mp3 to wav, convert wav to speed it up 2x +$ ffmpeg -i input.mp3 output.wav +$ sox output.wav -r 48000 -c 1 -b 8 short2x48-8.wav speed 2 + +To convert a whole folder (zhell, osx, etc..): +$ for i in *.mp3; do ffmpeg -i "$i" ${i%.*}.wav; done +$ for i in *wav; do sox "$i" -r 48000 -c 1 -b 8 ${i%.*}-conv.wav speed 2; done + + + + + + + +ref: +http://stefaanlippens.net/audio_conversion_cheat_sheet/ +http://elm-chan.org/works/sd8p/report.html + + +COSTS +6x sdcards (marktplaats) 6,50+5,85 … = 12,35 +6x attiny a 1,08 = 6,36 +6x CR 2032 a 0,884 = 5,404 +6x speaker… + + diff --git a/wiring-diagrams/arduino-to-attiny-wiring.png b/wiring-diagrams/arduino-to-attiny-wiring.png new file mode 100644 index 0000000000000000000000000000000000000000..51bb123735d9b187825aa6a66a297749fe4d79fc GIT binary patch literal 66696 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%0AM{ZXhCZ|aU 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 literal 0 HcmV?d00001 diff --git a/wiring-diagrams/attiny-pinout.png b/wiring-diagrams/attiny-pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..a4725b98a12e2ec41fc85c931d0fcbfbea7b7c97 GIT binary patch literal 49869 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 literal 0 HcmV?d00001 diff --git a/wiring-diagrams/attiny-to-microsd.png b/wiring-diagrams/attiny-to-microsd.png new file mode 100644 index 0000000000000000000000000000000000000000..00ac25e6ff0b4199e6147f4133cbd4b553126101 GIT binary patch literal 3032 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 literal 0 HcmV?d00001 diff --git a/wiring-diagrams/attiny-to-sdcard.png b/wiring-diagrams/attiny-to-sdcard.png new file mode 100644 index 0000000000000000000000000000000000000000..86ee21e6206440d713ca4f5cb8948df901315678 GIT binary patch literal 9584 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�yAe~oiwJ_Pq=&6l|)8*H5IN0wf3g5 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 literal 0 HcmV?d00001