Fri, 17 Feb 2017 13:40:27 +0100
final pics
0 | 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 |