LogoLogo
REVLib Docs
  • REV ION Brushless
  • Quick Links
  • Frequently Asked Questions
  • NEO Brushless Motors
    • Brushless DC Motor Basics
    • NEO Vortex
      • Docking a SPARK Flex
      • Vortex Shafts
      • Installing a Shaft
      • NEO Vortex Solo Adapter
    • NEO V1.1
      • NEO V1
      • Pinion Pressing Guides
    • NEO 550
      • Pinion Pressing Guide
    • Dynamometer Testing
    • Motor Comparison
  • SPARK Flex Motor Controller
    • SPARK Flex Overview
      • SPARK Flex Dock
    • SPARK Flex Specifications
    • SPARK Flex Feature Description
      • Power and Motor Connections
      • Control Connections
      • Data Port
      • Mounting Holes
      • Control Interfaces
      • Mode Button
      • Operating Modes
    • SPARK Flex Getting Started
      • Wiring the SPARK Flex
      • Make it Spin!
      • Basic Configurations
    • SPARK Flex Status LED Patterns
    • SPARK Flex Troubleshooting
    • SPARK Flex Operating Modes
  • SPARK MAX Motor Controller
    • SPARK MAX Overview
    • SPARK MAX Specifications
      • Power and Motor Connections
      • Control Connections
      • Encoder Port
      • Data Port
    • SPARK MAX Getting Started
      • Wiring the SPARK MAX
      • Make it Spin!
      • Basic Configurations
    • SPARK MAX Status LED Patterns
    • SPARK MAX Troubleshooting
    • SPARK MAX Operating Modes
    • SPARK MAX Control Interfaces
    • SPARK MAX Configuration Parameters
    • Using Encoders with the SPARK MAX
      • Absolute Encoders
      • Alternate Encoder Mode
      • Securing the Encoder Adapters
      • Calibration for MAXSwerve
  • REVLib
    • REVLib Overview
      • REVLib Changelog
      • Migrating to REVLib 2025
    • Closed-Loop Control Overview
      • Closed Loop Control Getting Started
      • Getting Started with PID Tuning
      • Position Control Mode
      • Velocity Control Mode
      • Current Control Mode
      • Smart Motion Control
      • Smart Velocity Control
    • Code Examples
    • Migrating to REVLib
    • Device Firmware Changelogs
  • Tips and Tricks
    • Anderson Powerpole Connectors
    • REV Hardware Client Documentation
  • Legacy Documentation
    • SPARK Motor Controller
    • SPARK MAX Client
      • Navigating the SPARK MAX Client
      • Updating Device Firmware
      • Recovery Mode with the SPARK MAX Client
      • SPARK MAX Client Troubleshooting
Powered by GitBook
On this page

Was this helpful?

Export as PDF
  1. REVLib

Device Firmware Changelogs

PreviousMigrating to REVLibNextAnderson Powerpole Connectors

Last updated 4 months ago

Was this helpful?

January 4, 2025 Update -

Documentation for REVLib 2025 can now be found at:

Please bookmark our new page as we transition over and add more information there!

It is recommended to keep your SPARK MAX up-to-date with the latest firmware. The REV Hardware Client application will automatically download the latest firmware, but you can also download the firmware manually below:

This firmware will not work with SPARK MAX beta hardware units distributed by REV to the SPARK MAX Beta testers. It is only compatible with units received after 12/20/2018.

Version 24.0.1

  • Improves filtering of invalid PWM signals

    • Previously, noise on the signal wires could be occasionally be erroneously interpreted as a PWM signal, causing the motor to spin unexpectedly

Version 24.0.0

Breaking Changes

  • Moves the IAccum value to periodic status frame 7

    • Periodic status frame 7 is new to this release, and by default is sent every 250ms.

Enhancements

  • Allows changing the CAN ID of a SPARK MAX connected directly via USB without affecting other SPARK devices on the CAN bus with the same CAN ID

  • Makes changes towards improving the reliability of saving and persisting parameters

Bug fixes

  • Fixes alternate encoder position accuracy

  • Fixes the main quadrature encoder position jumping in brushed mode

