From 9e61bd70f3f794fc8849a004ca13208de98d8225 Mon Sep 17 00:00:00 2001 From: Bluebie Date: Fri, 5 Oct 2012 10:12:08 +1000 Subject: Improved upgrade mechanism - now it should actually work! I've successfully upgraded from 1.02 to 1.03 and 1.03 to 1.03. Haven't tested earlier versions of micronucleus or other bootloaders not based on USBaspLoader-tiny85 --- upgrade/Makefile | 8 +- upgrade/bootloader_data.c | 2 +- upgrade/releases/micronucleus-1.03-upgrade.hex | 354 +++++++++++++------------ upgrade/upgrade-prefix.hex | 1 + upgrade/upgrade.c | 22 +- 5 files changed, 197 insertions(+), 190 deletions(-) create mode 100644 upgrade/upgrade-prefix.hex (limited to 'upgrade') diff --git a/upgrade/Makefile b/upgrade/Makefile index e4f6b9d..e1c8254 100644 --- a/upgrade/Makefile +++ b/upgrade/Makefile @@ -18,8 +18,8 @@ DEVICE = attiny85 FUSEOPT = $(FUSEOPT_t85) LOCKOPT = -U lock:w:0x2f:m -# app starts at beginning, as it should! -APP_ADDRESS = 0 +# app starts two pages in, so we can mess around with the first page for leet ISR hax +APP_ADDRESS = 80 PROGRAMMER = -c USBasp # PROGRAMMER contains AVRDUDE options to address your programmer @@ -192,7 +192,9 @@ upgrade.bin: $(OBJECTS) upgrade.hex: upgrade.bin rm -f upgrade.hex upgrade.eep.hex - avr-objcopy -j .text -j .data -O ihex upgrade.bin upgrade.hex + avr-objcopy -j .text -j .data -O ihex upgrade.bin upgrade-app.hex + cat upgrade-prefix.hex upgrade-app.hex > upgrade.hex + rm upgrade-app.hex avr-size upgrade.hex disasm: upgrade.bin diff --git a/upgrade/bootloader_data.c b/upgrade/bootloader_data.c index f0b06c2..faeaf7d 100644 --- a/upgrade/bootloader_data.c +++ b/upgrade/bootloader_data.c @@ -1,6 +1,6 @@ // This file contains the bootloader data itself and the address to install the bootloader at // Use generate-data.rb with ruby 1.9 to generate these values from a hex file -// Generated from ../firmware/releases/tiny85/micronucleus-1.03.hex at 2012-10-04 11:12:26 +1000 +// Generated from ../firmware/releases/tiny85/micronucleus-1.03.hex at 2012-10-05 08:44:49 +1000 uint16_t bootloader_data[1032] PROGMEM = { 0xc022, 0xc040, 0xc06c, 0xc03e, 0xc03d, 0xc03c, 0xc03b, 0xc03a, 0xc039, 0xc038, 0xc037, 0xc036, 0xc035, 0xc034, 0xc033, 0x0304, 0x0409, 0x0112, 0x0110, 0x00ff, 0x0800, 0x16d0, 0x0753, 0x0103, 0x0000, 0x0100, 0x0209, 0x0012, 0x0101, 0x8000, 0x0932, 0x0004, 0x0000, 0x0000, 0x0000, 0x2411, 0xbe1f, 0xe5cf, 0xe0d2, 0xbfde, 0xbfcd, 0xeb00, 0x930f, 0xe007, 0x930f, 0xe010, 0xe6a0, 0xe0b0, 0xecea, 0xe1ff, 0xc002, 0x9005, 0x920d, 0x36a6, 0x07b1, 0xf7d9, 0xe010, 0xe6a6, 0xe0b0, 0xc001, 0x921d, 0x39aa, 0x07b1, 0xf7e1, 0xd1df, 0xc3c1, 0xcfbd, 0x2fa8, 0x2fb9, 0xe080, 0xe090, 0xe041, 0xea50, 0x9560, 0xe030, 0xc009, 0x912d, 0x2782, 0x9597, 0x9587, 0xf010, 0x2784, 0x2795, 0x5e30, 0xf3c8, 0x5f6f, 0xf3a8, 0x9508, 0xdfea, 0x938d, 0x939d, 0x9508, 0xe0a6, 0x2788, 0x2799, 0x95aa, 0xf069, 0x9701, 0xf3e1, 0x99b3, 0xcffc, 0x9bb3, 0xcffe, 0xe081, 0x2799, 0xb3a6, 0x9601, 0xf011, 0x71a8, 0xf7d9, 0x9508, 0x93cf, 0xb7cf, 0x93cf, 0x91c0, 0x025f, 0x3bc0, 0xf421, 0x91c0, 0x025e, 0x30c7, 0xf021, 0x91cf, 0xbfcf, 0x91cf, 0xcf81, 0x27cc, 0x95c3, 0x9bb3, 0xf7e9, 0x9bb3, 0xc00b, 0x9bb3, 0xc009, 0x9bb3, 0xc007, 0x9bb3, 0xc005, 0x9bb3, 0xc003, 0x9bb3, 0xc001, 0xc0d3, 0x920f, 0x93df, 0x91c0, 0x007d, 0x27dd, 0x57cc, 0x4fdf, 0x2e01, 0x9bb3, 0xc003, 0x91df, 0x900f, 0xcfe6, 0x932f, 0x930f, 0x931f, 0x934f, 0xef2f, 0x6f4f, 0xb306, 0xfb03, 0xf920, 0x935f, 0x933f, 0xe050, 0xe03b, 0xc065, 0xb316, 0x2601, 0x2950, 0xfd53, 0x95c8, 0xb356, 0x2701, 0xfb03, 0xf925, 0x732f, 0xb306, 0xf0b1, 0x2750, 0x2710, 0xfb13, 0xf926, 0xb206, 0x3022, 0xf0f0, 0xc000, 0xb316, 0x2701, 0xfb03, 0xf927, 0x2601, 0x2950, 0xb206, 0x3024, 0xf5e8, 0x774f, 0x6820, 0xb316, 0x0000, 0xcff6, 0x2750, 0x7d4f, 0x6220, 0xb206, 0x2f10, 0x0000, 0xc000, 0xb306, 0x2600, 0x2950, 0x2710, 0xfb13, 0xf926, 0xb206, 0xcfe2, 0x7b4f, 0xb306, 0x6420, 0xc000, 0xcfda, 0x2601, 0x2950, 0x7118, 0xb206, 0xf169, 0x7f4e, 0x6021, 0x2f01, 0xb316, 0xc028, 0x2600, 0x2950, 0x7f4d, 0xb206, 0x6022, 0x2f10, 0xc029, 0x2601, 0x2950, 0x7f4b, 0xb206, 0x6024, 0x2f01, 0xc02d, 0xb316, 0x2601, 0x2950, 0x7f47, 0x6028, 0x0000, 0xb206, 0xc02e, 0x7e4f, 0xb306, 0x6120, 0xc030, 0x2742, 0xb306, 0x9349, 0x2600, 0x2950, 0x2710, 0xb206, 0xef4f, 0xfb13, 0xf920, 0x7f29, 0xb316, 0xf279, 0x7118, 0xf159, 0x2601, 0x2950, 0xb206, 0x2701, 0xfb03, 0xf921, 0x7f23, 0xb306, 0xf271, 0x2600, 0x2950, 0x5031, 0xf0d0, 0xb206, 0x2710, 0xfb13, 0xf922, 0x7e27, 0xb316, 0xf251, 0x2601, 0x2950, 0x2701, 0xfb03, 0xb206, 0xf923, 0x7c2f, 0xf249, 0x0000, 0xb306, 0x2710, 0xfb13, 0xf924, 0x2600, 0x2950, 0xb206, 0x792f, 0xf239, 0xcf70, 0xe210, 0xbf1a, 0x2700, 0xc017, 0x503b, 0x9531, 0x1bc3, 0x40d0, 0xe210, 0xbf1a, 0x8108, 0x3c03, 0xf0f9, 0x340b, 0xf0e9, 0x9120, 0x007b, 0x8119, 0x0f11, 0x1312, 0xcfed, 0x3609, 0xf151, 0x320d, 0xf011, 0x3e01, 0xf739, 0x9300, 0x0082, 0x913f, 0x915f, 0x914f, 0x911f, 0x910f, 0x912f, 0x91df, 0x900f, 0xb7ca, 0xfdc5, 0xcf1d, 0x91cf, 0xbfcf, 0x91cf, 0x9518, 0x9120, 0x0082, 0x2322, 0xf369, 0x9110, 0x0080, 0x2311, 0xf521, 0x3034, 0xf122, 0x9330, 0x0080, 0x9320, 0x007c, 0x9110, 0x007d, 0xe03b, 0x1b31, 0x9330, 0x007d, 0xc019, 0x9100, 0x0080, 0x3001, 0xf49c, 0xe50a, 0x9130, 0x0060, 0xfd34, 0xc011, 0x9300, 0x0060, 0xe7c0, 0xe0d0, 0xc010, 0x2705, 0xe010, 0xc000, 0xc021, 0x2705, 0xe010, 0x95c8, 0xbb08, 0xc014, 0xe53a, 0xc001, 0xed32, 0x2e03, 0xe0c0, 0xe0d0, 0xe032, 0xb317, 0x6118, 0x9ac3, 0xb308, 0xbb17, 0xe158, 0xe820, 0xef4f, 0xff20, 0x2705, 0xbb08, 0x9527, 0x9517, 0x3f1c, 0xf728, 0x0000, 0x5245, 0xf7b0, 0xff20, 0x2705, 0x9527, 0xbb08, 0x9517, 0x3f1c, 0xf6b8, 0x9129, 0x953a, 0xf761, 0x7e07, 0x9110, 0x0081, 0x0f11, 0xbb08, 0x50c2, 0x40d0, 0xf011, 0x9310, 0x007b, 0xe210, 0xbf1a, 0x6008, 0xb317, 0x7e17, 0x2f40, 0x7e47, 0xe054, 0x955a, 0xf7f1, 0xbb08, 0xbb17, 0xbb48, 0xcf8a, 0xe081, 0x9380, 0x0067, 0x94f8, 0x91e0, 0x006e, 0x91f0, 0x006f, 0x9732, 0xe085, 0x9380, 0x0057, 0x95e8, 0xb607, 0xfc00, 0xcffd, 0x9478, 0x9508, 0x019c, 0x91e0, 0x006e, 0x91f0, 0x006f, 0x9730, 0xf149, 0x30e4, 0x05f1, 0xf0b1, 0xe187, 0x3bec, 0x07f8, 0xf439, 0x9120, 0x006a, 0x9130, 0x006b, 0x5d2e, 0x4f3b, 0xc00d, 0xe187, 0x3bee, 0x07f8, 0xf449, 0x9120, 0x006c, 0x9130, 0x006d, 0x5d2d, 0x4f3b, 0xc002, 0xed2f, 0xec3b, 0x94f8, 0xe081, 0x0109, 0x9380, 0x0057, 0x95e8, 0x2411, 0x9478, 0x9632, 0x93f0, 0x006f, 0x93e0, 0x006e, 0x9508, 0xe181, 0x9380, 0x0057, 0x95e8, 0xcfeb, 0xef8f, 0xef9f, 0xdfc8, 0x9180, 0x006e, 0x9190, 0x006f, 0x738f, 0x7090, 0x2b89, 0xf7a9, 0xcfad, 0xe188, 0xb60f, 0x94f8, 0xbd81, 0xbc11, 0xbe0f, 0xe0e0, 0xe0f0, 0x9185, 0x9194, 0x5d8f, 0x4c9b, 0xf439, 0xe0e4, 0xe0f0, 0x9185, 0x9194, 0x5d8f, 0x4c9b, 0xf009, 0xdfdf, 0x9210, 0x006f, 0x9210, 0x006e, 0x9aac, 0xb78b, 0x6280, 0xbf8b, 0x9abb, 0xe888, 0xe193, 0xe9ec, 0xe0f1, 0x9731, 0xf7f1, 0x9701, 0xf7d1, 0x98bb, 0x9478, 0x24ee, 0x24ff, 0x9110, 0x0080, 0x5013, 0xfd17, 0xc0d0, 0x9180, 0x007d, 0xe0cc, 0xe0d0, 0x1bc8, 0x09d1, 0x57cc, 0x4fdf, 0x9180, 0x007c, 0x328d, 0xf009, 0xc08d, 0x3018, 0xf009, 0xc0be, 0xec83, 0x9380, 0x0070, 0xe58a, 0x9380, 0x0060, 0x9210, 0x0069, 0x8128, 0x2f82, 0x7680, 0x8199, 0x2388, 0xf109, 0x2399, 0xf441, 0xe682, 0xe090, 0x9390, 0x007f, 0x9380, 0x007e, 0xe024, 0xc068, 0x3091, 0xf451, 0x818c, 0x819d, 0x9390, 0x006f, 0x9380, 0x006e, 0xfd27, 0xc059, 0xef9f, 0xc058, 0x9180, 0x0066, 0x3092, 0xf411, 0x6081, 0xc001, 0x6084, 0x9380, 0x0066, 0xe020, 0xc051, 0x818a, 0x9210, 0x0079, 0x2399, 0xf431, 0x9210, 0x007a, 0xe789, 0xe090, 0xe022, 0xc03c, 0x3095, 0xf419, 0x9380, 0x0081, 0xc034, 0x3096, 0xf511, 0x818b, 0x3081, 0xf419, 0xee82, 0xe197, 0xc004, 0x3082, 0xf441, 0xef84, 0xe197, 0x9390, 0x007f, 0x9380, 0x007e, 0xe122, 0xc00e, 0x3083, 0xf459, 0x818a, 0x2388, 0xf441, 0xed8e, 0xe197, 0x9390, 0x007f, 0x9380, 0x007e, 0xe024, 0xc001, 0xe020, 0xe480, 0x9380, 0x0069, 0xc01d, 0x3098, 0xf419, 0xe883, 0xe090, 0xc009, 0x3099, 0xf419, 0x9380, 0x0083, 0xc006, 0x309a, 0xf421, 0xe789, 0xe090, 0xe021, 0xc003, 0xe789, 0xe090, 0xe020, 0x9390, 0x007f, 0x9380, 0x007e, 0xc005, 0x819e, 0xe880, 0x9380, 0x0069, 0xc007, 0x818f, 0x2388, 0xf419, 0x819e, 0x1792, 0xf008, 0x2f92, 0x9390, 0x0061, 0xc034, 0x9180, 0x0069, 0xff87, 0xc030, 0x9180, 0x006e, 0x9190, 0x006f, 0x9700, 0xf439, 0x8188, 0x8199, 0x9390, 0x006b, 0x9380, 0x006a, 0xc00d, 0x3084, 0x0591, 0xf439, 0x8188, 0x8199, 0x9390, 0x006d, 0x9380, 0x006c, 0xc003, 0x5c80, 0x4197, 0xf438, 0x8188, 0x8199, 0xded5, 0x5012, 0xf011, 0x9622, 0xcfdf, 0x9180, 0x006e, 0x9190, 0x006f, 0x738f, 0x7090, 0x2b89, 0xf439, 0x9180, 0x0066, 0x6082, 0x9380, 0x0066, 0x9210, 0x0061, 0x9210, 0x0080, 0x9180, 0x0060, 0xff84, 0xc03c, 0x9180, 0x0061, 0x3f8f, 0xf1c1, 0x2f18, 0x3089, 0xf008, 0xe018, 0x1b81, 0x9380, 0x0061, 0x9180, 0x0070, 0xe898, 0x2789, 0x9380, 0x0070, 0x2311, 0xf0e1, 0x91e0, 0x007e, 0x91f0, 0x007f, 0x9180, 0x0069, 0xff86, 0xc009, 0x2f91, 0xe7a1, 0xe0b0, 0x9184, 0x938d, 0x9631, 0x5091, 0xf7d9, 0xc007, 0x2f91, 0xe7a1, 0xe0b0, 0x9181, 0x938d, 0x5091, 0xf7e1, 0x93f0, 0x007f, 0x93e0, 0x007e, 0xe781, 0xe090, 0x2f61, 0xdd02, 0x2f61, 0x5f6c, 0x306c, 0xf019, 0xef8f, 0x9380, 0x0061, 0x9360, 0x0060, 0xe194, 0xb386, 0x7188, 0xf431, 0x5091, 0xf7d9, 0x9210, 0x0081, 0x9210, 0x007b, 0xe010, 0x2399, 0xf409, 0xe011, 0x9180, 0x0068, 0x1781, 0xf039, 0x2311, 0xf419, 0x94f8, 0xd04f, 0x9478, 0x9310, 0x0068, 0xe98c, 0xe091, 0x9701, 0xf7f1, 0x9180, 0x0066, 0x2388, 0xf019, 0x24ee, 0x24ff, 0xc003, 0x9408, 0x1ce1, 0x1cf1, 0x2f18, 0xff80, 0xc014, 0x94f8, 0xece0, 0xe1f7, 0x54e0, 0x40f0, 0xe083, 0x9380, 0x0057, 0x95e8, 0xb607, 0xfc00, 0xcffd, 0x9730, 0xf7a9, 0x9210, 0x006f, 0x9210, 0x006e, 0xde78, 0x9478, 0xff11, 0xc00f, 0xe38a, 0xe290, 0x9701, 0xf7f1, 0x9180, 0x006e, 0x9190, 0x006f, 0x738f, 0x7090, 0x2b89, 0xf011, 0xde68, 0xc001, 0xde1f, 0xfd12, 0xc008, 0x9210, 0x0066, 0xe580, 0x16e8, 0xec83, 0x06f8, 0xf408, 0xce92, 0xe282, 0xea91, 0x9701, 0xf7f1, 0x94f8, 0xbe1b, 0xba15, 0x9210, 0x025f, 0x9210, 0x025e, 0xcc3a, 0x92ff, 0x930f, 0x931f, 0x93cf, 0x93df, 0xe880, 0x2ef8, 0xe000, 0xe0c0, 0xe0d0, 0x2f10, 0x0d1f, 0xbf11, 0xdc8a, 0xe029, 0x3384, 0x0792, 0xf00c, 0x2f10, 0x94f6, 0x9621, 0x30c8, 0x05d1, 0xf011, 0x2f01, 0xcff0, 0x5011, 0xbf11, 0x5f1f, 0x2f01, 0x01ec, 0xc010, 0xdc77, 0x5384, 0x4099, 0xff97, 0xc003, 0x9590, 0x9581, 0x4f9f, 0x178c, 0x079d, 0xf414, 0xb701, 0x01ec, 0xb781, 0x5f8f, 0xbf81, 0xb721, 0xe030, 0x2f81, 0xe090, 0x9601, 0x1782, 0x0793, 0xf744, 0xbf01, 0x91df, 0x91cf, 0x911f, 0x910f, 0x90ff, 0x9508, 0x94f8, 0xcfff, 0xff5a, 0xbc17, 0x0840 diff --git a/upgrade/releases/micronucleus-1.03-upgrade.hex b/upgrade/releases/micronucleus-1.03-upgrade.hex index 7635e4e..120e279 100644 --- a/upgrade/releases/micronucleus-1.03-upgrade.hex +++ b/upgrade/releases/micronucleus-1.03-upgrade.hex @@ -1,177 +1,179 @@ -:1000000016C428C427C426C425C424C423C422C4B7 -:1000100021C420C41FC41EC41DC41CC41BC422C0D0 -:1000200040C06CC03EC03DC03CC03BC03AC039C0BF -:1000300038C037C036C035C034C033C004030904EB -:1000400012011001FF000008D01653070301000041 -:1000500000010902120001010080320904000000C1 -:100060000000000011241FBECFE5D2E0DEBFCDBFEF -:1000700000EB0F9307E00F9310E0A0E6B0E0EAEC8E -:10008000FFE102C005900D92A636B107D9F710E046 -:10009000A6E6B0E001C01D92AA39B107E1F7DFD1B1 -:1000A000C1C3BDCFA82FB92F80E090E041E050EA56 -:1000B000609530E009C02D9182279795879510F0C3 -:1000C00084279527305EC8F36F5FA8F30895EADFB1 -:1000D0008D939D930895A6E088279927AA9569F0A6 -:1000E0000197E1F3B399FCCFB39BFECF81E0992751 -:1000F000A6B3019611F0A871D9F70895CF93CFB7A1 -:10010000CF93C0915F02C03B21F4C0915E02C73023 -:1001100021F0CF91CFBFCF9181CFCC27C395B39B97 -:10012000E9F7B39B0BC0B39B09C0B39B07C0B39B5C -:1001300005C0B39B03C0B39B01C0D3C00F92DF9334 -:10014000C0917D00DD27CC57DF4F012EB39B03C04C -:10015000DF910F90E6CF2F930F931F934F932FEFC5 -:100160004F6F06B303FB20F95F933F9350E03BE0F2 -:1001700065C016B30126502953FDC89556B3012713 -:1001800003FB25F92F7306B3B1F05027102713FB9B -:1001900026F906B22230F0F000C016B3012703FBA7 -:1001A00027F90126502906B22430E8F54F77206858 -:1001B00016B30000F6CF50274F7D206206B2102FF5 -:1001C000000000C006B300265029102713FB26F9B3 -:1001D00006B2E2CF4F7B06B3206400C0DACF01261F -:1001E0005029187106B269F14E7F2160012F16B3B4 -:1001F00028C0002650294D7F06B22260102F29C04A -:10020000012650294B7F06B22460012F2DC016B362 -:1002100001265029477F2860000006B22EC04F7E7D -:1002200006B3206130C0422706B349930026502907 -:10023000102706B24FEF13FB20F9297F16B379F28E -:10024000187159F10126502906B2012703FB21F943 -:10025000237F06B371F2002650293150D0F006B248 -:10026000102713FB22F9277E16B351F201265029DD -:10027000012703FB06B223F92F7C49F2000006B3E5 -:10028000102713FB24F90026502906B22F7939F2E2 -:1002900070CF10E21ABF002717C03B503195C31B27 -:1002A000D04010E21ABF0881033CF9F00B34E9F0AA -:1002B00020917B001981110F1213EDCF093651F1F6 -:1002C0000D3211F0013E39F7009382003F915F91AA -:1002D0004F911F910F912F91DF910F90CAB7C5FDDC -:1002E0001DCFCF91CFBFCF911895209182002223AF -:1002F00069F310918000112321F5343022F13093FD -:10030000800020937C0010917D003BE0311B3093F6 -:100310007D0019C00091800001309CF40AE5309105 -:10032000600034FD11C000936000C0E7D0E010C051 -:10033000052710E000C021C0052710E0C89508BBC4 -:1003400014C03AE501C032ED032EC0E0D0E032E047 -:1003500017B31861C39A08B317BB58E120E84FEFF1 -:1003600020FF052708BB279517951C3F28F700009D -:100370004552B0F720FF0527279508BB17951C3F6E -:10038000B8F629913A9561F7077E10918100110F17 -:1003900008BBC250D04011F010937B0010E21ABF8E -:1003A000086017B3177E402F477E54E05A95F1F747 -:1003B00008BB17BB48BB8ACF81E080936700F894E5 -:1003C000E0916E00F0916F00329785E080935700C6 -:1003D000E89507B600FCFDCF789408959C01E09164 -:1003E0006E00F0916F00309749F1E430F105B1F003 -:1003F00087E1EC3BF80739F420916A0030916B00FB -:100400002E5D3B4F0DC087E1EE3BF80749F420918C -:100410006C0030916D002D5D3B4F02C02FED3BEC29 -:10042000F89481E0090180935700E89511247894AD -:100430003296F0936F00E0936E00089581E180930F -:100440005700E895EBCF8FEF9FEFC8DF80916E00EC -:1004500090916F008F739070892BA9F7ADCF88E1D1 -:100460000FB6F89481BD11BC0FBEE0E0F0E08591BD -:1004700094918F5D9B4C39F4E4E0F0E08591949188 -:100480008F5D9B4C09F0DFDF10926F0010926E00C1 -:10049000AC9A8BB780628BBFBB9A88E893E1ECE99A -:1004A000F1E03197F1F70197D1F7BB987894EE24FA -:1004B000FF2410918000135017FDD0C080917D0063 -:1004C000CCE0D0E0C81BD109CC57DF4F80917C0035 -:1004D0008D3209F08DC0183009F0BEC083EC8093D6 -:1004E00070008AE580936000109269002881822F55 -:1004F00080769981882309F1992341F482E690E07E -:1005000090937F0080937E0024E068C0913051F486 -:100510008C819D8190936F0080936E0027FD59C060 -:100520009FEF58C080916600923011F4816001C045 -:1005300084608093660020E051C08A811092790027 -:10054000992331F410927A0089E790E022E03CC0D0 -:10055000953019F48093810034C0963011F58B8169 -:10056000813019F482EE97E104C0823041F484EFC7 -:1005700097E190937F0080937E0022E10EC083304C -:1005800059F48A81882341F48EED97E190937F009E -:1005900080937E0024E001C020E080E48093690025 -:1005A0001DC0983019F483E890E009C0993019F41F -:1005B0008093830006C09A3021F489E790E021E01F -:1005C00003C089E790E020E090937F0080937E0055 -:1005D00005C09E8180E88093690007C08F818823D1 -:1005E00019F49E81921708F0922F9093610034C005 -:1005F0008091690087FF30C080916E0090916F00FC -:10060000009739F48881998190936B0080936A00F8 -:100610000DC08430910539F48881998190936D00E3 -:1006200080936C0003C0805C974138F48881998185 -:10063000D5DE125011F02296DFCF80916E0090919E -:100640006F008F739070892B39F4809166008260FF -:10065000809366001092610010928000809160008B -:1006600084FF3CC0809161008F3FC1F1182F893019 -:1006700008F018E0811B809361008091700098E879 -:100680008927809370001123E1F0E0917E00F091C2 -:100690007F008091690086FF09C0912FA1E7B0E03B -:1006A00084918D9331969150D9F707C0912FA1E78E -:1006B000B0E081918D939150E1F7F0937F00E0934A -:1006C0007E0081E790E0612F02DD612F6C5F6C306E -:1006D00019F08FEF809361006093600094E186B31E -:1006E000887131F49150D9F71092810010927B00FB -:1006F00010E0992309F411E080916800811739F026 -:10070000112319F4F8944FD07894109368008CE971 -:1007100091E00197F1F780916600882319F0EE24AB -:10072000FF2403C00894E11CF11C182F80FF14C0A3 -:10073000F894E0ECF7E1E054F04083E08093570058 -:10074000E89507B600FCFDCF3097A9F710926F002F -:1007500010926E0078DE789411FF0FC08AE390E269 -:100760000197F1F780916E0090916F008F739070F8 -:10077000892B11F068DE01C01FDE12FD08C0109247 -:10078000660080E5E81683ECF80608F492CE82E273 -:1007900091EA0197F1F7F8941BBE15BA10925F0227 -:1007A00010925E023ACCFF920F931F93CF93DF9388 -:1007B00080E8F82E00E0C0E0D0E0102F1F0D11BF40 -:1007C0008ADC29E0843392070CF0102FF6942196EE -:1007D000C830D10511F0012FF0CF115011BF1F5FAC -:1007E000012FEC0110C077DC8453994097FF03C0C0 -:1007F000909581959F4F8C179D0714F401B7EC01DC -:1008000081B78F5F81BF21B730E0812F90E00196E3 -:100810008217930744F701BFDF91CF911F910F918A -:10082000FF900895F894FFCF5AFF17BC4008112499 -:100830001FBECFE5D2E0DEBFCDBF10E0A0E6B0E046 -:10084000EEEEFAE002C005900D92A236B107D9F79C -:100850001BD14BC1D5CB05C0EDE1F0E13197F1F7EC -:1008600001970097C9F70895AC01407C20E030E083 -:10087000F901E40FF51F85919491F901EE7FE60FE0 -:10088000F71F918380832E5F3F4F2034310581F71E -:100890000895FC01E07C83E080935700E89507B65B -:1008A00000FCFDCF0895CF93DF93EC01A0E0B0E012 -:1008B000AD014C0F5D1FFB01EA0FFB1F8081918191 -:1008C00021E0FA010C0120935700E89511241296BB -:1008D000A034B10569F785E0FE0180935700E895E3 -:1008E00007B600FCFDCFDF91CF910895DF93CF9342 -:1008F000CDB7DEB7C054D0400FB6F894DEBF0FBE00 -:10090000CDBF209160003091610036952795215030 -:100910003044FE01319621933193CE018F5B9F4F7E -:10092000E817F907C1F780E090E0B3DF80E090E0DE -:10093000BE016F5F7F4FB7DFC05CDF4F0FB6F8942B -:10094000DEBF0FBECDBFCF91DF910895EF92FF9232 -:100950000F931F93DF93CF93CDB7DEB7C054D04032 -:100960000FB6F894DEBF0FBECDBF00E010E035C07B -:100970009B01359527957E010894E11CF11C88E0C8 -:10098000AE32B80738F0220F331FE20EF31E8FEF9E -:100990009FEF07C0FD0185919491220F331FE20E56 -:1009A000F31EF701918380836E5F7F4F1296603450 -:1009B0007105F1F68091600090916100800F911FA8 -:1009C00068DF8091600090916100800F911FBE01EF -:1009D0006F5F7F4F68DF005C1F4FF8E000341F0738 -:1009E00031F0D801A25EBF4F60E070E0C1CFC05CC3 -:1009F000DF4F0FB6F894DEBF0FBECDBFCF91DF91B2 -:100A00001F910F91FF90EF900895DF93CF93CDB793 -:100A1000DEB7C054D0400FB6F894DEBF0FBECDBFD6 -:100A200080E090E0BE016F5F7F4F1EDF80E090E0CE -:100A300001968F309105E1F78FEF9FEF9A838983BD -:100A400080E090E026DF80E090E0BE016F5F7F4FA6 -:100A50002ADFC05CDF4F0FB6F894DEBF0FBECDBFFC -:100A6000CF91DF91089587B3836087BB20E08DE14C -:100A700090E1FC013197F1F7C19A0197F1F7C19824 -:100A80002F5F2A3FA1F7089584E690E0EDE1F0E1C1 -:100A90003197F1F70197D1F7F894B7DF57DF26DFE9 -:100AA000E2DF80E090E00895000000000000000018 -:100AB0000000000000000000000000000000000036 -:100AC0000000000000000000000000000000000026 -:100AD0000000000000000000000000000000000016 -:0E0AE00000000000000000000895F894FFCF11 -:020AEE00C0172F +:1000000003C003C003C003C003C003C003C003C0D8 +:1000800016C438C437C436C435C434C433C432C4C7 +:1000900031C430C42FC42EC42DC42CC42BC422C0E0 +:1000A00040C06CC03EC03DC03CC03BC03AC039C03F +:1000B00038C037C036C035C034C033C0040309046B +:1000C00012011001FF000008D016530703010000C1 +:1000D0000001090212000101008032090400000041 +:1000E0000000000011241FBECFE5D2E0DEBFCDBF6F +:1000F00000EB0F9307E00F9310E0A0E6B0E0EAEC0E +:10010000FFE102C005900D92A636B107D9F710E0C5 +:10011000A6E6B0E001C01D92AA39B107E1F7DFD130 +:10012000C1C3BDCFA82FB92F80E090E041E050EAD5 +:10013000609530E009C02D9182279795879510F042 +:1001400084279527305EC8F36F5FA8F30895EADF30 +:100150008D939D930895A6E088279927AA9569F025 +:100160000197E1F3B399FCCFB39BFECF81E09927D0 +:10017000A6B3019611F0A871D9F70895CF93CFB720 +:10018000CF93C0915F02C03B21F4C0915E02C730A3 +:1001900021F0CF91CFBFCF9181CFCC27C395B39B17 +:1001A000E9F7B39B0BC0B39B09C0B39B07C0B39BDC +:1001B00005C0B39B03C0B39B01C0D3C00F92DF93B4 +:1001C000C0917D00DD27CC57DF4F012EB39B03C0CC +:1001D000DF910F90E6CF2F930F931F934F932FEF45 +:1001E0004F6F06B303FB20F95F933F9350E03BE072 +:1001F00065C016B30126502953FDC89556B3012793 +:1002000003FB25F92F7306B3B1F05027102713FB1A +:1002100026F906B22230F0F000C016B3012703FB26 +:1002200027F90126502906B22430E8F54F772068D7 +:1002300016B30000F6CF50274F7D206206B2102F74 +:10024000000000C006B300265029102713FB26F932 +:1002500006B2E2CF4F7B06B3206400C0DACF01269E +:100260005029187106B269F14E7F2160012F16B333 +:1002700028C0002650294D7F06B22260102F29C0C9 +:10028000012650294B7F06B22460012F2DC016B3E2 +:1002900001265029477F2860000006B22EC04F7EFD +:1002A00006B3206130C0422706B349930026502987 +:1002B000102706B24FEF13FB20F9297F16B379F20E +:1002C000187159F10126502906B2012703FB21F9C3 +:1002D000237F06B371F2002650293150D0F006B2C8 +:1002E000102713FB22F9277E16B351F2012650295D +:1002F000012703FB06B223F92F7C49F2000006B365 +:10030000102713FB24F90026502906B22F7939F261 +:1003100070CF10E21ABF002717C03B503195C31BA6 +:10032000D04010E21ABF0881033CF9F00B34E9F029 +:1003300020917B001981110F1213EDCF093651F175 +:100340000D3211F0013E39F7009382003F915F9129 +:100350004F911F910F912F91DF910F90CAB7C5FD5B +:100360001DCFCF91CFBFCF9118952091820022232E +:1003700069F310918000112321F5343022F130937C +:10038000800020937C0010917D003BE0311B309376 +:100390007D0019C00091800001309CF40AE5309185 +:1003A000600034FD11C000936000C0E7D0E010C0D1 +:1003B000052710E000C021C0052710E0C89508BB44 +:1003C00014C03AE501C032ED032EC0E0D0E032E0C7 +:1003D00017B31861C39A08B317BB58E120E84FEF71 +:1003E00020FF052708BB279517951C3F28F700001D +:1003F0004552B0F720FF0527279508BB17951C3FEE +:10040000B8F629913A9561F7077E10918100110F96 +:1004100008BBC250D04011F010937B0010E21ABF0D +:10042000086017B3177E402F477E54E05A95F1F7C6 +:1004300008BB17BB48BB8ACF81E080936700F89464 +:10044000E0916E00F0916F00329785E08093570045 +:10045000E89507B600FCFDCF789408959C01E091E3 +:100460006E00F0916F00309749F1E430F105B1F082 +:1004700087E1EC3BF80739F420916A0030916B007A +:100480002E5D3B4F0DC087E1EE3BF80749F420910C +:100490006C0030916D002D5D3B4F02C02FED3BECA9 +:1004A000F89481E0090180935700E895112478942D +:1004B0003296F0936F00E0936E00089581E180938F +:1004C0005700E895EBCF8FEF9FEFC8DF80916E006C +:1004D00090916F008F739070892BA9F7ADCF88E151 +:1004E0000FB6F89481BD11BC0FBEE0E0F0E085913D +:1004F00094918F5D9B4C39F4E4E0F0E08591949108 +:100500008F5D9B4C09F0DFDF10926F0010926E0040 +:10051000AC9A8BB780628BBFBB9A88E893E1ECE919 +:10052000F1E03197F1F70197D1F7BB987894EE2479 +:10053000FF2410918000135017FDD0C080917D00E2 +:10054000CCE0D0E0C81BD109CC57DF4F80917C00B4 +:100550008D3209F08DC0183009F0BEC083EC809355 +:1005600070008AE580936000109269002881822FD4 +:1005700080769981882309F1992341F482E690E0FD +:1005800090937F0080937E0024E068C0913051F406 +:100590008C819D8190936F0080936E0027FD59C0E0 +:1005A0009FEF58C080916600923011F4816001C0C5 +:1005B00084608093660020E051C08A8110927900A7 +:1005C000992331F410927A0089E790E022E03CC050 +:1005D000953019F48093810034C0963011F58B81E9 +:1005E000813019F482EE97E104C0823041F484EF47 +:1005F00097E190937F0080937E0022E10EC08330CC +:1006000059F48A81882341F48EED97E190937F001D +:1006100080937E0024E001C020E080E480936900A4 +:100620001DC0983019F483E890E009C0993019F49E +:100630008093830006C09A3021F489E790E021E09E +:1006400003C089E790E020E090937F0080937E00D4 +:1006500005C09E8180E88093690007C08F81882350 +:1006600019F49E81921708F0922F9093610034C084 +:100670008091690087FF30C080916E0090916F007B +:10068000009739F48881998190936B0080936A0078 +:100690000DC08430910539F48881998190936D0063 +:1006A00080936C0003C0805C974138F48881998105 +:1006B000D5DE125011F02296DFCF80916E0090911E +:1006C0006F008F739070892B39F48091660082607F +:1006D000809366001092610010928000809160000B +:1006E00084FF3CC0809161008F3FC1F1182F893099 +:1006F00008F018E0811B809361008091700098E8F9 +:100700008927809370001123E1F0E0917E00F09141 +:100710007F008091690086FF09C0912FA1E7B0E0BA +:1007200084918D9331969150D9F707C0912FA1E70D +:10073000B0E081918D939150E1F7F0937F00E093C9 +:100740007E0081E790E0612F02DD612F6C5F6C30ED +:1007500019F08FEF809361006093600094E186B39D +:10076000887131F49150D9F71092810010927B007A +:1007700010E0992309F411E080916800811739F0A5 +:10078000112319F4F8944FD07894109368008CE9F1 +:1007900091E00197F1F780916600882319F0EE242B +:1007A000FF2403C00894E11CF11C182F80FF14C023 +:1007B000F894E0ECF7E1E054F04083E080935700D8 +:1007C000E89507B600FCFDCF3097A9F710926F00AF +:1007D00010926E0078DE789411FF0FC08AE390E2E9 +:1007E0000197F1F780916E0090916F008F73907078 +:1007F000892B11F068DE01C01FDE12FD08C01092C7 +:10080000660080E5E81683ECF80608F492CE82E2F2 +:1008100091EA0197F1F7F8941BBE15BA10925F02A6 +:1008200010925E023ACCFF920F931F93CF93DF9307 +:1008300080E8F82E00E0C0E0D0E0102F1F0D11BFBF +:100840008ADC29E0843392070CF0102FF69421966D +:10085000C830D10511F0012FF0CF115011BF1F5F2B +:10086000012FEC0110C077DC8453994097FF03C03F +:10087000909581959F4F8C179D0714F401B7EC015B +:1008800081B78F5F81BF21B730E0812F90E0019663 +:100890008217930744F701BFDF91CF911F910F910A +:1008A000FF900895F894FFCF5AFF17BC400800004E +:1008B0000000000000000000000000000000000038 +:1008C00000000000000000000000000000001124F3 +:1008D0001FBECFE5D2E0DEBFCDBF10E0A0E6B0E0A6 +:1008E000ECE6FBE002C005900D92A236B107D9F705 +:1008F0001CD13AC1C5CB05C0EDE1F0E13197F1F76C +:1009000001970097C9F70895AC01407C20E030E0E2 +:10091000F901E40FF51F85919491F901EE7FE60F3F +:10092000F71F918380832E5F3F4F2034310581F77D +:100930000895FC01E07C83E080935700E89507B6BA +:1009400000FCFDCF0895CF93DF93EC01A0E0B0E071 +:10095000AD014C0F5D1FFB01EA0FFB1F80819181F0 +:1009600021E0FA010C0120935700E895112412961A +:10097000A034B10569F785E0FE0180935700E89542 +:1009800007B600FCFDCFDF91CF910895DF93CF93A1 +:10099000CDB7DEB7C054D0400FB6F894DEBF0FBE5F +:1009A000CDBF209160003091610036952795215090 +:1009B0003044FE01319621933193CE018F5B9F4FDE +:1009C000E817F907C1F780E090E0B3DF80E090E03E +:1009D000BE016F5F7F4FB7DFC05CDF4F0FB6F8948B +:1009E000DEBF0FBECDBFCF91DF910895EF92FF9292 +:1009F0000F931F93DF93CF93CDB7DEB7C054D04092 +:100A00000FB6F894DEBF0FBECDBF00E010E035C0DA +:100A10009B01359527957E010894E11CF11C88E027 +:100A2000AE3AB80738F0220F331FE20EF31E8FEFF5 +:100A30009FEF07C0FD0185919491220F331FE20EB5 +:100A4000F31EF701918380836E5F7F4F12966034AF +:100A50007105F1F68091600090916100800F911F07 +:100A600068DF8091600090916100800F911FBE014E +:100A70006F5F7F4F68DF005C1F4FF8E000341F0797 +:100A800031F0D801A256BF4F60E070E0C1CFC05C2A +:100A9000DF4F0FB6F894DEBF0FBECDBFCF91DF9111 +:100AA0001F910F91FF90EF900895DF93CF93CDB7F3 +:100AB000DEB7C054D0400FB6F894DEBF0FBECDBF36 +:100AC00080E090E0BE016F5F7F4F1EDF80E090E02E +:100AD000019680329105E1F78FEF9FEF9A8389832A +:100AE00080E090E026DF80E090E0BE016F5F7F4F06 +:100AF0002ADFC05CDF4F0FB6F894DEBF0FBECDBF5C +:100B0000CF91DF91089587B3836087BBC19820E0C0 +:100B10008DE190E1FC013197F1F7C19A0197F1F76E +:100B2000C1982F5F2A3FA1F7089588B318BA87B3F9 +:100B30008FEF87BB8AEF90E0EDE1F0E13197F1F7BD +:100B40000197D1F787B317BA8AEF90E0EDE1F0E1B2 +:100B50003197F1F70197D1F7F894A7DF47DF16DF58 +:0C0B6000D2DF80E090E00895F894FFCF11 +:020B6C00C017B0 +:040000030000008079 :00000001FF diff --git a/upgrade/upgrade-prefix.hex b/upgrade/upgrade-prefix.hex new file mode 100644 index 0000000..bb908dc --- /dev/null +++ b/upgrade/upgrade-prefix.hex @@ -0,0 +1 @@ +:1000000003C003C003C003C003C003C003C003C0D8 diff --git a/upgrade/upgrade.c b/upgrade/upgrade.c index 3d54acf..dc5d449 100644 --- a/upgrade/upgrade.c +++ b/upgrade/upgrade.c @@ -37,7 +37,11 @@ void write_page(uint16_t address, uint16_t words[SPM_PAGESIZE / 2]); int main(void) { - delay(100); // milliseconds + pinsOff(0xFF); // pull down all pins + outputs(0xFF); // all to ground - force usb disconnect + delay(250); // milliseconds + inputs(0xFF); // let them float + delay(250); cli(); secure_interrupt_vector_table(); // reset our vector table to it's original state @@ -58,7 +62,7 @@ void secure_interrupt_vector_table(void) { // wipe out any interrupt hooks the bootloader rewrote int i = 0; - while (i < 15) { + while (i < SPM_PAGESIZE / 2) { table[0] = 0xFFFF; i++; } @@ -140,6 +144,7 @@ void write_page(uint16_t address, uint16_t words[SPM_PAGESIZE / 2]) { // beep for a quarter of a second void beep(void) { outputs(pin(0) | pin(1)); + pinOff(1); byte i = 0; while (i < 250) { @@ -151,15 +156,12 @@ void beep(void) { } } + ////////////// Add padding to start of program so no program code could reasonably be erased while program is running // this never needs to be called - avr-gcc stuff happening: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html -void PadStartOfProgram (void) __attribute__ ((naked)) __attribute__ ((section (".init0"))); -void PushMagicWord (void) { - // 32 words of nop - a whole page's worth - asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); +volatile void FakeISR (void) __attribute__ ((naked)) __attribute__ ((section (".init0"))); +volatile void FakeISR (void) { + // 16 nops to pad out first section of program + asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); - asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); - asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); } - - -- cgit v1.2.3