mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-06 04:08:14 +00:00
64 lines
2.7 KiB
Plaintext
64 lines
2.7 KiB
Plaintext
|
The USB submodule of libmaple is a separate piece of the codebase for
|
||
|
reasons that are largely historical.
|
||
|
|
||
|
Current Status:
|
||
|
|
||
|
There's only support for the USB device peripheral found on
|
||
|
STM32F103s.
|
||
|
|
||
|
We rely on the low level core library provided by ST to implement
|
||
|
the USB transfer protocol for control endpoint transfers.
|
||
|
|
||
|
The virtual com port (which is exposed via
|
||
|
<libmaple/usb_cdcacm.h>) serves two important purposes.
|
||
|
|
||
|
1) It allows serial data transfers between user sketches an a
|
||
|
host computer.
|
||
|
|
||
|
2) It allows the host PC to issue a system reset into the DFU
|
||
|
bootloader with the DTR + RTS + "1EAF" sequence (see
|
||
|
leaflabs.com/docs/bootloader.html for more information on
|
||
|
this).
|
||
|
|
||
|
After reset, Maple will run the DFU bootloader for a few seconds,
|
||
|
during which the user can begin a DFU upload operation (uploads
|
||
|
application binary into RAM/FLASH). Thus, without this virtual com
|
||
|
port, it would be necessary to find an alternative means to reset
|
||
|
the chip in order to enable the bootloader.
|
||
|
|
||
|
If you would like to develop your own USB application for whatever
|
||
|
reason (e.g. to use faster isochronous enpoints for streaming
|
||
|
audio, or implement the USB HID or Mass Storage specs), then
|
||
|
ensure that you leave some hook for resetting Maple remotely in
|
||
|
order to spin up the DFU bootloader. Please make sure to get
|
||
|
yourself a unique vendor/product ID pair for your application, as
|
||
|
some operating systems will assign a host-side driver based on
|
||
|
these tags.
|
||
|
|
||
|
It would be possible to build a compound USB device, that
|
||
|
implements endpoints for both the virtual COM port as well as some
|
||
|
other components (mass storage etc.). However, this turns out to
|
||
|
be a burden from the host driver side, as Windows and *nix handle
|
||
|
compound USB devices quite differently.
|
||
|
|
||
|
Be mindful that enabling the USB peripheral isn't "free." The
|
||
|
device must respond to periodic bus activity (every few
|
||
|
milliseconds) by servicing an ISR. Therefore, the USB application
|
||
|
should be disabled inside of timing critical applications.
|
||
|
|
||
|
In order to disconnect the device from the host, a USB_DISC pin is
|
||
|
asserted (e.g. on Maple, this is PC12). Alternatively, the NVIC
|
||
|
can be directly configured to disable the USB LP/HP IRQ's.
|
||
|
|
||
|
The files inside of usb_lib were provided by ST and are subject to
|
||
|
their own license, all other files were written by the LeafLabs
|
||
|
team and fall under the MIT license.
|
||
|
|
||
|
TODO:
|
||
|
|
||
|
- Generic USB driver core with series-provided backends, like
|
||
|
libopencm3 has.
|
||
|
- Strip out ST code.
|
||
|
- Integration with a high level USB library (like LUFA/MyUSB) to
|
||
|
allow users to write custom USB applications.
|