Version 1.6.3

  • Fixes issue where changing the inversion mode of the duty cycle absolute encoder with a zero offset specified would cause the physical zero position to change

Version 1.6.2

  • Fixes critical issue where new parameters introduced in 1.6.0 were not being burned to flash correctly

  • Fixes issue where new parameters were not being read back correctly despite being set correctly

Version 1.6.1

  • Fixes duty cycle offset to match the inverted setting

  • Fixes parameters being NaN after updating to 1.6.0

  • Fixes burn flash command response

Version 1.6.0

  • Adds new parameters for configuring hall sensor velocity measurement

  • Adds support for duty cycle absolute encoders

  • Adds new parameters to enable and configure position PID rollover

Version 1.5.2

  • Fixes issue with the kDataPortConfig parameter not enabling Alternate Encoder Mode on a power cycle after it has been configured and saved to flash.

  • Improves Gate Driver Fault recovery.

Version 1.5.1

  • Improvements to BLDC commutation timing.

    • Most noticeable at high RPMs only achievable by the NEO 550.

  • Fixes rare case where the SPARK MAX Status LED shows normal driving but no actual output is occurring until a reboot of the controller.

Version 1.5.0

  • Adds a unique hash key to the firmware. This key is a hashed value based on the unique 96-bit device ID guaranteed to be unique for every STM32 device. The hash value itself is 32-bits to make transmission/reception and on-board comparison easier. It is unlikely for a key collision especially since most buses have only a small number of devices.

  • Adds ID Query command to have all devices which match the CAN ID sent to return their unique hash key. This is typically used to identify all devices with CAN ID 0 but can be used to identify devices with conflicting CAN IDs.

  • Adds ID Assign command, which sends a unique hash key and a CAN ID, which is received by any device whose CAN ID matches the ID field. The device whose unique hash matches has their own CAN ID set to the desired value. This is for initial or automatic provisioning, or to re-address devices with the same CAN ID.

  • Adds identify command which flashes the LED blue/magenta. This command uses the CAN ID, or the unique hash if CAN ID = 0.

  • Complete overhaul of USB interface, creating a generic USB-to-CAN driver connection to act as the bridge to the interface.

  • Adds device manufacturing info to firmware frame.

  • Adds retry frame to CAN bootloader if there is an issue.

Version 1.4.1

  • Fixes issue where creating a CANSparkMax object would cause the SensorType parameter to be set to NoSensor.

Version 1.4.0

  • Adds non-competition heartbeat command when not used with a roboRIO.

  • Adds Raspbian support using official WPILib tools.

  • Adds locking mechanism to prevent simultaneous USB and CAN commands.

  • Proportional blink codes now match inversion settings (i.e. positive input is always green, and negative input is always red).

  • Limit switch and soft limits now follow inversion settings.

  • Motor controller inversion now in the firmware instead of the API.

  • Adds a configurable range for absolute feedback devices (currently only applicable to an absolute mode analog sensor), which also prevents users from setting a setpoint out of range.

  • Adds ability to use both absolute and relative analog sensors as feedback devices

  • Adds filtering for Analog sensor with settings for velocity moving average filter

  • Adds ability to configure how errors are tracked and handled by the user.

    • Calls can be automatically registered and tracked, with any errors displayed to the DriverStation or users can use the GetLastError() after calls to determine if an error has been thrown. This is done by changing the error timeout through SetCANTimeout(), where a timeout of 0 means that the calls are non-blocking, and errors are checked in a separate thread and sent through to the driver station.

  • Other minor improvements and bug fixes.

Version 1.3.0

  • Ability to configure the feedback device for the PIDController.

  • Addition of CANAnalog which will function as a possible feedback device.

  • Added API for using encoders with brushed DC motors.

  • Adds API to enable and set soft limits.

  • All control modes now reset integrator on limit switch activation for long as the limit switch is held.

  • Smart Motion now honors acceleration rate after limit switch changes from triggered to not triggered.

  • Fixes issue where sticky faults can be cleared incorrectly when a new fault is set and the old fault is no longer present.

  • Adds status 3 periodic frame for analog sensor.

  • Other minor improvements and bug fixes.

