There are currently two peripheral ports on the front of the base unit. One is USB 2.0 FS, and the other is buffered I2C with some support signals over a 6-pin Mini-DIN connector. As of right now, the Mini-DIN port is dedicated to the meter probe and the USB port is for installing firmware updates and connecting miscellaneous peripherals.
With the implementation of #49, the Mini-DIN port will no longer be necessary. Furthermore, it will often become desirable to connect more than one USB device to the unit at the same time. This is so the meter probe does not need to be unplugged if someone wants to insert a memory stick, connect a densitometer, or attach a small keyboard.
The obvious solution to this situation is to simply use a hub, either internally (via an integrated USB hub IC) or externally (as provided by the user). Of course this presents a number of problems with the current design:
The ST USB Host Library, which is what our current USB interface is based on, does not support hubs (and is under a somewhat icky license)
The common open-source TinyUSB library has minimal host support, and does not support USB host on the STM32
The open-source CherryUSB library has far more developed host-side support, actually does support both hubs and STM32, but does not support the (non-DMA) "FS" peripheral in the STM32F411RE we're currently using
Putting all of that together, here's the proposed path forward:
Remove the specialized Mini-DIN port from the device (this will eliminate a number of unique components).
Switch the MCU over to the STM32F446RE, using its (DMA capable) "HS" USB peripheral in FS mode. (this will be a complicated change, but we'll stick with the same package and as few differences as possible)
Integrate the CherryUSB stack in place of the ST stack for running the USB host interface
This will require major bootloader changes, which are hopefully manageable
This will require rewriting all of our custom USB<->Serial drivers
This has the benefit that any code changes/additions we have to do will be under a much more comfortable license situation, which for some could be enough motivation all on its own.
Implement the Microchip USB2422 hub controller, to provide two downstream ports on the device and offer a point of intermediary port control. Can also use a 2-port power controller as part of the implementation, and an MCU-supplied clock signal, to simplify things.
Switch the external USB ports to using the reverse-mount Amphenol 74626-11S0BPLF connector, so they no longer feel upside-down to the end user due to internal PCB orientation.
Note: The footswitch port uses a 3.5mm jack, and will remain unchanged by all of this. While USB-attached footswitches do exist, the ones that use a simple 2-wire connection tend to be of much higher quality at an acceptable price range.
There are currently two peripheral ports on the front of the base unit. One is USB 2.0 FS, and the other is buffered I2C with some support signals over a 6-pin Mini-DIN connector. As of right now, the Mini-DIN port is dedicated to the meter probe and the USB port is for installing firmware updates and connecting miscellaneous peripherals.
With the implementation of #49, the Mini-DIN port will no longer be necessary. Furthermore, it will often become desirable to connect more than one USB device to the unit at the same time. This is so the meter probe does not need to be unplugged if someone wants to insert a memory stick, connect a densitometer, or attach a small keyboard.
The obvious solution to this situation is to simply use a hub, either internally (via an integrated USB hub IC) or externally (as provided by the user). Of course this presents a number of problems with the current design:
Putting all of that together, here's the proposed path forward:
Note: The footswitch port uses a 3.5mm jack, and will remain unchanged by all of this. While USB-attached footswitches do exist, the ones that use a simple 2-wire connection tend to be of much higher quality at an acceptable price range.