musb 0.2.2

musb(Mentor USB) regs and `embassy-usb-driver`, `usb-device` impl
Documentation
# MUSB


[![Crates.io][badge-license]][crates]
[![Crates.io][badge-version]][crates]

[badge-license]: https://img.shields.io/crates/l/musb?style=for-the-badge
[badge-version]: https://img.shields.io/crates/v/musb?style=for-the-badge
[crates]: https://crates.io/crates/musb

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.

## Quick Start


These built-in profiles are used via Cargo features (see below), with only one selectable:

- `builtin-py32f07x` (py32m070, py32f071, py32f072)

- `builtin-py32f403`

- `builtin-sf32lb52x`

- `builtin-std-8bep-2048` (8 bidirectional endpoints, 2048K FIFO size in total, without instance)

Add musb to your `Cargo.toml`:

```toml
[dependencies]
musb = { version = "0.3.0", features = ["builtin-std-8bep-2048"] }
```

You can use the [std profile](registers/profiles/) 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](docs/porting_guide.md)).

If your chip is not included, you'll need to create a new profile. Refer to the [Porting Guide](docs/porting_guide.md) for more details.

## Features


`embassy-usb-driver-impl`: Enables [embassy-usb-driver](https://crates.io/crates/embassy-usb-driver) implementation.

`usb-device-impl`: Enables [usb-device](https://crates.io/crates/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.

## Examples


hal example: [py32-hal/src/usb.rs · py32-rs/py32-hal](https://github.com/py32-rs/py32-hal/blob/main/src/usb.rs)

embassy-usb: [py32-hal/examples/py32f072](https://github.com/py32-rs/py32-hal/tree/main/examples/py32f072)

usb-device: [py32-hal/examples/usbd-f072](https://github.com/py32-rs/py32-hal/tree/main/examples/usbd-f072)

## Porting


Refer to the [Porting Guide](docs/porting_guide.md) for more details.

You can also refer to this blog (in Chinese): [PY32的musb(Mentor USB)的Rust支持 - Decaday](https://decaday.github.io/blog/py32-musb/)

## Contribution


If you have any questions or uncertainties, feel free to create an Issue or start a Discussion.

## TODOs


- **Support Dynamic FIFO Size**
- Support dual packet buffer
- Support SiFli SF32LB52
- Other Chips
- Host mode 

## License


This project is under Apache License, Version 2.0 ([LICENSE](LICENSE) or <http://www.apache.org/licenses/LICENSE-2.0>).