Firmware Update Guide

QUAC100-FW-001Rev 1.0 — January 2026

The QUAC 100 implements a secure firmware update system with dual-partition failover, hardware-enforced anti-rollback protection, and atomic installation that guarantees either complete success or automatic reversion to the previous known-good firmware.

âš  Important

Firmware updates are cryptographically signed by Dyber. Do not attempt to install unsigned or third-party firmware images — the device will reject them and the update will abort safely.

Firmware Version Format #

QUAC 100 firmware uses a structured version format: X.Y.Z.BBBBB-S

FieldSizeDescription
Major (X)16 bitsBreaking changes, API incompatibility
Minor (Y)16 bitsNew features, backward compatible
Patch (Z)16 bitsBug fixes, security patches
Build (BBBBB)32 bitsUnique build identifier
Security (S)8 bitsAnti-rollback monotonic counter
# Check current firmware version
$ quac-info --firmware
QUAC 100 Firmware Information
  Main Firmware:    1.2.0.18432-7
  BMC Firmware:     1.1.0.5210-3
  Boot Loader:      1.0.0 (factory)
  Security Rev:     7 (monotonic counter)
  Build Date:       2025-12-15T14:22:00Z
  Signature:        RSA-4096 / SHA-384 ✓ VALID

Flash Partition Layout #

PartitionSizeContentsProtection
Boot Loader2 MBFSBL, SSBL, recovery codeWrite-protected, factory programmed
Primary Firmware A128 MBActive firmware imagesAuthenticated write only
Primary Firmware B128 MBBackup firmware imagesAuthenticated write only
Configuration16 MBUser configuration, calibration dataIntegrity protected
Audit Log16 MBSecurity audit recordsAppend-only
Reserved222 MBFuture expansionNot accessible

The dual-partition layout enables atomic updates: new firmware is written to the inactive partition while the current firmware continues running. On successful verification, the boot loader switches to the new partition. If the new firmware fails to boot (detected by watchdog timeout), the boot loader automatically reverts to the backup partition.

Update Delivery Methods #

MethodInterfaceSpeedUse Case
Network UpdatePCIe host interfaceHigh (~200 MB/s)Production deployment, datacenter fleet updates
SD Card UpdatemicroSD card slotMedium (~25 MB/s)Field service, air-gapped environments
UART UpdateSerial console (J2)Low (~14 KB/s)Emergency recovery when PCIe is non-functional
JTAG UpdateJTAG header (J3/J4)Low (~500 KB/s)Development, factory programming

Network Update (Recommended) #

# Step 1: Download the firmware package from Dyber
$ wget https://releases.dyber.org/quac100/firmware/quac100-fw-1.3.0.18500-8.dfw

# Step 2: Verify the package signature before installation
$ quac-fw verify quac100-fw-1.3.0.18500-8.dfw
Package Verification:
  Signature:    RSA-4096 / SHA-384 .............. VALID
  Certificate:  Dyber Firmware Signing CA ....... VALID
  Integrity:    SHA-384 hash .................... MATCH
  Target:       QUAC 100 ....................... COMPATIBLE
  Version:      1.3.0.18500-8 .................. NEWER (current: 1.2.0)
  Security Rev: 8 .............................. OK (current: 7)

# Step 3: Install the firmware (requires root/admin)
$ sudo quac-fw update quac100-fw-1.3.0.18500-8.dfw --device 0
[1/6] Validating firmware package .............. OK
[2/6] Checking version compatibility ........... OK
[3/6] Backing up current firmware .............. OK
[4/6] Writing to inactive partition ............ OK (128 MB, 0.6s)
[5/6] Verifying written image .................. OK (SHA-384 match)
[6/6] Activating new firmware .................. OK

Firmware update complete. Reboot required to activate.
  Current:  1.2.0.18432-7 (Partition A — ACTIVE)
  Pending:  1.3.0.18500-8 (Partition B — STAGED)

$ sudo quac-fw reboot --device 0
Rebooting QUAC 100 device 0... done.
Waiting for device... ready (2.1s)
Firmware: 1.3.0.18500-8 — ACTIVE
Self-test: PASSED

Update State Machine #

┌─────────┐     ┌──────────┐     ┌──────────┐     ┌───────────┐
│  IDLE   │────►│RECEIVING │────►│VERIFYING │────►│INSTALLING │
└─────────┘     └──────────┘     └──────────┘     └───────────┘
     ▲                                                  │
     │                                                  ▼
     │          ┌─────────┐     ┌──────────┐     ┌──────────┐
     └──────────│  ERROR  │◄────│ ROLLBACK │◄────│ TESTING  │
                └─────────┘     └──────────┘     └──────────┘
                                                       │
                                                       â–¼
                                                 ┌──────────┐
                                                 │ COMPLETE │
                                                 └──────────┘