Version 1.2.1

  • Adds initial CAN bootloading functionality.

    • Requires continuous power during update and requires USB recovery if the update fails after erasing the flash (i.e. power is lost during update).

    • This is not yet integrated into a formal tool, but is exposed in the API. Future versions will allow recovery over CAN.

    • Fix to bus voltage measurement, previous version reported a lower value.

    • Additional accuracy improvements to all ADC measurements.

    • Adds additional filtering to bus voltage.

    • Fix for Follow settings not being reapplied after power cycle.

    • Adds ability to change units for arbFF between voltage and percent bus voltage (or percent compensated voltage).

Version 1.1.33

  • Fixes issue that causes a Gate Driver Fault if the NEO is spinning at a certain speed during power up.

    • e.g. while still moving after a breaker trips for more than ~1.4s after breaker recovery.

  • Fixes issue where configuration data can be corrupted under a unique set of conditions, including loss of power while configuration settings are being saved to flash memory.

    • Issue symptoms: Controller cannot be controlled by a normal address and would report a firmware version of 0.0.0 in the Client, even after a successful firmware update. Updating a controller that is in this state to 1.1.33 will recover the controller.

Version 1.1.31

  • Adds new Smart Velocity mode - uses same constrains as the Smart Motion mode but outputs velocity instead of position. This is not a motion profiling mode, but rather provides acceleration limiting as opposed to simple ramp rates.

  • Improvements to heartbeat implementation.

  • CAN ID of 0 now considered 'unconfigured' and will not be enabled.

  • Changes the default output range for all PID slots to be [-1,1] instead of [0,0]

  • Changes setpoint commands to 'stick' instead of relying on periodic frames from the controller.

  • Follow mode can now persists through a power-cycle.

  • Periodic Status 2 (position data) frame rate default changed from 50ms to 20ms.

  • Watchdog changed to 220ms.

  • Proportional blink codes while driving now have a minimum blink rate (minimum is same as 10% applied output blink rate).

  • Fault flag 'over voltage' replaced with 'IWDT Reset'.

  • Velocity and Position conversion factors are now used for all internal PID calculations.

Version 1.1.26 (beta)

  • Adds new Smart Motion mode utilizing trapezoidal motion profiling

  • Improvements to velocity decoding for low speeds and associated PID control loops requiring control at low speeds

  • Improvements to gate driver fault handling

  • Adds voltage compensation mode

  • Adds ability to set the stored sensor position

  • Adds ability to set the maximum PID integral accumulator value to prevent integral windup

  • Adds ability to set the PID I accumulator value

  • Adds filter function to PID derivative value

  • Adds closed-loop current control

  • Adds closed-loop ramp rate separate from open-loop

  • Adds ability to follow Phoenix 4.11 motor controllers

    • Note: This feature depends on the firmware of the Phoenix controllers, and is not controlled by REV. We will do our best to build this functionality, but this is not an officially supported feature.

  • Adds ability to set a unit conversion for both velocity and position units

  • Adds ability to reset to factory defaults

  • Improvements to smart current limits

  • Improvements to current data sent over CAN

  • Improvements to internal settings table implementation

  • Calling the constructor no longer resets the encoder count. This must be done manually by running CANEncoder.setPosition()

Version 1.0.385

  • Fixes PWM control issue introduced by version 1.0.384.

Version 1.0.384

  • Fixes GetPosition() randomly returning 0.

  • Fixes momentary velocity spike when accelerating from 0 speed.

  • Fixes issue related to rapid control mode switching by the user.

  • Fixes issue related to extreme low voltage CAN bus operation.

  • Adds conversion for motor temperature.

  • Improvement to "Has Reset" flag.

  • Improvements to brownout fault indicator.

  • Improvements to brownout behavior.

Factory Images

Version 24.0.8

  • Fixes bug in velocity calculation when changing the encoder average depth

  • Fixes issue causing motor EEPROM to occasionally reload fully after disabling the motor, causing brief dropout of status frames

