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
|
---|