User Guide

QTFM Gen-2 Sensor Firmware Update Guide

Updating the firmware that runs inside the QTFM Gen-2 sensor head. QTFM2 Updater V1.1 · Latest firmware V1_45 · Updated 2026-08-14.

QTFM sensor firmware vs. Magpie firmware This page covers the QTFM Gen-2 sensor firmware only — the microcontroller image that runs inside the sensor head and handles cell locking, magnetometer measurement, IMU integration, and sync. It does not update the Magpie / MiniACB logger firmware that wraps the sensor in a Magpie unit. The sensor and the logger have separate firmware images and separate update paths.

To update the Magpie / MiniACB logger firmware, see the Magpie Firmware Update Guide.

Important: set the Updater to 115200 for the update

The QTFM2 Firmware Updater talks to the sensor’s bootloader at 115200 baud. This is independent of the sensor’s normal operating baud rate, which may be 921600 when used with a Magpie. Selecting the sensor’s operating baud in the Updater prevents the bootloader handshake and can produce an Expected ACK (0xCC), got 0xF3 error.

Before you start the update:

  1. Confirm that the sensor works normally. Connect in the QTFM2 UI at the sensor’s usual operating baud, then close the UI completely so it releases the COM port.
  2. Set the QTFM2 Firmware Updater’s Baud dropdown to 115200 when you reach the Updater connection step below, regardless of the sensor’s configured operating baud.

If you see No ack (proceeding anyway) or Expected ACK (0xCC), got 0xF3 in the Updater console, first confirm that the Updater is set to 115200. See the Troubleshooting section for the fix.

Important: put the sensor in idle mode before flashing

Flashing while the sensor is in autostart, locking, or actively measuring can cause the bootloader handshake to drop partway through the flash and leave the sensor in an unresponsive (“bricked”) state. Idle the sensor before clicking Program Firmware.

Two ways to do it:

  • From the Updater: after you Connect, click the Disable auto-start mode button next to the Connect button. This is the easiest option and is built into the Updater for exactly this purpose.
  • From a terminal: send ~Stop~ over the sensor’s serial interface before launching the Updater. ~Stop~ halts any autostart / LI_Set / Reop / Warmup activity that’s currently in progress. (Requires sensor firmware V1_44 or newer.)

If a flash does hang partway and the sensor becomes unresponsive afterward, the Updater includes an Unbrick ECU recovery option — see the Troubleshooting section.

Which connection path?

The Updater itself is the same in both cases. The only difference is how you physically connect the QuSpin Standard Comms board to the sensor.

Path A

Sensor inside a Magpie

Use the flex-cable connector on the side of the MiniACB board.

  • Sensor stays mounted in the Magpie sled
  • Remove the outer Magpie shell to reach the flex connector on the side of the MiniACB board
  • No need to disconnect or unmount the sensor itself
  • Connect the Standard Comms board to that flex connector
Go to the update procedure →

Path B

Bare sensor (no Magpie)

Connect the Standard Comms board directly to the sensor’s flex cable.

  • For standalone sensors and dev / bench setups
  • Connect the Standard Comms board directly to the sensor’s flex cable
  • Same Updater, same procedure as Path A from this point on
Go to the update procedure →

Don’t have a Standard Comms board? One ships with every Magpie order (one per order, not per unit) and is available separately from QuSpin. Contact us if you need one.

Downloads

You need two files: the QTFM2 Firmware Updater (the Windows tool) and the encrypted firmware image for your sensor.

The Updater (Windows)

The firmware image

Verify the download before flashing The SHA-256 for the V1_45 encrypted file is 8B8E82FF6BFCCE49494ED6F24968689B0CF7ED0DBA4D6C488726196366F7668A. On Windows, open Command Prompt in the download folder and run:

certutil -hashfile T2M0_Firmware_V1_45.ino.EK-TM4C123GXL.bin.enc SHA256

If the reported hash does not match exactly, re-download the file and do not flash it.

