musb(Mentor USB) Registers and embassy-usb-driver
, usb-device
Implementation.
The MUSBMHDRC (musb) is a USB 2.0 Multi-Point, Dual-Role Controller designed by Mentor Graphics Corp. It is widely used by various manufacturers in microcontrollers and SoCs, including companies like TI, MediaTek, Puya, Allwinner, and others.
These built-in profiles are used via Cargo features (see below), with only one selectable:
-
builtin-py32f07x
(py32m070, py32f071, py32f072) -
builtin-py32f403
-
builtin-std-8bep-2048
(excludes base_address, 8 bidirectional endpoints, 2048K FIFO size in total)
Add musb to your Cargo.toml
:
[dependencies]
musb = { version = "0.1.0", features = ["builtin-std-8bep-2048"] }
You can use the std profile by enabling the builtin-std-xxx
feature. This profile doesn't include a base_address, so it won't generate a UsbInstance
(explained in Porting Guide).
If your chip is not included, you'll need to create a new profile. Refer to the Porting Guide for more details.
embassy-usb-driver-impl
: Enables embassy-usb-driver implementation.
usb-device-impl
: Enables usb-device implementation.
Note: Only one of these two implementations can be enabled at a time.
prebuild
(on by default): Uses pre-generated PAC (Peripheral Access Crate).
builtin-xxxx
: Uses builtin profile.
defmt
, log
: Enables debug logging.
hal example: py32-hal/src/usb.rs · py32-rs/py32-hal
embassy-usb: py32-hal/examples/py32f072
usb-device: py32-hal/examples/usbd-f072
Refer to the Porting Guide for more details.
You can also refer to this blog (in Chinese): PY32的musb(Mentor USB)的Rust支持 - Decaday
If you have any questions or uncertainties, feel free to create an Issue or start a Discussion.
- Support Dynamic FIFO Size
- Support dual packet buffer
- Support SiFli SF32LB52
- Other Chips
- Host mode
This project is under Apache License, Version 2.0 (LICENSE or http://www.apache.org/licenses/LICENSE-2.0).