summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim <cpldcpu@gmail.com>2015-07-26 20:28:13 +0200
committerTim <cpldcpu@gmail.com>2015-07-26 20:28:13 +0200
commit3e01026caa72cc1cf25bddf3158dea4f439dd169 (patch)
treeea384817b369de8dd66e1fc19b6c0b369415e006
parentc2c3125d000b34b7b828e364b43216069aea5878 (diff)
parent4362370cd98492d761a3e19e84da007163378464 (diff)
downloadmicronucleus-3e01026caa72cc1cf25bddf3158dea4f439dd169.tar.gz
micronucleus-3e01026caa72cc1cf25bddf3158dea4f439dd169.tar.bz2
micronucleus-3e01026caa72cc1cf25bddf3158dea4f439dd169.zip
Merge pull request #66 from micronucleus/Testing-V2.1v2.0b
Pull request for V2.1
-rw-r--r--Readme.txt26
-rw-r--r--firmware/configuration/Nanite841/Makefile.inc2
-rw-r--r--firmware/configuration/t167_default/bootloaderconfig.h2
-rw-r--r--firmware/configuration/t841_default/Makefile.inc2
-rw-r--r--firmware/configuration/t84_default/Makefile.inc2
-rw-r--r--firmware/main.c23
-rw-r--r--firmware/releases/Nanite841.hex205
-rw-r--r--firmware/releases/t167_default.hex80
-rw-r--r--firmware/releases/t841_default.hex202
-rw-r--r--firmware/releases/t84_default.hex196
-rw-r--r--firmware/releases/t85_aggressive.hex78
-rw-r--r--firmware/releases/t85_default.hex78
-rw-r--r--firmware/usbconfig.h13
-rw-r--r--firmware/usbdrv/usbdrvasm.S47
14 files changed, 488 insertions, 468 deletions
diff --git a/Readme.txt b/Readme.txt
index 41c8580..d073542 100644
--- a/Readme.txt
+++ b/Readme.txt
@@ -1,4 +1,4 @@
-Micronucleus V2.0b
+Micronucleus V2.1
==================
Micronucleus is a bootloader designed for AVR ATtiny microcontrollers with a minimal usb interface, cross platform libusb-based program upload tool, and a strong emphasis on bootloader compactness. To the authors knowledge this is, by far, the smallest USB bootloader for AVR ATtiny
@@ -31,7 +31,6 @@ Please invoke the command line tool with "micronucleus -help" for a list of avai
The bootloader resides in the same memory as the user program, since the ATtiny series does not support a protected bootloader section. Therefore, special care has to be taken not to overwrite the bootloader if the user program uses the self programming features. The bootloader will patch itself into the reset vector of the user program. No other interrupt vectors are changed.
-
Compiling
=========
@@ -43,12 +42,12 @@ To allow maximum flexibility, micronucleus supports a configuration system. To c
Currently, the following configurations are included and tested. Please check the subfolders /firmware/configurations/ for details. Hex files can be found in /releases.
-t84_default - ATtiny84A default configuration - 1532 bytes
-t841_default - ATtiny841 default configuration - 1584 bytes
-t85_default - ATtiny85 default configuration - 1606 bytes
-t85_aggressive - ATtiny85 smaller size - critical - 1414 bytes
-t167_default - ATtiny167 default (uses xtal) - 1390 bytes
-Nanite841 - Nanite841 firmware - 1608 bytes
+t84_default - ATtiny84A default configuration - 1556 bytes
+t841_default - ATtiny841 default configuration - 1608 bytes
+t85_default - ATtiny85 default configuration - 1610 bytes
+t85_aggressive - ATtiny85 smaller size - critical - 1418 bytes
+t167_default - ATtiny167 default (uses xtal) - 1414 bytes
+Nanite841 - Nanite841 firmware - 1632 bytes
You can add your own configuration by adding a new folder to /firmware/configurations/. The folder has to contain a customized "Makefile.inc" and "bootloaderconfig.h". Feel free to supply a pull request if you added and tested a previously unsupported device.
@@ -93,15 +92,20 @@ In addition, we'd like you to consider these points if you intend to sell produc
Changes
=======
-This pull request documents changes leading to V2.0: https://github.com/micronucleus/micronucleus/pull/43
• v2.0b June 6th, 2015
-
+ This pull request documents changes leading to V2.0: https://github.com/micronucleus/micronucleus/pull/43
+
+ • v2.1 July 26th, 2015
+ This pull request documents changes leading to V2.1: https://github.com/micronucleus/micronucleus/pull/66
+ - Fixed "unknown USB device" issue when devices with <16MHz CPU clock were connected to a USB3.0 port.
+ - Fixed one bug that could lead to a deadlock if no USB was connected while the bootloader was active and noise was injected into the floating D+ input.
+
Credits
=======
Firmware:
- • Micronucleus V2.0 (c) 2015 Tim Bo"scke - cpldcpu@gmail.com
+ • Micronucleus V2.1 (c) 2015 Tim Bo"scke - cpldcpu@gmail.com
(c) 2014 Shay Green
• Original Micronucleus (c) 2012 Jenna Fox
• Based on USBaspLoader-tiny85 (c) 2012 Louis Beaudoin
diff --git a/firmware/configuration/Nanite841/Makefile.inc b/firmware/configuration/Nanite841/Makefile.inc
index e147248..79e84a3 100644
--- a/firmware/configuration/Nanite841/Makefile.inc
+++ b/firmware/configuration/Nanite841/Makefile.inc
@@ -15,7 +15,7 @@ DEVICE = attiny841
# - for the size of your device (8kb = 1024 * 8 = 8192) subtract above value 2124... = 6068
# - How many pages in is that? 6068 / 64 (tiny85 page size in bytes) = 94.8125
# - round that down to 94 - our new bootloader address is 94 * 64 = 6016, in hex = 1780
-BOOTLOADER_ADDRESS = 1980
+BOOTLOADER_ADDRESS = 1940
FUSEOPT = -U lfuse:w:0xe2:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
FUSEOPT_DISABLERESET = # TODO
diff --git a/firmware/configuration/t167_default/bootloaderconfig.h b/firmware/configuration/t167_default/bootloaderconfig.h
index 01890a7..106fe93 100644
--- a/firmware/configuration/t167_default/bootloaderconfig.h
+++ b/firmware/configuration/t167_default/bootloaderconfig.h
@@ -4,7 +4,7 @@
* according to the hardware.
*
* Controller type: ATtiny 167 - 16 MHz with crystal
- * Configuration: Standard configuration - Follows Digispark Pro defaults
+ * Configuration: Standard configuration - Follows Digispark Pro defaults. Needs 16Mhz XTAL.
* USB D- : PB3
* USB D+ : PB6
* Entry : Always
diff --git a/firmware/configuration/t841_default/Makefile.inc b/firmware/configuration/t841_default/Makefile.inc
index 9601a69..e147248 100644
--- a/firmware/configuration/t841_default/Makefile.inc
+++ b/firmware/configuration/t841_default/Makefile.inc
@@ -15,7 +15,7 @@ DEVICE = attiny841
# - for the size of your device (8kb = 1024 * 8 = 8192) subtract above value 2124... = 6068
# - How many pages in is that? 6068 / 64 (tiny85 page size in bytes) = 94.8125
# - round that down to 94 - our new bootloader address is 94 * 64 = 6016, in hex = 1780
-BOOTLOADER_ADDRESS = 19C0
+BOOTLOADER_ADDRESS = 1980
FUSEOPT = -U lfuse:w:0xe2:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
FUSEOPT_DISABLERESET = # TODO
diff --git a/firmware/configuration/t84_default/Makefile.inc b/firmware/configuration/t84_default/Makefile.inc
index 5213b19..5309f79 100644
--- a/firmware/configuration/t84_default/Makefile.inc
+++ b/firmware/configuration/t84_default/Makefile.inc
@@ -15,7 +15,7 @@ DEVICE = attiny84
# - for the size of your device (8kb = 1024 * 8 = 8192) subtract above value 2124... = 6068
# - How many pages in is that? 6068 / 64 (tiny85 page size in bytes) = 94.8125
# - round that down to 94 - our new bootloader address is 94 * 64 = 6016, in hex = 1780
-BOOTLOADER_ADDRESS = 1A00
+BOOTLOADER_ADDRESS = 1980
FUSEOPT = -U lfuse:w:0xe2:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
FUSEOPT_DISABLERESET = # TODO
diff --git a/firmware/main.c b/firmware/main.c
index fdf22e4..80b5d3a 100644
--- a/firmware/main.c
+++ b/firmware/main.c
@@ -1,7 +1,7 @@
/*
- * Project: Micronucleus - v2.0
+ * Project: Micronucleus - v2.1
*
- * Micronucleus V2.0 (c) 2014 Tim Bo"scke - cpldcpu@gmail.com
+ * Micronucleus V2.1 (c) 2015 Tim Bo"scke - cpldcpu@gmail.com
* (c) 2014 Shay Green
* Original Micronucleus (c) 2012 Jenna Fox
*
@@ -12,7 +12,7 @@
*/
#define MICRONUCLEUS_VERSION_MAJOR 2
-#define MICRONUCLEUS_VERSION_MINOR 0
+#define MICRONUCLEUS_VERSION_MINOR 1
#include <avr/io.h>
#include <avr/pgmspace.h>
@@ -232,7 +232,7 @@ int main(void) {
uint8_t osccal_tmp;
bootLoaderInit();
-
+
/* save default OSCCAL calibration */
#if OSCCAL_RESTORE_DEFAULT
osccal_default = OSCCAL;
@@ -266,10 +266,10 @@ int main(void) {
// adjust fastctr for 5ms timeout
uint16_t fastctr=(uint16_t)(F_CPU/(1000.0f*15.0f/5.0f));
- uint8_t resetctr=20;
+ uint8_t resetctr=100;
do {
- if ((USBIN & USBMASK) !=0) resetctr=20;
+ if ((USBIN & USBMASK) !=0) resetctr=100;
if (!--resetctr) { // reset encountered
usbNewDeviceAddr = 0; // bits from the reset handling of usbpoll()
@@ -280,7 +280,8 @@ int main(void) {
}
if (USB_INTR_PENDING & (1<<USB_INTR_PENDING_BIT)) {
- USB_INTR_VECTOR(); // clears INT_PENDING (See se0: in asmcommon.inc)
+ USB_INTR_VECTOR();
+ USB_INTR_PENDING = 1<<USB_INTR_PENDING_BIT; // Clear int pending, in case timeout occured during SYNC
idlePolls.b[1]=0; // reset idle polls when we get usb traffic
break;
}
@@ -335,8 +336,8 @@ int main(void) {
LED_MACRO( idlePolls.b[0] );
// Test whether another interrupt occurred during the processing of USBpoll and commands.
- // If yes, we missed a data packet on the bus. Wait until the bus was idle for 10µs to
- // allow synchronising to the next incoming packet.
+ // If yes, we missed a data packet on the bus. Wait until the bus was idle for 8.8µs to
+ // allow synchronising to the next incoming packet.
if (USB_INTR_PENDING & (1<<USB_INTR_PENDING_BIT)) // Usbpoll() collided with data packet
{
@@ -345,12 +346,12 @@ int main(void) {
// loop takes 5 cycles
asm volatile(
" ldi %0,%1 \n\t"
- "loop%=: sbic %2,%3 \n\t"
+ "loop%=: sbis %2,%3 \n\t"
" ldi %0,%1 \n\t"
" subi %0,1 \n\t"
" brne loop%= \n\t"
: "=&d" (ctr)
- : "M" ((uint8_t)(10.0f*(F_CPU/1.0e6f)/5.0f+0.5)), "I" (_SFR_IO_ADDR(USBIN)), "M" (USB_CFG_DPLUS_BIT)
+ : "M" ((uint8_t)(8.8f*(F_CPU/1.0e6f)/5.0f+0.5)), "I" (_SFR_IO_ADDR(USBIN)), "M" (USB_CFG_DMINUS_BIT)
);
USB_INTR_PENDING = 1<<USB_INTR_PENDING_BIT;
}
diff --git a/firmware/releases/Nanite841.hex b/firmware/releases/Nanite841.hex
index 8413aba..b77b02f 100644
--- a/firmware/releases/Nanite841.hex
+++ b/firmware/releases/Nanite841.hex
@@ -1,103 +1,104 @@
-:1019800017C0197A10859315090212000101008011
-:101990003209040000000000000012011001FF00E5
-:1019A0000008D016530700020000000104030904D8
-:1019B00011241FBECFEFD2E0CDBFDEBF21E0A0E0FB
-:1019C000B1E001C01D92AC32B207E1F78FC1A82F80
-:1019D000B92F80E090E041E050EA609530E009C026
-:1019E0002D9182279795879510F084279527305E53
-:1019F000C8F36F5FA8F30895EADF8D939D93089570
-:101A0000CF93CFB7CF93C395B19BE9F7B19B09C0F3
-:101A1000B19B07C0B19B05C0B19B03C0B19B01C086
-:101A2000A7C0DF93C0910E01DD27CA5EDE4FB19BD8
-:101A300002C0DF91EBCF2F930F931F9306B32FEFCD
-:101A400001FB20F94F933F9316B34FEF012701FBA2
-:101A500021F93BE031C04E7F012F16B3216028C031
-:101A6000102F4D7F2260000006B329C04B7F2460F9
-:101A7000012F000016B32BC016B3477F28602AC081
-:101A80004F7E06B320612CC04F7D16B320622FC05D
-:101A90004F7B06B3206432C0422706B349934FEF11
-:101AA0000000102711FB20F916B31370C9F1297F2C
-:101AB00091F2012701FB21F906B3237F89F231500E
-:101AC00058F1102711FB22F916B3277E79F201276E
-:101AD00001FB23F92F7C81F206B3102711FB24F9B7
-:101AE0002F7971F200C016B3012701FB25F92F737E
-:101AF00059F200C006B3102711FB26F9223040F23C
-:101B000000C016B3012701FB27F9243028F64F77D0
-:101B1000206816B30000F9CF10E21ABF00271DC0DD
-:101B20003B503195C31BD04010E21ABF0881033CE3
-:101B300019F10B3409F120910C011981110F1213C5
-:101B4000EDCF093641F10D3211F0013E39F7CAE00F
-:101B50001AB715FD02C0CA95D9F7009314013F9139
-:101B60004F911F910F912F91DF91CAB7C5FD4BCFB8
-:101B7000CF91CFBFCF91089520911401222379F303
-:101B8000109112011123E1F43430E2F0309312018C
-:101B900020930D0117C00091120101308CF40AE569
-:101BA00030910F0134FD10C000930F01C1E0D1E06E
-:101BB0000FC02795A8F45150A9F4220F0000F9CFC7
-:101BC0004AE503C042ED01C0432FC4E1D0E032E05A
-:101BD00017B31360C19A17BB08B320E413E05F93F7
-:101BE000012756E008BB279520F4515021F4220F1D
-:101BF000F9CF012756E000003B5A08BBD0F22795E9
-:101C000028F4515029F4220F0000F9CF012756E0A3
-:101C1000279508BB20F4515021F4220FF9CF01275A
-:101C200056E02991332308BB21F60C7F1091130154
-:101C3000110FC651D04008BB11F010930C0110E2F7
-:101C40001ABF026017B31C7F402F4C7F5F9100C00A
-:101C500000C008BB17BB48BB82CF2FEFB0E8A0E0A5
-:101C60004BE0B093740000008EE599E0B199FECF8F
-:101C7000B19BFECF0197B199FDCFB09B09C096B340
-:101C80009370E9F796B39370D1F7B19BFECFECCF89
-:101C900097FF03C0BA1B819501C0BA0FA69541F406
-:101CA000A0E430F4281718F030917400282FA1E038
-:101CB0004150B9F63093740000000895F201309756
-:101CC00049F02AE7421629E1520631F48091740066
-:101CD00090E002C08FEB9CEC21E00C0120935700B8
-:101CE000E8951124CF0102962C010895809174008B
-:101CF000282EEAE7F9E1E491EF3F19F0E093740050
-:101D0000000004B601FC06C0EDE7F9E1E491EF3F05
-:101D100009F055C114BE88ED8093710087E081BD44
-:101D2000B99A2FE78CEF9AE0215080409040E1F77C
-:101D300000C00000B9988AE580930F018FEF80936F
-:101D4000000180B5816080BD8BB780628BBFC29877
-:101D5000712C312C412C512C14E1C0EADFE086B308
-:101D6000837009F014E1115029F4109213011092BC
-:101D70000C0173DF0AB605FE03C042DE712C03C0FE
-:101D80002197209761F7A8958091740020927400A4
-:101D900022E032120CC0E0E8F9E1E054F10993E0EE
-:101DA00090935700E8953097C1F7412C512C90E45F
-:101DB00039120AC0F2013297E03829E1F20720F423
-:101DC00095E090935700E8958093740084E0381272
-:101DD00003C0CD2B11F4EFC0312C80911201835040
-:101DE00087FD98C090910D019D3209F091C0883017
-:101DF00009F08EC083EC809301018AE580930F0186
-:101E000090911701907680911801992361F18111C9
-:101E100008C082E899E1909311018093100126E0B7
-:101E20006CC0813059F44114510409F44CC08091C4
-:101E30001B01807F482E50901C0145C0833081F4E7
-:101E40008091190190911A0139DF80911B019091C5
-:101E50001C0134DF842D8F70B1F580E4382E33C03F
-:101E60008F73382E30C09091190110920A018111A0
-:101E700006C010920B018AE091E022E03AC0853062
-:101E800019F49093130127C08630F9F480911A0158
-:101E9000813019F48AE999E104C0823041F488E87C
-:101EA00099E1909311018093100122E126C08330C3
-:101EB00051F4911108C08CEA99E19093110180933B
-:101EC000100124E01AC020E018C0883079F0893071
-:101ED00031F4909315018AE091E020E00AC021E0FE
-:101EE0008A3009F020E08AE091E003C085E191E0CA
-:101EF00021E0909311018093100180911E018111C6
-:101F000005C080911D01821708F4282F209300013D
-:101F10001092120180910F0184FF31C08091000165
-:101F20008F3F69F1C82F893008F0C8E08C1B80937F
-:101F300000018091010198E8892780930101CC2359
-:101F400091F0E0911001F091110182E091E0DC014B
-:101F500024912D9331962C2F280F2A13F9CFF0932B
-:101F60001101E09310016C2F82E091E045DDCC5F20
-:101F7000CC3019F08FEF80930001C0930F01C301A3
-:101F800001963C01803B944029F4EDE7F9E1E491AE
-:101F9000EF3F89F4862D8C7411F0BA9801C0BA9A7B
-:101FA0000AB605FED9CE88E1B09988E18150E1F703
-:101FB00080E28ABFD1CEBA98B99A1BBE10BC2092DB
-:081FC00074000000DBCCFFCF30
-:040000030000198060
+:1019400017C0193A10859315090212000101008091
+:101950003209040000000000000012011001FF0025
+:101960000008D01653070102000000010403090417
+:1019700011241FBECFEFD2E0CDBFDEBF21E0A0E03B
+:10198000B1E001C01D92AC32B207E1F799C1DC01B0
+:101990008FEF9FEF332715C02D912827722F2295A7
+:1019A0002727822F269526952827239522703217E0
+:1019B00077952795822F8927972F769527959727B3
+:1019C0008227615048F7809590950895E0DF8D93C8
+:1019D0009D930895CF93CFB7CF93C395B19BE9F76C
+:1019E000B19B09C0B19B07C0B19B05C0B19B03C0AF
+:1019F000B19B01C0A7C0DF93C0910E01DD27CA5E75
+:101A0000DE4FB19B02C0DF91EBCF2F930F931F935B
+:101A100006B32FEF01FB20F94F933F9316B34FEF1F
+:101A2000012701FB21F93BE031C04E7F012F16B3A6
+:101A3000216028C0102F4D7F2260000006B329C00E
+:101A40004B7F2460012F000016B32BC016B3477FD5
+:101A500028602AC04F7E06B320612CC04F7D16B38C
+:101A600020622FC04F7B06B3206432C0422706B3EA
+:101A700049934FEF0000102711FB20F916B31370A4
+:101A8000C9F1297F91F2012701FB21F906B3237FD8
+:101A900089F2315058F1102711FB22F916B3277E35
+:101AA00079F2012701FB23F92F7C81F206B310277D
+:101AB00011FB24F92F7971F200C016B3012701FB45
+:101AC00025F92F7359F200C006B3102711FB26F930
+:101AD000223040F200C016B3012701FB27F9243061
+:101AE00028F64F77206816B30000F9CF10E21ABF2E
+:101AF00000271DC03B503195C31BD04010E21ABFD8
+:101B00000881033C19F10B3409F120910C01198172
+:101B1000110F1213EDCF093641F10D3211F0013ED4
+:101B200039F7CAE01AB715FD02C0CA95D9F7009374
+:101B300014013F914F911F910F912F91DF91CAB7DF
+:101B4000C5FD4BCFCF91CFBFCF9108952091140108
+:101B5000222379F3109112011123E1F43430E2F0E1
+:101B60003093120120930D0117C000911201013032
+:101B70008CF40AE530910F0134FD10C000930F0181
+:101B8000C1E0D1E00FC02795A8F45150A9F4220F6D
+:101B90000000F9CF4AE503C042ED01C0432FC4E184
+:101BA000D0E032E017B31360C19A17BB08B320E44A
+:101BB00013E05F93012756E008BB279520F45150AE
+:101BC00021F4220FF9CF012756E000003B5A08BB51
+:101BD000D0F2279528F4515029F4220F0000F9CFB4
+:101BE000012756E0279508BB20F4515021F4220F1D
+:101BF000F9CF012756E02991332308BB21F60C7F4A
+:101C000010911301110FC651D04008BB11F0109371
+:101C10000C0110E21ABF026017B31C7F402F4C7FEB
+:101C20005F9100C000C008BB17BB48BB82CF2FEF3D
+:101C3000B0E8A0E04BE0B093740000008EE599E0BE
+:101C4000B199FECFB19BFECF0197B199FDCFB09B6B
+:101C500009C096B39370E9F796B39370D1F7B19B2F
+:101C6000FECFECCF97FF03C0BA1B819501C0BA0F1E
+:101C7000A69541F4A0E430F4281718F030917400D0
+:101C8000282FA1E04150B9F6309374000000089568
+:101C9000F201309749F02AE3421629E1520631F465
+:101CA0008091740090E002C08FE99CEC21E00C016F
+:101CB00020935700E8951124CF0102962C01089536
+:101CC00080917400282EEAE3F9E1E491EF3F19F0E6
+:101CD000E0937400000004B601FC06C0EDE3F9E1F6
+:101CE000E491EF3F09F057C114BE88ED8093710075
+:101CF00087E081BDB99A2FE78CEF9AE021508040B0
+:101D00009040E1F700C00000B9988AE580930F0188
+:101D10008FEF8093000180B5816080BD8BB78062BA
+:101D20008BBFC298712C312C412C512C14E6C0EA87
+:101D3000DFE086B3837009F014E6115029F41092A5
+:101D4000130110920C0173DF0AB605FE05C042DED6
+:101D500080E28ABF712C03C02197209751F7A89584
+:101D6000809174002092740022E032120CC0E0E4F2
+:101D7000F9E1E054F10993E090935700E89530972A
+:101D8000C1F7412C512C90E439120AC0F20132976C
+:101D9000E03429E1F20720F495E090935700E895AC
+:101DA0008093740084E0381203C0CD2B11F4EFC08F
+:101DB000312C80911201835087FD98C090910D01C4
+:101DC0009D3209F091C0883009F08EC083EC809379
+:101DD00001018AE580930F0190911701907680911F
+:101DE0001801992361F1811108C082E499E190936F
+:101DF00011018093100126E06CC0813059F4411428
+:101E0000510409F44CC080911B01807F482E5090F2
+:101E10001C0145C0833081F48091190190911A0111
+:101E200037DF80911B0190911C0132DF842D8F7070
+:101E3000B1F580E4382E33C08F73382E30C09091C6
+:101E4000190110920A01811106C010920B018AE05B
+:101E500091E022E03AC0853019F49093130127C035
+:101E60008630F9F480911A01813019F48AE599E1FC
+:101E700004C0823041F488E499E190931101809389
+:101E8000100122E126C0833051F4911108C08CE684
+:101E900099E1909311018093100124E01AC020E091
+:101EA00018C0883079F0893031F4909315018AE0B8
+:101EB00091E020E00AC021E08A3009F020E08AE0C9
+:101EC00091E003C085E191E021E0909311018093BE
+:101ED000100180911E01811105C080911D018217A2
+:101EE00008F4282F209300011092120180910F0115
+:101EF00084FF31C0809100018F3F69F1C82F893084
+:101F000008F0C8E08C1B809300018091010198E8E3
+:101F1000892780930101CC2391F0E0911001F09189
+:101F2000110182E091E0DC0124912D9331962C2F58
+:101F3000280F2A13F9CFF0931101E09310016C2FB1
+:101F400082E091E043DDCC5FCC3019F08FEF8093DD
+:101F50000001C0930F01C30101963C01803B9440F6
+:101F600029F4EDE3F9E1E491EF3F89F4862D8C74D7
+:101F700011F0BA9801C0BA9A0AB605FED7CE85E12B
+:101F8000B19B85E18150E1F780E28ABFCFCEBA985C
+:101F9000B99A1BBE10BC209274000000CFCCFFCFBA
+:0400000300001940A0
:00000001FF
diff --git a/firmware/releases/t167_default.hex b/firmware/releases/t167_default.hex
index e88a98d..85b4ce1 100644
--- a/firmware/releases/t167_default.hex
+++ b/firmware/releases/t167_default.hex
@@ -1,6 +1,6 @@
:103A000018C0000039FA80059487090212000101EC
:103A100000803209040000000000000012011001C3
-:103A2000FF000008D0165307000200000001040345
+:103A2000FF000008D0165307010200000001040344
:103A3000090411241FBECEEFD2E0CDBFDEBF21E0CE
:103A4000A0E0B1E001C01D92AC32B207E1F742C183
:103A5000A82FB92F80E090E041E050EA609530E077
@@ -48,44 +48,44 @@
:103CF000E1F700C0000023988AE580930F018FEF61
:103D00008093000180916C00806480936C008091AE
:103D1000680082608093680082E084B9712C312C45
-:103D2000412C512C84E1C5EDD4E193B1987409F094
-:103D300084E1815021F41092130110920C01D99B5F
-:103D400003C09FDE712C03C02197209771F7A895BF
-:103D500022E032120CC0E0E0FAE3E058F10983E01F
-:103D600080935700E8953097C1F7412C512C832D53
-:103D7000803459F4F2013297E1158AE3F80750F4E0
-:103D800085E080935700E89505C0843019F4CD2B69
-:103D900011F4EEC0312C80911201835087FD98C040
-:103DA00090910D019D3209F091C0883009F08EC0CC
-:103DB00083EC809301018AE580930F0190911701B4
-:103DC000907680911801992361F1811108C084E0F7
-:103DD0009AE3909311018093100126E06CC081302A
-:103DE00059F44114510409F44CC080911B018078AE
-:103DF000482E50901C0145C0833081F480911901F8
-:103E000090911A0152DF80911B0190911C014DDFAE
-:103E1000842D8F77B1F580E4382E33C08F73382E20
-:103E200030C09091190110920A01811106C01092C0
-:103E30000B018AE091E022E03AC0853019F49093BA
-:103E4000130127C08630F9F480911A01813019F4EA
-:103E50008CE19AE304C0823041F48AE09AE39093C3
-:103E600011018093100122E126C0833051F4911199
-:103E700008C08EE29AE3909311018093100124E030
-:103E80001AC020E018C0883079F0893031F490935E
-:103E900015018AE091E020E00AC021E08A3009F0B3
-:103EA00020E08AE091E003C085E191E021E0909379
-:103EB00011018093100180911E01811105C0809134
-:103EC0001D01821708F4282F20930001109212017F
-:103ED00080910F0184FF31C0809100018F3F69F113
-:103EE000C82F893008F0C8E08C1B809300018091B6
-:103EF000010198E8892780930101CC2391F0E0919A
-:103F00001001F091110182E091E0DC0124912D93E8
-:103F100031962C2F280F2A13F9CFF0931101E0933B
-:103F200010016C2F82E091E0A8DDCC5FCC3019F05D
-:103F30008FEF80930001C0930F01C30101963C01F4
-:103F4000803B944029F4EDEFF9E3E491EF3F81F4F5
-:103F5000862D8C7411F0299801C0299AD99BE2CE44
-:103F600080E21E9980E28150E1F782E08BBBDACEDD
-:103F700021982998239A1092680010926C003ECDE7
-:023F8000FFCF71
+:103D2000412C512C84E6C5EDD4E193B1987409F08F
+:103D300084E6815021F41092130110920C01D99B5A
+:103D400005C09FDE82E08BBB712C03C021972097BA
+:103D500061F7A89522E032120CC0E0E0FAE3E058E7
+:103D6000F10983E080935700E8953097C1F7412C23
+:103D7000512C832D803459F4F2013297E1158AE3F6
+:103D8000F80750F485E080935700E89505C084302B
+:103D900019F4CD2B11F4EEC0312C80911201835017
+:103DA00087FD98C090910D019D3209F091C0883037
+:103DB00009F08EC083EC809301018AE580930F01A6
+:103DC00090911701907680911801992361F18111EA
+:103DD00008C084E09AE3909311018093100126E0DB
+:103DE0006CC0813059F44114510409F44CC08091E5
+:103DF0001B018078482E50901C0145C0833081F40F
+:103E00008091190190911A0150DF80911B019091CE
+:103E10001C014BDF842D8F77B1F580E4382E33C041
+:103E20008F73382E30C09091190110920A018111C0
+:103E300006C010920B018AE091E022E03AC0853082
+:103E400019F49093130127C08630F9F480911A0178
+:103E5000813019F48CE19AE304C0823041F48AE0A5
+:103E60009AE3909311018093100122E126C08330E0
+:103E700051F4911108C08EE29AE39093110180935E
+:103E8000100124E01AC020E018C0883079F0893091
+:103E900031F4909315018AE091E020E00AC021E01E
+:103EA0008A3009F020E08AE091E003C085E191E0EA
+:103EB00021E0909311018093100180911E018111E6
+:103EC00005C080911D01821708F4282F209300015E
+:103ED0001092120180910F0184FF31C08091000186
+:103EE0008F3F69F1C82F893008F0C8E08C1B8093A0
+:103EF00000018091010198E8892780930101CC237A
+:103F000091F0E0911001F091110182E091E0DC016B
+:103F100024912D9331962C2F280F2A13F9CFF0934B
+:103F20001101E09310016C2F82E091E0A6DDCC5FDF
+:103F3000CC3019F08FEF80930001C0930F01C301C3
+:103F400001963C01803B944029F4EDEFF9E3E491C4
+:103F5000EF3F81F4862D8C7411F0299801C0299AC5
+:103F6000D99BE0CE8CE11B9B8CE18150E1F782E094
+:103F70008BBBD8CE21982998239A10926800109272
+:063F80006C003CCDFFCFF8
:0400000300003A00BF
:00000001FF
diff --git a/firmware/releases/t841_default.hex b/firmware/releases/t841_default.hex
index 0102d58..a5b070f 100644
--- a/firmware/releases/t841_default.hex
+++ b/firmware/releases/t841_default.hex
@@ -1,101 +1,103 @@
-:1019C00017C019BA10859315090212000101008091
-:1019D0003209040000000000000012011001FF00A5
-:1019E0000008D01653070002000000010403090498
-:1019F00011241FBECFEFD2E0CDBFDEBF21E0A0E0BB
-:101A0000B1E001C01D92AC32B207E1F78FC1A82F3F
-:101A1000B92F80E090E041E050EA609530E009C0E5
-:101A20002D9182279795879510F084279527305E12
-:101A3000C8F36F5FA8F30895EADF8D939D9308952F
-:101A4000CF93CFB7CF93C395B09BE9F7B09B09C0B5
-:101A5000B09B07C0B09B05C0B09B03C0B09B01C04A
-:101A6000A7C0DF93C0910E01DD27CA5EDE4FB09B99
-:101A700002C0DF91EBCF2F930F931F9306B32FEF8D
-:101A800000FB20F94F933F9316B34FEF012700FB64
-:101A900021F93BE031C04E7F012F16B3216028C0F1
-:101AA000102F4D7F2260000006B329C04B7F2460B9
-:101AB000012F000016B32BC016B3477F28602AC041
-:101AC0004F7E06B320612CC04F7D16B320622FC01D
-:101AD0004F7B06B3206432C0422706B349934FEFD1
-:101AE0000000102710FB20F916B31370C9F1297FED
-:101AF00091F2012700FB21F906B3237F89F23150CF
-:101B000058F1102710FB22F916B3277E79F201272E
-:101B100000FB23F92F7C81F206B3102710FB24F978
-:101B20002F7971F200C016B3012700FB25F92F733E
-:101B300059F200C006B3102710FB26F9223040F2FC
-:101B400000C016B3012700FB27F9243028F64F7791
-:101B5000206816B30000F9CF10E21ABF00271DC09D
-:101B60003B503195C31BD04010E21ABF0881033CA3
-:101B700019F10B3409F120910C011981110F121385
-:101B8000EDCF093641F10D3211F0013E39F7CAE0CF
-:101B90001AB715FD02C0CA95D9F7009314013F91F9
-:101BA0004F911F910F912F91DF91CAB7C5FD4BCF78
-:101BB000CF91CFBFCF91089520911401222379F3C3
-:101BC000109112011123E1F43430E2F0309312014C
-:101BD00020930D0117C00091120101308CF40AE529
-:101BE00030910F0134FD10C000930F01C1E0D1E02E
-:101BF0000FC02795A8F45150A9F4220F0000F9CF87
-:101C00004AE503C042ED01C0432FC4E1D0E032E019
-:101C100017B31360C09A17BB08B320E413E05F93B7
-:101C2000012756E008BB279520F4515021F4220FDC
-:101C3000F9CF012756E000003B5A08BBD0F22795A8
-:101C400028F4515029F4220F0000F9CF012756E063
-:101C5000279508BB20F4515021F4220FF9CF01271A
-:101C600056E02991332308BB21F60C7F1091130114
-:101C7000110FC651D04008BB11F010930C0110E2B7
-:101C80001ABF016017B31C7F402F4C7F5F9100C0CB
-:101C900000C008BB17BB48BB82CF2FEFB0E8A0E065
-:101CA0004BE0B093740000008EE599E0B099FECF50
-:101CB000B09BFECF0197B099FDCFB19B09C096B301
-:101CC0009370E9F796B39370D1F7B09BFECFECCF4A
-:101CD00097FF03C0BA1B819501C0BA0FA69541F4C6
-:101CE000A0E430F4281718F030917400282FA1E0F8
-:101CF0004150B9F63093740000000895F201309716
-:101D000049F02AEB421629E1520631F48091740021
-:101D100090E002C08FED9CEC21E00C012093570075
-:101D2000E8951124CF0102962C010895EAEBF9E120
-:101D3000E491EF3F19F0E0937400000004B601FC59
-:101D400006C0EDEBF9E1E491EF3F09F04FC114BE9D
-:101D500088ED8093710087E081BDB89A2FE78CEF02
-:101D60009AE0215080409040E1F700C00000B89810
-:101D70008AE580930F018FEF8093000180B5826028
-:101D800080BD8BB780628BBFC298712C312C412CE7
-:101D9000512C14E1C0EADFE086B3837009F014E14E
-:101DA000115029F41092130110920C0176DF0AB63B
-:101DB00005FE03C045DE712C03C02197209761F713
-:101DC000A89522E032120CC0E0ECF9E1E054F109F0
-:101DD00083E080935700E8953097C1F7412C512C50
-:101DE000832D803459F4F2013297E03C89E1F80701
-:101DF00050F485E080935700E89505C0843019F4CD
-:101E0000CD2B11F4EFC0312C80911201835087FD4E
-:101E100098C090910D019D3209F091C0883009F071
-:101E20008EC083EC809301018AE580930F0190912D
-:101E30001701907680911801992361F1811108C0F2
-:101E400082EC99E1909311018093100126E06CC01F
-:101E5000813059F44114510409F44CC080911B01A4
-:101E6000807F482E50901C0145C0833081F48091C2
-:101E7000190190911A0142DF80911B0190911C0180
-:101E80003DDF842D8F70B1F580E4382E33C08F7321
-:101E9000382E30C09091190110920A01811106C0AC
-:101EA00010920B018AE091E022E03AC0853019F4EB
-:101EB0009093130127C08630F9F480911A01813084
-:101EC00019F48AED99E104C0823041F488EC99E17B
-:101ED000909311018093100122E126C0833051F4C8
-:101EE000911108C08CEE99E190931101809310013B
-:101EF00024E01AC020E018C0883079F0893031F42D
-:101F0000909315018AE091E020E00AC021E08A3038
-:101F100009F020E08AE091E003C085E191E021E052
-:101F2000909311018093100180911E01811105C0D1
-:101F300080911D01821708F4282F20930001109230
-:101F4000120180910F0184FF31C0809100018F3F09
-:101F500069F1C82F893008F0C8E08C1B809300011C
-:101F60008091010198E8892780930101CC2391F0A9
-:101F7000E0911001F091110182E091E0DC012491E7
-:101F80002D9331962C2F280F2A13F9CFF09311019E
-:101F9000E09310016C2F82E091E04EDDCC5FCC30FD
-:101FA00019F08FEF80930001C0930F01C3010196D8
-:101FB0003C01803B944029F4EDEBF9E1E491EF3FE3
-:101FC00089F4862D8C7411F0BA9801C0BA9A0AB6B9
-:101FD00005FEDFCE88E1B19988E18150E1F780E22A
-:101FE0008ABFD7CEBA98B89A1BBE10BCE7CCFFCF39
-:04000003000019C020
+:1019800017C0197A10859315090212000101008011
+:101990003209040000000000000012011001FF00E5
+:1019A0000008D016530701020000000104030904D7
+:1019B00011241FBECFEFD2E0CDBFDEBF21E0A0E0FB
+:1019C000B1E001C01D92AC32B207E1F799C1DC0170
+:1019D0008FEF9FEF332715C02D912827722F229567
+:1019E0002727822F269526952827239522703217A0
+:1019F00077952795822F8927972F76952795972773
+:101A00008227615048F7809590950895E0DF8D9387
+:101A10009D930895CF93CFB7CF93C395B09BE9F72C
+:101A2000B09B09C0B09B07C0B09B05C0B09B03C072
+:101A3000B09B01C0A7C0DF93C0910E01DD27CA5E35
+:101A4000DE4FB09B02C0DF91EBCF2F930F931F931C
+:101A500006B32FEF00FB20F94F933F9316B34FEFE0
+:101A6000012700FB21F93BE031C04E7F012F16B367
+:101A7000216028C0102F4D7F2260000006B329C0CE
+:101A80004B7F2460012F000016B32BC016B3477F95
+:101A900028602AC04F7E06B320612CC04F7D16B34C
+:101AA00020622FC04F7B06B3206432C0422706B3AA
+:101AB00049934FEF0000102710FB20F916B3137065
+:101AC000C9F1297F91F2012700FB21F906B3237F99
+:101AD00089F2315058F1102710FB22F916B3277EF6
+:101AE00079F2012700FB23F92F7C81F206B310273E
+:101AF00010FB24F92F7971F200C016B3012700FB07
+:101B000025F92F7359F200C006B3102710FB26F9F0
+:101B1000223040F200C016B3012700FB27F9243021
+:101B200028F64F77206816B30000F9CF10E21ABFED
+:101B300000271DC03B503195C31BD04010E21ABF97
+:101B40000881033C19F10B3409F120910C01198132
+:101B5000110F1213EDCF093641F10D3211F0013E94
+:101B600039F7CAE01AB715FD02C0CA95D9F7009334
+:101B700014013F914F911F910F912F91DF91CAB79F
+:101B8000C5FD4BCFCF91CFBFCF91089520911401C8
+:101B9000222379F3109112011123E1F43430E2F0A1
+:101BA0003093120120930D0117C0009112010130F2
+:101BB0008CF40AE530910F0134FD10C000930F0141
+:101BC000C1E0D1E00FC02795A8F45150A9F4220F2D
+:101BD0000000F9CF4AE503C042ED01C0432FC4E144
+:101BE000D0E032E017B31360C09A17BB08B320E40B
+:101BF00013E05F93012756E008BB279520F451506E
+:101C000021F4220FF9CF012756E000003B5A08BB10
+:101C1000D0F2279528F4515029F4220F0000F9CF73
+:101C2000012756E0279508BB20F4515021F4220FDC
+:101C3000F9CF012756E02991332308BB21F60C7F09
+:101C400010911301110FC651D04008BB11F0109331
+:101C50000C0110E21ABF016017B31C7F402F4C7FAC
+:101C60005F9100C000C008BB17BB48BB82CF2FEFFD
+:101C7000B0E8A0E04BE0B093740000008EE599E07E
+:101C8000B099FECFB09BFECF0197B099FDCFB19B2D
+:101C900009C096B39370E9F796B39370D1F7B09BF0
+:101CA000FECFECCF97FF03C0BA1B819501C0BA0FDE
+:101CB000A69541F4A0E430F4281718F03091740090
+:101CC000282FA1E04150B9F6309374000000089528
+:101CD000F201309749F02AE7421629E1520631F421
+:101CE0008091740090E002C08FEB9CEC21E00C012D
+:101CF00020935700E8951124CF0102962C010895F6
+:101D0000EAE7F9E1E491EF3F19F0E0937400000095
+:101D100004B601FC06C0EDE7F9E1E491EF3F09F0FC
+:101D200051C114BE88ED8093710087E081BDB89ADF
+:101D30002FE78CEF9AE0215080409040E1F700C0FF
+:101D40000000B8988AE580930F018FEF809300011F
+:101D500080B5826080BD8BB780628BBFC298712CCA
+:101D6000312C412C512C14E6C0EADFE086B383709D
+:101D700009F014E6115029F41092130110920C018D
+:101D800076DF0AB605FE05C045DE80E28ABF712C0B
+:101D900003C02197209751F7A89522E032120CC07A
+:101DA000E0E8F9E1E054F10983E080935700E89519
+:101DB0003097C1F7412C512C832D803459F4F20116
+:101DC0003297E03889E1F80750F485E080935700B6
+:101DD000E89505C0843019F4CD2B11F4EFC0312CF7
+:101DE00080911201835087FD98C090910D019D3222
+:101DF00009F091C0883009F08EC083EC8093010116
+:101E00008AE580930F0190911701907680911801D7
+:101E1000992361F1811108C082E899E19093110141
+:101E20008093100126E06CC0813059F441145104B4
+:101E300009F44CC080911B01807F482E50901C01FA
+:101E400045C0833081F48091190190911A0140DFDF
+:101E500080911B0190911C013BDF842D8F70B1F5A7
+:101E600080E4382E33C08F73382E30C09091190122
+:101E700010920A01811106C010920B018AE091E0D4
+:101E800022E03AC0853019F49093130127C08630C0
+:101E9000F9F480911A01813019F48AE999E104C0BA
+:101EA000823041F488E899E1909311018093100108
+:101EB00022E126C0833051F4911108C08CEA99E1E7
+:101EC000909311018093100124E01AC020E018C003
+:101ED000883079F0893031F4909315018AE091E0EF
+:101EE00020E00AC021E08A3009F020E08AE091E099
+:101EF00003C085E191E021E09093110180931001EE
+:101F000080911E01811105C080911D01821708F486
+:101F1000282F209300011092120180910F0184FF5D
+:101F200031C0809100018F3F69F1C82F893008F0DE
+:101F3000C8E08C1B809300018091010198E88927FB
+:101F400080930101CC2391F0E0911001F0911101F7
+:101F500082E091E0DC0124912D9331962C2F280F03
+:101F60002A13F9CFF0931101E09310016C2F82E056
+:101F700091E04CDDCC5FCC3019F08FEF8093000105
+:101F8000C0930F01C30101963C01803B944029F4AA
+:101F9000EDE7F9E1E491EF3F89F4862D8C7411F0BF
+:101FA000BA9801C0BA9A0AB605FEDDCE85E1B09BAB
+:101FB00085E18150E1F780E28ABFD5CEBA98B89A20
+:081FC0001BBE10BCDBCCFFCFFF
+:040000030000198060
:00000001FF
diff --git a/firmware/releases/t84_default.hex b/firmware/releases/t84_default.hex
index 7471f72..edc8f1a 100644
--- a/firmware/releases/t84_default.hex
+++ b/firmware/releases/t84_default.hex
@@ -1,98 +1,100 @@
-:101A000017C019FA4005930C090212000101008069
-:101A10003209040000000000000012011001FF0064
-:101A20000008D01653070002000000010403090457
-:101A300011241FBECFE5D2E0CDBFDEBF20E0A0E67F
-:101A4000B0E001C01D92AC38B207E1F783C1A82F06
-:101A5000B92F80E090E041E050EA609530E009C0A5
-:101A60002D9182279795879510F084279527305ED2
-:101A7000C8F36F5FA8F30895EADF8D939D930895EF
-:101A8000CF93CFB7CF93C395B09BE9F7B09B09C075
-:101A9000B09B07C0B09B05C0B09B03C0B09B01C00A
-:101AA000A7C0DF93C0916E00DD27CA58DF4FB09BFF
-:101AB00002C0DF91EBCF2F930F931F9306B32FEF4D
-:101AC00000FB20F94F933F9316B34FEF012700FB24
-:101AD00021F93BE031C04E7F012F16B3216028C0B1
-:101AE000102F4D7F2260000006B329C04B7F246079
-:101AF000012F000016B32BC016B3477F28602AC001
-:101B00004F7E06B320612CC04F7D16B320622FC0DC
-:101B10004F7B06B3206432C0422706B349934FEF90
-:101B20000000102710FB20F916B31370C9F1297FAC
-:101B300091F2012700FB21F906B3237F89F231508E
-:101B400058F1102710FB22F916B3277E79F20127EE
-:101B500000FB23F92F7C81F206B3102710FB24F938
-:101B60002F7971F200C016B3012700FB25F92F73FE
-:101B700059F200C006B3102710FB26F9223040F2BC
-:101B800000C016B3012700FB27F9243028F64F7751
-:101B9000206816B30000F9CF10E21ABF00271DC05D
-:101BA0003B503195C31BD04010E21ABF0881033C63
-:101BB00019F10B3409F120916C001981110F1213E6
-:101BC000EDCF093641F10D3211F0013E39F7CAE08F
-:101BD0001AB715FD02C0CA95D9F7009374003F915A
-:101BE0004F911F910F912F91DF91CAB7C5FD4BCF38
-:101BF000CF91CFBFCF91089520917400222379F324
-:101C0000109172001123E1F43430E2F0309372004D
-:101C100020936D0017C00091720001308CF40AE52A
-:101C200030916F0034FD10C000936F00C1E6D0E02A
-:101C30000FC02795A8F45150A9F4220F0000F9CF46
-:101C40004AE503C042ED01C0432FC4E1D0E032E0D9
-:101C500017B31360C09A17BB08B320E413E05F9377
-:101C6000012756E008BB279520F4515021F4220F9C
-:101C7000F9CF012756E000003B5A08BBD0F2279568
-:101C800028F4515029F4220F0000F9CF012756E023
-:101C9000279508BB20F4515021F4220FF9CF0127DA
-:101CA00056E02991332308BB21F60C7F1091730075
-:101CB000110FC651D04008BB11F010936C0010E218
-:101CC0001ABF016017B31C7F402F4C7F5F9100C08B
-:101CD00000C008BB17BB48BB82CF2FEFB0E8A0E025
-:101CE0004BE0B1BF00008EE599E0B099FECFB09B0C
-:101CF000FECF0197B099FDCFB19B09C096B3937009
-:101D0000E9F796B39370D1F7B09BFECFECCF97FF76
-:101D100003C0BA1B819501C0BA0FA69539F4A0E49F
-:101D200028F4281710F031B7282FA1E04150C9F648
-:101D300031BF00000895F201309711F48FEF9CEC51
-:101D400021E00C0120935700E8951124CF01029661
-:101D50002C01089581B7282E14BE88E181BD87E04B
-:101D600081BDB89A2FE78CEF9AE0215080409040D7
-:101D7000E1F700C00000B8988AE580936F008FEF0C
-:101D80008093600080B5826080BD8BB780628BBF1E
-:101D9000C298712C312C412C512C14E1C0EADFE0A7
-:101DA00086B3837009F014E1115029F41092730086
-:101DB00010926C0092DF0AB605FE03C061DE712C42
-:101DC00003C02197209761F7A89522E032120CC03A
-:101DD000E0E0FAE1E054F10983E080935700E895F0
-:101DE0003097C1F7412C512C832D803459F4F201E6
-:101DF0003297E1158AE1F80750F485E080935700A7
-:101E0000E89505C0843019F4CD2B11F4EFC0312CC6
-:101E100080917200835087FD98C090916D009D3233
-:101E200009F091C0883009F08EC083EC8093610086
-:101E30008AE580936F00909177009076809178008A
-:101E4000992361F1811108C082E09AE190937100B9
-:101E50008093700026E06CC0813059F44114510425
-:101E600009F44CC080917B00807C482E50907C000F
-:101E700045C0833081F48091790090917A005BDFD6
-:101E800080917B0090917C0056DF842D8F73B1F59B
-:101E900080E4382E33C08F73382E30C09091790093
-:101EA00010926A00811106C010926B008AE690E0E1
-:101EB00022E03AC0853019F49093730027C0863031
-:101EC000F9F480917A00813019F48AE19AE104C032
-:101ED000823041F488E09AE1909371008093700021
-:101EE00022E126C0833051F4911108C08CE29AE1BE
-:101EF000909371008093700024E01AC020E018C015
-:101F0000883079F0893031F4909375008AE690E05A
-:101F100020E00AC021E08A3009F020E08AE690E063
-:101F200003C085E790E021E09093710080937000FA
-:101F300080917E00811105C080917D00821708F498
-:101F4000282F209360001092720080916F0084FF10
-:101F500031C0809160008F3F69F1C82F893008F04F
-:101F6000C8E08C1B809360008091610098E889270D
-:101F700080936100CC2391F0E0917000F0917100AA
-:101F800082E690E0DC0124912D9331962C2F280FCE
-:101F90002A13F9CFF0937100E09370006C2F82E662
-:101FA00090E06ADDCC5FCC3019F08FEF8093600059
-:101FB000C0936F00C30101963C01803B944029F41B
-:101FC000EDEFF9E1E491EF3F89F4862D8C7411F087
-:101FD000BA9801C0BA9A0AB605FEDFCE88E1B19977
-:101FE00088E18150E1F780E28ABFD7CEBA98B89AEB
-:0C1FF0001BBE10BC21BE000001CDFFCFC5
-:0400000300001A00DF
+:1019800017C0197A4005930C09021200010100806A
+:101990003209040000000000000012011001FF00E5
+:1019A0000008D016530701020000000104030904D7
+:1019B00011241FBECFE5D2E0CDBFDEBF20E0A0E600
+:1019C000B0E001C01D92AC38B207E1F78DC1DC0177
+:1019D0008FEF9FEF332715C02D912827722F229567
+:1019E0002727822F269526952827239522703217A0
+:1019F00077952795822F8927972F76952795972773
+:101A00008227615048F7809590950895E0DF8D9387
+:101A10009D930895CF93CFB7CF93C395B09BE9F72C
+:101A2000B09B09C0B09B07C0B09B05C0B09B03C072
+:101A3000B09B01C0A7C0DF93C0916E00DD27CA58DC
+:101A4000DF4FB09B02C0DF91EBCF2F930F931F931B
+:101A500006B32FEF00FB20F94F933F9316B34FEFE0
+:101A6000012700FB21F93BE031C04E7F012F16B367
+:101A7000216028C0102F4D7F2260000006B329C0CE
+:101A80004B7F2460012F000016B32BC016B3477F95
+:101A900028602AC04F7E06B320612CC04F7D16B34C
+:101AA00020622FC04F7B06B3206432C0422706B3AA
+:101AB00049934FEF0000102710FB20F916B3137065
+:101AC000C9F1297F91F2012700FB21F906B3237F99
+:101AD00089F2315058F1102710FB22F916B3277EF6
+:101AE00079F2012700FB23F92F7C81F206B310273E
+:101AF00010FB24F92F7971F200C016B3012700FB07
+:101B000025F92F7359F200C006B3102710FB26F9F0
+:101B1000223040F200C016B3012700FB27F9243021
+:101B200028F64F77206816B30000F9CF10E21ABFED
+:101B300000271DC03B503195C31BD04010E21ABF97
+:101B40000881033C19F10B3409F120916C001981D3
+:101B5000110F1213EDCF093641F10D3211F0013E94
+:101B600039F7CAE01AB715FD02C0CA95D9F7009334
+:101B700074003F914F911F910F912F91DF91CAB740
+:101B8000C5FD4BCFCF91CFBFCF9108952091740069
+:101B9000222379F3109172001123E1F43430E2F042
+:101BA0003093720020936D0017C0009172000130D5
+:101BB0008CF40AE530916F0034FD10C000936F0083
+:101BC000C1E6D0E00FC02795A8F45150A9F4220F28
+:101BD0000000F9CF4AE503C042ED01C0432FC4E144
+:101BE000D0E032E017B31360C09A17BB08B320E40B
+:101BF00013E05F93012756E008BB279520F451506E
+:101C000021F4220FF9CF012756E000003B5A08BB10
+:101C1000D0F2279528F4515029F4220F0000F9CF73
+:101C2000012756E0279508BB20F4515021F4220FDC
+:101C3000F9CF012756E02991332308BB21F60C7F09
+:101C400010917300110FC651D04008BB11F01093D2
+:101C50006C0010E21ABF016017B31C7F402F4C7F4D
+:101C60005F9100C000C008BB17BB48BB82CF2FEFFD
+:101C7000B0E8A0E04BE0B1BF00008EE599E0B0997C
+:101C8000FECFB09BFECF0197B099FDCFB19B09C0AD
+:101C900096B39370E9F796B39370D1F7B09BFECFEC
+:101CA000ECCF97FF03C0BA1B819501C0BA0FA69570
+:101CB00039F4A0E428F4281710F031B7282FA1E058
+:101CC0004150C9F631BF00000895F201309711F478
+:101CD0008FEB9CEC21E00C0120935700E895112438
+:101CE000CF0102962C01089581B7282E14BE88E1F9
+:101CF00081BD87E081BDB89A2FE78CEF9AE0215033
+:101D000080409040E1F700C00000B8988AE58093D9
+:101D10006F008FEF8093600080B5826080BD8BB7CD
+:101D200080628BBFC298712C312C412C512C14E64F
+:101D3000C0EADFE086B3837009F014E6115029F49D
+:101D40001092730010926C0092DF0AB605FE05C077
+:101D500061DE80E28ABF712C03C02197209751F782
+:101D6000A89522E032120CC0E0E8F9E1E054F10954
+:101D700083E080935700E8953097C1F7412C512CB0
+:101D8000832D803459F4F2013297E03889E1F80765
+:101D900050F485E080935700E89505C0843019F42D
+:101DA000CD2B11F4EFC0312C80917200835087FD50
+:101DB00098C090916D009D3209F091C0883009F073
+:101DC0008EC083EC809361008AE580936F009091D0
+:101DD0007700907680917800992361F1811108C095
+:101DE00082E899E1909371008093700026E06CC0C6
+:101DF000813059F44114510409F44CC080917B00A6
+:101E0000807C482E50907C0045C0833081F48091C6
+:101E1000790090917A0059DF80917B0090917C004D
+:101E200054DF842D8F73B1F580E4382E33C08F7367
+:101E3000382E30C09091790010926A00811106C04E
+:101E400010926B008AE690E022E03AC0853019F4E7
+:101E50009093730027C08630F9F480917A00813026
+:101E600019F48AE999E104C0823041F488E899E1E3
+:101E7000909371008093700022E126C0833051F46A
+:101E8000911108C08CEA99E19093710080937000E1
+:101E900024E01AC020E018C0883079F0893031F48D
+:101EA000909375008AE690E020E00AC021E08A3035
+:101EB00009F020E08AE690E003C085E790E021E0A9
+:101EC000909371008093700080917E00811105C015
+:101ED00080917D00821708F4282F209360001092D3
+:101EE000720080916F0084FF31C0809160008F3F4D
+:101EF00069F1C82F893008F0C8E08C1B809360001E
+:101F00008091610098E8892780936100CC2391F04B
+:101F1000E0917000F091710082E690E0DC01249184
+:101F20002D9331962C2F280F2A13F9CFF09371009F
+:101F3000E09370006C2F82E690E068DDCC5FCC30DF
+:101F400019F08FEF80936000C0936F00C30101967A
+:101F50003C01803B944029F4EDE7F9E1E491EF3F47
+:101F600089F4862D8C7411F0BA9801C0BA9A0AB619
+:101F700005FEDDCE85E1B09B85E18150E1F780E291
+:101F80008ABFD5CEBA98B89A1BBE10BC21BE00003D
+:041F9000F5CCFFCFBE
+:040000030000198060
:00000001FF
diff --git a/firmware/releases/t85_aggressive.hex b/firmware/releases/t85_aggressive.hex
index ca675ac..930f147 100644
--- a/firmware/releases/t85_aggressive.hex
+++ b/firmware/releases/t85_aggressive.hex
@@ -1,6 +1,6 @@
:101A400017C01A3A4005930B0902120001010080E9
:101A50003209040000000000000012011001FF0024
-:101A60000008D01653070002000000010403090417
+:101A60000008D01653070102000000010403090416
:101A7000112420E0A0E6B0E001C01D92AC38B2070E
:101A8000E1F75BC1A82FB92F80E090E041E050EA78
:101A9000609530E009C02D9182279795879510F0C9
@@ -49,43 +49,43 @@
:101D400087E081BDBB9A2FEF85EA9EE0215080405D
:101D50009040E1F700C00000BB988AE580936F00D7
:101D60008FEF80936000AC9A8BB780628BBF712C31
-:101D7000312C412C512C14E1C5EDD4E186B388718E
-:101D800009F014E1115029F41092730010926C00C4
-:101D9000A6DF0AB605FE03C08EDE712C03C02197B4
-:101DA000209761F7A89522E032120CC0E0E4FAE136
-:101DB000E054F10983E080935700E8953097C1F72C
-:101DC000412C512C832D803459F4F2013297E034A8
-:101DD0008AE1F80750F485E080935700E89505C044
-:101DE000843019F4CD2B11F4E9C0312C80917200AC
-:101DF000835087FD98C090916D009D3209F091C08D
-:101E0000883009F08EC083EC809361008AE580936E
-:101E10006F0090917700907680917800992361F11E
-:101E2000811108C082E49AE1909371008093700060
-:101E300026E06CC0813059F44114510409F44CC0BF
-:101E400080917B00807C482E50907C0045C0833080
-:101E500081F48091790090917A0064DF80917B0019
-:101E600090917C005FDF842D8F73B1F580E4382E74
-:101E700033C08F73382E30C09091790010926A0071
-:101E8000811106C010926B008AE690E022E03AC011
-:101E9000853019F49093730027C08630F9F480914F
-:101EA0007A00813019F48AE59AE104C0823041F465
-:101EB00088E49AE1909371008093700022E126C03B
-:101EC000833051F4911108C08CE69AE1909371002F
-:101ED0008093700024E01AC020E018C0883079F0A8
-:101EE000893031F4909375008AE690E020E00AC0D2
-:101EF00021E08A3009F020E08AE690E003C085E71F
-:101F000090E021E0909371008093700080917E00BA
-:101F1000811105C080917D00821708F4282F20933D
-:101F200060001092720080916F0084FF31C0809138
-:101F300060008F3F69F1C82F893008F0C8E08C1B22
-:101F4000809360008091610098E889278093610008
-:101F5000CC2391F0E0917000F091710082E690E066
-:101F6000DC0124912D9331962C2F280F2A13F9CFC1
-:101F7000F0937100E09370006C2F82E690E097DDA3
-:101F8000CC5FCC3019F08FEF80936000C0936F006E
-:101F9000C30101963C01803B944029F4EDE3FAE152
-:101FA000E491EF3F59F40AB605FEE5CE80E2B4991C
-:101FB00080E28150E1F780E28ABFDDCEBB9A1BBE92
-:061FC00015BA3CCDFFCF75
+:101D7000312C412C512C14E6C5EDD4E186B3887189
+:101D800009F014E6115029F41092730010926C00BF
+:101D9000A6DF0AB605FE05C08EDE80E28ABF712C82
+:101DA00003C02197209751F7A89522E032120CC06A
+:101DB000E0E4FAE1E054F10983E080935700E8950C
+:101DC0003097C1F7412C512C832D803459F4F20106
+:101DD0003297E0348AE1F80750F485E080935700A9
+:101DE000E89505C0843019F4CD2B11F4E9C0312CED
+:101DF00080917200835087FD98C090916D009D3254
+:101E000009F091C0883009F08EC083EC80936100A6
+:101E10008AE580936F0090917700907680917800AA
+:101E2000992361F1811108C082E49AE190937100D5
+:101E30008093700026E06CC0813059F44114510445
+:101E400009F44CC080917B00807C482E50907C002F
+:101E500045C0833081F48091790090917A0062DFEF
+:101E600080917B0090917C005DDF842D8F73B1F5B4
+:101E700080E4382E33C08F73382E30C090917900B3
+:101E800010926A00811106C010926B008AE690E001
+:101E900022E03AC0853019F49093730027C0863051
+:101EA000F9F480917A00813019F48AE59AE104C04E
+:101EB000823041F488E49AE190937100809370003D
+:101EC00022E126C0833051F4911108C08CE69AE1DA
+:101ED000909371008093700024E01AC020E018C035
+:101EE000883079F0893031F4909375008AE690E07B
+:101EF00020E00AC021E08A3009F020E08AE690E084
+:101F000003C085E790E021E090937100809370001A
+:101F100080917E00811105C080917D00821708F4B8
+:101F2000282F209360001092720080916F0084FF30
+:101F300031C0809160008F3F69F1C82F893008F06F
+:101F4000C8E08C1B809360008091610098E889272D
+:101F500080936100CC2391F0E0917000F0917100CA
+:101F600082E690E0DC0124912D9331962C2F280FEE
+:101F70002A13F9CFF0937100E09370006C2F82E682
+:101F800090E095DDCC5FCC3019F08FEF809360004E
+:101F9000C0936F00C30101963C01803B944029F43B
+:101FA000EDE3FAE1E491EF3F59F40AB605FEE3CE22
+:101FB0008CE1B39B8CE18150E1F780E28ABFDBCEFC
+:0A1FC000BB9A1BBE15BA3ACDFFCF45
:0400000300001A409F
:00000001FF
diff --git a/firmware/releases/t85_default.hex b/firmware/releases/t85_default.hex
index 091c1b9..57dcb53 100644
--- a/firmware/releases/t85_default.hex
+++ b/firmware/releases/t85_default.hex
@@ -1,6 +1,6 @@
:1019800017C0197A4005930B09021200010100806B
:101990003209040000000000000012011001FF00E5
-:1019A0000008D016530700020000000104030904D8
+:1019A0000008D016530701020000000104030904D7
:1019B00011241FBECFE5D2E0CDBFDEBF20E0A0E600
:1019C000B0E001C01D92AC38B207E1F7AFC1A82F5B
:1019D000B92F80E090E041E050EA609530E009C026
@@ -61,43 +61,43 @@
:101D400087E081BDBB9A2FE28BE19FE0215080406C
:101D50009040E1F700C00000BB988AE580936F00D7
:101D60008FEF80936000AC9A8BB780628BBF712C31
-:101D7000312C412C512C14E1CCE7D5E186B388718C
-:101D800009F014E1115029F41092730010926C00C4
-:101D900088DF0AB605FE03C033DE712C03C021972D
-:101DA000209761F7A89522E032120CC0E0E8F9E133
-:101DB000E054F10983E080935700E8953097C1F72C
-:101DC000412C512C832D803459F4F2013297E038A4
-:101DD00089E1F80750F485E080935700E89505C045
-:101DE000843019F4CD2B11F4E9C0312C80917200AC
-:101DF000835087FD98C090916D009D3209F091C08D
-:101E0000883009F08EC083EC809361008AE580936E
-:101E10006F0090917700907680917800992361F11E
-:101E2000811108C082E899E190937100809370005D
-:101E300026E06CC0813059F44114510409F44CC0BF
-:101E400080917B00807C482E50907C0045C0833080
-:101E500081F48091790090917A0051DF80917B002C
-:101E600090917C004CDF842D8F73B1F580E4382E87
-:101E700033C08F73382E30C09091790010926A0071
-:101E8000811106C010926B008AE690E022E03AC011
-:101E9000853019F49093730027C08630F9F480914F
-:101EA0007A00813019F48AE999E104C0823041F462
-:101EB00088E899E1909371008093700022E126C038
-:101EC000833051F4911108C08CEA99E1909371002C
-:101ED0008093700024E01AC020E018C0883079F0A8
-:101EE000893031F4909375008AE690E020E00AC0D2
-:101EF00021E08A3009F020E08AE690E003C085E71F
-:101F000090E021E0909371008093700080917E00BA
-:101F1000811105C080917D00821708F4282F20933D
-:101F200060001092720080916F0084FF31C0809138
-:101F300060008F3F69F1C82F893008F0C8E08C1B22
-:101F4000809360008091610098E889278093610008
-:101F5000CC2391F0E0917000F091710082E690E066
-:101F6000DC0124912D9331962C2F280F2A13F9CFC1
-:101F7000F0937100E09370006C2F82E690E03CDDFE
-:101F8000CC5FCC3019F08FEF80936000C0936F006E
-:101F9000C30101963C01803B944029F4EDE7F9E14F
-:101FA000E491EF3F59F40AB605FEE5CE81E2B4991B
-:101FB00081E28150E1F780E28ABFDDCEBB9A1BBE91
-:061FC00015BADCCCFFCFD6
+:101D7000312C412C512C14E6CCE7D5E186B3887187
+:101D800009F014E6115029F41092730010926C00BF
+:101D900088DF0AB605FE05C033DE80E28ABF712CFB
+:101DA00003C02197209751F7A89522E032120CC06A
+:101DB000E0E8F9E1E054F10983E080935700E89509
+:101DC0003097C1F7412C512C832D803459F4F20106
+:101DD0003297E03889E1F80750F485E080935700A6
+:101DE000E89505C0843019F4CD2B11F4E9C0312CED
+:101DF00080917200835087FD98C090916D009D3254
+:101E000009F091C0883009F08EC083EC80936100A6
+:101E10008AE580936F0090917700907680917800AA
+:101E2000992361F1811108C082E899E190937100D2
+:101E30008093700026E06CC0813059F44114510445
+:101E400009F44CC080917B00807C482E50907C002F
+:101E500045C0833081F48091790090917A004FDF02
+:101E600080917B0090917C004ADF842D8F73B1F5C7
+:101E700080E4382E33C08F73382E30C090917900B3
+:101E800010926A00811106C010926B008AE690E001
+:101E900022E03AC0853019F49093730027C0863051
+:101EA000F9F480917A00813019F48AE999E104C04B
+:101EB000823041F488E899E190937100809370003A
+:101EC00022E126C0833051F4911108C08CEA99E1D7
+:101ED000909371008093700024E01AC020E018C035
+:101EE000883079F0893031F4909375008AE690E07B
+:101EF00020E00AC021E08A3009F020E08AE690E084
+:101F000003C085E790E021E090937100809370001A
+:101F100080917E00811105C080917D00821708F4B8
+:101F2000282F209360001092720080916F0084FF30
+:101F300031C0809160008F3F69F1C82F893008F06F
+:101F4000C8E08C1B809360008091610098E889272D
+:101F500080936100CC2391F0E0917000F0917100CA
+:101F600082E690E0DC0124912D9331962C2F280FEE
+:101F70002A13F9CFF0937100E09370006C2F82E682
+:101F800090E03ADDCC5FCC3019F08FEF80936000A9
+:101F9000C0936F00C30101963C01803B944029F43B
+:101FA000EDE7F9E1E491EF3F59F40AB605FEE3CE1F
+:101FB0008DE1B39B8DE18150E1F780E28ABFDBCEFA
+:0A1FC000BB9A1BBE15BADACCFFCFA6
:040000030000198060
:00000001FF
diff --git a/firmware/usbconfig.h b/firmware/usbconfig.h
index 65864df..7ca31c5 100644
--- a/firmware/usbconfig.h
+++ b/firmware/usbconfig.h
@@ -184,7 +184,18 @@ return;\
/* define this macro to 1 if you want the function usbMeasureFrameLength()
* compiled in. This function can be used to calibrate the AVR's RC oscillator.
*/
-#define USB_USE_FAST_CRC 0
+
+
+#if USB_CFG_CLOCK_KHZ<16000
+ #define USB_USE_FAST_CRC 1
+#else
+ #define USB_USE_FAST_CRC 0
+#endif
+
+/* If the CPU clock is below 16Mhz you have to use the faster CRC routines.
+ * otherwise time outs may occur on USB3.0 ports. This adds 20 bytes.
+ */
+
/* The assembler module has two implementations for the CRC algorithm. One is
* faster, the other is smaller. This CRC routine is only used for transmitted
* messages where timing is not critical. The faster routine needs 31 cycles
diff --git a/firmware/usbdrv/usbdrvasm.S b/firmware/usbdrv/usbdrvasm.S
index 32ce8ef..d927564 100644
--- a/firmware/usbdrv/usbdrvasm.S
+++ b/firmware/usbdrv/usbdrvasm.S
@@ -142,10 +142,14 @@ RTMODEL "__rt_version", "3"
#endif
+
#if USB_USE_FAST_CRC
; This implementation is faster, but has bigger code size
-; Thanks to Slawomir Fras (BoskiDialer) for this code!
+; This version has been optimized in size compared to the original
+; fast CRC by Shay Green, January 2014.
+
+; Thanks to Slawomir Fras (BoskiDialer) for the original contribution.
; It implements the following C pseudo-code:
; unsigned table(unsigned char x)
; {
@@ -174,36 +178,31 @@ RTMODEL "__rt_version", "3"
; scratch r23
; resCrc r24+r25 / r16+r17
; ptr X / Z
+
usbCrc16:
- mov ptrL, argPtrL
- mov ptrH, argPtrH
+ movw ptrL, argPtrL
ldi resCrcL, 0xFF
ldi resCrcH, 0xFF
+ clr bitCnt ; zero
rjmp usbCrc16LoopTest
usbCrc16ByteLoop:
ld byte, ptr+
- eor resCrcL, byte ; resCrcL is now 'x' in table()
- mov byte, resCrcL ; compute parity of 'x'
+ eor byte, resCrcL ; scratch is now 'x' in table()
+ mov scratch, byte ; compute parity of 'x'
swap byte
- eor byte, resCrcL
- mov scratch, byte
+ eor byte, scratch
+ mov resCrcL, byte
lsr byte
lsr byte
- eor byte, scratch
+ eor byte, resCrcL
inc byte
- lsr byte
- andi byte, 1 ; byte is now parity(x)
- mov scratch, resCrcL
- mov resCrcL, resCrcH
- eor resCrcL, byte ; low byte of if(parity(x)) value ^= 0xc001;
- neg byte
- andi byte, 0xc0
- mov resCrcH, byte ; high byte of if(parity(x)) value ^= 0xc001;
- clr byte
- lsr scratch
- ror byte
- eor resCrcH, scratch
- eor resCrcL, byte
+ andi byte, 2 ; byte is now parity(x) << 1
+ cp bitCnt, byte ; c = (byte != 0), then put in high bit
+ ror scratch ; so that after xoring, shifting, and xoring, it gives
+ ror byte ; the desired 0xC0 with resCrcH
+ mov resCrcL, byte
+ eor resCrcL, resCrcH
+ mov resCrcH, scratch
lsr scratch
ror byte
eor resCrcH, scratch
@@ -214,8 +213,8 @@ usbCrc16LoopTest:
com resCrcL
com resCrcH
ret
-
-#else /* USB_USE_FAST_CRC */
+
+#else // USB_USE_FAST_CRC
; This implementation is slower, but has less code size
;
@@ -258,7 +257,7 @@ usbCrcReady:
ret
; Thanks to Reimar Doeffinger for optimizing this CRC routine!
-#endif /* USB_USE_FAST_CRC */
+#endif // USB_USE_FAST_CRC
; extern unsigned usbCrc16Append(unsigned char *data, unsigned char len);
usbCrc16Append: