79 |
pfowler |
1 |
This file documents changes in the firmware-only USB driver for atmel's AVR
|
|
|
2 |
microcontrollers. New entries are always appended to the end of the file.
|
|
|
3 |
Scroll down to the bottom to see the most recent changes.
|
|
|
4 |
|
|
|
5 |
2005-04-01:
|
|
|
6 |
- Implemented endpoint 1 as interrupt-in endpoint.
|
|
|
7 |
- Moved all configuration options to usbconfig.h which is not part of the
|
|
|
8 |
driver.
|
|
|
9 |
- Changed interface for usbVendorSetup().
|
|
|
10 |
- Fixed compatibility with ATMega8 device.
|
|
|
11 |
- Various minor optimizations.
|
|
|
12 |
|
|
|
13 |
2005-04-11:
|
|
|
14 |
- Changed interface to application: Use usbFunctionSetup(), usbFunctionRead()
|
|
|
15 |
and usbFunctionWrite() now. Added configuration options to choose which
|
|
|
16 |
of these functions to compile in.
|
|
|
17 |
- Assembler module delivers receive data non-inverted now.
|
|
|
18 |
- Made register and bit names compatible with more AVR devices.
|
|
|
19 |
|
|
|
20 |
2005-05-03:
|
|
|
21 |
- Allow address of usbRxBuf on any memory page as long as the buffer does
|
|
|
22 |
not cross 256 byte page boundaries.
|
|
|
23 |
- Better device compatibility: works with Mega88 now.
|
|
|
24 |
- Code optimization in debugging module.
|
|
|
25 |
- Documentation updates.
|
|
|
26 |
|
|
|
27 |
2006-01-02:
|
|
|
28 |
- Added (free) default Vendor- and Product-IDs bought from voti.nl.
|
|
|
29 |
- Added USBID-License.txt file which defines the rules for using the free
|
|
|
30 |
shared VID/PID pair.
|
|
|
31 |
- Added Readme.txt to the usbdrv directory which clarifies administrative
|
|
|
32 |
issues.
|
|
|
33 |
|
|
|
34 |
2006-01-25:
|
|
|
35 |
- Added "configured state" to become more standards compliant.
|
|
|
36 |
- Added "HALT" state for interrupt endpoint.
|
|
|
37 |
- Driver passes the "USB Command Verifier" test from usb.org now.
|
|
|
38 |
- Made "serial number" a configuration option.
|
|
|
39 |
- Minor optimizations, we now recommend compiler option "-Os" for best
|
|
|
40 |
results.
|
|
|
41 |
- Added a version number to usbdrv.h
|
|
|
42 |
|
|
|
43 |
2006-02-03:
|
|
|
44 |
- New configuration variable USB_BUFFER_SECTION for the memory section where
|
|
|
45 |
the USB rx buffer will go. This defaults to ".bss" if not defined. Since
|
|
|
46 |
this buffer MUST NOT cross 256 byte pages (not even touch a page at the
|
|
|
47 |
end), the user may want to pass a linker option similar to
|
|
|
48 |
"-Wl,--section-start=.mybuffer=0x800060".
|
|
|
49 |
- Provide structure for usbRequest_t.
|
|
|
50 |
- New defines for USB constants.
|
|
|
51 |
- Prepared for HID implementations.
|
|
|
52 |
- Increased data size limit for interrupt transfers to 8 bytes.
|
|
|
53 |
- New macro usbInterruptIsReady() to query interrupt buffer state.
|
|
|
54 |
|
|
|
55 |
2006-02-18:
|
|
|
56 |
- Ensure that the data token which is sent as an ack to an OUT transfer is
|
|
|
57 |
always zero sized. This fixes a bug where the host reports an error after
|
|
|
58 |
sending an out transfer to the device, although all data arrived at the
|
|
|
59 |
device.
|
|
|
60 |
- Updated docs in usbdrv.h to reflect changed API in usbFunctionWrite().
|
|
|
61 |
|
|
|
62 |
* Release 2006-02-20
|
|
|
63 |
|
|
|
64 |
- Give a compiler warning when compiling with debugging turned on.
|
|
|
65 |
- Added Oleg Semyonov's changes for IAR-cc compatibility.
|
|
|
66 |
- Added new (optional) functions usbDeviceConnect() and usbDeviceDisconnect()
|
|
|
67 |
(also thanks to Oleg!).
|
|
|
68 |
- Rearranged tests in usbPoll() to save a couple of instructions in the most
|
|
|
69 |
likely case that no actions are pending.
|
|
|
70 |
- We need a delay between the SET ADDRESS request until the new address
|
|
|
71 |
becomes active. This delay was handled in usbPoll() until now. Since the
|
|
|
72 |
spec says that the delay must not exceed 2ms, previous versions required
|
|
|
73 |
aggressive polling during the enumeration phase. We have now moved the
|
|
|
74 |
handling of the delay into the interrupt routine.
|
|
|
75 |
- We must not reply with NAK to a SETUP transaction. We can only achieve this
|
|
|
76 |
by making sure that the rx buffer is empty when SETUP tokens are expected.
|
|
|
77 |
We therefore don't pass zero sized data packets from the status phase of
|
|
|
78 |
a transfer to usbPoll(). This change MAY cause troubles if you rely on
|
|
|
79 |
receiving a less than 8 bytes long packet in usbFunctionWrite() to
|
|
|
80 |
identify the end of a transfer. usbFunctionWrite() will NEVER be called
|
|
|
81 |
with a zero length.
|
|
|
82 |
|
|
|
83 |
* Release 2006-03-14
|
|
|
84 |
|
|
|
85 |
- Improved IAR C support: tiny memory model, more devices
|
|
|
86 |
- Added template usbconfig.h file under the name usbconfig-prototype.h
|
|
|
87 |
|
|
|
88 |
* Release 2006-03-26
|
|
|
89 |
|
|
|
90 |
- Added provision for one more interrupt-in endpoint (endpoint 3).
|
|
|
91 |
- Added provision for one interrupt-out endpoint (endpoint 1).
|
|
|
92 |
- Added flowcontrol macros for USB.
|
|
|
93 |
- Added provision for custom configuration descriptor.
|
|
|
94 |
- Allow ANY two port bits for D+ and D-.
|
|
|
95 |
- Merged (optional) receive endpoint number into global usbRxToken variable.
|
|
|
96 |
- Use USB_CFG_IOPORTNAME instead of USB_CFG_IOPORT. We now construct the
|
|
|
97 |
variable name from the single port letter instead of computing the address
|
|
|
98 |
of related ports from the output-port address.
|
|
|
99 |
|
|
|
100 |
* Release 2006-06-26
|
|
|
101 |
|
|
|
102 |
- Updated documentation in usbdrv.h and usbconfig-prototype.h to reflect the
|
|
|
103 |
new features.
|
|
|
104 |
- Removed "#warning" directives because IAR does not understand them. Use
|
|
|
105 |
unused static variables instead to generate a warning.
|
|
|
106 |
- Do not include <avr/io.h> when compiling with IAR.
|
|
|
107 |
- Introduced USB_CFG_DESCR_PROPS_* in usbconfig.h to configure how each
|
|
|
108 |
USB descriptor should be handled. It is now possible to provide descriptor
|
|
|
109 |
data in Flash, RAM or dynamically at runtime.
|
|
|
110 |
- STALL is now a status in usbTxLen* instead of a message. We can now conform
|
|
|
111 |
to the spec and leave the stall status pending until it is cleared.
|
|
|
112 |
- Made usbTxPacketCnt1 and usbTxPacketCnt3 public. This allows the
|
|
|
113 |
application code to reset data toggling on interrupt pipes.
|
|
|
114 |
|
|
|
115 |
* Release 2006-07-18
|
|
|
116 |
|
|
|
117 |
- Added an #if !defined __ASSEMBLER__ to the warning in usbdrv.h. This fixes
|
|
|
118 |
an assembler error.
|
|
|
119 |
- usbDeviceDisconnect() takes pull-up resistor to high impedance now.
|
|
|
120 |
|
|
|
121 |
* Release 2007-02-01
|
|
|
122 |
|
|
|
123 |
- Merged in some code size improvements from usbtiny (thanks to Dick
|
|
|
124 |
Streefland for these optimizations!)
|
|
|
125 |
- Special alignment requirement for usbRxBuf not required any more. Thanks
|
|
|
126 |
again to Dick Streefland for this hint!
|
|
|
127 |
- Reverted to "#warning" instead of unused static variables -- new versions
|
|
|
128 |
of IAR CC should handle this directive.
|
|
|
129 |
- Changed Open Source license to GNU GPL v2 in order to make linking against
|
|
|
130 |
other free libraries easier. We no longer require publication of the
|
|
|
131 |
circuit diagrams, but we STRONGLY encourage it. If you improve the driver
|
|
|
132 |
itself, PLEASE grant us a royalty free license to your changes for our
|
|
|
133 |
commercial license.
|
|
|
134 |
|
|
|
135 |
* Release 2007-03-29
|
|
|
136 |
|
|
|
137 |
- New configuration option "USB_PUBLIC" in usbconfig.h.
|
|
|
138 |
- Set USB version number to 1.10 instead of 1.01.
|
|
|
139 |
- Code used USB_CFG_DESCR_PROPS_STRING_DEVICE and
|
|
|
140 |
USB_CFG_DESCR_PROPS_STRING_PRODUCT inconsistently. Changed all occurrences
|
|
|
141 |
to USB_CFG_DESCR_PROPS_STRING_PRODUCT.
|
|
|
142 |
- New assembler module for 16.5 MHz RC oscillator clock with PLL in receiver
|
|
|
143 |
code.
|
|
|
144 |
- New assembler module for 16 MHz crystal.
|
|
|
145 |
- usbdrvasm.S contains common code only, clock-specific parts have been moved
|
|
|
146 |
to usbdrvasm12.S, usbdrvasm16.S and usbdrvasm165.S respectively.
|
|
|
147 |
|
|
|
148 |
* Release 2007-06-25
|
|
|
149 |
|
|
|
150 |
- 16 MHz module: Do SE0 check in stuffed bits as well.
|
|
|
151 |
|
|
|
152 |
* Release 2007-07-07
|
|
|
153 |
|
|
|
154 |
- Define hi8(x) for IAR compiler to limit result to 8 bits. This is necessary
|
|
|
155 |
for negative values.
|
|
|
156 |
- Added 15 MHz module contributed by V. Bosch.
|
|
|
157 |
- Interrupt vector name can now be configured. This is useful if somebody
|
|
|
158 |
wants to use a different hardware interrupt than INT0.
|
|
|
159 |
|
|
|
160 |
* Release 2007-08-07
|
|
|
161 |
|
|
|
162 |
- Moved handleIn3 routine in usbdrvasm16.S so that relative jump range is
|
|
|
163 |
not exceeded.
|
|
|
164 |
- More config options: USB_RX_USER_HOOK(), USB_INITIAL_DATATOKEN,
|
|
|
165 |
USB_COUNT_SOF
|
|
|
166 |
- USB_INTR_PENDING can now be a memory address, not just I/O
|
|
|
167 |
|
|
|
168 |
* Release 2007-09-19
|
|
|
169 |
|
|
|
170 |
- Split out common parts of assembler modules into separate include file
|
|
|
171 |
- Made endpoint numbers configurable so that given interface definitions
|
|
|
172 |
can be matched. See USB_CFG_EP3_NUMBER in usbconfig-prototype.h.
|
|
|
173 |
- Store endpoint number for interrupt/bulk-out so that usbFunctionWriteOut()
|
|
|
174 |
can handle any number of endpoints.
|
|
|
175 |
- Define usbDeviceConnect() and usbDeviceDisconnect() even if no
|
|
|
176 |
USB_CFG_PULLUP_IOPORTNAME is defined. Directly set D+ and D- to 0 in this
|
|
|
177 |
case.
|
|
|
178 |
|
|
|
179 |
* Release 2007-12-01
|
|
|
180 |
|
|
|
181 |
- Optimize usbDeviceConnect() and usbDeviceDisconnect() for less code size
|
|
|
182 |
when USB_CFG_PULLUP_IOPORTNAME is not defined.
|
|
|
183 |
|
|
|
184 |
* Release 2007-12-13
|
|
|
185 |
|
|
|
186 |
- Renamed all include-only assembler modules from *.S to *.inc so that
|
|
|
187 |
people don't add them to their project sources.
|
|
|
188 |
- Distribute leap bits in tx loop more evenly for 16 MHz module.
|
|
|
189 |
- Use "macro" and "endm" instead of ".macro" and ".endm" for IAR
|
|
|
190 |
- Avoid compiler warnings for constant expr range by casting some values in
|
|
|
191 |
USB descriptors.
|
|
|
192 |
|
|
|
193 |
* Release 2008-01-21
|
|
|
194 |
|
|
|
195 |
- Fixed bug in 15 and 16 MHz module where the new address set with
|
|
|
196 |
SET_ADDRESS was already accepted at the next NAK or ACK we send, not at
|
|
|
197 |
the next data packet we send. This caused problems when the host polled
|
|
|
198 |
too fast. Thanks to Alexander Neumann for his help and patience debugging
|
|
|
199 |
this issue!
|
|
|
200 |
|
|
|
201 |
* Release 2008-02-05
|
|
|
202 |
|
|
|
203 |
- Fixed bug in 16.5 MHz module where a register was used in the interrupt
|
|
|
204 |
handler before it was pushed. This bug was introduced with version
|
|
|
205 |
2007-09-19 when common parts were moved to a separate file.
|
|
|
206 |
- Optimized CRC routine (thanks to Reimar Doeffinger).
|
|
|
207 |
|
|
|
208 |
* Release 2008-02-16
|
|
|
209 |
|
|
|
210 |
- Removed outdated IAR compatibility stuff (code sections).
|
|
|
211 |
- Added hook macros for USB_RESET_HOOK() and USB_SET_ADDRESS_HOOK().
|
|
|
212 |
- Added optional routine usbMeasureFrameLength() for calibration of the
|
|
|
213 |
internal RC oscillator.
|
|
|
214 |
|
|
|
215 |
* Release 2008-02-28
|
|
|
216 |
|
|
|
217 |
- USB_INITIAL_DATATOKEN defaults to USBPID_DATA1 now, which means that we
|
|
|
218 |
start with sending USBPID_DATA0.
|
|
|
219 |
- Changed defaults in usbconfig-prototype.h
|
|
|
220 |
- Added free USB VID/PID pair for MIDI class devices
|
|
|
221 |
- Restructured AVR-USB as separate package, not part of PowerSwitch any more.
|
|
|
222 |
|
|
|
223 |
* Release 2008-04-18
|
|
|
224 |
|
|
|
225 |
- Restructured usbdrv.c so that it is easier to read and understand.
|
|
|
226 |
- Better code optimization with gcc 4.
|
|
|
227 |
- If a second interrupt in endpoint is enabled, also add it to config
|
|
|
228 |
descriptor.
|
|
|
229 |
- Added config option for long transfers (above 254 bytes), see
|
|
|
230 |
USB_CFG_LONG_TRANSFERS in usbconfig.h.
|
|
|
231 |
- Added 20 MHz module contributed by Jeroen Benschop.
|
|
|
232 |
|
|
|
233 |
* Release 2008-05-13
|
|
|
234 |
|
|
|
235 |
- Fixed bug in libs-host/hiddata.c function usbhidGetReport(): length
|
|
|
236 |
was not incremented, pointer to length was incremented instead.
|
|
|
237 |
- Added code to command line tool(s) which claims an interface. This code
|
|
|
238 |
is disabled by default, but may be necessary on newer Linux kernels.
|
|
|
239 |
- Added usbconfig.h option "USB_CFG_CHECK_DATA_TOGGLING".
|
|
|
240 |
- New header "usbportability.h" prepares ports to other development
|
|
|
241 |
environments.
|
|
|
242 |
- Long transfers (above 254 bytes) did not work when usbFunctionRead() was
|
|
|
243 |
used to supply the data. Fixed this bug. [Thanks to Alexander Neumann!]
|
|
|
244 |
- In hiddata.c (example code for sending/receiving data over HID), use
|
|
|
245 |
USB_RECIP_DEVICE instead of USB_RECIP_INTERFACE for control transfers so
|
|
|
246 |
that we need not claim the interface.
|
|
|
247 |
- in usbPoll() loop 20 times polling for RESET state instead of 10 times.
|
|
|
248 |
This accounts for the higher clock rates we now support.
|
|
|
249 |
- Added a module for 12.8 MHz RC oscillator with PLL in receiver loop.
|
|
|
250 |
- Added hook to SOF code so that oscillator can be tuned to USB frame clock.
|
|
|
251 |
- Added timeout to waitForJ loop. Helps preventing unexpected hangs.
|
|
|
252 |
- Added example code for oscillator tuning to libs-device (thanks to
|
|
|
253 |
Henrik Haftmann for the idea to this routine).
|
|
|
254 |
- Implemented option USB_CFG_SUPPRESS_INTR_CODE.
|
|
|
255 |
|
|
|
256 |
* Release 2008-10-22
|
|
|
257 |
|
|
|
258 |
- Fixed libs-device/osctune.h: OSCCAL is memory address on ATMega88 and
|
|
|
259 |
similar, not offset of 0x20 needs to be added.
|
|
|
260 |
- Allow distribution under GPLv3 for those who have to link against other
|
|
|
261 |
code distributed under GPLv3.
|
|
|
262 |
|
|
|
263 |
* Release 2008-11-26
|
|
|
264 |
|
|
|
265 |
- Removed libusb-win32 dependency for hid-data example in Makefile.windows.
|
|
|
266 |
It was never required and confused many people.
|
|
|
267 |
- Added extern uchar usbRxToken to usbdrv.h.
|
|
|
268 |
- Integrated a module with CRC checks at 18 MHz by Lukas Schrittwieser.
|
|
|
269 |
|
|
|
270 |
* Release 2009-03-23
|
|
|
271 |
|
|
|
272 |
- Hid-mouse example used settings from hid-data example, fixed that.
|
|
|
273 |
- Renamed project to V-USB due to a trademark issue with Atmel(r).
|
|
|
274 |
- Changed CommercialLicense.txt and USBID-License.txt to make the
|
|
|
275 |
background of USB ID registration clearer.
|
|
|
276 |
|
|
|
277 |
* Release 2009-04-15
|
|
|
278 |
|
|
|
279 |
- Changed CommercialLicense.txt to reflect the new range of PIDs from
|
|
|
280 |
Jason Kotzin.
|
|
|
281 |
- Removed USBID-License.txt in favor of USB-IDs-for-free.txt and
|
|
|
282 |
USB-ID-FAQ.txt
|
|
|
283 |
- Fixed a bug in the 12.8 MHz module: End Of Packet decection was made in
|
|
|
284 |
the center between bit 0 and 1 of each byte. This is where the data lines
|
|
|
285 |
are expected to change and the sampled data may therefore be nonsense.
|
|
|
286 |
We therefore check EOP ONLY if bits 0 AND 1 have both been read as 0 on D-.
|
|
|
287 |
- Fixed a bitstuffing problem in the 16 MHz module: If bit 6 was stuffed,
|
|
|
288 |
the unstuffing code in the receiver routine was 1 cycle too long. If
|
|
|
289 |
multiple bytes had the unstuffing in bit 6, the error summed up until the
|
|
|
290 |
receiver was out of sync.
|
|
|
291 |
- Included option for faster CRC routine.
|
|
|
292 |
Thanks to Slawomir Fras (BoskiDialer) for this code!
|
|
|
293 |
- Updated bits in Configuration Descriptor's bmAttributes according to
|
|
|
294 |
USB 1.1 (in particular bit 7, it is a must-be-set bit now).
|
|
|
295 |
|
|
|
296 |
* Release 2009-08-22
|
|
|
297 |
|
|
|
298 |
- Moved first DBG1() after odDebugInit() in all examples.
|
|
|
299 |
- Use vector INT0_vect instead of SIG_INTERRUPT0 if defined. This makes
|
|
|
300 |
V-USB compatible with the new "p" suffix devices (e.g. ATMega328p).
|
|
|
301 |
- USB_CFG_CLOCK_KHZ setting is now required in usbconfig.h (no default any
|
|
|
302 |
more).
|
|
|
303 |
- New option USB_CFG_DRIVER_FLASH_PAGE allows boot loaders on devices with
|
|
|
304 |
more than 64 kB flash.
|
|
|
305 |
- Built-in configuration descriptor allows custom definition for second
|
|
|
306 |
endpoint now.
|
|
|
307 |
|
|
|
308 |
* Release 2010-07-15
|
|
|
309 |
|
|
|
310 |
- Fixed bug in usbDriverSetup() which prevented descriptor sizes above 255
|
|
|
311 |
bytes.
|
|
|
312 |
- Avoid a compiler warning for unused parameter in usbHandleResetHook() when
|
|
|
313 |
compiler option -Wextra is enabled.
|
|
|
314 |
- Fixed wrong hex value for some IDs in USB-IDs-for-free.txt.
|
|
|
315 |
- Keep a define for USBATTR_BUSPOWER, although the flag does not exist
|
|
|
316 |
in USB 1.1 any more. Set it to 0. This is for backward compatibility.
|
|
|
317 |
|
|
|
318 |
* Release 2012-01-09
|
|
|
319 |
|
|
|
320 |
- Define a separate (defined) type for usbMsgPtr so that projects using a
|
|
|
321 |
tiny memory model can define it to an 8 bit type in usbconfig.h. This
|
|
|
322 |
change also saves a couple of bytes when using a scalar 16 bit type.
|
|
|
323 |
- Inserted "const" keyword for all PROGMEM declarations because new GCC
|
|
|
324 |
requires it.
|
|
|
325 |
- Fixed problem with dependence of usbportability.h on usbconfig.h. This
|
|
|
326 |
problem occurred with IAR CC only.
|
|
|
327 |
- Prepared repository for github.com.
|
|
|
328 |
|
|
|
329 |
* Release 2012-12-06
|