What’s new in V1_45

  • Fixes multi-sensor wired synchronization on sensors with older FPGA versions. Previously, sensors with pre-2026 FPGA firmware could report “Sensors Sync Complete” without actually resetting their timestamps. If you use wired master/slave synchronization, we recommend this update.
  • Adds support for the new V10 ECU. The firmware automatically identifies which ECU generation it is running on; sensors with earlier ECUs are unaffected and require no configuration.
  • On V10 ECUs, adds built-in health diagnostics: input voltage and current monitoring (decimal command 244), a power-supply quality check (decimal command 243), and a coil connectivity check (decimal command 242).
  • Settings are migrated automatically on the first boot after updating. No manual configuration steps are required.

Previous release: V1_44

  • Reliability fixes (2026-07-08 build). Faster automatic recovery from IMU read stalls with clearer status messages, stricter internal checks on direct settings writes (out-of-range addresses are now rejected with an error instead of being silently misapplied), and a fix that prevents a firmware update from unintentionally changing a saved vector timing setting.
  • Custom user-saveable profile slots. Save up to three sensor configurations to EEPROM with ~SaveSlot1~ / ~SaveSlot2~ / ~SaveSlot3~, switch between them with ~LoadSlotN~, and list with ~ListSlots~. See the Sensor Profile Configuration Guide for the full workflow.
  • Sensor-Only GPS Sync. The sensor now accepts the 11-byte UTC frame on its main UART, so non-Magpie hosts can drive GPS sync directly. See Method 4 in the Sync Guide.
  • Integrator workflow tilde commands. ~Stop~ to halt autostart / LI_Set / Reop / Warmup, ~apply~ to re-read EEPROM without rebooting, ~Warmup~ background pre-warmup, ~ADDR,VAL~ direct EEPROM write, and ~report~ to dump 28 key settings. These tilde commands bypass the ASCII command-lock so a locked sensor can still be reconfigured by an integrator host.
  • Better cold and hot laser autostart. Wait_for_PD_signal() recovery loop rewritten with a trend-based heat/cool decision, wider entry condition, and a real heater escalation. Addresses the multi-restart symptom seen at sub-zero ambient and the lock-SP clobber seen at moderately cold ambient.
  • Watchdog tuned to thermal physics. Reload budget raised from 15 s to 50 s so legitimate long laser/cell autostart states do not trip spurious resets. Real hangs still recover in approximately 50–100 s.
  • Boot-banner diagnostics. #Reset cause (RESC): 0xN now prints on every boot for unambiguous reset-source attribution (POR / brownout / WDT / SW). Sync-mode display on the boot banner fixed, and the _A / _B suffix on the #FPGA: line restored.
  • PPS realign hardening. Extended ISR_ERROR soak window after a PPS realign suppresses the spurious #ISR.Er4 burst. The @NNN sample counter now stays continuous across realigns so multi-sensor data streams stay aligned.

Why is it encrypted? The .bin.enc file contains the compiled QTFM Gen-2 sensor firmware encrypted with a key that only the Updater knows. You don’t need to decrypt it manually — the Updater handles that automatically when you flash.

If you need a specific older version, contact QuSpin. Some firmware revisions are sensor-specific or carry custom tuning, and we can send you the exact build for your unit.

Update procedure

These steps apply to both Path A (sensor inside a Magpie, via the MiniACB flex connector) and Path B (bare sensor, direct connection). The only difference is where the Standard Comms board plugs in.

Before you start

  • QTFM2 Firmware Updater V1.1 downloaded to your PC (from the Downloads section above)
  • The encrypted firmware image (.bin.enc) downloaded to your PC (also from the Downloads section)
  • QuSpin Standard Comms board and a USB cable (data cable, not charge-only)
  • The sensor powered, connected, and confirmed working in the QTFM2 UI before you start

Steps

  1. 1 Connect the Standard Comms board.
    Path A (sensor inside a Magpie): Remove the outer Magpie shell to expose the flex connector on the side of the MiniACB board (highlighted below), then plug the Standard Comms board into that connector. The sensor stays mounted in the Magpie sled — no need to disconnect or unmount it.
