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