Now that we are going to drive our bargraphs and faders through USB with the AT90USB1287, we should use this approach across the board, so to speak. This will allow us to use USB as standard interconnect for connecting our multiple boards together. This will also dramatically reduce the number of cables that will need to be connected to the backplane, which is quite critical now that it is mounted on a folding panel.
Adopting USB as standard interconnect has many benefits. First, the fact that we do not have to invent anything new. Second, the ability to get both power and data through the same interconnect. Third, the option to upgrade to USB 3.0 down the road if we need more bandwidth. All in all, it makes a ton of sense, and as a result, we will use three different types of interconnect internally, for three different types of signals:
- USB for interfacing our controls and indicators through MCUs
- Gigabit Ethernet network for exchanging control signals
- Mesh network for exchanging digital audio signals
With that in mind, here is what our USB bus will look like: following some simplifications of our cables, interfaces, and pins, we will drive our USB bus through submodule 1 (instead of 4). To do so, we will install a TUSB2077A USB hub on the backplane, next to the two HDMI switches. Upstream, this hub will be connected to the USB port of submodule 1. Downstream, one of its seven ports will be connected to an AT90USB1287 microcontroller used to drive our 8 rotary encoders, and two other ports will be connected to the keypad board through two USB cables.
On the keypad board, we will have another two TUSB2077A USB hubs, giving us a total of 14 USB ports. 9 of them will be used for the 9 bargraph boards, one for the keypad itself, and one for the CV board. The keypad board and CV board will each host their own AT90USB1287 microcontroller. As a result, every single control and indicator will be driven by microcontrollers, instead of using GPIO pins on the Parallella board. This will ensure that we do not have to do any work at the FPGA level before we can actually use our enclosure, which is quite nice (yes, I’m stil scared of these FPGAs).
With such an architecture, all controls and indicators will be driven by a single submodule (submodule 1), which will further simplify our software development work. But because all these devices will be interfaced by a set of 12 microcontrollers (no less), it won’t create any significant load for submodule 1 to handle. And because all these microcontrollers will be connected through USB, it should be really easy to update their software from the submodule.
I really like it…