From 6f73197f2e8b5a867c8ffe12906772e32e892ac9 Mon Sep 17 00:00:00 2001 From: Peter Henn Date: Mon, 14 Nov 2005 12:00:00 +0100 Subject: [PATCH] USBasp 2005.11.14. unmodified content from archive usbasp.2005-11-14.tar.gz --- Changelog.txt | 7 +- Readme.txt | 13 +- bin/firmware/usbasp.2005-07-03.hex | 205 -- bin/firmware/usbasp.2005-11-14.hex | 209 ++ bin/win-avrdude/avrdude.conf | 3463 +++++++++++++++++++++++++----- bin/win-avrdude/avrdude.exe | Bin 169212 -> 180224 bytes firmware/isp.c | 4 +- firmware/main.c | 7 +- firmware/usbdrv/License.txt | 10 +- software/avrdude_usbasp.2005-04-21.patch | 125 -- software/avrdude_usbasp.2005-11-14.patch | 100 + software/usbasp.c | 2 +- 12 files changed, 3299 insertions(+), 846 deletions(-) delete mode 100644 bin/firmware/usbasp.2005-07-03.hex create mode 100644 bin/firmware/usbasp.2005-11-14.hex delete mode 100644 software/avrdude_usbasp.2005-04-21.patch create mode 100644 software/avrdude_usbasp.2005-11-14.patch diff --git a/Changelog.txt b/Changelog.txt index 4d3480a7d..7b71dd463 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,10 +1,15 @@ +usbasp.2005-11-14 +---------------------- +- fixed blocksize restriction (programming the Mega128 now works) + by Thomas Pfeifer (TP) +- update patch for avrdude-5.0 + usbasp.2005-07-03 ----------------- - set USB_CFG_SAMPLE_EXACT in usbconfig.h to reduce problems with long cables - corrected vendor string - added notes on setting fuse bits - usbasp.2005-04-21 ----------------- - first public version diff --git a/Readme.txt b/Readme.txt index 11c7804f4..c31681f42 100644 --- a/Readme.txt +++ b/Readme.txt @@ -84,13 +84,12 @@ Software (avrdude): An extension to avrdude (http://www.nongnu.org/avrdude/) was written. To compile the software: 1. install libusb: http://libusb.sourceforge.net/ -2. get the csv version of avrdude: - export CVS_RSH="ssh" - cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/avrdude co avrdude -3. cp usbasp/software/usbasp.* avrdude/ -4. cd avrdude +2. get avrdude-5.0.tar.gz and extract it: + tar xvzf avrdude-5.0.tar.gz +3. cp usbasp/software/usbasp.* avrdude-5.0/ +4. cd avrdude-5.0 5. apply the patch: - patch < ../usbasp/software/avrdude_usbasp.xxxx-xx-xx.patch + patch -p1 < ../usbasp/software/avrdude_usbasp.xxxx-xx-xx.patch 6. configure to your environment: ./bootstrap (I had to comment out the two if-blocks which verify the installed versions of autoconf and automake) @@ -140,5 +139,5 @@ libusb .......................... http://libusb.sourceforge.net/ libusb-win32 .................... http://libusb-win32.sourceforge.net/ -2005-07-03 Thomas Fischl +2005-11-14 Thomas Fischl http://www.fischl.de diff --git a/bin/firmware/usbasp.2005-07-03.hex b/bin/firmware/usbasp.2005-07-03.hex deleted file mode 100644 index 673db57a8..000000000 --- a/bin/firmware/usbasp.2005-07-03.hex +++ /dev/null @@ -1,205 +0,0 @@ -:100000003BC072C153C052C051C050C04FC04EC05F -:100010004DC04CC04BC04AC049C048C047C046C094 -:1000200045C044C043C00E03550053004200610068 -:10003000730070001C037700770077002E006600C5 -:1000400069007300630068006C002E0064006500A6 -:1000500004030904090212000101008019090400C7 -:1000600000000000000012010101FF000008EB0386 -:10007000B4C700010102000111241FBECFE5D4E086 -:10008000DEBFCDBF10E0A0E6B0E0EAEAFCE002C0CF -:1000900005900D92A436B107D9F710E0A4E6B0E0C0 -:1000A00001C01D92A23AB107E1F7EAC5A9CF1F939B -:1000B000CF93FC0180919B008D3269F080917A0092 -:1000C00087FD04C0CF014DD58F3F71F010926300C2 -:1000D00010927A0066C0C0E010E8683061F0C0930A -:1000E000630010937A005DC08EE180938D0082E002 -:1000F0008093620056C080818076F9F426E930E072 -:10010000C093960081818823A1F08530E9F0863084 -:10011000F9F0883061F18A3071F130939D002093BD -:100120009C0087818823D9F686818C17C0F6C82F5A -:10013000D6CFC0939700C2E0F0CFC681CF0104D4E0 -:100140008F3FA9F710E0CBCF828180937B00E5CF72 -:1001500010EC8381813089F0823099F08330E9F6A8 -:100160008281882391F4C4E020E530E0D6CFC1E05D -:10017000C0939600D2CFC1E0D0CFC2E126E630E0F6 -:10018000CCCFC2E124E530E0C8CF813031F08230FD -:1001900021F6CEE026E230E0C0CFCCE124E330E02F -:1001A000BCCFCF911F910895CF9360919E0066239D -:1001B00051F0635067FD05C0809199009927019621 -:1001C00076DF10929E008091620087FD1AC086B390 -:1001D000837019F010927C0077C080917C00882396 -:1001E00009F072C094E686B3837009F06DC0915037 -:1001F000D1F781E080937C009093980090937B00EE -:1002000063C0809163008F3F31F12BE490917A00BD -:1002100090FD23EC9F5F90937A0020938D00682FD0 -:10022000893008F068E0861B80936300AEE8B0E098 -:1002300097FD30C0662349F560E070E0C62F693055 -:10024000A0F08EE180938D0092E08FEF80936300A9 -:1002500090936200BCCF80917B00882309F4B7CFD4 -:100260008093980010927B00B2CF8EE890E0C1D1CD -:10027000EC2FFF27E357FF4F818392839C2F9C5FD6 -:10028000C83018F390936200A2CFCD012DD4682F0F -:100290007727D4CFE0919C00F0919D0096FF0DC090 -:1002A000962F03C084918D9331969150D8F7F09397 -:1002B0009D00E0939C007727C1CF962F02C08191CB -:1002C0008D939150E0F7F3CFCF91089584E690E0BD -:1002D00080939A000B968093990085B7836085BFC1 -:1002E0008BB780648BBF08950F930FB70F93B09BAC -:1002F000FECFB09B06C0B09B04C0B09B02C0000004 -:1003000000C01F933F932F9331E012E006B31027F4 -:1003100010FD32E0102F3A95C9F700FDE4C006B396 -:10032000102717952FE72795DF9316B30127079519 -:100330002795CF93C0919A0006B31027179527955C -:100340003BE0DD274F9316B30127079527954FEF25 -:10035000000055C0B09BFECFB09B06C0B09B04C050 -:10036000B09B02C0000000C0DF9100C0CDCF16B32B -:10037000137079F1407C2C6F13C006B3037049F100 -:1003800041782C6F15C0037021F1102F2C6F06B32C -:1003900019C006B30370E9F04E7F2C6F18C038F314 -:1003A00006B30370B1F0102717952795243028F372 -:1003B00016B3012707952795422749934FEF06B3B8 -:1003C000243008F3102717952795243010F316B31F -:1003D0001370E1F10127079527952430F0F006B35B -:1003E0000370A1F11027179527952430E0F016B37C -:1003F0000127079527953A9541F12430D0F006B3AF -:10040000037021F11027179527952430C0F016B3FB -:100410000127079527952430C2CF16B31370B1F08A -:100420004C7F2C6FDCCF06B3037081F0487F2C6FBC -:10043000DECF16B3137051F0407F2C6FE0CF06B3C0 -:10044000037021F0407E2C6FE2CF3AC03C2FC09168 -:100450009A003C1B00E433300ABF90F108811981F7 -:10046000412F1F77209198000D3271F1013E61F10B -:100470000936B9F0033C11F00B3411F510919F00CF -:100480001123F1F000919E000030B1F530939E00F1 -:1004900010939B0000919900C093990000939A00DB -:1004A0002EC0121769F4309162003F3F29F10FEF1F -:1004B00000936200CDE8D0E025C0002700939F00A4 -:1004C0004F91CF91DF910FC01217B9F700939F00A2 -:1004D0000FEF00936300009362004F91CF910AB732 -:1004E00006FD38CFDF9100E40ABF2F913F911F91A5 -:1004F0000F910FBF0F911895C0E6D0E002C0C1E682 -:10050000D0E032E05F9308B30C7F016008BB53E09A -:1005100017B3136017BB20E80FC0052710E008BB16 -:1005200010C0052710E0089408BB13C0052710E091 -:1005300015C0052710E019C020FF052708BB279527 -:1005400017951C3F50F720FF0527279508BB1795E7 -:100550001C3F38F720FF05272795179508BB1C3F40 -:1005600028F720FF0527279517951C3F08BB08F79C -:1005700000C0499120FF052708BB279517951C3F10 -:1005800048F520FF0527279508BB17951C3F30F538 -:1005900020FF05272795179508BB1C3F20F520FF56 -:1005A0000527279517951C3F08BB00F5242F3A9582 -:1005B00019F60C7F5F9108BB34E03A95F1F70160C2 -:1005C00017B31C7F08BB0C7F4F91CF9117BB08BBA3 -:1005D000DF9189CF052710E008BBD1CF052710E0B8 -:1005E000089408BBD4CF052710E0D6CF052710E02C -:1005F000DACFA82FB92F8FEF9FEF41E050EA61507B -:1006000070F02D9138E0722F782796958795269572 -:1006100070FF02C0842795273A95A9F7F0CF8095FF -:100620009095089582E58DB981E08EB9089588236B -:1006300039F488E493E09093A1008093A00008959A -:1006400085E693E09093A1008093A000089592B76F -:1006500082B7891B8C30E0F3089587B38C6287BB27 -:10066000C298C598F4DFC29AF2DFC2988091A000C8 -:100670009091A1008556934009F00895D3DF089525 -:1006800087B3837D87BB88B3837D88BB1DB80895FE -:100690000F931F93CF93C82F00E017E00CC0C398AF -:1006A000CC0F000FB4990F5FC59AD1DFC598CFDF8B -:1006B000115017FD04C0C7FFF2CFC39AF1CF802FAE -:1006C0009927CF911F910F9108958FB9779BFECFF6 -:1006D0008FB1992708951F93CF93CFE103C0C150E5 -:1006E000CF3F51F1E091A000F091A1008CEA099573 -:1006F000E091A000F091A10083E50995E091A000B0 -:10070000F091A10080E00995182FE091A000F091F0 -:10071000A10080E00995133591F01DB8C59A97DFC7 -:10072000C59895DF8091A0009091A10085569340D7 -:10073000B1F678DFC150B0F681E090E002C080E011 -:1007400090E0CF911F9108950F931F938C018170BA -:10075000880F880F880FE091A000F091A1008062BF -:100760000995C801892F99278695E091A000F091FD -:10077000A100099516950795E091A000F091A100C0 -:10078000802F0995E091A000F091A10080E00995EB -:1007900099271F910F9108950F931F93CF93DF9384 -:1007A000EC01062F142F8170880F880F880FE091BD -:1007B000A000F091A10080640995CE01892F9927AE -:1007C0008695E091A000F091A1000995CE01969543 -:1007D0008795E091A000F091A1000995E091A0001B -:1007E000F091A100802F09951123A9F00F3789F00E -:1007F0001EE102B7CE01A8DF8F3769F482B7801BF4 -:100800008D3310F002B711501123A1F781E090E071 -:1008100004C08FE08CD080E090E0DF91CF911F91F9 -:100820000F9108950F931F93CF93DF93EC01162F31 -:10083000E091A000F091A1008CE40995CE01892FF0 -:1008400099278695E091A000F091A1000995CE012D -:1008500096958795E091A000F091A1000995E0910F -:10086000A000F091A10080E009951F3F89F01EE1F2 -:1008700002B7CE0169DF8F3F69F482B7801B8D33E9 -:1008800010F002B711501123A1F781E090E004C0ED -:100890008FE04DD080E090E0DF91CF911F910F91DC -:1008A00008950F931F938C01E091A000F091A10097 -:1008B00080EA0995812F9927E091A000F091A1008D -:1008C0000995E091A000F091A100802F0995E09199 -:1008D000A000F091A10080E0099599271F910F9148 -:1008E0000895FF920F931F938C01F62EE091A000C4 -:1008F000F091A10080EC0995812F9927E091A0004B -:10090000F091A1000995E091A000F091A100802F45 -:100910000995E091A000F091A1008F2D09958EE13D -:1009200006D080E090E01F910F91FF900895382F3E -:1009300020E0231740F492B782B7891B8C33E0F391 -:100940002F5F2317C0F308951F93CF93DF93EC011C -:1009500010E089818130A1F0823009F472C08330C7 -:1009600009F472C0843091F0873009F450C08530AA -:1009700009F4AAC0863039F1883009F0A9C086C0D0 -:100980009A9B812F54DE69DEA998A2C08B8199279A -:10099000982F88272A813327822B932B90938900C5 -:1009A000809388008F819927982F88272E8133275D -:1009B000822B932B90937E0080937D0082E0809326 -:1009C0007F001FEF85C08B819927982F88272A8168 -:1009D0003327822B932B90938900809388009C81EE -:1009E00090938A008D8180938B0080FF02C090934A -:1009F0008C008F819927982F88272E813327822B6F -:100A0000932B90937E0080937D0081E0D8CF8B81E3 -:100A10009927982F88272A813327822B932B90930D -:100A20008900809388008F819927982F88272E81AD -:100A30003327822B932B90937E0080937D0083E05D -:100A4000BECF1EDEA99A44C0E091A000F091A100A3 -:100A50008A81099580938000E091A000F091A10027 -:100A60008B81099580938100E091A000F091A10015 -:100A70008C81099580938200E091A000F091A10003 -:100A80008D8109958093830014E022C08B81992782 -:100A9000982F88272A813327822B932B90938900C4 -:100AA0008093880010938A0010938B008F81992780 -:100AB000982F88272E813327822B932B90937E00AB -:100AC00080937D0084E07BCF06DE8093800011E080 -:100AD00080E890E090939D0080939C00812F99275F -:100AE000DF91CF911F910895EF92FF921F93CF93C3 -:100AF0007C01162F90917F00892F8250823050F513 -:100B0000C0E0C617C0F01FC0809188009091890096 -:100B1000C8DEF701EC0FF11D808380918800909171 -:100B2000890001969093890080938800CF5FC11758 -:100B300050F490917F00923039F780918800909125 -:100B4000890002DEE6CF183010F410927F00812F6A -:100B5000992702C08FEF90E0CF911F91FF90EF9007 -:100B60000895CF92DF92EF92FF920F931F93CF934E -:100B7000DF936C01062F40917F00413019F0443023 -:100B800009F073C010E01017F0F16CC080918A007A -:100B9000882309F046C0C12FDD27FE01EC0DFD1DA5 -:100BA00060818091880090918900F6DD80917D00C0 -:100BB00090917E00019790937E0080937D00892B19 -:100BC000A1F410927F0080918B0081FF0EC0909164 -:100BD0008C0080918A00981741F0CC0DDD1D688152 -:100BE00080918800909189001DDE8091880090910D -:100BF0008900019690938900809388001F5F1017E9 -:100C000088F540917F00413009F2C12FDD27FE01B8 -:100C1000EC0DFD1D6081809188009091890061DE5E -:100C2000C5CFC12FDD277E01EC0CFD1C40E0F70194 -:100C300060818091880090918900AEDD80918C0068 -:100C4000815080938C00882309F0B0CFF701608138 -:100C50008091880090918900E5DD80918A008093E1 -:100C60008C00A4CF80E090E002C08FEF90E0DF9195 -:100C7000CF911F910F91FF90EF90DF90CF9008954B -:100C8000CFE5D4E0DEBFCDBF12BA18BA8BEF81BB7F -:100C900017BA93E094BB8EEF85BB93BF81E0C7DCAE -:0A0CA00015DB789481DA80DAFDCFCD -:040CAA005AD2FFFF1C -:00000001FF diff --git a/bin/firmware/usbasp.2005-11-14.hex b/bin/firmware/usbasp.2005-11-14.hex new file mode 100644 index 000000000..e790d5c88 --- /dev/null +++ b/bin/firmware/usbasp.2005-11-14.hex @@ -0,0 +1,209 @@ +:100000003BC072C153C052C051C050C04FC04EC05F +:100010004DC04CC04BC04AC049C048C047C046C094 +:1000200045C044C043C00E03550053004200610068 +:10003000730070001C037700770077002E006600C5 +:1000400069007300630068006C002E0064006500A6 +:1000500004030904090212000101008019090400C7 +:1000600000000000000012010101FF000008EB0386 +:10007000B4C700010102000111241FBECFE5D4E086 +:10008000DEBFCDBF10E0A0E6B0E0EEEEFCE002C0C7 +:1000900005900D92A436B107D9F710E0A4E6B0E0C0 +:1000A00001C01D92A33AB107E1F70CC6A9CF1F9377 +:1000B000CF93FC0180919C008D3269F080917A0091 +:1000C00087FD04C0CF0166D58F3F71F010926300A9 +:1000D00010927A0066C0C0E010E8683061F0C0930A +:1000E000630010937A005DC08EE180938E0082E001 +:1000F0008093620056C080818076F9F427E930E071 +:10010000C093970081818823A1F08530E9F0863083 +:10011000F9F0883061F18A3071F130939E002093BC +:100120009D0087818823D9F686818C17C0F6C82F59 +:10013000D6CFC0939800C2E0F0CFC681CF0104D4DF +:100140008F3FA9F710E0CBCF828180937B00E5CF72 +:1001500010EC8381813089F0823099F08330E9F6A8 +:100160008281882391F4C4E020E530E0D6CFC1E05D +:10017000C0939700D2CFC1E0D0CFC2E126E630E0F5 +:10018000CCCFC2E124E530E0C8CF813031F08230FD +:1001900021F6CEE026E230E0C0CFCCE124E330E02F +:1001A000BCCFCF911F910895CF9360919F0066239C +:1001B00051F0635067FD05C080919A009927019620 +:1001C00076DF10929F008091620087FD1AC086B38F +:1001D000837019F010927C0077C080917C00882396 +:1001E00009F072C094E686B3837009F06DC0915037 +:1001F000D1F781E080937C009093990090937B00ED +:1002000063C0809163008F3F31F12BE490917A00BD +:1002100090FD23EC9F5F90937A0020938E00682FCF +:10022000893008F068E0861B80936300AFE8B0E097 +:1002300097FD30C0662349F560E070E0C62F693055 +:10024000A0F08EE180938E0092E08FEF80936300A8 +:1002500090936200BCCF80917B00882309F4B7CFD4 +:100260008093990010927B00B2CF8FE890E0C1D1CB +:10027000EC2FFF27E257FF4F818392839C2F9C5FD7 +:10028000C83018F390936200A2CFCD0146D4682FF6 +:100290007727D4CFE0919D00F0919E0096FF0DC08E +:1002A000962F03C084918D9331969150D8F7F09397 +:1002B0009E00E0939D007727C1CF962F02C08191C9 +:1002C0008D939150E0F7F3CFCF91089584E690E0BD +:1002D00080939B000B9680939A0085B7836085BFBF +:1002E0008BB780648BBF08950F930FB70F93B09BAC +:1002F000FECFB09B06C0B09B04C0B09B02C0000004 +:1003000000C01F933F932F9331E012E006B31027F4 +:1003100010FD32E0102F3A95C9F700FDE4C006B396 +:10032000102717952FE72795DF9316B30127079519 +:100330002795CF93C0919B0006B31027179527955B +:100340003BE0DD274F9316B30127079527954FEF25 +:10035000000055C0B09BFECFB09B06C0B09B04C050 +:10036000B09B02C0000000C0DF9100C0CDCF16B32B +:10037000137079F1407C2C6F13C006B3037049F100 +:1003800041782C6F15C0037021F1102F2C6F06B32C +:1003900019C006B30370E9F04E7F2C6F18C038F314 +:1003A00006B30370B1F0102717952795243028F372 +:1003B00016B3012707952795422749934FEF06B3B8 +:1003C000243008F3102717952795243010F316B31F +:1003D0001370E1F10127079527952430F0F006B35B +:1003E0000370A1F11027179527952430E0F016B37C +:1003F0000127079527953A9541F12430D0F006B3AF +:10040000037021F11027179527952430C0F016B3FB +:100410000127079527952430C2CF16B31370B1F08A +:100420004C7F2C6FDCCF06B3037081F0487F2C6FBC +:10043000DECF16B3137051F0407F2C6FE0CF06B3C0 +:10044000037021F0407E2C6FE2CF3AC03C2FC09168 +:100450009B003C1B00E433300ABF90F108811981F6 +:10046000412F1F77209199000D3271F1013E61F10A +:100470000936B9F0033C11F00B3411F51091A000CE +:100480001123F1F000919F000030B1F530939F00EF +:1004900010939C0000919A00C0939A0000939B00D7 +:1004A0002EC0121769F4309162003F3F29F10FEF1F +:1004B00000936200CEE8D0E025C000270093A000A2 +:1004C0004F91CF91DF910FC01217B9F70093A000A1 +:1004D0000FEF00936300009362004F91CF910AB732 +:1004E00006FD38CFDF9100E40ABF2F913F911F91A5 +:1004F0000F910FBF0F911895C0E6D0E002C0C1E682 +:10050000D0E032E05F9308B30C7F016008BB53E09A +:1005100017B3136017BB20E80FC0052710E008BB16 +:1005200010C0052710E0089408BB13C0052710E091 +:1005300015C0052710E019C020FF052708BB279527 +:1005400017951C3F50F720FF0527279508BB1795E7 +:100550001C3F38F720FF05272795179508BB1C3F40 +:1005600028F720FF0527279517951C3F08BB08F79C +:1005700000C0499120FF052708BB279517951C3F10 +:1005800048F520FF0527279508BB17951C3F30F538 +:1005900020FF05272795179508BB1C3F20F520FF56 +:1005A0000527279517951C3F08BB00F5242F3A9582 +:1005B00019F60C7F5F9108BB34E03A95F1F70160C2 +:1005C00017B31C7F08BB0C7F4F91CF9117BB08BBA3 +:1005D000DF9189CF052710E008BBD1CF052710E0B8 +:1005E000089408BBD4CF052710E0D6CF052710E02C +:1005F000DACFA82FB92F8FEF9FEF41E050EA61507B +:1006000070F02D9138E0722F782796958795269572 +:1006100070FF02C0842795273A95A9F7F0CF8095FF +:100620009095089582E58DB981E08EB9089588236B +:1006300039F488E493E09093A2008093A100089598 +:1006400085E693E09093A2008093A100089592B76D +:1006500082B7891B8C30E0F3089587B38C6287BB27 +:10066000C298C598F4DFC29AF2DFC2988091A100C7 +:100670009091A2008556934009F00895D3DF089524 +:1006800087B3837D87BB88B3837D88BB1DB80895FE +:100690000F931F93CF93C82F00E017E00CC0C398AF +:1006A000CC0F000FB4990F5FC59AD1DFC598CFDF8B +:1006B000115017FD04C0C7FFF2CFC39AF1CF802FAE +:1006C0009927CF911F910F9108958FB9779BFECFF6 +:1006D0008FB1992708951F93CF93CFE103C0C150E5 +:1006E000CF3F51F1E091A100F091A2008CEA099571 +:1006F000E091A100F091A20083E50995E091A100AD +:10070000F091A20080E00995182FE091A100F091EE +:10071000A20080E00995133591F01DB8C59A97DFC6 +:10072000C59895DF8091A1009091A20085569340D5 +:10073000B1F678DFC150B0F681E090E002C080E011 +:1007400090E0CF911F9108950F931F938C018170BA +:10075000880F880F880FE091A100F091A2008062BD +:100760000995C801892F99278695E091A100F091FC +:10077000A200099516950795E091A100F091A200BD +:10078000802F0995E091A100F091A20080E00995E9 +:1007900099271F910F9108950F931F93CF93DF9384 +:1007A000EC01062F142F8170880F880F880FE091BD +:1007B000A100F091A20080640995CE01892F9927AC +:1007C0008695E091A100F091A2000995CE01969541 +:1007D0008795E091A100F091A2000995E091A10018 +:1007E000F091A200802F09951123A9F00F3789F00D +:1007F0001EE102B7CE01A8DF8F3769F482B7801BF4 +:100800008D3310F002B711501123A1F781E090E071 +:1008100004C08FE08CD080E090E0DF91CF911F91F9 +:100820000F9108950F931F93CF93DF93EC01162F31 +:10083000E091A100F091A2008CE40995CE01892FEE +:1008400099278695E091A100F091A2000995CE012B +:1008500096958795E091A100F091A2000995E0910D +:10086000A100F091A20080E009951F3F89F01EE1F0 +:1008700002B7CE0169DF8F3F69F482B7801B8D33E9 +:1008800010F002B711501123A1F781E090E004C0ED +:100890008FE04DD080E090E0DF91CF911F910F91DC +:1008A00008950F931F938C01E091A100F091A20095 +:1008B00080EA0995812F9927E091A100F091A2008B +:1008C0000995E091A100F091A200802F0995E09197 +:1008D000A100F091A20080E0099599271F910F9146 +:1008E0000895FF920F931F938C01F62EE091A100C3 +:1008F000F091A20080EC0995812F9927E091A10049 +:10090000F091A2000995E091A100F091A200802F42 +:100910000995E091A100F091A2008F2D09958EE13B +:1009200006D080E090E01F910F91FF900895382F3E +:1009300020E0231740F492B782B7891B8C33E0F391 +:100940002F5F2317C0F308951F93CF93DF93EC011C +:1009500010E089818130A1F0823009F489C08330B0 +:1009600009F489C0843091F0873009F467C085307C +:1009700009F4C3C0863039F1883009F0C2C09DC087 +:100980009A9B812F54DE69DEA998BBC08B81992781 +:10099000982F88272A813327822B932B90938900C5 +:1009A000809388008F819927982F88272E8133275D +:1009B000822B932B90937E0080937D0082E0809326 +:1009C0007F001FEF9EC08B819927982F88272A814F +:1009D0003327822B932B90938900809388008C81FE +:1009E000482F552750938B0040938A002D812F70FC +:1009F00020938C008D819927807F907082959295AD +:100A0000907F9827807F9827840F951F90938B0065 +:100A100080938A0020FF04C080918A0080938D001B +:100A20008F819927982F88272E813327822B932B0C +:100A300090937E0080937D0081E0C1CF8B819927C8 +:100A4000982F88272A813327822B932B9093890014 +:100A5000809388008F819927982F88272E813327AC +:100A6000822B932B90937E0080937D0083E0A7CF11 +:100A700007DEA99A46C0E091A100F091A2008A8108 +:100A8000099580938000E091A100F091A2008B81F4 +:100A9000099580938100E091A100F091A2008C81E2 +:100AA000099580938200E091A100F091A2008D81D0 +:100AB00009958093830014E024C08B819927982F97 +:100AC00088272A813327822B932B90938900809348 +:100AD000880010928B0010928A0010938C008F81F6 +:100AE0009927982F88272E813327822B932B909339 +:100AF0007E0080937D0084E062CFEDDD80938000F6 +:100B000011E080E890E090939E0080939D00812FFB +:100B10009927DF91CF911F910895EF92FF921F9334 +:100B2000CF937C01162F90917F00892F82508230C5 +:100B300050F5C0E0C617C0F01FC0809188009091AA +:100B40008900AFDEF701EC0FF11D808380918800F2 +:100B50009091890001969093890080938800CF5FDF +:100B6000C11750F490917F00923039F7809188003E +:100B700090918900E9DDE6CF183010F410927F00E3 +:100B8000812F992702C08FEF90E0CF911F91FF90A6 +:100B9000EF900895CF92DF92EF92FF920F931F9301 +:100BA000CF93DF936C01062F40917F00413019F005 +:100BB000443009F07CC010E0101708F445C074C040 +:100BC00080918A0090918B00892B09F04CC0C12F35 +:100BD000DD27FE01EC0DFD1D608180918800909164 +:100BE0008900DADD80917D0090917E0001979093DD +:100BF0007E0080937D00892BC9F410927F00809144 +:100C00008C0081FF13C080918D00282F33278091A5 +:100C10008A0090918B002817390741F0CC0DDD1D1B +:100C200068818091880090918900FCDD8091880026 +:100C300090918900019690938900809388001F5FAE +:100C4000101790F540917F00413009F4B9CFC12FC2 +:100C5000DD27FE01EC0DFD1D6081809188009091E3 +:100C600089003FDEBFCFC12FDD277E01EC0CFD1CCC +:100C700040E0F701608180918800909189008CDDCF +:100C800080918D00815080938D00882309F0AACF38 +:100C9000F70160818091880090918900C3DD809187 +:100CA0008A0080938D009ECF80E090E002C08FEF9D +:100CB00090E0DF91CF911F910F91FF90EF90DF9027 +:100CC000CF900895CFE5D4E0DEBFCDBF12BA18BAF9 +:100CD0008BEF81BB17BA93E094BB8EEF85BB93BFBC +:0E0CE00081E0A5DCF3DA78945FDA5EDAFDCF0E +:040CEE005AD2FFFFD8 +:00000001FF diff --git a/bin/win-avrdude/avrdude.conf b/bin/win-avrdude/avrdude.conf index a74de19e2..10d4ca681 100644 --- a/bin/win-avrdude/avrdude.conf +++ b/bin/win-avrdude/avrdude.conf @@ -1,4 +1,4 @@ -# $Id: avrdude.conf.in,v 1.36 2004/12/22 01:30:30 bdean Exp $ +# $Id: avrdude.conf.in,v 1.58 2005/09/18 00:44:20 bdean Exp $ # # AVRDUDE Configuration File # @@ -15,7 +15,7 @@ # programmer # id = [, [, ] ...] ; # are quoted strings # desc = ; # quoted string -# type = par | stk500 | avr910; # programmer type +# type = par | stk500 | stk500v2 | avr910 | jtagmkii; # programmer type # baudrate = ; # baudrate for avr910-programmer # vcc = [, ... ] ; # pin number(s) # reset = ; # pin number @@ -31,16 +31,45 @@ # part # id = ; # quoted string # desc = ; # quoted string +# has_jtag = ; # part has JTAG i/f # devicecode = ; # deprecated, use stk500_devcode # stk500_devcode = ; # numeric # avr910_devcode = ; # numeric # chip_erase_delay = ; # micro-seconds -# pagel = ; # pin name in hex, i.e., 0xD7 -# bs2 = ; # pin name in hex, i.e., 0xA0 # 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 = ; +# cmdexdelay = ; +# synchloops = ; +# bytedelay = ; +# pollvalue = ; +# pollindex = ; +# predelay = ; +# postdelay = ; +# pollmethod = ; +# mode = ; +# delay = ; +# blocksize = ; +# readsize = ; +# # JTAG ICE mkII parameters, also from XML files +# allowfullpagebitstream = ; +# enablepageprogramming = ; +# idr = ; # IO addr of IDR (OCD) reg. +# rampz = ; # IO addr of RAMPZ reg. +# spmcr = ; # mem addr of SPMC[S]R reg. +# eecr = ; # mem addr of EECR reg. +# # (only when != 0x3c) +# # memory # paged = ; # yes / no # size = ; # bytes @@ -183,8 +212,8 @@ # # Overall avrdude defaults # -default_parallel = "/dev/parport0"; -default_serial = "/dev/ttyS0"; +default_parallel = "lpt1"; +default_serial = "com1"; # @@ -209,9 +238,9 @@ programmer ; programmer - id = "usbasp"; - desc = "usbasp"; - type = usbasp; + id = "avrispv2"; + desc = "Atmel AVR ISP V2"; + type = stk500v2; ; programmer @@ -221,18 +250,73 @@ programmer ; programmer + id = "stk500v2"; + desc = "Atmel STK500 V2"; + type = stk500v2; +; + +programmer id = "avr910"; desc = "Atmel Low Cost Serial Programmer"; type = avr910; ; programmer + id = "usbasp"; + desc = "usbasp"; + type = usbasp; +; + +programmer id = "butterfly"; desc = "Atmel Butterfly Development Board"; type = butterfly; ; programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = butterfly; +; + +programmer + id = "avr911"; + desc = "Atmel AppNote AVR911 AVROSP"; + type = butterfly; +; + +programmer + id = "jtagmkII"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# easier to type +programmer + id = "jtag2slow"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# JTAG ICE mkII @ 115200 Bd +programmer + id = "jtag2fast"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +# make the fast one the default, people will love that +programmer + id = "jtag2"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +programmer id = "pavr"; desc = "Jason Kyle's pAVR Serial Programmer"; type = avr910; @@ -363,6 +447,62 @@ programmer ; +programmer + id = "dapa"; + desc = "Direct AVR Parallel Access cable"; + type = par; + vcc = 3; + reset = 16; + sck = 1; + mosi = 2; + miso = 11; +; + + +# +# some ultra cheap programmers use bitbanging on the +# serialport. +# + +# serial ponyprog design (dasa2 in uisp) +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "ponyser"; + desc = "serial port banging, design ponyprog serial"; + type = serbb; + reset = ~3; + sck = 6; + mosi = 4; + miso = 7; +; + +# unknown (dasa in uisp) +# reset=rts sck=dtr mosi=txd miso=cts + +programmer + id = "dasa"; + desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; + type = serbb; + reset = 6; + sck = 4; + mosi = 3; + miso = 7; +; + +# unknown (dasa3 in uisp) +# reset=!dtr sck=rts mosi=txd miso=cts + +programmer + id = "dasa3"; + desc = "serial port banging, reset=!dtr sck=rts mosi=txd miso=cts"; + type = serbb; + reset = ~4; + sck = 6; + mosi = 3; + miso = 7; +; + # # PART DEFINITIONS # @@ -383,6 +523,17 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + memory "eeprom" size = 64; min_write_delay = 9000; @@ -394,6 +545,11 @@ part 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" @@ -421,6 +577,11 @@ part " 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" @@ -469,6 +630,17 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + memory "eeprom" size = 64; min_write_delay = 4000; @@ -480,6 +652,11 @@ part 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"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; ; memory "flash" @@ -515,6 +692,11 @@ part " 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" @@ -584,6 +766,17 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + memory "eeprom" size = 64; min_write_delay = 8200; @@ -595,6 +788,11 @@ part 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" @@ -622,6 +820,11 @@ part " 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" @@ -655,7 +858,6 @@ part ; ; - #------------------------------------------------------------ # AT90s1200 #------------------------------------------------------------ @@ -674,6 +876,17 @@ part 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; + memory "eeprom" size = 64; min_write_delay = 4000; @@ -685,6 +898,11 @@ part 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; @@ -711,6 +929,11 @@ part " 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; @@ -755,6 +978,17 @@ part 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; + memory "eeprom" size = 256; min_write_delay = 9000; @@ -766,6 +1000,11 @@ part 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; @@ -792,6 +1031,11 @@ part " 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; @@ -816,6 +1060,17 @@ part 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; + memory "eeprom" size = 128; min_write_delay = 4000; @@ -827,6 +1082,11 @@ part 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; @@ -853,6 +1113,11 @@ part " 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; @@ -872,6 +1137,7 @@ part part id = "2333"; +##### WARNING: No XML file for device 'AT90S2333'! ##### desc = "AT90S2333"; stk500_devcode = 0x42; avr910_devcode = 0x34; @@ -950,7 +1216,7 @@ part #------------------------------------------------------------ -# AT90s2343 +# AT90s2343 (also AT90s2323 and ATtiny22) #------------------------------------------------------------ part @@ -965,6 +1231,17 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + memory "eeprom" size = 128; min_write_delay = 9000; @@ -976,6 +1253,11 @@ part 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; @@ -1002,6 +1284,11 @@ part " 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; @@ -1047,6 +1334,17 @@ part 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; + memory "eeprom" size = 256; min_write_delay = 9000; @@ -1058,6 +1356,11 @@ part 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; @@ -1084,6 +1387,11 @@ part " 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; @@ -1119,6 +1427,7 @@ part part id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### desc = "AT90S4434"; stk500_devcode = 0x52; avr910_devcode = 0x6c; @@ -1210,6 +1519,17 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + memory "eeprom" size = 512; min_write_delay = 4000; @@ -1221,6 +1541,11 @@ part 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; @@ -1247,6 +1572,11 @@ part " 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; @@ -1285,6 +1615,17 @@ part 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; + memory "eeprom" size = 512; min_write_delay = 9000; @@ -1296,6 +1637,11 @@ part 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; @@ -1322,6 +1668,11 @@ part " 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; @@ -1360,12 +1711,23 @@ part 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; + memory "eeprom" size = 4096; min_write_delay = 4000; max_write_delay = 9000; - readback_p1 = 0x00; - readback_p2 = 0xff; + 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", @@ -1375,6 +1737,11 @@ part " 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" @@ -1410,6 +1777,11 @@ part "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" @@ -1445,6 +1817,7 @@ part part id = "m64"; desc = "ATMEGA64"; + has_jtag = yes; stk500_devcode = 0xA0; chip_erase_delay = 9000; pagel = 0xD7; @@ -1456,6 +1829,21 @@ part 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; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -1464,15 +1852,20 @@ part max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; - read = " 1 0 1 0 0 0 0 0", + 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", + 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" @@ -1494,6 +1887,7 @@ part " a7 a6 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", @@ -1508,6 +1902,11 @@ part " 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" @@ -1569,6 +1968,7 @@ part part id = "m128"; desc = "ATMEGA128"; + has_jtag = yes; stk500_devcode = 0xB2; avr910_devcode = 0x43; chip_erase_delay = 9000; @@ -1581,6 +1981,22 @@ part 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; + + idr = 0x22; + spmcr = 0x68; + rampz = 0x3b; + allowfullpagebitstream = yes; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -1589,15 +2005,20 @@ part max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; - read = " 1 0 1 0 0 0 0 0", + 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", + 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" @@ -1633,6 +2054,11 @@ part "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" @@ -1672,9 +2098,9 @@ part ; memory "calibration" - size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", - "0 0 0 0 0 0 0 0 o o o o o o o o"; + size = 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" @@ -1691,6 +2117,7 @@ part part id = "c128"; desc = "AT90CAN128"; + has_jtag = yes; stk500_devcode = 0xB3; # avr910_devcode = 0x43; chip_erase_delay = 9000; @@ -1703,6 +2130,23 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + memory "eeprom" paged = no; /* leave this "no" */ page_size = 8; /* for parallel programming */ @@ -1720,6 +2164,11 @@ part " 0 0 0 x a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; ; memory "flash" @@ -1755,6 +2204,11 @@ part "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" @@ -1814,6 +2268,7 @@ part part id = "m16"; desc = "ATMEGA16"; + has_jtag = yes; stk500_devcode = 0x82; avr910_devcode = 0x74; pagel = 0xd7; @@ -1825,7 +2280,24 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ size = 512; min_write_delay = 9000; max_write_delay = 9000; @@ -1840,6 +2312,11 @@ part " 0 0 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 = 10; + blocksize = 128; + readsize = 256; ; memory "flash" @@ -1875,6 +2352,11 @@ part " 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" @@ -1912,21 +2394,66 @@ part #------------------------------------------------------------ -# ATmega162 +# ATmega164 #------------------------------------------------------------ +# close to ATmega16 + part - id = "m162"; - desc = "ATMEGA162"; - stk500_devcode = 0x83; + id = "m164"; + desc = "ATMEGA164"; + has_jtag = yes; +# stk500_devcode = 0x82; # 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", "x x x x x x x x x x x x x x x x"; chip_erase = "1 0 1 0 1 1 0 0 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; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + memory "flash" paged = yes; size = 16384; @@ -1936,7 +2463,6 @@ part 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", @@ -1961,190 +2487,201 @@ part " 0 0 a13 a12 a11 a10 a9 a8", " a7 a6 x x x x x x", " x x x x x x x x"; - ; - memory "eeprom" - size = 512; - min_write_delay = 9000; - max_write_delay = 9000; - readback_p1 = 0xff; - readback_p2 = 0xff; + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; - 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"; + 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 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"; - ; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; memory "lfuse" size = 1; - min_write_delay = 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 i i i i 1"; + "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", + 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 x x x x x x", + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; ; -; - + ; #------------------------------------------------------------ -# ATmega163 +# ATmega324 #------------------------------------------------------------ +# similar to ATmega164 + part - id = "m163"; - desc = "ATMEGA163"; - stk500_devcode = 0x81; - avr910_devcode = 0x64; - chip_erase_delay = 32000; + id = "m324"; + desc = "ATMEGA324"; + has_jtag = yes; +# stk500_devcode = 0x82; # 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", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; - memory "eeprom" - size = 512; - min_write_delay = 4000; - max_write_delay = 4000; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 1 0 1 0 0 0 0 0", - " x x x x x x x a8", + " 0 0 x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " x x x x x x x a8", + " 0 0 x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; ; memory "flash" paged = yes; - size = 16384; - page_size = 128; + size = 32768; + page_size = 256; num_pages = 128; - min_write_delay = 16000; - max_write_delay = 16000; + min_write_delay = 4500; + max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", - " x x x a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " x x x a12 a11 a10 a9 a8", + " 0 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " 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", - " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " 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", - " x x x a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", " x x x x x x x x"; + + mode = 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"; ; 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"; + "x x x x x x x x o o o o o o o o"; write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i 1 1 i i i i"; + "x x x x x x x x i i i i i i i i"; ; memory "hfuse" 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"; + "x x x x x x x x o o o o o o o o"; write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", - "x x x x x x x x 1 1 1 1 1 i i i"; + "x x x x x x x x i i i i i i i i"; ; - memory "lock" + memory "efuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x 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"; + read = "0 1 0 1 0 0 0 0 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 "signature" @@ -2155,82 +2692,125 @@ part memory "calibration" size = 1; - read = "0 0 1 1 1 0 0 0 x x x x x x x x", + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + ; ; + #------------------------------------------------------------ -# ATmega169 +# ATmega644 #------------------------------------------------------------ +# similar to ATmega164 + part - id = "m169"; - desc = "ATMEGA169"; - stk500_devcode = 0x85; - avr910_devcode = 0x75; + id = "m644"; + desc = "ATMEGA644"; + has_jtag = yes; +# stk500_devcode = 0x82; # 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", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; - memory "eeprom" - size = 512; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; min_write_delay = 9000; max_write_delay = 9000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 1 0 1 0 0 0 0 0", - " x x x x x x x a8", + " 0 0 x x a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " x x x x x x x a8", + " 0 0 x x a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; ; memory "flash" paged = yes; - size = 16384; - page_size = 128; - num_pages = 128; + size = 65536; + page_size = 256; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", - " x x x a12 a11 a10 a9 a8", + "a15 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; read_hi = " 0 0 1 0 1 0 0 0", - " x x x a12 a11 a10 a9 a8", + "a15 a14 a13 a12 a11 a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " 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", - " x x x x x x x x", - " x x a5 a4 a3 a2 a1 a0", + " 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", - " x x x a12 a11 a10 a9 a8", - " a7 a6 x x x x x x", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", " x x x x x x x x"; + + mode = 0x21; + delay = 6; + 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"; ; 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"; @@ -2240,8 +2820,6 @@ part 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"; @@ -2251,83 +2829,60 @@ part memory "efuse" size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x x x x x i i i x"; read = "0 1 0 1 0 0 0 0 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"; + write = "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 "signature" size = 3; - read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + read = "0 0 1 1 0 0 0 0 x x x x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; memory "calibration" size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", "0 0 0 0 0 0 0 0 o o o o o o o o"; - ; + ; ; + #------------------------------------------------------------ -# ATmega32 +# ATmega162 #------------------------------------------------------------ part - id = "m32"; - desc = "ATMEGA32"; - stk500_devcode = 0x91; - avr910_devcode = 0x72; + id = "m162"; + desc = "ATMEGA162"; + has_jtag = yes; + stk500_devcode = 0x83; chip_erase_delay = 9000; - pagel = 0xd7; - bs2 = 0xa0; - reset = dedicated; + + 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 0 0 0 0 0", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", "x x x x x x x x x x x x x x x x"; - 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"; - ; memory "flash" paged = yes; - size = 32768; + size = 16384; page_size = 128; - num_pages = 256; + num_pages = 128; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; + 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", @@ -2354,62 +2909,116 @@ part " x x x 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; + + 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"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + memory "lfuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + 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 = 2000; - max_write_delay = 2000; + 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 = 2000; - max_write_delay = 2000; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", "x x x x x x x x x x o o o o o o"; write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", "x x x x x x x x 1 1 i i i i i i"; - ; + ; memory "signature" size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; + + read = "0 0 1 1 0 0 0 0 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"; - ; - ; + ; +; + + #------------------------------------------------------------ -# ATmega161 +# ATmega163 #------------------------------------------------------------ part - id = "m161"; - desc = "ATMEGA161"; - stk500_devcode = 0x80; - avr910_devcode = 0x60; - chip_erase_delay = 28000; + id = "m163"; + desc = "ATMEGA163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + 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", @@ -2419,8 +3028,8 @@ part "x x x x x x x x x x x x x x x x"; memory "eeprom" size = 512; - min_write_delay = 3400; - max_write_delay = 3400; + min_write_delay = 4000; + max_write_delay = 4000; readback_p1 = 0xff; readback_p2 = 0xff; read = " 1 0 1 0 0 0 0 0", @@ -2439,8 +3048,8 @@ part size = 16384; page_size = 128; num_pages = 128; - min_write_delay = 14000; - max_write_delay = 14000; + min_write_delay = 16000; + max_write_delay = 16000; readback_p1 = 0xff; readback_p2 = 0xff; read_lo = " 0 0 1 0 0 0 0 0", @@ -2467,104 +3076,151 @@ part " 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 "fuse" + memory "lfuse" size = 1; min_write_delay = 2000; max_write_delay = 2000; - read = "0 1 0 1 0 0 0 0 x x x x x x x x", - "x x x x x x x x x o x o o o o o"; + read = "0 1 0 1 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 x x x x x", - "x x x x x x x x 1 i 1 i i i i i"; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; ; - memory "lock" + memory "hfuse" size = 1; min_write_delay = 2000; max_write_delay = 2000; - read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x x x o o o o o o"; + read = "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 1 1 x x x x x", + write = "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"; + ; + ; #------------------------------------------------------------ -# ATmega8 +# ATmega169 #------------------------------------------------------------ part - id = "m8"; - desc = "ATMEGA8"; - stk500_devcode = 0x70; - avr910_devcode = 0x76; - pagel = 0xd7; - bs2 = 0xc2; + id = "m169"; + desc = "ATMEGA169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x75; chip_erase_delay = 9000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + idr = 0x31; + spmcr = 0x57; - memory "eeprom" + 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 x a8", + " x x x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 x x x x x a8", + " x x x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; ; + memory "flash" paged = yes; - size = 8192; - page_size = 64; + size = 16384; + page_size = 128; num_pages = 128; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; loadpage_lo = " 0 1 0 0 0 0 0 0", - " 0 0 0 0 x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 0 x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; ; memory "lfuse" @@ -2589,6 +3245,15 @@ part "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; @@ -2600,86 +3265,112 @@ part "x x x x x x x x 1 1 i i i i i i"; ; - memory "calibration" - size = 4; - read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", - "0 0 0 0 0 0 a1 a0 o o o o o o o o"; - ; - memory "signature" size = 3; - read = "0 0 1 1 0 0 0 0 x x x x x x x x", + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", "x x x x x x a1 a0 o o o o o o o o"; ; - ; - + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; #------------------------------------------------------------ -# ATmega8515 +# ATmega329 #------------------------------------------------------------ part - id = "m8515"; - desc = "ATMEGA8515"; - stk500_devcode = 0x63; - avr910_devcode = 0x3A; + 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; chip_erase_delay = 9000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + idr = 0x31; + spmcr = 0x57; - memory "eeprom" - size = 512; + 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 x a8", + 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", - " 0 0 x x x x x a8", + 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"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; ; + memory "flash" paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; + size = 32768; + page_size = 128; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + 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", - " 0 0 0 0 x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 0 x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; ; memory "lfuse" @@ -2704,6 +3395,15 @@ part "x x x x x x x x i i i i i i i i"; ; + 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 x x x x i i i x"; + ; + memory "lock" size = 1; min_write_delay = 4500; @@ -2715,94 +3415,120 @@ part "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 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", + 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"; + ; + ; #------------------------------------------------------------ -# ATmega8535 +# ATmega3290 #------------------------------------------------------------ +# identical to ATmega329 + part - id = "m8535"; - desc = "ATMEGA8535"; - stk500_devcode = 0x64; - pagel = 0xd7; - bs2 = 0xa0; + id = "m3290"; + desc = "ATMEGA3290"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; chip_erase_delay = 9000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + idr = 0x31; + spmcr = 0x57; - memory "eeprom" - size = 512; + 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 x a8", + " x x x x x x a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 x x x x x a8", + " 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 = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; ; + memory "flash" paged = yes; - size = 8192; - page_size = 64; - num_pages = 128; + size = 32768; + page_size = 128; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + 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", - " 0 0 0 0 x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 0 x x x x", - " x x x a4 a3 a2 a1 a0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", " i i i i i i i i"; writepage = " 0 1 0 0 1 1 0 0", - " 0 0 0 0 a11 a10 a9 a8", - " a7 a6 a5 x x x x x", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; ; memory "lfuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + min_write_delay = 4500; + max_write_delay = 4500; read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", "x x x x x x x x o o o o o o o o"; @@ -2812,8 +3538,8 @@ part memory "hfuse" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + min_write_delay = 4500; + max_write_delay = 4500; read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; @@ -2821,10 +3547,19 @@ part "x x x x x x x x i i i i i i i i"; ; + 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 x x x x i i i x"; + ; + memory "lock" size = 1; - min_write_delay = 2000; - max_write_delay = 2000; + min_write_delay = 4500; + max_write_delay = 4500; read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", "x x x x x x x x x x o o o o o o"; @@ -2832,195 +3567,264 @@ part "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 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", + 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"; + ; + ; #------------------------------------------------------------ -# ATtiny26 +# ATmega649 #------------------------------------------------------------ part - id = "t26"; - desc = "ATTINY26"; - stk500_devcode = 0x21; - avr910_devcode = 0x5e; - pagel = 0xb3; - bs2 = 0xb2; - chip_erase_delay = 9000; - pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", - "x x x x x x x x x x x x x x x x"; + id = "m649"; + desc = "ATMEGA649"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", - "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + idr = 0x31; + spmcr = 0x57; - memory "eeprom" - size = 128; + 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 x x x", - "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - write = "1 1 0 0 0 0 0 0 x x x x x x x x", - "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; - ; + write = " 1 1 0 0 0 0 0 0", + " 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 = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; memory "flash" paged = yes; - size = 2048; - page_size = 32; - num_pages = 64; + 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 x x x x x a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " x 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", + "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 x x a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; - loadpage_hi = " 0 1 0 0 1 0 0 0", - " x x x x x x x x", - " x x x x a3 a2 a1 a0", - " i i i i i i i i"; + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 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 x x x a9 a8", - " a7 a6 a5 a4 x x x x", - " x x x x x x x x"; - ; + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; - 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"; - ; + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; - memory "lock" + memory "lfuse" size = 1; - read = "0 1 0 1 1 0 0 0 x x x x x x x x", - "x x x x x x x x x x x x x x o o"; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 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 1 1 1 1 1 i i", - "x x x x x x x x x x x x x x x x"; - ; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; - memory "lfuse" + memory "hfuse" size = 1; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", - "x x x x x x x x i i i i i i i i"; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", - "x x x x x x x x o o o o o o o o"; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; ; - memory "hfuse" + memory "efuse" 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 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; - read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", - "x x x x x x x x x x x o o o o o"; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i x"; ; - 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 "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"; + ; + ; #------------------------------------------------------------ -# ATmega48 +# ATmega6490 #------------------------------------------------------------ +# identical to ATmega649 + part - id = "m48"; - desc = "ATMEGA48"; - stk500_devcode = 0x59; -# avr910_devcode = 0x; - pagel = 0xd7; - bs2 = 0xc2; + id = "m6490"; + desc = "ATMEGA6490"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; chip_erase_delay = 9000; pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", "x x x x x x x x x x x x x x x x"; - chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + idr = 0x31; + spmcr = 0x57; - memory "eeprom" - size = 256; - min_write_delay = 3600; - max_write_delay = 3600; + 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 x x x", + " x x x x x a10 a9 a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 0 x x x x x", + " 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 = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; ; + memory "flash" paged = yes; - size = 4096; - page_size = 64; - num_pages = 64; + size = 65536; + page_size = 256; + num_pages = 256; min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; readback_p2 = 0xff; - read_lo = " 0 0 1 0 0 0 0 0", - " 0 0 0 0 0 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; - read_hi = " 0 0 1 0 1 0 0 0", - " 0 0 0 0 0 a10 a9 a8", - " a7 a6 a5 a4 a3 a2 a1 a0", - " o o o o o o o o"; + 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 x x a4 a3 a2 a1 a0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; loadpage_hi = " 0 1 0 0 1 0 0 0", - " 0 0 0 x x x x x", - " x x x a4 a3 a2 a1 a0", + " 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 0 0 0 0 a10 a9 a8", - " a7 a6 a5 x x x x x", + " 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" @@ -3047,19 +3851,22 @@ part 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 i i i i i i i i"; + "x x x x x x x x x x x x i i i x"; ; - memory "calibration" + memory "lock" 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"; + 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" @@ -3067,42 +3874,326 @@ part 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"; + ; + ; #------------------------------------------------------------ -# ATmega88 +# ATmega32 #------------------------------------------------------------ part - id = "m88"; - desc = "ATMEGA88"; - stk500_devcode = 0x73; -# avr910_devcode = 0x; - pagel = 0xd7; - bs2 = 0xc2; + id = "m32"; + desc = "ATMEGA32"; + has_jtag = yes; + stk500_devcode = 0x91; + avr910_devcode = 0x72; 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; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + 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 = 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"; + ; + ; + +#------------------------------------------------------------ +# ATmega161 +#------------------------------------------------------------ + +part + id = "m161"; + desc = "ATMEGA161"; + stk500_devcode = 0x80; + avr910_devcode = 0x60; + 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; + + 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; + 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; + memory "eeprom" size = 512; - min_write_delay = 3600; - max_write_delay = 3600; + 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 x a8", + " 0 0 x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " o o o o o o o o"; write = " 1 1 0 0 0 0 0 0", - " 0 0 0 x x x x a8", + " 0 0 x x x x x a8", " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; ; memory "flash" paged = yes; @@ -3112,7 +4203,7 @@ part min_write_delay = 4500; max_write_delay = 4500; readback_p1 = 0xff; - readback_p2 = 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", @@ -3124,12 +4215,12 @@ part " 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", + " 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 x x x x x", + " 0 0 0 0 x x x x", " x x x a4 a3 a2 a1 a0", " i i i i i i i i"; @@ -3137,12 +4228,17 @@ part " 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; + 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"; @@ -3152,8 +4248,8 @@ part memory "hfuse" size = 1; - min_write_delay = 4500; - max_write_delay = 4500; + min_write_delay = 2000; + max_write_delay = 2000; read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; @@ -3161,57 +4257,1147 @@ part "x x x x x x x x i i i i i i i i"; ; - memory "efuse" + memory "lock" 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", + 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; + 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; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 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"; + ; + + 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; + 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; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; - write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", - "x x x x x x x x i i i i i i i i"; - ; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "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 = 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"; + ; + + 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; + 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; + + 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"; + ; + + 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"; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x x x x i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x o o o o o"; + ; + + 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"; + ; + +; + + +#------------------------------------------------------------ +# ATmega48 +#------------------------------------------------------------ + +part + id = "m48"; + desc = "ATMEGA48"; + stk500_devcode = 0x59; +# avr910_devcode = 0x; + 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; + + memory "eeprom" + 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"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega88 +#------------------------------------------------------------ + +part + id = "m88"; + desc = "ATMEGA88"; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + 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; + + memory "eeprom" + 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"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATtiny2313 +#------------------------------------------------------------ + +part + id = "t2313"; + desc = "ATtiny2313"; + stk500_devcode = 0x23; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + 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; + + memory "eeprom" + size = 128; + 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"; + + 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"; + ; + + 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"; + ; + + 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"; + ; + + 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"; + ; +# The Tiny2313 has calibration data for both 4 MHz and 8 MHz. +# The information in the data sheet of April/2004 is wrong, this works: + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2 +#------------------------------------------------------------ + +part + id = "pwm2"; + desc = "AT90PWM2"; + stk500_devcode = 0x65; +## avr910_devcode = ?; + 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; + + memory "eeprom" + size = 512; + 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"; + + 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 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 0 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + 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"; + ; + + 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"; + ; + + 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"; + ; + + 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"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3 +#------------------------------------------------------------ + +# Completely identical to AT90PWM2 (including the signature!) + +part + id = "pwm3"; + desc = "AT90PWM3"; + stk500_devcode = 0x65; +## avr910_devcode = ?; + 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; + + memory "eeprom" + size = 512; + 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"; + + 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 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 0 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + 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"; + ; + + 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"; + ; - 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"; + 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"; - write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", - "x x x x x x x x 1 1 i i i i i i"; - ; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; - 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 "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; - memory "signature" - size = 3; - read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", - "x x x x x x a1 a0 o o o o o o o o"; - ; - ; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x 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"; + ; + ; #------------------------------------------------------------ -# ATtiny2313 +# ATtiny25 #------------------------------------------------------------ part - id = "t2313"; - desc = "ATtiny2313"; - stk500_devcode = 0x23; + id = "t25"; + desc = "ATtiny25"; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; ## avr910_devcode = ?; ## Try the AT90S2313 devcode: avr910_devcode = 0x20; - pagel = 0xD4; - bs2 = 0xD6; reset = io; - chip_erase_delay = 9000; + 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"; @@ -3219,6 +5405,17 @@ part chip_erase = "1 0 1 0 1 1 0 0 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; + memory "eeprom" size = 128; min_write_delay = 4000; @@ -3230,6 +5427,11 @@ part 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"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; ; memory "flash" paged = yes; @@ -3250,25 +5452,27 @@ part " 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. +# 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", @@ -3306,11 +5510,276 @@ part read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", "x x x x x x x x o o o o o o o o"; ; -# 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; + 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"; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + 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; + + memory "eeprom" + size = 256; + 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"; + + 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. + 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"; + ; + + 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"; + ; + + 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"; + ; + + 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"; + ; + + 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"; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + 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; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a8 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + 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"; + ; + + 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"; + ; + + 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"; + ; + + 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"; ; diff --git a/bin/win-avrdude/avrdude.exe b/bin/win-avrdude/avrdude.exe index a56404844989f5e8106dead7dfd5f575d739d504..93d867cb90b7dc6477c07940f8f50bec0088003c 100755 GIT binary patch literal 180224 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 literal 169212 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

m9IXj8ic?9YobP|hO^;uXBt2rH@cxCS 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 Description....: Provides functions for communication/programming - over ISP interf + over ISP interface Licence........: Free under certain conditions. See Documentation. Creation Date..: 2005-02-23 Last change....: 2005-04-20 diff --git a/firmware/main.c b/firmware/main.c index 9d79354bd..c5624d3f9 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -10,7 +10,7 @@ Target.........: ATMega8 at 12 MHz Creation Date..: 2005-02-20 - Last change....: 2005-04-20 + Last change....: 2005-10-08 PC2 SCK speed option. GND -> slow (8khz SCK), open -> fast (375kHz SCK) @@ -55,7 +55,7 @@ static uchar prog_state = PROG_STATE_IDLE; static unsigned int prog_address; static unsigned int prog_nbytes = 0; -static uchar prog_pagesize; +static unsigned int prog_pagesize; //TP: Mega128 fix static uchar prog_blockflags; static uchar prog_pagecounter; @@ -106,7 +106,8 @@ uchar usbFunctionSetup(uchar data[8]) { } else if (data[1] == USBASP_FUNC_WRITEFLASH) { prog_address = (data[3] << 8) | data[2]; prog_pagesize = data[4]; - prog_blockflags = data[5]; + prog_blockflags = data[5] & 0x0F; + prog_pagesize += (((unsigned int)data[5] & 0xF0)<<4); //TP: Mega128 fix if (prog_blockflags & PROG_BLOCKFLAG_FIRST) { prog_pagecounter = prog_pagesize; } diff --git a/firmware/usbdrv/License.txt b/firmware/usbdrv/License.txt index 93432eebb..5d586aa5f 100644 --- a/firmware/usbdrv/License.txt +++ b/firmware/usbdrv/License.txt @@ -172,7 +172,7 @@ patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. - + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @@ -227,7 +227,7 @@ above, provided that you also meet all of these conditions: License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -285,7 +285,7 @@ access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is @@ -342,7 +342,7 @@ impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License @@ -395,7 +395,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS - + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest diff --git a/software/avrdude_usbasp.2005-04-21.patch b/software/avrdude_usbasp.2005-04-21.patch deleted file mode 100644 index ebe923d29..000000000 --- a/software/avrdude_usbasp.2005-04-21.patch +++ /dev/null @@ -1,125 +0,0 @@ -? usbasp.c -? usbasp.h -Index: Makefile.am -=================================================================== -RCS file: /cvsroot/avrdude/avrdude/Makefile.am,v -retrieving revision 1.23 -diff -u -r1.23 Makefile.am ---- Makefile.am 10 Feb 2005 14:54:57 -0000 1.23 -+++ Makefile.am 9 Apr 2005 09:04:02 -0000 -@@ -85,6 +85,8 @@ - stk500.c \ - stk500.h \ - stk500_private.h \ -+ usbasp.c \ -+ usbasp.h \ - term.c \ - term.h - -Index: avrdude.conf.in -=================================================================== -RCS file: /cvsroot/avrdude/avrdude/avrdude.conf.in,v -retrieving revision 1.36 -diff -u -r1.36 avrdude.conf.in ---- avrdude.conf.in 22 Dec 2004 01:30:30 -0000 1.36 -+++ avrdude.conf.in 9 Apr 2005 09:04:10 -0000 -@@ -243,6 +243,12 @@ - miso = 10; - ; - -+programmer -+ id = "usbasp"; -+ desc = "usbasp"; -+ type = usbasp; -+; -+ - # The programming dongle used by the popular Ponyprog - # utility. It is almost similar to the STK200 one, - # except that there is a LED indicating that the -@@ -337,7 +343,6 @@ - miso = 10; - ; - -- - # From the contributor of the "xil" jtag cable: - # The "vcc" definition isn't really vcc (the cable gets its power from - # the programming circuit) but is necessary to switch one of the -Index: config_gram.y -=================================================================== -RCS file: /cvsroot/avrdude/avrdude/config_gram.y,v -retrieving revision 1.39 -diff -u -r1.39 config_gram.y ---- config_gram.y 22 Dec 2004 01:52:45 -0000 1.39 -+++ config_gram.y 9 Apr 2005 09:04:11 -0000 -@@ -34,6 +34,7 @@ - #include "pgm.h" - #include "stk500.h" - #include "avr910.h" -+#include "usbasp.h" - #include "butterfly.h" - #include "avr.h" - -@@ -112,6 +113,7 @@ - %token K_SIZE - %token K_STK500 - %token K_AVR910 -+%token K_USBASP - %token K_BUTTERFLY - %token K_TYPE - %token K_VCC -@@ -302,6 +304,11 @@ - } - } | - -+ K_TYPE TKN_EQUAL K_USBASP { -+ { -+ usbasp_initpgm(current_prog); -+ } -+ } | - K_TYPE TKN_EQUAL K_BUTTERFLY { - { - butterfly_initpgm(current_prog); -Index: configure.ac -=================================================================== -RCS file: /cvsroot/avrdude/avrdude/configure.ac,v -retrieving revision 1.22 -diff -u -r1.22 configure.ac ---- configure.ac 10 Feb 2005 15:39:42 -0000 1.22 -+++ configure.ac 9 Apr 2005 09:04:11 -0000 -@@ -104,6 +104,21 @@ - AC_SUBST(SUBDIRS_AC, $SUBDIRS_AC) - AC_SUBST(DIST_SUBDIRS_AC, $DIST_SUBDIRS_AC) - -+# USB stuff -+AH_TEMPLATE([HAVE_LIBUSB], -+ [Define if USB support is enabled via libusb]) -+AC_CHECK_LIB(usb, main, have_libusb=yes) -+if test x$have_libusb = xyes; then -+ case $target in -+ *-*-darwin*) -+ LIBS="$LIBS -lusb -framework CoreFoundation -framework IOKit" -+ ;; -+ *) -+ LIBS="$LIBS -lusb" -+ ;; -+ esac -+ AC_DEFINE([HAVE_LIBUSB]) -+fi - - # Find the parallel serial device files based on target system - # If a system doesn't have a PC style parallel, mark it as unknown. -Index: lexer.l -=================================================================== -RCS file: /cvsroot/avrdude/avrdude/lexer.l,v -retrieving revision 1.30 -diff -u -r1.30 lexer.l ---- lexer.l 22 Dec 2004 01:52:45 -0000 1.30 -+++ lexer.l 9 Apr 2005 09:04:12 -0000 -@@ -156,6 +156,7 @@ - size { yylval=NULL; return K_SIZE; } - stk500 { yylval=NULL; return K_STK500; } - avr910 { yylval=NULL; return K_AVR910; } -+usbasp { yylval=NULL; return K_USBASP; } - butterfly { yylval=NULL; return K_BUTTERFLY; } - type { yylval=NULL; return K_TYPE; } - vcc { yylval=NULL; return K_VCC; } diff --git a/software/avrdude_usbasp.2005-11-14.patch b/software/avrdude_usbasp.2005-11-14.patch new file mode 100644 index 000000000..ba3e86b79 --- /dev/null +++ b/software/avrdude_usbasp.2005-11-14.patch @@ -0,0 +1,100 @@ +diff -Naur avrdude-5.0/Makefile.am avrdude-5.0-usbasp/Makefile.am +--- avrdude-5.0/Makefile.am Sun Sep 18 22:12:23 2005 ++++ avrdude-5.0-usbasp/Makefile.am Mon Nov 14 20:57:20 2005 +@@ -98,6 +98,8 @@ + stk500v2.c \ + stk500v2.h \ + stk500v2_private.h \ ++ usbasp.c \ ++ usbasp.h \ + term.c \ + term.h \ + usb_libusb.c +diff -Naur avrdude-5.0/avrdude.conf.in avrdude-5.0-usbasp/avrdude.conf.in +--- avrdude-5.0/avrdude.conf.in Sun Sep 18 02:44:20 2005 ++++ avrdude-5.0-usbasp/avrdude.conf.in Mon Nov 14 20:57:33 2005 +@@ -262,6 +262,12 @@ + ; + + programmer ++ id = "usbasp"; ++ desc = "usbasp"; ++ type = usbasp; ++; ++ ++programmer + id = "butterfly"; + desc = "Atmel Butterfly Development Board"; + type = butterfly; +diff -Naur avrdude-5.0/config_gram.y avrdude-5.0-usbasp/config_gram.y +--- avrdude-5.0/config_gram.y Sun Sep 18 22:12:23 2005 ++++ avrdude-5.0-usbasp/config_gram.y Mon Nov 14 20:57:50 2005 +@@ -37,6 +37,7 @@ + #include "stk500v2.h" + #include "avr910.h" + #include "butterfly.h" ++#include "usbasp.h" + #include "avr.h" + #include "jtagmkII.h" + +@@ -118,6 +119,7 @@ + %token K_STK500 + %token K_STK500V2 + %token K_AVR910 ++%token K_USBASP + %token K_BUTTERFLY + %token K_TYPE + %token K_VCC +@@ -349,6 +351,12 @@ + K_TYPE TKN_EQUAL K_AVR910 { + { + avr910_initpgm(current_prog); ++ } ++ } | ++ ++ K_TYPE TKN_EQUAL K_USBASP { ++ { ++ usbasp_initpgm(current_prog); + } + } | + +diff -Naur avrdude-5.0/configure.ac avrdude-5.0-usbasp/configure.ac +--- avrdude-5.0/configure.ac Wed Sep 21 03:37:02 2005 ++++ avrdude-5.0-usbasp/configure.ac Mon Nov 14 20:58:07 2005 +@@ -46,7 +46,24 @@ + AC_CHECK_LIB([readline], [readline]) + # usb_get_string_simple is only available in recent enough + # versions of libusb, so use that as a decision base. +-AC_CHECK_LIB([usb], [usb_get_string_simple]) ++#AC_CHECK_LIB([usb], [usb_get_string_simple]) ++ ++AH_TEMPLATE([HAVE_LIBUSB], ++ [Define if USB support is enabled via libusb]) ++AC_CHECK_LIB(usb, main, have_libusb=yes) ++if test x$have_libusb = xyes; then ++ case $target in ++ *-*-darwin*) ++ LIBS="$LIBS -lusb -framework CoreFoundation -framework IOKit" ++ ;; ++ *) ++ LIBS="$LIBS -lusb" ++;; ++ esac ++ AC_DEFINE([HAVE_LIBUSB]) ++fi ++ ++ + + # Checks for header files. + AC_HEADER_STDC +diff -Naur avrdude-5.0/lexer.l avrdude-5.0-usbasp/lexer.l +--- avrdude-5.0/lexer.l Sun Sep 18 22:12:23 2005 ++++ avrdude-5.0-usbasp/lexer.l Mon Nov 14 20:58:24 2005 +@@ -118,6 +118,7 @@ + allowfullpagebitstream { yylval=NULL; return K_ALLOWFULLPAGEBITSTREAM; } + avr910 { yylval=NULL; return K_AVR910; } + avr910_devcode { yylval=NULL; return K_AVR910_DEVCODE; } ++usbasp { yylval=NULL; return K_USBASP; } + bank_size { yylval=NULL; return K_PAGE_SIZE; } + banked { yylval=NULL; return K_PAGED; } + baudrate { yylval=NULL; return K_BAUDRATE; } diff --git a/software/usbasp.c b/software/usbasp.c index 439fa3b5c..464e80da2 100644 --- a/software/usbasp.c +++ b/software/usbasp.c @@ -258,7 +258,7 @@ static int usbasp_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m, cmd[0] = address & 0xFF; cmd[1] = address >> 8; cmd[2] = page_size & 0xFF; - cmd[3] = blockflags; + cmd[3] = (blockflags & 0x0F) + ((page_size & 0xF00) >> 4); //TP: Mega128 fix blockflags = 0; n = usbasp_transmit(0, function, cmd, buffer, blocksize); -- 2.11.0