Using the CDC protocol over Interrupt Pipes
Osamu Tamura @ Recursion Co., Ltd.
The CDC/ACM protocol is defined on USB 2.0 standard. It requires two bulk and one interrupt endpoints. Although it is possible to use bulk transfer on the low-speed interface, there are some disadvantages.
1. The low-speed bulk transfer violates the USB standard. There is no guarantee that the future OS supports it.
Windows Vista and Linux 2.6 do not allow it without some tricks.
2. Its heavy traffic may cause unstable connection, or conflict with other device's transaction.
The USB bus driver may fail to schedule bulk transfer over low-speed interface.
3. Its frequent OUT-retransmission consumes most of the processing power of the AVR-USB device.
It happens when the device's transmission speed is slower than the PC's data generation.This patch driver "lowcdc.sys" enables the CDC protocol to work over interrupt pipes on Windows (Figure 1 and 2).
![]()
Figure 1. USB Driver Stack Figure 2. Patching the Enumeration ProcessThe low-speed interrupt transfer is relatively slow (one packet per 10mSec), but is enough for the 9600bps full-duplex transmission. (Windows' USB driver polls every 8mSec to send or receive 8 bytes data.)
If your application does not require high speed transfer, this "lowcdc.sys" is recommended. In particular, it is adequate for the AVR-CDC tiny version and the CDC-IO. This driver enforces 8 byte packet size to get better performance, so it does not work with the older CDC-2313. Update to the latest (2009-01-26) version. Windows's HyperTermial blocks every single byte when sending data. If you cannot stand it, use other terminal software (e.g. TeraTerm, HypoTerminal,..).
This driver is designed for AVR-CDC, and may not work properly on other "low-speed bulk" devices.
This driver works on Windows XP and Vista x32 only. Vista x64 does not accept unauthorized kernel-mode drivers.[ Installation ]
1. Clean up the previously installed AVR-CDC drivers, if any.
Connect AVR-CDC device and completely delete the driver using "Device Manager".
Remove the "avrcdc.inf"-corresponded "oem**.inf/pnf" pair from "/windows/inf/" folder, if any.2. Install the virtual COM/CDC protocol interface driver.
Connect AVR-CDC device and follow the dialog instructions.
Indicate "inf/lowcdc/" folder to install "usbser.sys" and "lowcdc.sys".avrcdc_inf.zip (42 KB)
This program was built using WinDDK and the code is based on its sample (general/toaster/filter/devlower). The portion of the code that I added are published under GPL2 license.
@
2 February 2009