Register Protocol

In addition to the streaming Serial protocol over USB, navX-Micro may be accessed over the I2C bus, using a register-based protocol.

Register-based protocol overview

Unlike the streaming Serial protocol, which periodically sends out updates messages whenever new data is available, the register based protocol is a “polled” interface, in that the consumer of the navX-Micro data (in this case referred to as a “bus master”) can request data from the navX-Micro at any time. At the same time, when using the register-based protocol the bus master does not know when new data is available.

To help this situation, a timestamp – which is updated whenever new data is available – is made available. Therefore, the general approach to ensure each new data sample is retrieved is to regularly (at the navX-Micro update rate) retrieve both the timestamp and the data of interest), and if the timestamp differs from the previous timestamp by the update rate as expressed in milliseconds, then the data sample just retrieved is current, and no data has been missed.

I2C Overview

The navX-Micro responds to 7-bit address 50 (0x32) on the I2C bus. If accessing the navX-Micro via the I2C bus, ensure that no other device at that address is on the same bus.

The navX-Micro I2C bus operates at a speed up to 400Khz.

When accessing the navX-Micro via the I2C bus, this following pattern is used:

– The I2C bus master sends the navX-Micro I2C address. The highest bit is set to indicate the bus master intends to write to the navX-MXP. If the highest bit is clear, this indicates the bus master intends to read from the navX-MXP.

– The I2C bus master next sends the starting register address it intends to write to or read from.

– The I2C bus master next initiates I2C an bus transaction. The navX-MXP supports I2C burst mode for read operations, therefore the navX-MXP will respond with register values as long as the I2C bus master continues the transaction, and as long as the last register address has not yet been reached.

If instead the I2C bus master intends to write data to a writable navX-MXP register, the bus master should transmit the new register value immediately after sending the register address.

navX-Micro Register Data Types

All multi-byte registers are in little-endian format.
All registers with ‘signed’ data are 2’s-complement.

Data Type Range Byte Count
Unsigned Byte 0 to 255 1
Unsigned Short 0 to 65535 2
Signed Short -32768 to 32768 2
signed hundredths -327.68 to 327.67 2
Unsigned Hundredths 0.0 to 655.35 2
Signed Thousandths -32.768 to 32.767 2
Signed Pi Radians -2 to 2 2
Q16.16 -32768.9999 to 32767.9999 4
Unsigned Long 0 to 4294967295 4

*Unsigned Hundredths:  original value * 100 to rounded to nearest integer
*Signed Hundredths:  original value * 100 rounded to nearest integer
*Signed Thousandths:  original value * 1000 rounted to nearest integer
*Signed Pi Radians:  original value * 16384 rounded to nearest integer

navX-Micro Register Map

Address (Hex) Name Access Range/Data Type
0x00 WhoAmI Read-only 50 (0x32): navX-MXP
0x01 Board Revision Read-only Unsigned byte
0x02 Firmware Major Version Read-only Unsigned byte
0x03 Firmware Minor Version Read-only Unsigned byte
0x04 Update Rate Read/write Unsigned byte (Hz)
0x05 Accel FSR Read-only Unsigned byte (Degrees/Sec)
0x06-0x07 Gyro FSR Read-only Unsigned short(G)
0x08 Operational Status Read-only See NAVX_OP_STATUS
0x09 Calibration Status Read-only See NAVX_CAL_STATUS
0x0A Self-test Status Read-only See NAVX_SELFTEST_STATUS
0x0B Capability Flags (low) Read-only See NAVX_CAPABILITY
0x0C Capability Flags (high) Read-only “”
0x0D-0x0F n/a Read-only
0x10 Sensor Status (low) Read-only See NAVX_SENSOR_STATUS
0x11 Sensor Status (high) Read-only “”
0x12-0x15 Current Timestamp Read-only Unsigned long
0x16-0x17 Yaw Read-only Signed Packed Hundredths (Degrees)
0x18-0x19 Pitch Read-only Signed Packed Hundredths (Degrees)
0x1A-0x1B Roll Read-only Signed Packed Hundredths (Degrees)
0x1C-0x1D Heading Read-only Unsigned Packed Hundredths (Degrees)
0x1E-0x1F Fused Heading Read-only Unsigned Packed Hundredths (Degrees))
0x20-0x23 Altitude Read-only Q16.16 – NavX-MXP Aero Only (Meters)
0x24-0x25 Linear Acceleration (X) Read-only Signed Thousandths (G)
0x26-0x27 Linear Acceleration (Y) Read-only Signed Thousandths (G)
0x28-0x29 Linear Acceleration (Z) Read-only Signed Thousandths (G)
0x2A-0x2B Quaternion (W) Read-only Signed Pi Radians (Pi Radians)
0x2C-0x2D Quaternion (X) Read-only Signed Pi Radians (Pi Radians)
0x2E-0x2F Quaternion (Y) Read-only Signed Pi Radians (Pi Radians)
0x30-0x31 Quaternion (Z) Read-only Signed Pi Radians (Pi Radians)
0x32-0x33 MPU Temperature Read-only Signed Packed Hundredths (C)
0x34-0x35 Calibrated Gyro (X) Read-only Signed Short (Degrees/sec in device units)
0x36-0x37 Calibrated Gyro (Y) Read-only Signed Short (Degrees/sec in device units)
0x38-0x39 Calibrated Gyro (Z) Read-only Signed Short (Degrees/sec in device units)
0x3A-0x3B Calibrated Acceleration (X) Read-only Signed Short (G in device units)
0x3C-0x3D Calibrated Acceleration (Y) Read-only Signed Short (G in device units)
0x3E-0x3F Calibrated Acceleration (Z) Read-only Signed Short (G in device units)
0x40-0x41 Calibrated Magnetometer (X) Read-only Signed Short (uTesla in device units)
0x42-0x43 Calibrated Magnetometer (Y) Read-only Signed Short (uTesla in device units)
0x44-0x45 Calibrated Magnetometer (Z) Read-only Signed Short (uTesla in device units)
0x46-0x49 Barometric Pressure Read-only Q16.16 (millibars)
0x4A-0x4B Pressure Sensor Temperature Read-only Signed Packed Hundredths (C)
0x4C-0x4D Calibrated Yaw Offset Read-only Signed Hundredths (Degrees)
0x4E-0x4F Calibrated Quaternion Offset (W) Read-only Signed Short Ratio (Ratio)
0x50-0x51 Calibrated Quaternion Offset (X) Read-only Signed Short Ratio (Ratio)
0x52-0x53 Calibrated Quaternion Offset (Y) Read-only Signed Short Ratio (Ratio)
0x54-0x55 Calibrated Quaternion Offset (Z) Read-only Signed Short Ratio (Ratio)
0x56 Integration Control Read/write See NAVX_INTEGRATION_CTL (v1.2 firmware and higher)
0x58-0x5B Integrated Velocity (X) Read-only Q16.16 (Meters/sec) (v1.2 firmware and higher)
0x5C-0x5F Integrated Velocity (Y) Read-only Q16.16 (Meters/sec) (v1.2 firmware and higher)
0x60-0x63 Integrated Velocity (Z) Read-only Q16,16 (Meters/sec) (v1.2 firmware and higher)
0x64-0x67 Integrated Displacement (X) Read-only Q16.16 (Meters) (v1.2 firmware and higher)
0x68-0x6B Integrated Displacement (Y) Read-only Q16,16 (Meters) (v1.2 firmware and higher)
0x6C-0x6F Integrated Displacement (Z) Read-only Q16.16 (Meters) (v1.2 firmware and higher)