Firmware Validation #

Every firmware package undergoes multi-layer validation before installation:

MechanismAlgorithmPurpose
Package SignatureRSA-4096 with SHA-384Verify Dyber origin and package authenticity
Image HashSHA-384Verify individual firmware image integrity
EncryptionAES-256-GCMProtect confidentiality, provide authenticated encryption
Anti-RollbackeFUSE monotonic counterPrevent installation of older, vulnerable versions
Hardware BindingDevice-specific keyEnsure firmware runs only on authorized hardware
Runtime VerificationSecure boot chainVerify firmware integrity at each boot

Rollback Protection #

The QUAC 100 implements hardware-enforced rollback protection using eFUSE-based monotonic counters that cannot be decremented. Each firmware release includes a security revision level; the device will refuse to install any firmware with a security revision lower than the current counter value.

Rollback Scenarios
ScenarioResponseAutomaticManual
Update verification failureAbort update, keep current firmwareYes—
Boot failure after updateRevert to backup partitionYes—
Functional test failureRevert to backup partitionConfigurableYes
User-initiated rollbackRevert to previous version—Yes
Factory resetRestore golden image—Yes
# Manual rollback to previous firmware
$ sudo quac-fw rollback --device 0
Rolling back to: 1.2.0.18432-7 (Partition A)
Security revision check: OK (rev 7 >= counter 7)
Activating backup partition... done.
Rebooting... ready (2.3s)
Firmware: 1.2.0.18432-7 — ACTIVE

# Note: Rollback is blocked if the backup version's security
# revision is lower than the eFUSE counter
$ sudo quac-fw rollback --device 0
ERROR: Rollback blocked — backup firmware security revision (5)
       is lower than hardware counter (7). This prevents downgrade
       to versions with known vulnerabilities.

BMC Firmware Update #

The Board Management Controller (BMC) has its own firmware that is updated separately from the main FPGA firmware. The BMC provides out-of-band management and continues operating even when the main FPGAs are unresponsive.

BMC Update Procedure
StepActionDetails
1PreparationVerify system is stable, no critical operations in progress
2Upload ImageTransfer BMC firmware via serial, web interface, or I2C
3Verify SignatureValidate RSA-4096 signature using BMC root of trust
4Version CheckVerify new version acceptable per update policy
5Backup CurrentCopy current BMC firmware to backup partition
6Program NewWrite new firmware to primary partition
7Verify ProgramRead back and compare with original image
8ActivateReset BMC to boot new firmware
9ValidationVerify BMC boots and functions correctly
10CommitMark update as successful for future boots
# BMC firmware update via serial console
$ sudo quac-bmc update quac100-bmc-1.2.0.5300-4.dfw --port /dev/ttyS0
[1/5] Connecting to BMC via /dev/ttyS0 (115200 baud) ... OK
[2/5] Authenticating firmware package ................. OK
[3/5] Programming BMC flash ........................... OK (2.1 MB, 8.2s)
[4/5] Verifying flash contents ........................ OK
[5/5] Resetting BMC .................................. OK

BMC firmware updated: 1.1.0 → 1.2.0
BMC Update Security Measures
MeasureImplementation
AuthenticationRSA-4096 signature verification with hardware-stored public key
EncryptionAES-256-GCM encryption with device-unique key
Anti-RollbackMonotonic counter in OTP memory prevents downgrade
Secure StorageFirmware stored in protected flash region
AuthorizationRequires administrator authentication before update
Audit LoggingAll update attempts logged with timestamp and result
Tamper DetectionHardware tamper sensors monitored during update

Emergency Recovery #

If both firmware partitions are corrupted and the device fails to boot, the factory-programmed boot loader provides emergency recovery via UART:

# Emergency UART recovery — connect serial cable to J2 (DB9)
# Terminal settings: 115200 baud, 8N1, no flow control

# 1. Power cycle the device while holding the recovery button (SW1)
# 2. The boot loader enters recovery mode:

QUAC-100 Recovery Mode v1.0.0
> upload firmware
Ready to receive firmware via XMODEM...
[Use terminal's XMODEM send to transfer .dfw file]
Transfer complete: 134,217,728 bytes received
Signature: VALID
Installing to Partition A... done
Rebooting... 

# 3. Alternatively, use JTAG for factory-level recovery:
$ sudo quac-jtag flash --file quac100-fw-1.3.0.dfw --target all
Programming Partition A: 128 MB .................. OK
Programming Partition B: 128 MB .................. OK
Resetting configuration to factory defaults ...... OK
Clearing audit log ............................... OK
Device ready.