Side view of the Magpie's MiniACB board with the sensor flex-cable connector outlined in white
Flex-cable connector on the side of the MiniACB board (outlined in white). Plug the Standard Comms board in here when the sensor is inside a Magpie.

Path B (bare sensor): Connect the Standard Comms board directly to the sensor’s flex cable, as shown below.

QTFM Gen-2 sensor flex cable plugged into the QuSpin Standard Comms board
Standard Comms board connected directly to a bare QTFM Gen-2 sensor via the flex cable. Use this path when the sensor is not mounted inside a Magpie.

Plug the Comms board into a USB port on your PC. Windows should assign it a COM port number.

  1. 2 Identify and configure the COM port. Open Device Manager (search “device manager” in the Windows search bar) and expand Ports (COM & LPT). With the Standard Comms board plugged in, a new COMN entry appears in the list — that entry is your sensor. Note the number; you’ll select it in the Updater at step 6.
    Recommended: right-click that COM port → Properties → Port Settings → Advanced and set Latency Timer (msec) to 1 (the Windows default is 16) for the fastest data transfer to the PC. This matters most for live streaming in the QTFM2 UI rather than for the flash itself, but it is convenient to set now while you are in Device Manager.
Device Manager with the sensor's USB Serial Port (COM3) highlighted under Ports (COM & LPT)
Find the sensor’s port under Ports (COM & LPT) — here USB Serial Port (COM3) — then set Latency Timer (msec) to 1 via Properties → Port Settings → Advanced.
  1. 3 Confirm the sensor is communicating normally. Open the QTFM2 UI, connect to the sensor on the COM port you just identified, and confirm that its normal startup or measurement output is readable. This checks the cable, power, and COM port before flashing.
  2. 4 Close the QTFM2 UI completely. The Updater needs exclusive access to the COM port. If the QTFM2 UI is still holding the port open in the background, the bootloader handshake will fail even when the baud rate is correct. Close any other application that might have the same COM port open (PuTTY, Arduino Serial Monitor, etc.).
  3. 5 Launch the QTFM2 Firmware Updater. Run QTFM2_Firmware_Updater_V1_1.exe from the location where you saved it.
QTFM2 Firmware Updater V1.1 main window with the Baud dropdown open, showing 9600 through 921600
QTFM2 Firmware Updater V1.1. For a firmware update, set the Baud dropdown to 115200 even if the sensor normally operates at another baud rate.
  1. 6 Select the COM port and set the baud rate to 115200. In the Connection panel, set Port to the COM port for the Standard Comms board and set Baud to 115200. Click Connect. The sensor’s normal operating baud does not apply to the bootloader used during the update. After connecting, click Disable auto-start mode so the sensor is idle before the flash begins.
  2. 7 Browse to the firmware image. In the Firmware panel, click Browse and select the .bin.enc file QuSpin sent you.
  3. 8 Click Program Firmware. The Updater will decrypt the .bin.enc file, send the bootloader entry sequence to the sensor, erase the existing firmware, flash the new image, then verify and report success. The progress bar in the Updater shows the flash progress. Total time is typically 30 to 60 seconds.
  4. 9 Power-cycle the sensor and confirm the update. Disconnect the sensor power, wait a few seconds, and reconnect. Open the QTFM2 UI, connect at the same baud rate as before, and look at the boot banner for the new firmware version line. If the version line shows the version you flashed, you’re done.
#Firmware_Version uC:T2M0_2026_8_14:V1_45

Done The sensor is now running the new firmware. Its normal operating baud is unchanged by the bootloader’s 115200 update setting.

Frequently asked questions

After updating, command 244 says “V10 monitors not enabled.” Is something wrong?

No. Your sensor has an earlier-generation ECU, which does not include the monitoring hardware. The sensor operates normally; those diagnostic commands simply do not apply to it.

