MSB2 Firmware

From University of Washington - Ubicomp Research Page
Jump to navigationJump to search

Overview

The MSB2 and LSB both use the same firmware core with custom modifications to support the sensors and other subsystems specific to each platform. The goals of the firmware are:

  • Encapsulate all low level functions in easily accessible commands
    • Hides all startup/initialization routines
  • Provide a variable sampling schedule (with some constraints) that automatically handles powering off unused sensors
  • Provide commands for accessing calibration and other sensor metadata
  • Sample and send data via a hi-speed binary uart interface
    • Communicates with any embedded platform
    • Communicates with any desktop/laptop/handheld/cell phone with a available uart port


State Diagram

The system has two main states, the default wait state and the running state. The other states are used for setting up various components of the system. Once everything is working; however, the user simply enters the running state and begins recording data. In addition to the command states shown here available here several other commands are available (depending upon the hardware) which can be used to manipulate various parts of the system.

    System state diagram for communicating with the MSB firmware, the power point version is available here


Communication protocol

Communication with the MSB Firmware takes place over the first uart on the ATmega, at 921,600 baud, with an option of having flow control. You must only send one byte per timer interrupt! For example, if your INTERRUPT_COUNT is set to 5120 (512 Hz), you must wait at least 1/512th of a second between bytes.

Commands

    Commands are six-character sequences where '!' (hex 0x21) indicates the start of a command. The parser is reset by a '!', so if you make a mistake when sending a command, simply resend the command starting with a '!'. Some commands include their arguments as part of their five command bytes.
    Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5
    '!' 0x21 Command

    Note: '!' is a reserved character and may not be used as an argument for any command that includes its arguments in the command bytes.

Packet format (from the MSB Firmware)

    All MSB firmware responses will be sent back as packets that begin with 2 characters '#' followed by '|', then an identifier byte describing what the packet is and how it should be interpreted.
    Byte 0 Byte 1 Byte 3
    '#' 0x23 '|' 0x7C ID

Example Communication Sequence

    Here's an example of what a host computer would send to query the state of the LED and what it would receive from the MSB:

    Host sends: '!query' + 0x10 [query command + 0x10 to indicate a LED query]
    Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
    '!' 0x21 'q' 0x71 'u' 0x75 'e' 0x65 'r' 0x72 'y' 0x79 0x10

    MSB Firmware responds with: ['#|' start header + 0x10 to indicate a LED packet and 0x00 the current state of the LEDs

    Byte 0 Byte 1 Byte 2 Byte 3
    '#' 0x23 '|' 0x7C 0x10 0 0x00

Available Commands

Start Command

    Host sends: '!start' [start command to begin sampling]
    Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5
    '!' 0x21 's' 0x73 't' 0x74 'a' 0x61 'r' 0x72 't' 0x74


Data Format

Microphone Data Packet