LEGO Mindstorms EV3 |
Definition of protocol used when an UART communicating device is detected at an input port.
The communication used messages that consists of one or more bytes:
FIRST BYTE IN MESSAGE MEANS =========================== bit 76543210 || 00LLLCC0 SYS - System message |||||||| ||000000 SYNC - Synchronisation byte ||000010 NACK - Not acknowledge byte ||000100 ACK - Acknowledge byte ||LLL110 ESC - Reserved for future use || || 01LLLCCC CMD - Command message || ||| || 000 TYPE || 001 MODES || 010 SPEED || 011 SELECT || 100 WRITE || 101 || 110 || 111 || || 10LLLMMM INFO - Info message (next byte is command) || ||| || 000 Mode 0 default (must be last mode in INFO stream to select as default) || 001 Mode 1 || 010 Mode 2 || 011 Mode 3 || 100 Mode 4 || 101 Mode 5 || 110 Mode 6 || 111 Mode 7 || || 11LLLMMM DATA - Data message ||| 000 Message pay load is 1 byte not including command byte and check byte 001 Message pay load is 2 bytes not including command byte and check byte 010 Message pay load is 4 bytes not including command byte and check byte 011 Message pay load is 8 bytes not including command byte and check byte 100 Message pay load is 16 bytes not including command byte and check byte 101 Message pay load is 32 bytes not including command byte and check byte Messages From Device ==================== Command messages: TYPE 01000000 tttttttt cccccccc Device type MODES 01001001 00000iii 00000jjj cccccccc Number of modes SPEED 01010010 ssssssss ssssssss ssssssss ssssssss cccccccc Max communication speed Info messages: NAME 10LLLMMM 00000000 aaaaaaaa ........ cccccccc Name of Device in mode MMM RAW 10011MMM 00000001 llllllll llllllll llllllll llllllll hhhhhhhh hhhhhhhh hhhhhhhh hhhhhhhh cccccccc Raw value span in mode MMM PCT 10011MMM 00000010 llllllll llllllll llllllll llllllll hhhhhhhh hhhhhhhh hhhhhhhh hhhhhhhh cccccccc Percentage span in mode MMM SI 10011MMM 00000011 llllllll llllllll llllllll llllllll hhhhhhhh hhhhhhhh hhhhhhhh hhhhhhhh cccccccc SI unit value span in mode MMM SYMBOL 10011MMM 00000100 aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa cccccccc SI symbol FORMAT 10010MMM 10000000 00nnnnnn 000000ff 0000FFFF 0000DDDD cccccccc Format of data in mode MMM Data messages: DATA 11LLLMMM dddddddd ........ cccccccc Data in format described under INFO MMM Messages from the device must follow the above sequence Devices with more modes can repeat "Info messages" once for every mode Highest "mode number" must be first NAME is the first in info sequence and is necessary to initiate a mode info FORMAT is last in info sequence and is necessary to complete the modes info Other info messages is optional and has a default value that will be used if not provided Delay 10 mS between modes (from FORMATx to NAMEy) to allow the informations to be saved in the brick # After ACK only DATA is allowed at the moment (Simplest device only needs to send: TYPE, NAME, FORMAT - if SPEED, RAW, PCT and SI are defaults) Messages To Device ================== Command messages: SPEED 01010010 ssssssss ssssssss ssssssss ssssssss cccccccc Max communication speed SELECT 01000011 00000mmm cccccccc Select new mode WRITE 01LLL100 dddddddd ........ cccccccc Write 1-23 bytes to device # After ACK only SELECT and WRITE is allowed at the moment BIT Explanations ================ LLL = Message pay load bytes not including command byte and check byte 000 = 1 001 = 2 010 = 4 011 = 8 100 = 16 101 = 32 CCC = Command 000 = TYPE 001 = MODES 010 = SPEED 011 = SELECT MMM = Mode 000 = Mode 0 default (must be last mode in INFO stream to select as default) 001 = Mode 1 010 = Mode 2 011 = Mode 3 100 = Mode 4 101 = Mode 5 110 = Mode 6 111 = Mode 7 iii = Number of modes 000 = Only mode 0 (default if message not received) 001 = Mode 0,1 010 = Mode 0,1,2 011 = Mode 0,1,2,3 100 = Mode 0,1,2,3,4 101 = Mode 0,1,2,3,4,5 110 = Mode 0,1,2,3,4,5,6 111 = Mode 0,1,2,3,4,5,6,7 jjj = Number of modes in view and data log (default is iii if not received) 000 = Only mode 0 001 = Mode 0,1 010 = Mode 0,1,2 011 = Mode 0,1,2,3 100 = Mode 0,1,2,3,4 101 = Mode 0,1,2,3,4,5 110 = Mode 0,1,2,3,4,5,6 111 = Mode 0,1,2,3,4,5,6,7 cccccccc = Check byte (result of 0xFF exclusively or'ed with all preceding bytes) ssssssss = Speed 4 bytes (ULONG with LSB first) tttttttt = Device type (used together with mode to form VM device type) llllllll = Floating point value for low (RAW/PCT/SI) value (used to scale values) (Default if not received - RAW = 0.0, PCT = 0.0, SI = 0.0) hhhhhhhh = Floating point value for high (RAW/PCT/SI) value (used to scale values) (Default if not received - RAW = 1023.0, PCT = 100.0, SI = 1.0) nnnnn = Number of data sets [1..32 DATA8] [1..16 DATA16] [1..8 DATA32] [1..8 DATAF] ff = Data set format 00 = DATA8 01 = DATA16 10 = DATA32 11 = DATAF aaaaaaaa = Device name in ACSII characters (fill with zero '\0' to get to LLL - no zero termination necessary) (Default if not received - empty) dddddddd = Binary data (LSB first) mmm = Mode 000 = Mode 0 001 = Mode 1 010 = Mode 2 011 = Mode 3 100 = Mode 4 101 = Mode 5 110 = Mode 6 111 = Mode 7 FFFF = Total number of figures shown in view and datalog [0..15] (inclusive decimal point and decimals) (Default if not received - 4) DDDD = Number of decimals shown in view and datalog [0..15] (Default if not received - 0)
Example with info coming from a device with two modes ===================================================== TYPE 01000000 tttttttt cccccccc type MODES 01001001 00000001 00000001 cccccccc Mode 0 and 1, both shown in view SPEED 01010010 00000000 11100001 00000000 00000000 cccccccc 57600 bits/Second NAME 10011001 00000000 'L' 'i' 'g' 'h' 't' '\0' '\0' '\0' cccccccc "Light" RAW 10011001 00000001 0.0 1023.0 cccccccc RAW 0-1023 SI 10011001 00000011 0.0 1023.0 cccccccc SI 0-1023 SYMBOL 10011001 00000100 'l' 'x' '\0' '\0' '\0' '\0' '\0' '\0' cccccccc "lx" FORMAT 10010001 10000000 00000001 00000001 00000100 00000000 cccccccc 1 * DATA16, 4 figures, 0 decimals NAME 10011000 00000000 'C' 'o' 'l' 'o' 'r' '\0' '\0' '\0' cccccccc "Color" RAW 10011000 00000001 0.0 6.0 cccccccc RAW 0-6 SI 10011000 00000011 0.0 6.0 cccccccc SI 0-6 FORMAT 10010000 10000000 00000001 00000001 00000001 00000000 cccccccc 1 * DATA16, 1 figure, 0 decimals ACK Error handling ============== Before ACK: IF ANYTHING GOES WRONG - HOST WILL NOT ACK AND DEVICE MUST RESET ! After ACK IF CHECK XOR FAILS - HOST WILL NACK IF FORMAT FAILS - HOST WILL TRY SELECT 5 TIMES IF ABOVE FAIL - ERROR IS SHOWN TO USER
\n