How do I check which firmware version my sensor is running?

Connect to the sensor with the QTFM2 UI (or a serial terminal set to the sensor’s operating baud), then power-cycle the sensor. Near the top of the startup banner, look for a line like:

#Firmware_Version uC:T2M0_2026_8_14:V1_45

The value after the final colon is the sensor firmware version; the preceding numbers are the build date. The following #FPGA: line reports the separate FPGA bitstream version. If QuSpin asks which version you are running, send both lines. Sensor firmware is customer updatable; the FPGA bitstream can only be updated at QuSpin.

Some menu items in the QTFM2 UI do nothing. Is the software broken?

No. The QTFM2 UI and sensor firmware are released independently, and the UI presents the newest feature set. A sensor running older firmware may ignore commands behind newer menu items, so there is nothing for the UI to display. This most often affects Sensor Tune-up, Print Sensor Information, and parts of Advanced settings. Check the sensor firmware version as described above and update to the current release.

Troubleshooting

Updater console shows Expected ACK (0xCC), got 0xF3 (or similar non-0xCC byte)

This usually means the Updater was not set to the bootloader’s required 115200 baud. The line just above it — No ack (proceeding anyway) — is the real failure point: the Updater sent the bootloader ping and never received the expected 0xCC response.

Fix:

  1. Close the QTFM2 UI and any terminal that may be holding the sensor’s COM port open.
  2. Re-launch the QTFM2 Firmware Updater, set the Baud dropdown to 115200, and Connect / Program Firmware again.

Updater shows garbage characters at the moment it connects

Confirm that the Updater is set to 115200, close all other applications using the COM port, and reconnect. The sensor’s configured operating baud does not replace the bootloader’s 115200 update rate.

Updater says it can’t open the COM port

Another application is holding the COM port open. Common culprits: the QTFM2 UI, PuTTY, the Arduino IDE’s Serial Monitor, or a previous Updater instance that didn’t fully release the port. Close all of them and try again. If the port still won’t open, unplug and replug the Standard Comms board to reset the USB connection.

USB port issues

A small number of users have hit framing errors on USB 3 ports that did not reproduce on USB 2. If the Updater is set to 115200, the QTFM2 UI is closed, and the handshake still fails, try a different USB port on your PC — preferably a USB 2 port if one is available.

The flash stopped partway through and now the sensor is unresponsive (“bricked”)

If the flash hangs or times out partway (for example, “stuck at 24%”) and the sensor stops responding to subsequent connect attempts, the Updater includes an Unbrick ECU recovery option for exactly this case. The Unbrick ECU checkbox sits between the Connect button and the progress bar. Check it when a normal Connect + Program Firmware run fails to recover an unresponsive sensor.

Recovery procedure:

  1. Close any other application that has the COM port open (QTFM2 UI, terminals, etc.).
  2. Re-launch the QTFM2 Firmware Updater, select the sensor’s COM port, and set the baud rate to 115200.
  3. Check the Unbrick ECU (check this box if ECU is unresponsive) checkbox.
  4. Click Browse and select the same .bin.enc firmware file.
  5. Click Program Firmware. The Updater runs an aggressive bootloader entry sequence to recover the sensor.

If Unbrick ECU still does not recover the sensor: confirm the Updater is at 115200, close everything else on the COM port, and try a different USB port (preferably USB 2). Also verify the sensor is getting a clean, stable power supply — an unstable supply or a USB hub mid-flash can hang recovery. If you are still stuck, send QuSpin the full Updater console output from the failed flash attempt and a description of when the sensor became unresponsive — we can usually diagnose the remaining cases from the log.

To prevent future ECU lockups: follow the two prep callouts at the top of this page — set the Updater to 115200 and put the sensor in idle mode before clicking Program Firmware.

Still stuck?

Send QuSpin a copy of the full Updater console output (from Connected to COMN through the failure line) along with the sensor serial number and the firmware version you are trying to flash. We can usually diagnose the remaining cases from the console log.