Rev 3331 Rev 3332
1 This file documents changes in the firmware-only USB driver for atmel's AVR 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. 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. 3 Scroll down to the bottom to see the most recent changes.
4   4  
5 2005-04-01: 5 2005-04-01:
6 - Implemented endpoint 1 as interrupt-in endpoint. 6 - Implemented endpoint 1 as interrupt-in endpoint.
7 - Moved all configuration options to usbconfig.h which is not part of the 7 - Moved all configuration options to usbconfig.h which is not part of the
8 driver. 8 driver.
9 - Changed interface for usbVendorSetup(). 9 - Changed interface for usbVendorSetup().
10 - Fixed compatibility with ATMega8 device. 10 - Fixed compatibility with ATMega8 device.
11 - Various minor optimizations. 11 - Various minor optimizations.
12   12  
13 2005-04-11: 13 2005-04-11:
14 - Changed interface to application: Use usbFunctionSetup(), usbFunctionRead() 14 - Changed interface to application: Use usbFunctionSetup(), usbFunctionRead()
15 and usbFunctionWrite() now. Added configuration options to choose which 15 and usbFunctionWrite() now. Added configuration options to choose which
16 of these functions to compile in. 16 of these functions to compile in.
17 - Assembler module delivers receive data non-inverted now. 17 - Assembler module delivers receive data non-inverted now.
18 - Made register and bit names compatible with more AVR devices. 18 - Made register and bit names compatible with more AVR devices.
19   19  
20 2005-05-03: 20 2005-05-03:
21 - Allow address of usbRxBuf on any memory page as long as the buffer does 21 - Allow address of usbRxBuf on any memory page as long as the buffer does
22 not cross 256 byte page boundaries. 22 not cross 256 byte page boundaries.
23 - Better device compatibility: works with Mega88 now. 23 - Better device compatibility: works with Mega88 now.
24 - Code optimization in debugging module. 24 - Code optimization in debugging module.
25 - Documentation updates. 25 - Documentation updates.
26   26  
27 2006-01-02: 27 2006-01-02:
28 - Added (free) default Vendor- and Product-IDs bought from voti.nl. 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 29 - Added USBID-License.txt file which defines the rules for using the free
30 shared VID/PID pair. 30 shared VID/PID pair.
31 - Added Readme.txt to the usbdrv directory which clarifies administrative 31 - Added Readme.txt to the usbdrv directory which clarifies administrative
32 issues. 32 issues.
33   33  
34 2006-01-25: 34 2006-01-25:
35 - Added "configured state" to become more standards compliant. 35 - Added "configured state" to become more standards compliant.
36 - Added "HALT" state for interrupt endpoint. 36 - Added "HALT" state for interrupt endpoint.
37 - Driver passes the "USB Command Verifier" test from usb.org now. 37 - Driver passes the "USB Command Verifier" test from usb.org now.
38 - Made "serial number" a configuration option. 38 - Made "serial number" a configuration option.
39 - Minor optimizations, we now recommend compiler option "-Os" for best 39 - Minor optimizations, we now recommend compiler option "-Os" for best
40 results. 40 results.
41 - Added a version number to usbdrv.h 41 - Added a version number to usbdrv.h
42   42  
43 2006-02-03: 43 2006-02-03:
44 - New configuration variable USB_BUFFER_SECTION for the memory section where 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 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 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 47 end), the user may want to pass a linker option similar to
48 "-Wl,--section-start=.mybuffer=0x800060". 48 "-Wl,--section-start=.mybuffer=0x800060".
49 - Provide structure for usbRequest_t. 49 - Provide structure for usbRequest_t.
50 - New defines for USB constants. 50 - New defines for USB constants.
51 - Prepared for HID implementations. 51 - Prepared for HID implementations.
52 - Increased data size limit for interrupt transfers to 8 bytes. 52 - Increased data size limit for interrupt transfers to 8 bytes.
53 - New macro usbInterruptIsReady() to query interrupt buffer state. 53 - New macro usbInterruptIsReady() to query interrupt buffer state.
54   54  
55 2006-02-18: 55 2006-02-18:
56 - Ensure that the data token which is sent as an ack to an OUT transfer is 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 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 58 sending an out transfer to the device, although all data arrived at the
59 device. 59 device.
60 - Updated docs in usbdrv.h to reflect changed API in usbFunctionWrite(). 60 - Updated docs in usbdrv.h to reflect changed API in usbFunctionWrite().
61   61  
62 * Release 2006-02-20 62 * Release 2006-02-20
63   63  
64 - Give a compiler warning when compiling with debugging turned on. 64 - Give a compiler warning when compiling with debugging turned on.
65 - Added Oleg Semyonov's changes for IAR-cc compatibility. 65 - Added Oleg Semyonov's changes for IAR-cc compatibility.
66 - Added new (optional) functions usbDeviceConnect() and usbDeviceDisconnect() 66 - Added new (optional) functions usbDeviceConnect() and usbDeviceDisconnect()
67 (also thanks to Oleg!). 67 (also thanks to Oleg!).
68 - Rearranged tests in usbPoll() to save a couple of instructions in the most 68 - Rearranged tests in usbPoll() to save a couple of instructions in the most
69 likely case that no actions are pending. 69 likely case that no actions are pending.
70 - We need a delay between the SET ADDRESS request until the new address 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 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 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 73 aggressive polling during the enumeration phase. We have now moved the
74 handling of the delay into the interrupt routine. 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 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. 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 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 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 79 receiving a less than 8 bytes long packet in usbFunctionWrite() to
80 identify the end of a transfer. usbFunctionWrite() will NEVER be called 80 identify the end of a transfer. usbFunctionWrite() will NEVER be called
81 with a zero length. 81 with a zero length.
82   82  
83 * Release 2006-03-14 83 * Release 2006-03-14
84   84  
85 - Improved IAR C support: tiny memory model, more devices 85 - Improved IAR C support: tiny memory model, more devices
86 - Added template usbconfig.h file under the name usbconfig-prototype.h 86 - Added template usbconfig.h file under the name usbconfig-prototype.h
87   87  
88 * Release 2006-03-26 88 * Release 2006-03-26
89   89  
90 - Added provision for one more interrupt-in endpoint (endpoint 3). 90 - Added provision for one more interrupt-in endpoint (endpoint 3).
91 - Added provision for one interrupt-out endpoint (endpoint 1). 91 - Added provision for one interrupt-out endpoint (endpoint 1).
92 - Added flowcontrol macros for USB. 92 - Added flowcontrol macros for USB.
93 - Added provision for custom configuration descriptor. 93 - Added provision for custom configuration descriptor.
94 - Allow ANY two port bits for D+ and D-. 94 - Allow ANY two port bits for D+ and D-.
95 - Merged (optional) receive endpoint number into global usbRxToken variable. 95 - Merged (optional) receive endpoint number into global usbRxToken variable.
96 - Use USB_CFG_IOPORTNAME instead of USB_CFG_IOPORT. We now construct the 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 97 variable name from the single port letter instead of computing the address
98 of related ports from the output-port address. 98 of related ports from the output-port address.
99   99  
100 * Release 2006-06-26 100 * Release 2006-06-26
101   101  
102 - Updated documentation in usbdrv.h and usbconfig-prototype.h to reflect the 102 - Updated documentation in usbdrv.h and usbconfig-prototype.h to reflect the
103 new features. 103 new features.
104 - Removed "#warning" directives because IAR does not understand them. Use 104 - Removed "#warning" directives because IAR does not understand them. Use
105 unused static variables instead to generate a warning. 105 unused static variables instead to generate a warning.
106 - Do not include <avr/io.h> when compiling with IAR. 106 - Do not include <avr/io.h> when compiling with IAR.
107 - Introduced USB_CFG_DESCR_PROPS_* in usbconfig.h to configure how each 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 108 USB descriptor should be handled. It is now possible to provide descriptor
109 data in Flash, RAM or dynamically at runtime. 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 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. 111 to the spec and leave the stall status pending until it is cleared.
112 - Made usbTxPacketCnt1 and usbTxPacketCnt3 public. This allows the 112 - Made usbTxPacketCnt1 and usbTxPacketCnt3 public. This allows the
113 application code to reset data toggling on interrupt pipes. 113 application code to reset data toggling on interrupt pipes.
114   114  
115 * Release 2006-07-18 115 * Release 2006-07-18
116   116  
117 - Added an #if !defined __ASSEMBLER__ to the warning in usbdrv.h. This fixes 117 - Added an #if !defined __ASSEMBLER__ to the warning in usbdrv.h. This fixes
118 an assembler error. 118 an assembler error.
119 - usbDeviceDisconnect() takes pull-up resistor to high impedance now. 119 - usbDeviceDisconnect() takes pull-up resistor to high impedance now.
120   120  
121 * Release 2007-02-01 121 * Release 2007-02-01
122   122  
123 - Merged in some code size improvements from usbtiny (thanks to Dick 123 - Merged in some code size improvements from usbtiny (thanks to Dick
124 Streefland for these optimizations!) 124 Streefland for these optimizations!)
125 - Special alignment requirement for usbRxBuf not required any more. Thanks 125 - Special alignment requirement for usbRxBuf not required any more. Thanks
126 again to Dick Streefland for this hint! 126 again to Dick Streefland for this hint!
127 - Reverted to "#warning" instead of unused static variables -- new versions 127 - Reverted to "#warning" instead of unused static variables -- new versions
128 of IAR CC should handle this directive. 128 of IAR CC should handle this directive.
129 - Changed Open Source license to GNU GPL v2 in order to make linking against 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 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 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 132 itself, PLEASE grant us a royalty free license to your changes for our
133 commercial license. 133 commercial license.
134   134