Version 24.0.7

  • Adds parameters for status frame periods

  • Performs contextual validation on the sensor type parameter

  • Always keeps the hall sensor active when in brushless mode, in addition to the specified sensor type

  • Recalculates the hall angle more frequently to prevent lockup

Version 24.0.6

  • Fixes issue where an invalid sensor type for a given motor type can cause a sensor fault

Version 24.0.5

  • Improves handling of errors on the CAN bus

  • Fixes incorrect EEPROM faults appearing

  • Reduces boot time

  • Properly handles the case where a CAN device sends a payload longer than 8 bytes

  • Improves internal watchdog

Version 24.0.4

  • Fixes issue where SPARK Flex constantly disables itself while running when certain third-party commands are being sent to the CAN bus

Version 24.0.3

  • Fixes position data inaccuracy when the position conversion factor is not 1

Version 24.0.2

  • Improves filtering of invalid PWM signals

    • Previously, noise on the signal wires could be occasionally be erroneously interpreted as a PWM signal, causing the motor to spin unexpectedly

  • Fixes issue where CAN errors would cause the device to switch between brake mode and coast mode, resulting in a clicking sound if you manually turned the motor

Version 24.0.0

Breaking Changes

  • Moves the IAccum value to periodic status frame 7

    • Periodic status frame 7 is new to this release, and by default is sent every 250ms.

Enhancements

  • Adds Orange/Green blink code to indicate temperature cutoff

  • Refuses to run in brushed mode when connected to a NEO Vortex

  • Improves the precision of the main encoder

    • Previously, the higher the position value was, the less precise the value would be

    • For the NEO Vortex's internal encoder, this change starts making a difference after only ~1,000 rotations

    • Requires REVLib 2024.2.0 or later or REV Hardware Client 1.6.2 or later to take advantage of the additional precision

  • Allows changing the CAN ID of a SPARK Flex connected directly via USB without affecting other SPARK devices on the CAN bus with the same CAN ID

  • Makes changes towards improving the reliability of saving and persisting parameters

Bug fixes

  • Fixes analog sensor values when it is configured to be inverted

  • Fixes setting the NEO encoder's position to values other than zero

  • Fixes the NEO encoder's position when the motor is inverted

Version 23.0.2

  • Adds support for updating the firmware via CAN and USB (without Recovery Mode)

Known issues

  • Setting the NEO encoder's position always resets the position to 0, regardless of the specified value

  • When the analog sensor is configured to be inverted, its reported values will be incorrect

Version 23.0.0

Initial version with intent to support equivalent features to SPARK MAX

  • Features requiring the SPARK Flex Dock (coming soon) are not yet supported, e.g. brushed motor driving and NEO/NEO550 brushless motor driving

  • Alternate Encoder Mode is not necessary for SPARK Flex, therefore it is replaced by the External Encoder Data Port feature:

    • Can be used simultaneously with the internal encoders in NEO class motors

    • Can be used simultaneously with an absolute encoder and limit switches

    • Virtually no RPM limit

    • No special configuration

Adds for BLDC external encoder support.

This firmware update requires an API update. Please see the section for the latest updates. The table below outlines the compatibility between firmware versions and API versions:

When updating the SPARK MAX Firmware we recommend using the REV Hardware Client and the latest firmware file listed in the . When updating normally, key configuration parameters, such as the CAN ID, will be preserved through an update, preventing the need to reconfigure every time you update. In some rare instances it may be beneficial to completely reinstall the factory firmware and reset all configuration parameters. Factory images can be found below:

It is recommended to keep your SPARK Flex up-to-date with the latest firmware. The will automatically download the latest firmware, but you can also download the firmware manually below:

If notified by the , you may need to install your SPARK Flex Motor Controller's first .

https://docs.revrobotics.com/revlib
Alternate Encoder Mode
API Information
firmware changelog
Factory Image Version 1.1.33
Factory Image Version 1.1.31
Factory Image Version 1.0.385
Factory Image Version 1.0.381
REV Hardware Client
REV Hardware Client
firmware update via Recovery Mode
Latest Firmware - Version 24.0.1
Latest SPARK Flex Firmware Download - Version 24.0.8