SPARK MAX - Firmware Release v1.5.0 - Alternate Encoder & USB-to-CAN Bridge

I’m excited to announce that we have released SPARK MAX Firmware Version 1.5.0 for the 2020 FRC Season! This update includes two major new features that were most requested by the community:

  • Alternate Encoder Mode
    • Allows an alternate encoder to be connected to the Data Port when in either Brushless or Brushed modes.
  • USB-to-CAN Bridge
    • Allows a single USB-connected SPARK MAX to be used as a bridge to configure and simultaneously update any SPARK MAX connected on the CAN bus.
    • MAXs on the CAN bus must be updated to firmware version 1.4.0 or newer to accept updates over the USB-to-CAN Bridge.

This firmware update requires the new SPARK MAX Client 2.0.0 which has many new features and improvements including:

  • Revamped Basic and Advanced tabs.
  • A new Network tab that can display every SPARK MAX on the CAN Bus.
  • Savable configurations to make applying them across multiple controllers easier.

Check out our video to see the major new features in action.

With the new firmware we are also releasing version 1.5.0 of our LabVIEW, Java, and C++ APIs. Full details and change logs about new features can be found on our website:

As always, don’t hesitate to reach out to [email protected] if you have any questions!


༼ つ ◕_◕ ༽つ Plz gib MiniNEO specs ༼ つ ◕_◕ ༽つ


This is honestly a gamechanger. If this functions as advertised, then all the features teams need to succeed with spark max controllers are available!

1 Like

Does the alternate encoder mode have any impact on motor performance? Isn’t this, in essence, converting the motor to a sensorless brushless motor?

1 Like

No I believe all it is doing is allowing you to have a more precise encoder if you wish.

No impact to performance. When in Brushless Mode, the NEO’s built in encoder is still connected and is used internally to drive the motor. In other words, it is still running as a sensored BLDC. The alternate encoder can be configured to be a different source for closed-loop control rather than the NEO’s sensor.

In Brushed Mode it can just be a alternative to the default encoder port for closed-loop control.


A more precise external encoder. There’s a difference between sensored and sensorless brushless motors.

Thanks for the clarification. To clarify further, both the NEO’s internal encoder and the external encoder would have to be wired to the Spark MAX simultaneously, correct? Through use of something like the Spark Max Data Port Breakout?

Its connected to the data port on the spark max

Yes, I understand that. I would suggest watching the video I linked in my previous post (and/or this video covering how DC brushless motors work) to get a better idea why an encoder that directly measures rotor position is important to BLDC performance.

1 Like

nah I’m done being destroyed for today


The “alternate encoder” connects to the pins which are normally the limit pins and the multifunction pin (pins 4, 6, 8). The gadgeteer-style encoders (e.g. the SRX encoder) have the encoder info on pins 5, 7, and 9.If you want to use a standard gadgeteer-style encoder (e.g. the SRX encoder) as an alternate encoder, you’ll need to switch some wires around, and NOT use the limit switches through the encoder.

@dyanoshak, is there any intention to market a cable for this purpose?


Thank you so much REV. External encoder support will make my job much easier and CAN-to-USB will be great as well. As someone who personally requested these features, I am super excited to use Spark MAXes and NEOs this year!


We are working on an adapter board that will adapt our Through Bore Encoder to the Alternate Encoder Data Port pinout. I just don’t have an availability date yet.

We’re evaluating other adapters, but at this time the easiest way to connect other encoders to the reconfigured port is to use our Data Port Breakout Board and follow the pin mapping in the User’s Manual.

We did look at a what it would take to make a ‘swizzled’ version of the IDC ribbon cable, but it wasn’t feasible.


Yes, see 3.6.1 - Connecting an Alternate Encoder in the User’s Manual for more details.

1 Like

@dyanoshak Would we be able to plug a ribbon cable from an srx mag encoder directly into the data port? From some light research, I found that the pin maps for both were identical, I believe.

Quick question, does the new firmware still work with the 2019 version of the WPI Libraries?

While in Brushed Mode, yes. This is with the Data Port in its default configuration and has been possible since version 1.4.0.

However, the Data Port Encoder pins are shared with the front Encoder Port, so in Brushless Mode you won’t be able to. This is because the Data Port encoder pins are shared with the front Encoder Port used by the NEO.

The main purpose of the new Alternate Encoder Mode is to reconfigure the Data Port to allow for an additional encoder to be used while running a NEO.

1 Like

Yes it does, but be sure to update to the latest 1.5.0 SPARK MAX APIs.

1 Like

Awesome, thanks for the quick response!

Will we be able to use the secondary encoder to retrieve counts and also data from the neo encoder?