- USB 1.1 and 2.0
Both USB versions currently in use are supported.
- UHCI, OHCI, and EHCI Host Controllers
All major USB 1.1 and 2.0 host controller types are supported. These
controller types are always supported, regardless of their respective
vendor or model.
- Transfer Types Control, Bulk, Interrupt, and Isochronous
All USB data transfer types/protocols can be used to support both high
throughput and real-time oriented devices.
- Low-, Full-, and High-Speed Data Transfer
Up to 12 Mb/s on USB 1.1 and 480 Mb/s on USB 2.0
buses are supported.
- No Copy
RTUSB-32 never needs to copy data transferred to or from a device.
Even if application supplied buffers reside in the virtual address
space, data transfers are always performed by DMA hardware from/to the
USB bus to/from the application's buffer. Even at very high data
throughputs of up to 50 Mb/s, no CPU time is required to transfer
the data.
- Plug-and-Play and Hot Plugging
RTUSB-32 automatically detects devices and/or hubs being added and
removed from the bus and can call application supplied callbacks for
each such event. The application can then decide whether to enable and
operate the device or not. RTUSB-32 supplies functions to query a
device's name, vendor, class, descriptors, interfaces, endpoints, etc.
- Class Drivers
RTUSB-32 provides high-level class drivers for keyboards, mice, touch
screens, printers, mass storage devices (disks, memory sticks, digital
cameras, CD-ROMs, DVDs, etc.), and a USB-Ethernet bridge device. A hub
class driver is integrated in the core USB protocol stack. Class
drivers allow applications to use a device without being concerned
about details, such as the transfer type and speed to use, etc. The
source code of the class drivers is included with RTUSB-32. The mass
storage device class driver requires a file system such as RTFiles-32.
- Low-Level API
RTUSB-32 also allows direct access to a device. An application can
query a device's endpoints, supported transfer types and speeds, etc.,
and then communicate directly with the device. Thus, any USB 1.1
or 2.0 device can be used, even if no class driver is available or the
device does not adhere to a standard USB class specification. Many
examples are included with RTUSB-32 showing how an application can
query and operate arbitrary USB devices.
- Asynchronous I/O
RTUSB-32 performs I/O in the background. The application starts I/O
operations and can then perform other tasks and query the status of
the transaction at a later time. An arbitrary number of I/O
transactions can be pending simultaneously. If two or more
transactions are started on the same I/O pipe, a continuous data
stream can be implemented with the application processing one buffer
while the other is being transferred.
- Real-Time
RTUSB-32 can call application supplied callbacks when data is received
from an attached device. Depending on the transfer type, such
callbacks can occur periodically or asynchronous with 1 millisecond
(or even 125 microseconds on USB 2.0) resolution.
- Portable
RTUSB-32 is preconfigured to work with On Time RTOS-32, but can easily
be ported to any other system. All OS-dependent code is placed in a
configuration header file and a linkable system driver with a simple
and small API containing functions for port I/O, memory management,
interrupt handling, etc. RTUSB-32 is completely written in ANSI C
and supports little- and big-endian CPUs.
|