User Tools

Site Tools


m16

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
m16 [2018/08/09 20:46]
antichambre
m16 [2018/10/08 09:12]
antichambre [BOM]
Line 1: Line 1:
 {{ :​antichambre:​124775m2_ts.png?​600 |}} {{ :​antichambre:​124775m2_ts.png?​600 |}}
-====== M16 Interface ======+====== M16 MIDI Interface ======
 **Add 16 MIDI I/O to your Core, SPI Slave Interface with up to 16 UARTs(MIDI I/O), based on low-cost FPGA...** **Add 16 MIDI I/O to your Core, SPI Slave Interface with up to 16 UARTs(MIDI I/O), based on low-cost FPGA...**
 \\ \\
 \\ \\
 ---- ----
-\\ +==== Features ​====
-<wrap round important 7%> +
-toDo +
-</​wrap>​ +
-\\ +
-Some connection examples\\\\ +
- +
-Spi slave kissbox emulation, share protocol +
-and added commands\\ +
- +
-Features\\+
   * The FPGA internal clock works @88.67MHz.   * The FPGA internal clock works @88.67MHz.
-  * Fast 4 wires SPI in slave mode to control the board, 10Mb/s.+  * Fast 4 wires SPI in slave mode to control the board, 10Mb/s, 5V tolerant.
   * Uses the default MIOS32_SPI_MIDI protocol, MIOS32 is ready-to-use with it.   * Uses the default MIOS32_SPI_MIDI protocol, MIOS32 is ready-to-use with it.
   * 16 UARTs on board, it's 16 MIDI ports.   * 16 UARTs on board, it's 16 MIDI ports.
