03a87add15
Fix the comment about the default value: this defaults to 64 rather than 8 bytes. It seems like the max packet size for endpoint 0 should normally be selected automatically, rather than being part of the config. At best it seems like this setting should just be a hint that gets used if when the bus is operating at full speed. The contents of the device descriptor should ideally be updated with the correct max packet size after bus enumeration completes. In practice always using 64 is probably fine if low speed environments never need to be supported. (Super speed requires a max packet size of 512 bytes, which I didn't list in the comments here.) |
||
---|---|---|
.. | ||
src | ||
build.rs | ||
Cargo.toml | ||
gen_config.py | ||
README.md |
embassy-usb
Async USB device stack for embedded devices in Rust.
Features
- Native async.
- Fully lock-free: endpoints are separate objects that can be used independently without needing a central mutex. If the driver supports it, they can even be used from different priority levels.
- Suspend/resume, remote wakeup.
- USB composite devices.
- Ergonomic descriptor builder.
- Ready-to-use implementations for a few USB classes (note you can still implement any class yourself outside the crate).
- Serial ports (CDC ACM)
- Ethernet (CDC NCM)
- Human Interface Devices (HID)
- MIDI
Adding support for new hardware
To add embassy-usb
support for new hardware (i.e. a new MCU chip), you have to write a driver that implements
the embassy-usb-driver
traits.
Driver crates should depend only on embassy-usb-driver
, not on the main embassy-usb
crate.
This allows existing drivers to continue working for newer embassy-usb
major versions, without needing an update, if the driver
trait has not had breaking changes.
Configuration
embassy-usb
has some configuration settings that are set at compile time, affecting sizes
and counts of buffers.
They can be set in two ways:
- Via Cargo features: enable a feature like
<name>-<value>
.name
must be in lowercase and use dashes instead of underscores. For example.max-interface-count-3
. Only a selection of values is available, checkCargo.toml
for the list. - Via environment variables at build time: set the variable named
EMBASSY_USB_<value>
. For exampleEMBASSY_USB_MAX_INTERFACE_COUNT=3 cargo build
. You can also set them in the[env]
section of.cargo/config.toml
. Any value can be set, unlike with Cargo features.
Environment variables take precedence over Cargo features. If two Cargo features are enabled for the same setting with different values, compilation fails.
MAX_INTERFACE_COUNT
Max amount of interfaces that can be created in one device. Default: 4.
Interoperability
This crate can run on any executor.