NAVX_OP_STATUS

Meaning Value
NAVX_OP_STATUS_INITIALIZING 0x00
NAVX_OP_STATUS_SELFTEST_IN_PROGRESS 0x01
NAVX_OP_STATUS_ERROR 0x02
NAVX_OP_STATUS_IMU_AUTOCAL_IN_PROGRESS 0x03
NAVX_OP_STATUS_NORMAL 0x04

NAVX_SENSOR_STATUS

Meaning Value
NAVX_SENSOR_STATUS_MOVING 0x01
NAVX_SENSOR_STATUS_YAW_STABLE 0x02
NAVX_SENSOR_STATUS_MAG_DISTURBANCE 0x04
NAVX_SENSOR_STATUS_ALTITUDE_VALID 0x08
NAVX_SENSOR_STATUS_SEALEVEL_PRESS_SET 0x10
NAVX_SENSOR_STATUS_FUSED_HEADING_VALID 0x20

NAVX_CAL_STATUS

Meaning Value
NAVX_CAL_STATUS_IMU_CAL_INPROGRESS 0x00
NAVX_CAL_STATUS_IMU_CAL_ACCUMULATE 0x01
NAVX_CAL_STATUS_IMU_CAL_COMPLETE 0x02
NAVX_CAL_STATUS_MAG_CAL_COMPLETE 0x04
NAVX_CAL_STATUS_BARO_CAL_COMPLETE 0x08

NAVX_SELFTEST_STATUS

Meaning Value
NAVX_SELFTEST_STATUS_COMPLETE 0x80
NAVX_SELFTEST_RESULT_GYRO_PASSED 0x01
NAVX_SELFTEST_RESULT_ACCEL_PASSED 0x02
NAVX_SELFTEST_RESULT_MAG_PASSED 0x04
NAVX_SELFTEST_RESULT_BARO_PASSED 0x08

NAVX_CAPABILITY

Meaning Value
NAVX_CAPABILITY_FLAG_OMNIMOUNT 0x04
NAVX_CAPABILITY_FLAG_OMNIMOUNT_CONFIG_MASK 0x38
NAVX_CAPABILITY_FLAG_VEL_AND_DISP 0x40
NAVX_CAPABILITY_FLAG_VEL_AND_DISP 0x80

NAVX_OMNIMOUNT_CONFIG

Meaning Value
OMNIMOUNT_DEFAULT (Z Axis, Up) 0x00
OMNIMOUNT_YAW_X_UP 0x01
OMNIMOUNT_YAW_X_DOWN 0x02
OMNIMOUNT_YAW_Y_UP 0x03
OMNIMOUNT_YAW_Y_DOWN 0x04
OMNIMOUNT_YAW_Z_UP 0x05
OMNIMOUNT_YAW_Z_DOWN 0x06

NAVX_INTEGRATION_CTL

Meaning Value
NAVX_INTEGRATION_CTL_RESET_VEL_X 0x01
NAVX_INTEGRATION_CTL_RESET_VEL_Y 0x02
NAVX_INTEGRATION_CTL_RESET_VEL_X 0x04
NAVX_INTEGRATION_CTL_RESET_DISP_X 0x08
NAVX_INTEGRATION_CTL_RESET_DISP_Y 0x10
NAVX_INTEGRATION_CTL_RESET_DISP_X 0x20
NAVX_INTEGRATION_CTL_RESET_YAW 0x80