Line 24: Line 14:
   * There'​s a 64 word(32bits) FIFO for out-coming messages from the board.   * There'​s a 64 word(32bits) FIFO for out-coming messages from the board.
   * 3 independents groups of 16 GPIOs, configurable and settable by SPI Command.   * 3 independents groups of 16 GPIOs, configurable and settable by SPI Command.
 +  * Can be stacked under a [[dipboardf4|dipBoardF4]] ​
 +\\
 +{{ :​antichambre:​1809_m16_interface_v1.beta_top_real.jpg?​600 |}}
 +{{ :​antichambre:​1809_m16_interface_v1.beta_bottom_real.jpg?​600 |}}
 +
 +\\
 +\\
 +
 +----
 +
 +===== PCB=====
 +<WRAP group>
 +<WRAP column 60%>
 +{{ :​antichambre:​1809_m16_interface_v1.beta_top.png |}}
 +\\
 +{{ :​antichambre:​1809_m16_interface_v1.beta_bottom.png |}}
 +</​WRAP>​
 +<WRAP column 35%>
 +2 layers PCB design.\\
 +Fits 2 layer mostly common design rules.
 +  * min. drill 10mil
 +  * min. width 6mil
 +</​WRAP>​\\
 +</​WRAP>​\\
 +\\
 +
 +===== Dimension =====
 +<WRAP group>
 +<WRAP column 70%>
 +{{:​antichambre:​m16_interface_v1b.beta_dim.png?​600 |}}
 +</​WRAP>​\\
 +</​WRAP>​\\
 +
 +===== BOM =====
 +version 1.
 +Mouser BOM:<​wrap round todo 7%>​toDo</​wrap>​
 +^Qty ^Value  ​  ​^Package ^Parts^Mouser^Reichelt^Conrad^Other^Notes^ ​
 +^Resistors^^^^^^^^^
 +|4    |680R 5%   |0603 |R1, R2, R3, R4  |[[https://​www.mouser.fr/​ProductDetail/​Panasonic/​ERJ-PA3J681V?​qs=sGAEpiMZZMvdGkrng054t6%2fAfIpq60YDGGtXI%252bjCSgEeBlnz3sOAbg%3d%3d| 667-ERJ-PA3J681V
 +]]       ​| ​       |      |     ​|Depends on Leds |
 +^Capacitors^^^^^^^^^
 +|3    |10n   ​|0603|C27,​ C29, C30 |[[https://​www.mouser.fr/​ProductDetail/​KEMET/​C0603C103M5RAC?​qs=sGAEpiMZZMs0AnBnWHyRQFv7x1xn%252bYFdDq1yWQaSOFQ%3d|80-C0603C103M5RAC]] ​    ​| ​       |      |     | |
 +|15    |100n   ​|0603|C23,​ C24, C28, C31, C32, C33, C34, C35, C36, C37, C38, C39, C40, C41, C42 |[[https://​www.mouser.fr/​ProductDetail/​KEMET/​C0603C104Z3VACTU?​qs=sGAEpiMZZMs0AnBnWHyRQFqPnX0Olvco%252bYoiWDWTaEY%3d| 80-C0603C104Z3V
 +  ]]      |        |      |     | |
 +|2    |10u   ​|SMC_B |C25, C26|[[https://​www.mouser.fr/​ProductDetail/​AVX/​F931C106MAA?​qs=sGAEpiMZZMuEN2agSAc2puC4lhRhLeolmYomTIpwaLE%3d|
 +647-F931C106MAA ]]     ​| ​       |      |     | |
 +^LEDs^^^^^^^^^
 +|4    |--|0805 ​ |LED.1, LED.2, LED.31, LED.4            |[[https://​www.mouser.fr/​ProductDetail/​755-SML-H12U8TT86C|755-SML-H12U8TT86C]] ​     |        |      |     | | 
 +^ICs^^^^^^^^^
 +|1    |LCMX02-7000|TQFP144|FPGA |[[https://​www.mouser.fr/​ProductDetail/​Lattice/​LCMXO2-7000HC-6TG144I?​qs=sGAEpiMZZMvoScKlWpK8TKmOIJyZBaKlkPc%2f7GsJudw%3d|842-27000HC6TG144I ]]      |        |      |     ​|Speed grade 4 to 6, 3.3V! |
 +|1    |74LVC125 |TSSOP-14 ​ |IC4            |[[https://​www.mouser.fr/​ProductDetail/​Texas-Instruments/​SN74LVC125APWR?​qs=sGAEpiMZZMuiiWkaIwCK2SeqB8b8eM7HVlo3jiw3ikc%3d|595-SN74LVC125APWR ​ ]]      |        |      |     | |
 +|1    |LD1117AS33TR|SOT223 ​     |REG            |[[https://​www.mouser.fr/​ProductDetail/​STMicroelectronics/​LD1117AS33TR?​qs=sGAEpiMZZMsGz1a6aV8DcLVRTmaeOdDgNH1NaHTUtDw%3d|
 +511-LD1117AS33 ]]      |        |      |     | |
 +^Connnector^^^^^^^^^
 +|1    |micro-match 2x2 |Male  |J1B  |[[https://​www.mouser.fr/​ProductDetail/​TE-Connectivity-AMP/​215464-4?​qs=sGAEpiMZZMs%252bGHln7q6pm8SOCK6aAoLgKRfGxhAt6V0%3d|571-215464-4 ]]         ​| ​     |     | |for stack  |  ​
 +|1    |2x3 |Male  |J1A  |[[https://​www.mouser.fr/​ProductDetail/​Wurth-Electronics/​61200621621?​qs=sGAEpiMZZMs%252bGHln7q6pm%2fFhW%252btWvhAgbNxkR%252blwXp8Ip%2fAN9J9VOg%3d%3d|710-61200621621 ]]         ​| ​     |     | | | 
 +|1    |micro-match 2x3 |Female ​ |JTAG   ​|[[https://​www.mouser.fr/​ProductDetail/​TE-Connectivity/​215079-6?​qs=sGAEpiMZZMs%252bGHln7q6pm48SVpWlpfsECZqIi2rkWjs%3d|571-215079-6]] or [[https://​www.mouser.fr/​ProductDetail/​TE-Connectivity/​2178710-6?​qs=sGAEpiMZZMs%252bGHln7q6pmzszEaJ39Bz8lDoKaCIVjpqtoiZwdtC2Ng%3d%3d|571-2178710-6 (value line)]] |      |     | |  | 
 +|5    |2x5 |Male  |J11A, J11B, J11C, J11D, SPI  |[[https://​www.mouser.fr/​ProductDetail/​Wurth-Electronics/​61201021621?​qs=sGAEpiMZZMs%252bGHln7q6pm%252bxnWLfLL2%2f93mYWvuMVZAY%3d|710-61201021621 ]]         ​| ​     |     | | | 
 +|1    |micro-match 2x5 |Male  |SPI  |[[https://​www.mouser.fr/​ProductDetail/​TE-Connectivity-AMP/​8-215464-0?​qs=sGAEpiMZZMs%252bGHln7q6pm8SOCK6aAoLgIDcXiC5FL8s%3d|
 +571-8-215464-0 ]]     ​| ​     |     | |for stack | 
 +|5    |2x10 |Male  |GPIOA, GPIOB, GPIOC  |[[https://​www.mouser.fr/​ProductDetail/​Wurth-Electronics/​61202021621?​qs=sGAEpiMZZMs%252bGHln7q6pm%252bxnWLfLL2%2f9xQYuWgvWHoc%3d|710-61202021621 ​ ]]         ​| ​     |     | | | 
 +\\
 +\\
 +
 +
 +----
 +
 +===== SPI Communication and protocol =====
 +**This protocol is already implemented in MIOS32 as MIOS32_SPI_MIDI functions.**\\
 +\\
 +This is a SPI slave interface.\\
 +Host communication protocol is based on MMA Specification for USB communication.\\
 +MIDI data is carried in the packet in 32 bit MIDI Event. Most common MIDI messages are 2 or 3 bytes
 +packed into one MIDI Event.\\
 +Longer messages, generally System Exclusive messages are carried in multiple MIDI
 +Events. These MIDI Event provide a method to transfer MIDI messages with 32 bit fixed length messages to help
 +memory allocation. This also makes parsing MIDI events easier by packetizing the separate bytes of a MIDI
 +message into one parsed MIDI Event.\\
 +The first byte in each 32-bit MIDI Event is a sub-header containing a Port Index Number (4 bits) followed
 +by a Code Index Number (4 bits). The remaining three bytes contain the actual MIDI event. Most typical parsed
 +MIDI events are two or three bytes in length. Unused bytes are reserved and must be padded with zeros (in the
 +case of a one- or two-byte MIDI event) to preserve the 32-bit fixed length of the MIDI Event.\\
 +\\
 +The Code Index Number (CIN) indicates the classification of the bytes in the and the number of bytes in the message. The following table summarizes these classifications.\\
 +\\
 +<code c>
 +//! this global array is read from MIOS32_MIDI to
 +//! determine the number of MIDI bytes which are part of a package
 +const u8 mios32_midi_pcktype_num_bytes[16] = {
 +  0, // 0: invalid/​reserved event
 +  0, // 1: local command
 +  2, // 2: two-byte system common messages like MTC, Song Select, etc.
 +  3, // 3: three-byte system common messages like SPP, etc.
 +  3, // 4: SysEx starts or continues
 +  1, // 5: Single-byte system common message or sysex sends with following single byte
 +  2, // 6: SysEx sends with following two bytes
 +  3, // 7: SysEx sends with following three bytes
 +  3, // 8: Note Off
 +  3, // 9: Note On
 +  3, // a: Poly-Key Press
 +  3, // b: Control Change
 +  2, // c: Program Change
 +  2, // d: Channel Pressure
 +  3, // e: PitchBend Change
 +  1  // f: single byte
 +
 +};
 +</​code>​
 +
 +===== MIDI messages =====
 +Running status is never used, so all the messages are formed of all bytes. But the interface supports it, each MIDI Out can be individually set for that purpose.\\
 +\\
 +==== Some examples ====
 +**MIDI clock on port 7(SPIM0 to SPIM15)**\\
 +MIDI message is 0xF8, cin = 0x5.\\
 +SPI message = 0x0000f875 (Less significant byte first)\\
 +<code c>
 +    mios32_midi_package_t package;
 +    package.ALL = 0;
 +    package.cin = 0x5; // Single-byte system common message
 +    package.evnt0 = 0xf8; // MIDI Clock event status
 +    MIOS32_MIDI_SendPackage(SPIM7,​ package);
 +    // or directly ​
 +    MIOS32_MIDI_SendClock(SPIM7);​
 +</​code>​
 +\\
 +**Note On on port 11**\\
 +MIDI message is 0x90 0x2A 0x40, cin = 0x9.\\
 +SPI message = 0x402A90b9\\
 +<code c>
 +    mios32_midi_package_t package;
 +    package.ALL = 0;
 +    package.cin = 0x9; // Single-byte system common message
 +    package.evnt0 = 0x90; // MIDI Note On event, channel 1
 +    package.evnt1 = 0x2A; // Note Number
 +    package.evnt2 = 0x40; // Velocity
 +    MIOS32_MIDI_SendPackage(SPIM11,​ package);
 +    // or directly ​
 +    MIOS32_MIDI_SendNoteOn(SPIM11,​ Chn1, 0x2A, 0x40)
 +</​code>​
 +\\
 +**System Exclusive on port 0**\\
 +MIDI message is 0xF0 0x01 0x02 0x03 0x04 0x05 0xF7.\\
 +The stream will be divided in 3 packages:\\
 +SPI messages = 0x0101f004(SYSEX start), 0x05040304(SYSEX continues), 0x0000f705(SYSEX ends with one byte)
 +<code c>
 +    mios32_midi_package_t package;
 +    package.ALL = 0;
 +    package.cin = 0x4; // Single-byte system common message
 +    package.evnt0 = 0xf0; // Start of Exclusive
 +    package.evnt1 = 0x01; // Data
 +    package.evnt2 = 0x02; // Data
 +    MIOS32_MIDI_SendPackage(SPIM0,​ package);
 +    package.evnt0 = 0x03; // Data
 +    package.evnt1 = 0x04; // Data
 +    package.evnt2 = 0x05; // Data
 +    MIOS32_MIDI_SendPackage(SPIM0,​ package);
 +    package.ALL = 0;
 +    package.cin = 0x4; // Single-byte system common message
 +    package.evnt0 = 0xf7; // End of Exclusive
 +    MIOS32_MIDI_SendPackage(SPIM0,​ package);
 +    // or directly ​
 +    u8 stream[7]={0xF0,​ 0x01, 0x02, 0x03, 0x04, 0x05, 0xF7};
 +    MIOS32_MIDI_SendSysex(SPIM0,​ (u8*)stream,​ 7);
 +</​code>​
 +\\
 +
 +
 +==== Special command messages ====
 +The **m16** can receive some specifics commands and send back some status messages.\\
 +when **CIN=0x1**(local command), the **m16** will parse the message as a command and apply the requested change.\\
 +  * Port(Cable)value becomes Group Command Code(GCC).\\
 +  * evnt0 is the command number(CMD.\\
 +  * evnt1 and evnt2 are the value bytes.\\
 +List of the commands:\\
 +<WRAP group>
 +<WRAP column 100%>
 +{{:​antichambre:​cmd_table.png|}}
 +</​WRAP>​\\
 +</​WRAP>​\\
 +With System commands, you will be able to 
 +  * Put SPI or UARTs in loopback for testing purpose.
 +  * Enable MIDI activity status messages over SPI(MISO).
 +
 +There'​s only one MIDI configuration command, dedicated to UARTs TX(MIDI Out) Running Status enabler.\\
 +
 +With GPIOx commands, you can configure and set the GPIO ports.\\
 +
 +\\
 +\\
 +
 +<wrap round important 7%>
 +toDo
 +</​wrap>​
 +\\
 +Some connection examples\\\\
  
 In MIOS32\\ In MIOS32\\
  
 datasheet\\ datasheet\\
m16.txt · Last modified: 2018/10/08 09:12 by antichambre