1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
== 1.11 - 2013-01-04 ==
Firmware:
o New features
- The bootloader will now always start if no user program was loaded, regardless of the
entry condition.
- The bootloader will not quit if no user program is loaded. This prevents periodic
re-enumeration of the bootloader and should make driver installation much easier.
The new "--erase-only" function of the commandline tool can be used to erase the
user program and create a stable device for easier installation.
- New entry modes can be selected in "bootloader.h". Please read the comments for details.
+ ENTRY_ALWAYS
+ ENTRY_WATCHDOG
+ ENTRY_EXT_RESET
+ ENTRY_JUMPER
- The bootloader is now able to cope with a fused-on watch dog timer.
o Internal changes
- A CRC is now performed on all incoming USB traffic.
- The flash buffer is now cleaned before loading a page to prevent data corruption.
- Further size optimizations (62 bytes gained, despite new features)
+ Changed event system into a directly mapped command system.
+ Introduce union types and forced global variables to registers.
- More source code cleaning up.
o Size is now 1816 bytes, 6380 bytes user space. Note that avr-objcopy reports 8 bytes
more due to the zero vector table which is overwritten by the userprogram.
Commandline tool:
o New features (Note: All new features are compatible with previous firmware releases)
- Added "--erase-only" command to erase the device without writing a new user program.
- The commandline tool will not transfer empty memory pages any more, resulting in
a significantly reduced programming time in many cases.
- Client firmware version will now be displayed after connecting.
o Internal changes:
- Clean up of source code
- Bugfixes (see commits)
== 1.10rc3 - 2013-12-15 ==
firmware:
o Major reorganization of the source and build system.
- Used own crt1.s to create vector table in the first flash-page.
- Removed all functions related to vector-table writing.
- Refactored code and inlined all functions that were only called once.
- Removed redundantly defined types to avoid confusion. Only C99 types are used now.
o Size is now 1878 bytes, 6314 bytes user space. No changes to functionality.
== 1.10rc2 - 2013-11-25 ==
firmware:
o It seems that the USB specification does not define a maximum delay from device power up until
the host issues a bus reset. Therefore too short delays AUTO_EXIT_NO_USB_MS can lead to the
bootloader exiting before enumeration on some systems. Disabled AUTO_EXIT_NO_USB_MS in default configuration.
== 1.10rc1 - 2013-11-25 ==
firmware:
Version jump to 1.10 due to major changes in firmware by @cpldcpu.
o Reduced code size to below 2kb (1974 with standard configuration) by implementing oscillator
calibration in assembler and various local code tweaking. See Github commit history for full details.
This version has 6208 bytes programmable code space.
o Micronucleus will now simulate an USB-disconnect when exiting the bootloader. This prevents various
issues with having a non-responsive USB device, including crashing the host tool. It is now possible
to enter the bootloader again by resetting the device using the watchdog timer or the reset input without
physically disconnecting from USB.
o Cleaned up bootloaderconfig.h
o Introduced a second time-out (AUTO_EXIT_NO_USB_MS) if no USB reset from the host is detected. This can be used
to quit the bootloader early if the device is not connected to USB. The bootloader will enter the user
program after ~0.8s with the default settings instead of 6s when USB is connected.
o Introduced optional code to flash a LED. See LED_PRESENT in bootloaderconfig.h for details.
Careful: Right now enabling the LED-code requires setting the bootloader base address to 0x1800 due
to increased code size.
== 1.06-jumper-v2 - 2013-5-20 ==
firmware:
o Fix horrible bug reported by @giannoug where jumper pin is made in to an output instead of input!
-- **Install update immediately** - current version creates short circuits!!!
-- Previous version of 1.06 jumper deleted due to short circuits - do not use previous versions either
== 1.06 - 2013-3-4 ==
firmware:
o Store 16.5mhz oscillator calibration value in tiny vector table
o At user program startup, restore oscillator calibration value stored together with program
-> User programs always start on the calibration value from the last time they were uploaded
o Slightly too big to have 6076 programmable bytes, reverted to having 6012 bytes free for user program
-> Hopefully a future version can slim down again and get another page free!
== 1.05 - 2013-2-8 ==
firmware:
o Revert all timing aspects to be like 1.02 - the most reliable version ever as judged by digistump
this means this is a 5 sec boot time release
o The only meaningful difference between using this and version 1.02 is 1.02 has 6010 bytes of
programmable space and 1.05 has 6076 bytes. This release also has the improved idlePolls mechanism
which might improve reliability in some cases
o I'm not totally sure this version is as reliable as 1.02. Maybe it's better? Maybe it's worse?
o Now includes a -jumper. "-jumper" works exactly the same with four exceptions:
-> Bootloader never times out (no 5 seconds waiting)
-> Bootloader runs user program immediately
-> If you want to upload something, connect jumper between D5 / reset pin and ground
-> You obviously can't use this on chips which don't have their reset pin disabled
:: I made it for DeuxVis on digispark forum, but I mostly use it on my LittleWire. It's really great for that!
upgrade:
o When finished upgrading runs new bootloader firmware.
-> you can watch for the new bootloader to connect to see when the upgrade has finished
-> upgrades only take about half a second, so you could just wait like five seconds
:: if upgrading to a micronucleus -jumper variant you might like to connect the jumper before you upgrade
== 1.04 - 2012-10-5 ==
firmware:
o Further reduction in code size - not enough to gain another page yet
o Reduced default configuration's timeout from 5 seconds to 2.5 seconds - seems to work on Mac, Windows 7, and Linux
o Timeout mechanism now more robust - any usb requests reset timeout
o Faster Uploads - write sleeps reduced from 8ms to 6ms, for a roughly 25% speed boost
o You can poll info requests once every half second or so to keep bootloader captive, so it doesn't launch user program
-- this is useful for programs which are likely to do strange things to the USB data lines - less freaking out usb
-- root hubs in specialist applications where that can be predicted
o Added warning when bootloader configured with idle timeout below duration of erase request (the longest running request)
o Option to restore OSCCAL to it's factory setting - run your programs at 16.0mhz instead of 16.5mhz
o Option to set CLKPR prescale selection - You can configure micronucleus to run on devices with clkdiv8 fuse set. By default it returns to clkdiv8 after (2mhz real speed), but you can optionally specify a different division, to have 8mhz, 4mhz, or a much lower speed.
upgrade:
o Micronucleus now includes a viral upgrade tool. Upload these hex files via an older version of micronucleus or some other attiny85 bootloader like fast tiny & mega uart bootloader, and when the program runs it'll brick the chip, patch the bootloader with a new version, then patch it's own interrupt vector table to point to the bootloader. After letting it run for at least five seconds, power cycle the device and it should boot right in to the new bootloader!
o I (bluebie) make no guarentees that any of micronucleus wont brick your chips. Be careful if you don't have access to a fuse resetter or HVSP programmer.
commandline:
o Added percentage progress logging
o New --dump-progress option outputs computer readable JSON lines, for driving GUIs, including raw progress bar data
o Can pass "-" as filename to upload via stdin, for GUI apps
o Exit code is more reliably not zero when an error occurs, and zero when upload succeeds flawlessly
o Detect and refuse to upload to unknown newer versions of firmware
o Adjusted some delays - uploads now take about a quarter to half of a second less time
o `make install` works and installs to /usr/local/bin (anyone know how to make this smarter?)
- notice: I think there may be a bug uploading raw binary files, but intel hex files seem to work fine
commandline's c library:
o progress argument to eraseFlash and writeFlash functions - a function to call frequently with progress data
-- eraseFlash: library currently simulates progress, by providing the erase_sleep progress in steps of 1%
-- writeFlash: provides real progress, at about one update every write_sleep milliseconds (usually about 8-10ms)
== 1.03 - released 2012-9-30 ==
o Reduced bootloader size by one page, expanding memory for user program by 64 bytes
o Adjusted tinyvector table to correct size (four bytes) - giving user program two more bytes
o Changed upload protocol in an incompatible way to enable smaller bootloaders in the future
o Now we have a command line tool (which detects 1.02 and works around upload protocol differences)
o Now requires all pages be written
o 'Finish' command repurposed as 'run' command for bootloader configs where running user program maybe optional
== 1.02 - released 2012-9-30 ==
o Most recent build before next release where some subtle protocol changes took place
|