This is a prototype MIDI transport with support for MIDI 2.0. These specifications may not be final.
This project contains:
USB module - Basic features complete (missing MIDI 2.0 features). Will act as a USB host or device. In device mode it transfers MIDI messages between the CAN bus and USB, and will also provide stereo audio in and out over USB. In host mode it will only connect to MIDI devices.
DIN module - Is feature complete. Transfers MIDI messages between the CAN bus and the old DIN transport.
Tangle module - Is feature complete (missing some MIDI 2.0 features). Is an analog multiplexer with 8 inputs and 8 outputs which can save mappings to MIDI program change messages.
CV16 module - Basic features complete (missing some MIDI 2.0 features). Has 16 general purpose analog outputs.
Hardware specs:
- 4-wire flat ribbon-cable
- MicroMatch or WR-MM connector
- Outermost pins of the connector are connected to an RC filter to reduce EMI/EMR
- Selectable end-termination on every module
- CAN FD controller and transceiver
End termination can be enabled on a module with a DPDT switch, or with jumpers. And the terminated position should be clearly marked on the PCB. Split termination is preferred to minimize EMR.
Communication specs:
- Nominal bus speed is 1Mbps: TSEG1 = 700ns, TSEG2 = 200ns, Sync = 100ns.
- Data bus speed can be 4Mbps: TSEG1 = 100ns, TSEG2 = 100ns, Sync = 50ns.
- Payloads over 8 bytes should use the datarate switch, this is optional for smaller payloads.
- 11-bit standard ID where the 4 MSb are the MIDI 2.0 group, the remaining bits should be a unique identifier for each device on the bus.
- Extended IDs for groupless messages, using the same unique identifier as normal messages.
- MIDI messages are sent over the bus using the UMP format
- A CAN frame can contain multiple MIDI messages from the same MIDI group (up to 64 byte)
The ID field of the CAN frame contains an identifier of the transmitting device for arbitration purposes. These identifiers should be randomly generated. Also, the device should generate a new identifier if it receives a frame with its own identifier.
Amazing project, have you attended any of the Supercons?