SSSR Labs SM010 Matrixarchate Firmware v. 1.2 and later Programmer's reference I2C control specification (Teletype mode) ------------------------- I2C Addresses 0xB8 (Unit 1, Default) 0xB9 (Unit 2) 0xBA (Unit 3) Bit fields legend x - ignored bits ccc = column address (left to right) rrrr = row address (top to bottom) t = Current program if 1 ppppppp - program number (63 = setup) llllllll - low data byte hhhhhhhh - high data byte Bit order for row is from left to right (Low 0..7) ------------------------------------------- | BITS | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | COLUMNS | H | G | F | E | D | C | B | A | ------------------------------------------- Bit order for column is from top to bottom (Low 0..7, High 0..7) ------------------------------------------------------------------------------------------- | BYTES | 1 | 2 | | BITS | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | ROWS | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | ------------------------------------------------------------------------------------------- I²C command codes ----------------- Perform Sequencer Step: Code 11111000 (0xF8) Example: 00-->B8: F8 (Go to the next step in the sequence) Sequencer Reset: Code 11111101 (0xFD) Example: 00-->B8: FD (Go to the first step in the sequence) Program Change: Code Program 11000000 XXnnnnnn (0xC0 ..) Example: 00-->B8: C0 0A (Switch to program 11. Visually numbered 01-60 or 1A-8D, logically 00-59) Switch Off: Code Address program 10000000 0rrrrccc tppppppp (0x80 .. ..) Example: 00-->B8: 80 14 FF (Switch off crosspoint "03E" in current program. Visually numbered 01A-16H, logically 0-127) Switch On: Code Address program 10010000 0rrrrccc tppppppp (0x90 .. ..) Example: 00-->B8: 90 08 FF (Switch on crosspoint "02A" in current program. Visually numbered 01A-16H, logically 0-127) Update column: Code Address program data_low data_high 10110000 0xxxxccc tppppppp llllllll hhhhhhhh (B0 .. .. .. ..) Example: 00-->B8: B0 03 00 0F C0 (Update program 01, column D, turn switches 1, 2, 3, 4, 9, 11 ON, all others OFF. Update row: Code Address program data_low data_high 10110000 1xxxrrrr tppppppp llllllll xxxxxxxx (B0 .. .. .. ..) Example: 00-->B8: B0 83 10 5C 00 (Update program 17, row 4, turn switches B, D, E, G ON, all others OFF. Request memory location: Code Addr_L Addr_H 10100000 LLLLLLLL HHHHHHHH (A0 .. ..) (returns 1-byte data) Example: 00-->B8: A0 FF 03 00<--B8: 02 (Request settings byte (0x03ff), return value 0x02) Update memory location: Code Addr_L Addr_H Data 11010000 LLLLLLLL HHHHHHHH DDDDDDDD (D0 .. .. ..) Example: 00-->B8: A0 FE 03 08 (Set brightness (0x03FE) to medium (0x08) Request column Code Address program 11110101 0xxxxccc tppppppp (F5 .. ..) (returns 2-byte data) Example: 00-->B8: F5 00 FF 00<--B8: 40 02 (Request column A of the current program with only Switches 07A and 10A enabled) Request row Code Address program 11110101 1xxxrrrr tppppppp (F5 .. ..) (returns 2-byte data) Example: 00-->B8: F5 8F FF 00<--B8: FF 00 (Request row 16 of the current program with All switches A-H enabled) Memory allocation ---------------- 0x000: Patch memory block, Program 01 (16 bytes) 0x010: Patch memory block, Program 02 (16 bytes) ... 0x3B0: Patch memory block, Program 60 (16 bytes) 0x3C0: Reserved (48 bytes) ... 0x3F0: Sequencer memory block (8 bytes) ... 0x3F8: Reserved 0x3F9: Reserved 0x3FA: Reserved 0x3FB: Reserved 0x3FC: Reserved 0x3FD: Reserved 0x3FE: Brightness Byte 0x3FF: Settings Byte ------ END OF EEPROM ------ Logical switch addresses (as shown on the matrix) ------------------------------------------------- | A01 | B01 | C01 | D01 | E01 | F01 | G01 | H01 | ------------------------------------------------- | A02 | B02 | C02 | D02 | E02 | F02 | G02 | H02 | ------------------------------------------------- | A03 | B03 | C03 | D03 | E03 | F03 | G03 | H03 | ------------------------------------------------- | A04 | B04 | C04 | D04 | E04 | F04 | G04 | H04 | ------------------------------------------------- | A05 | B05 | C05 | D05 | E05 | F05 | G05 | H05 | ------------------------------------------------- | A06 | B06 | C06 | D06 | E06 | F06 | G06 | H06 | ------------------------------------------------- | A07 | B07 | C07 | D07 | E07 | F07 | G07 | H07 | ------------------------------------------------- | A08 | B08 | C08 | D08 | E08 | F08 | G08 | H08 | ================================================= | A09 | B09 | C09 | D09 | E09 | F09 | G09 | H09 | ------------------------------------------------- | A10 | B10 | C10 | D10 | E10 | F10 | G10 | H10 | ------------------------------------------------- | A11 | B11 | C11 | D11 | E11 | F11 | G11 | H11 | ------------------------------------------------- | A12 | B12 | C12 | D12 | E12 | F12 | G12 | H12 | ------------------------------------------------- | A13 | B13 | C13 | D13 | E13 | F13 | G13 | H13 | ------------------------------------------------- | A14 | B14 | C14 | D14 | E14 | F14 | G14 | H14 | ------------------------------------------------- | A15 | B15 | C15 | D15 | E15 | F15 | G15 | H15 | ------------------------------------------------- | A16 | B16 | C16 | D16 | E16 | F16 | G16 | H16 | ------------------------------------------------- Switch addresses allocation in a patch memory block -------------------------------------------------------- | OFFS.| Bits: | -------------------------------------------------------- | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | -------------------------------------------------------- | 0x00 | A08 | A07 | A06 | A05 | A04 | A03 | A02 | A01 | -------------------------------------------------------- | 0x01 | B08 | B07 | B06 | B05 | B04 | B03 | B02 | B01 | -------------------------------------------------------- | 0x02 | C08 | C07 | C06 | C05 | C04 | C03 | C02 | C01 | -------------------------------------------------------- | 0x03 | D08 | D07 | D06 | D05 | D04 | D03 | D02 | D01 | -------------------------------------------------------- | 0x04 | E08 | E07 | E06 | E05 | E04 | E03 | E02 | E01 | -------------------------------------------------------- | 0x05 | F08 | F07 | F06 | F05 | F04 | F03 | F02 | F01 | -------------------------------------------------------- | 0x06 | G08 | G07 | G06 | G05 | G04 | G03 | G02 | G01 | -------------------------------------------------------- | 0x07 | H08 | H07 | H06 | H05 | H04 | H03 | H02 | H01 | ======================================================== | 0x08 | A16 | A15 | A14 | A13 | A12 | A11 | A10 | A09 | -------------------------------------------------------- | 0x09 | B16 | B15 | B14 | B13 | B12 | B11 | B10 | B09 | -------------------------------------------------------- | 0x0A | C16 | C15 | C14 | C13 | C12 | C11 | C10 | C09 | -------------------------------------------------------- | 0x0B | D16 | D15 | D14 | D13 | D12 | D11 | D10 | D09 | -------------------------------------------------------- | 0x0C | E16 | E15 | E14 | E13 | E12 | E11 | E10 | E09 | -------------------------------------------------------- | 0x0D | F16 | F15 | F14 | F13 | F12 | F11 | F10 | F09 | -------------------------------------------------------- | 0x0E | G16 | G15 | G14 | G13 | G12 | G11 | G10 | G09 | -------------------------------------------------------- | 0x0F | H16 | H15 | H14 | H13 | H12 | H11 | H10 | H09 | -------------------------------------------------------- Visual sequencer steps allocation ----------------------------------------- | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | ----------------------------------------- | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ----------------------------------------- | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | ----------------------------------------- | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | ----------------------------------------- | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | ----------------------------------------- | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | ----------------------------------------- | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | ----------------------------------------- | 57 | 58 | 59 | 60 | -- | -- | -- | -- | ----------------------------------------- Sequencer steps allocation in the settings memory block --------------------------------------------------------- | ADDR | Bits: | --------------------------------------------------------- | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | --------------------------------------------------------- | 0X3F0 | 57 | 49 | 41 | 33 | 25 | 17 | 09 | 01 | | 0x3F1 | 58 | 50 | 42 | 34 | 26 | 18 | 10 | 02 | | 0x3F2 | 59 | 51 | 43 | 35 | 27 | 19 | 11 | 03 | | 0x3F3 | 60 | 52 | 44 | 36 | 28 | 20 | 12 | 04 | | 0x3F4 | xx | 53 | 45 | 37 | 29 | 21 | 13 | 05 | | 0x3F5 | xx | 54 | 46 | 38 | 30 | 22 | 14 | 06 | | 0x3F6 | xx | 55 | 47 | 39 | 31 | 23 | 15 | 07 | | 0x3F7 | xx | 56 | 48 | 40 | 32 | 24 | 16 | 08 | --------------------------------------------------------- Brightness byte (0x3fe) ---------------- Allowed brightness value: 1..15 Settings byte (0x3ff) --------------------------------- | X | X | t | t | p | d | s | s | --------------------------------- ss: sequencer direction 00 - Forward 01 - Backward 10 - Pendulum 11 - Random d: display mode 0 - Normal 1 - Graphically assisted p: program display mode 0 - Decimal 1 - Octal tt: I2C address for Monome Teletype 00: 0x8B 01: 0x8C 10: 0x8D 11: 0x8B