aboutsummaryrefslogtreecommitdiffstats
path: root/libmaple/usb/README
diff options
context:
space:
mode:
Diffstat (limited to 'libmaple/usb/README')
-rw-r--r--libmaple/usb/README63
1 files changed, 63 insertions, 0 deletions
diff --git a/libmaple/usb/README b/libmaple/usb/README
new file mode 100644
index 0000000..d0fca8d
--- /dev/null
+++ b/libmaple/usb/README
@@ -0,0 +1,63 @@
+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.