Selecting an Interface

The navX2-MXP /navX-MXP sensors provide several methods for communicating with robotics control applications:

Streaming vs. Register-based Communication

The navX-MXP interfaces fall into two types:  Streaming and Register-based.

Streaming:  data is sent at regular intervals by the navX-sensor, and the host is notified when new data arrives.  To support the lower bandwidth of the TTL UART interface, streaming data can be transmitted in two different formats:  Processed Data and Raw data.  Streaming is used over the TTL UART and USB interfaces.  More details on the communication detail are available in the Serial Protocol Definition.

Register-based: communication is initiated by the host whenever new data is desired, and the host can request any data required.  Register-based communication is used over the I2C and SPI interfaces.  More details on the communication detail are available in the Register Protocol Definition.

Comparing the navX-sensor Communication Interfaces

Interface Type Speed Latency Type Cable distance Max Update Rate
SPI 2 mbps <1ms Register-based <1 meter 200
I2C 400 kbps ~10ms Register-based 1 meter 200
USB 12 mbps 1ms Streaming 6  meters 200


Based upon the above, the following recommendations are provided for selecting the best navX-MXP communications interface:

– If mounting the navX-sensor directly on the RoboRIO, the SPI interface is preferred for it’s high speed and low latency.

– If mounting the navX-sensor separately from the RoboRIO using an extension cable and if MXP IO support is desired, run SPI at a lower speed.  The I2C interface is also a reasonable option.

– If mounting the navX-sensor separately from the RoboRIO, and MXP IO support is not desired and only Processed or Raw Data (not both) is needed, USB may be used.  This configuration is useful when using the navX-sensor magnetometer data, since it makes it possible to mount the navX-sensor farther away from motors.  This configuration is also useful when accessing navX-sensor data from a separate processor, such as a PC or a separate video processor.  However, please note that in certain cases when other USB devices (e..g, cameras) are connected to the same RoboRIO USB bus, and are used simultaneously with navX-sensor, in certain cases the USB communication is interrupted.  For this reason, USB is not recommended on the RoboRIO, especially if you are connecting with other USB devices on the same USB bus.