Selecting an Interface

The navX-MXP provides 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-MXP, and the host is notified when new data arrives.  To support the low bitrate of the TTL UART interface, the streaming data is sent 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-MXP 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-MXP directly on the RoboRIO, the SPI interface is preferred for it’s high speed and low latency.

– If mounting the navX-MXP 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-MXP 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-MXP magnetometer data, since it makes it possible to mount the navX-MXP far away from motors.  This configuration is also useful when accessing navX-MXP 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-MXP, sometimes the 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.