Skip to content

HF87621_VC1/HF87621Q_VC1

Multi-channel PCM 768KHz/DSD512 USB HiFi Decoder with USB/I2S/3CH SPDIF Input and I2S Output

1. Introduction

1.1 Product Description

HF87621_VC1/HF87621Q_VC1 is a USB multi-channel and multi-interface HiFi audio decoder supporting up to PCM 768KHz/DSD512, specifically designed for HiFi decoder audio applications.

HF87621_VC1/HF87621Q_VC1 supports various standard audio formats, including USB Audio Class 1.0/2.0, S/PDIF and I²S interfaces. The flexible audio interfaces allow HF87621_VC1/HF87621Q_VC1 to connect to various audio data converters, digital audio receivers and transmitters, and digital signal processors.

Compatible with AES3, S/PDIF, IEC 60958, and EIAJ CP-1201 digital audio interfaces.

HF87621_VC1/HF87621Q_VC1 provides multiple input and output modes, including USB input/I²S output, S/PDIF input/I²S output, I²S(slave) input/I²S(MASTER) output, meeting the requirements of different application scenarios.

Important Notice

HF87621Q_VC1 model supports MQA audio decoding, while HF87621_VC1 model does not support this feature.

1.2 Product Features

Audio Performance Features

  • Supports input and output sampling rates up to 768kHz
  • Supports DSD64/128/256/512 formats
  • HF87621Q_VC1 supports MQA decoding
  • Built-in SSRC and ASRC modules, support conversion between different interfaces and different sampling rates
    • SSRC specifications: THD+N (@1kHz, 0dBFs) < -130dB, SNR: > 140dB
    • ASRC specifications: THD+N (@1kHz, 0dBFs) < -130dB, SNR: > 135dB
  • Supports 16-32bit audio data formats
  • Supports 3-channel S/PDIF input

Interface Support Features

  • Multiple Digital Interface Support
    • Supports USB audio input
    • Supports I²S slave mode audio input
    • Supports I²S master mode audio output
    • Supports S/PDIF audio input
    • Supports UART configuration interface

USB Functional Features

  • USB Interface Features
    • Supports UAC 1.0
    • Supports UAC 2.0
    • Supports firmware upgrade via USB
    • Supports HID, can upgrade MCU firmware via HID

System Compatibility - UAC 2.0 protocol, supports ASIO - Supports multiple operating systems such as Windows, Linux, Android, macOS and iOS

1.3 Application Scenarios

  • USB HiFi Decoder
  • USB HiFi Audio Interface
  • USB HiFi Digital Player

1.4 Product Block Diagram

HF87621 Block Diagram
Figure 1: HF87621_VC1/HF87621Q_VC1 Block Diagram

1.5 Ordering Information

PRODUCT ORDERING NUMBER PACKAGE BODY SIZE (NOM) Hardware Model Comments
HF87621_VC1 HF87621-VC1 SMT LGA-52 13x13mm A316-Mini-V1
HF87621Q_VC1 HF87621Q-VC1 SMT LGA-52 13x13mm A316-Mini-V1 Supports MQA Decoding

2. Modes and Specifications

2.1 Supported Input and Output Modes

Mode Number Input/Output Mode Description Mode Switch Command Value (Refer to Product Configuration Protocol 0x03 and 0x23 Commands)
1 USB(UAC2.0) in-I²S(Master) out USB input, I²S output, UAC2.0 0x00, 0x80, 0xa9, 0x00, 0x01
2 USB(UAC1.0) in-I²S(Master) out USB input, I²S output, UAC1.0 0x00, 0x80, 0x01, 0x00, 0x02
3 S/PDIF1 IN-I²S(Master) OUT S/PDIF channel 1 input, I²S output 0x10, 0x80, 0x65, 0x10, 0x03
4 S/PDIF2 IN-I²S(Master) OUT S/PDIF channel 2 input, I²S output 0x00, 0x80, 0x65, 0x10, 0x04
5 S/PDIF3 IN-I²S(Master) OUT S/PDIF channel 3 input, I²S output 0x20, 0x80, 0x65, 0x10, 0x07
6 I²S(slave) in-I²S(Master) OUT I²S slave mode input, I²S output 0x00, 0x82, 0xd5, 0x81, 0x06

2.2 Detailed Parameters for Each Operating Mode

2.2.1 USB(UAC2.0) in → I²S out Mode

Supported Audio Formats and Sampling Rates:

Audio Format Supported Sampling Rates
PCM 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz, 352.8kHz, 384kHz, 705.6kHz, 768KHz
DSD Native DSD64, DSD128, DSD256, DSD512
DOP DOP64, DOP128, DOP256
MQA HF87621Q_VC1 only

2.2.2 USB(UAC1.0) in → I²S out Mode

Supported Audio Formats and Sampling Rates:

Audio Format Supported Sampling Rates
PCM 48kHz

2.2.3 S/PDIF in → I²S out Mode

Supported Audio Formats and Sampling Rates:

Audio Format Supported Sampling Rates
PCM 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz

2.2.4 I²S(slave) in → I²S(MASTER) out Mode

Input/Output Sampling Rate Support:

Interface Audio Format Supported Sampling Rates
I²S Input (Slave Mode) PCM 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz
I²S Output (Master Mode) PCM 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz

ASRC (Asynchronous Sample Rate Conversion) Function:

  • Internal ASRC conversion supported, input device may not provide master clock (MClock)

ASRC Performance Specifications:

  • THD+N (@1kHz, 0dBFs): ≤-130dB
  • SNR: ≥135dB

3. Pin Configuration and Functions

3.1 HF87621_VC1/HF87621Q_VC1 Pin Layout

HF87621-VC1 Pin Diagram
Figure 2: HF87621_VC1/HF87621Q_VC1 Pin Arrangement Diagram

3.2 HF87621_VC1/HF87621Q_VC1 Pin Description

Pin Number Name Type Function
1 3.3V P Module 3.3V Power Supply
2 X1D13 I/O S/PDIF channel 2 input
3 X1D16 I/O NC
4 GND P Module Ground
5 X1D17 I/O NC
6 X1D18 I/O NC
7 X1D19 I/O NC
8 X1D22 I/O S/PDIF channel 1 input
9 X0D29 I/O NC
10 X0D35 I/O I²S_OUT_BCLK(MASTER)
11 X0D36 I/O I²S_OUT_LRCLK(MASTER)
12 X0D37 I/O NC
13 X0D38 I/O I²S_OUT_DATA0(MASTER)
14 X0D40 I/O NC
15 X0D39 I/O I²S_OUT_MCLK(MASTER)
16 X0D42 I/O NC
17 X0D41 I/O NC
18 X0D43 I/O NC
19 X1D34 I/O S/PDIF channel 3 input
20 GND P Module Ground
21 X0D30 I/O CTL_MUTE; control output, active low
22 X0D31 I/O NC
23 X0D32 I/O 49.152 MHz clock control
24 X0D33 I/O 45.1584 MHz clock control
25 GND P Module Ground
26 GND P Module Ground
27 GND P Module Ground
28 X0D00 I/O UART_TX, connect to MCU_RX
29 X0D11 I/O UART_RX, connect to MCU_TX
30 X1D00 I/O I²S_IN_LRCLK(SLAVE)
31 X1D01 I/O I²S_IN_DATA0(SLAVE)
32 GND P Module Ground
33 X1D09 I/O NC
34 X1D10 I/O I²S_IN_BCLK(SLAVE)
35 X1D11 I/O Connect to Pin 15 X0D39
36 GND P Module Ground
37 GND P Module Ground
38 TDI I/O XTAG Debug PIN
39 TDO I/O XTAG Debug PIN
40 TMS I/O XTAG Debug PIN
41 TCK I/O XTAG Debug PIN
42 RST_N I/O System reset, active low
43 1.8V P Module 1.8V Power Supply
44 GND P Module Ground
45 USB_DM I/O USB_DM
46 USB_DP I/O USB_DP
47 GND P Module Ground
48 0.9V P Module 0.9V Power Supply
49 GND P Module Ground
50 GND P Module Ground
51 GND P Module Ground
52 GND P Module Ground

Pin Type Description

I/O type definitions in the table: I=Input, O=Output, P=Power, I/O=Input/Output

4. Product Control Commands

4.1 Communication Interfaces and Protocol Overview

HF87621_VC1/HF87621Q_VC1 provides the following control channels (UART_TX/UART_RX pins, see section 3.2), each with its own base protocol:

Control Channel Physical Interface Base Protocol
Product configuration over serial (XU316↔MCU) UART 115200bps, 8-N-1, big-endian frames XU316 UART Base Protocol
EQ/tone tool (PC serial) UART 115200bps, 8-N-1, little-endian frames EQ UART Base Protocol
USB tool (PC) USB HID 64-byte packets (sync header 0x77) USB HID Base Protocol

This chapter embeds all business commands supported by this product, same-source maintained with the protocol center command references (Communication Protocols Index).

4.2 Product Configuration Commands (UART)

Command Command Description Direction Applicability Notes
0x20 Report application status XU316→MCU Sent on status change or 15s timer
0x21 Media control MCU→XU316 Converted by XU316 to HID command sent to computer
0x22 Report playback audio stream format and type XU316→MCU For displaying PCM/DSD/MQA/DOP status
0x23 Set input/output mode MCU→XU316 Mode values in datasheet section 2.1 table
0x24 Send playback volume XU316→MCU Left/right channel, 1 byte each
0x25 Send recording volume XU316→MCU Reserved command, currently not used
0x26 Switch MCLK MCU→XU316 Internal/external master clock switching
0x27 Set unmute MCU→XU316 DAC unmute delay during mode switching
0x28 Send audio format time delay MCU→XU316 Audio format switching delay configuration
0x29 Report USB connection status XU316→MCU Proactively reported on USB connect/disconnect
0x30 Set Mute pin inversion MCU→XU316 Adapts hardware with inverted Mute polarity
0x31 Get current audio format MCU→XU316 Queries current audio stream format and type
0xF0 DAC configuration selection MCU→XU316 Product-specific, not supported by all products
0xF1 Get firmware version MCU→XU316 Queries XU316 firmware version (3-byte BCD major version)
0xF3 Query complete version number MCU→XU316 Returns complete ASCII version string (model_vMajor.Minor.Rev_bBuild)
0xEE HID data passthrough XU316→MCU HID passes data to MCU via XU316 (e.g. MCU OTA)

Usage Prerequisites

The above commands can only be used after device startup is complete (after XU316 sends the 0x05 startup complete command and receives the response). All commands must follow the base protocol frame format (frame header 0x55AA, big-endian transmission, checksum = sum of all bytes from frame header modulo 256); each command requires acknowledgment from the recipient, with a default timeout of 300ms and up to 4 retries.

Report Application Status (0x20)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x20
Data Length:   1 byte  - N
Data:          N bytes - Application runtime parameters, see section 4.1-Application Runtime Parameters
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

MCU Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x20
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to report current application status to MCU
  • Typically sent when status changes, such as volume change, mode switch, etc.
  • MCU can update UI display or adjust related functions based on this info

Command Example

55 AA 03 20 00 22

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is an acknowledgment returned by MCU to XU316
Command 1 byte 20 Acknowledges “Report Application Status”
Data Length 1 byte 00 Pure acknowledgment frame with no data
Checksum 1 byte 22 Sum of all bytes from 55 to 00, modulo 256

Media Control (0x21)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x21
Data Length:   1 byte  - 0x01 (1 byte)
Data:          1 byte  - Media control command
              0x00 Volume Up / Vol Up
              0x01 Volume Down / Vol Down
              0x02 Play/Pause / PLAY/PAUSE
              0x03 Next Track / NEXT
              0x04 Previous Track / PREV
              0x05 Fast Forward / FORWARD
              0x06 Rewind / REWIND
              0x07 Mute / MUTE
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x21
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by MCU to send media control commands to XU316
  • After receiving command, XU316 will convert to corresponding HID command and send to computer
  • Suitable for implementing remote control or physical button control of media playback
Control Code Function USB HID Usage
0x00 Volume Up Increase system volume
0x01 Volume Down Decrease system volume
0x02 Play/Pause Control media playback state
0x03 Next Track Switch to next song
0x04 Previous Track Switch to previous song
0x05 Fast Forward Fast forward in current track
0x06 Rewind Rewind in current track
0x07 Mute Toggle system mute state

Command Example

55 AA 03 21 01 02 26

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is a command sent by MCU to XU316
Command 1 byte 21 Current command is “Media Control”
Data Length 1 byte 01 One data byte follows
Control code 1 byte 02 Indicates “Play/Pause”
Checksum 1 byte 26 Sum of all bytes from 55 to control code, modulo 256

Report Playback Audio Stream Format and Type (0x22)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x22
Data Length:   1 byte  - 0x02 (2 bytes)
Data:          2 bytes - Audio stream format and type, see audio stream format and type field
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

MCU Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x22
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to report current audio stream format and type to MCU
  • Typically sent when playback starts or format changes
  • MCU can update display based on this info, such as showing PCM/DSD/MQA/DOP status

Command Example

55 AA 03 22 00 24

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is an acknowledgment returned by MCU to XU316
Command 1 byte 22 Acknowledges “Report Playback Audio Stream Format and Type”
Data Length 1 byte 00 Pure acknowledgment frame with no data
Checksum 1 byte 24 Sum of all bytes from 55 to 00, modulo 256

Set Input/Output Mode (0x23)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x23
Data Length:   1 byte  - 0x05 (5 bytes)
Data:          5 bytes - Input/output mode, see input/output mode field
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x23
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by MCU to request XU316 switch to specific input/output mode
  • Typically triggered by user operation, such as pressing mode selection button
  • XU316 may need to restart to load new mode firmware

Command Example

55 AA 03 23 05 02 00 00 00 00 2C

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is a command sent by MCU to XU316
Command 1 byte 23 Current command is “Set Input/Output Mode”
Data Length 1 byte 05 5 mode bytes follow
Input/output mode 5 bytes 02 00 00 00 00 Example target mode data; definitions depend on product specification
Checksum 1 byte 2C Sum of all bytes from 55 to the last mode byte, modulo 256

Send Playback Volume (0x24)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x24
Data Length:   1 byte  - 0x02 (2 bytes)
Data:          2 bytes
              Byte 1: Left channel (0xFF Mute, 0-0dB, -127: -127dB)
              Byte 2: Right channel (0xFF Mute, 0-0dB, -127: -127dB)
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

MCU Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x24
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to report current playback volume to MCU

Command Example

55 AA 03 24 00 26

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is an acknowledgment returned by MCU to XU316
Command 1 byte 24 Acknowledges “Send Playback Volume”
Data Length 1 byte 00 Pure acknowledgment frame with no data
Checksum 1 byte 26 Sum of all bytes from 55 to 00, modulo 256

Send Recording Volume (0x25)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x25
Data Length:   1 byte  - 0x01 (1 byte)
Data:          1 byte  - 0xFF Mute, 0-0dB -127: -127dB
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

MCU Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x25
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to report current microphone recording volume to MCU
  • Reserved command, currently not used

Command Example

55 AA 03 25 00 27

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is an acknowledgment returned by MCU to XU316
Command 1 byte 25 Acknowledges “Send Recording Volume”
Data Length 1 byte 00 Pure acknowledgment frame with no data
Checksum 1 byte 27 Sum of all bytes from 55 to 00, modulo 256

Switch MCLK (0x26)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x26
Data Length:   1 byte  - 1
Data:          1 byte  - 0: Internal MCLK, 1: External MCLK
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x26
Data Length:   1 byte  - 0
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to control switching master clock source
  • Can switch between using internal clock or external clock
  • Important for certain audio application scenarios requiring precise synchronization

Command Example

55 AA 03 26 01 01 2A

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is a command sent by MCU to XU316
Command 1 byte 26 Current command is “Switch MCLK”
Data Length 1 byte 01 One data byte follows
Data 1 byte 01 Switch to external MCLK; if 00, switch to internal MCLK
Checksum 1 byte 2A Sum of all bytes from 55 to last data byte, modulo 256

Set Unmute (0x27)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x27
Data Length:   1 byte  - 2
Data:          2 bytes -
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x27
Data Length:   1 byte  - 0
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • DAC unmute time delay during mode switching, unit is milliseconds

Send Audio Format Time Delay (0x28)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x28
Data Length:   1 byte  - 2
Data:          2 bytes -
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x28
Data Length:   1 byte  - 0
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • Send audio format time delay

Report USB Connection Status (0x29)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x29
Data Length:   1 byte  - 0x01 (1 byte)
Data:          1 byte  - USB connection status
                           0x00 USB disconnected / not connected
                           0x01 USB connected
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

MCU Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x29
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to report the current USB connection status to the MCU
  • When the USB connection status changes (connect or disconnect), XU316 proactively sends this command
  • The MCU can use this information to update the UI or adjust related functions

Command Example

55 AA 03 29 00 2B

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is an acknowledgment returned by MCU to XU316
Command 1 byte 29 Acknowledges “Report USB Connection Status”
Data Length 1 byte 00 Pure acknowledgment frame with no data
Checksum 1 byte 2B Sum of all bytes from 55 to 00, modulo 256

Set Mute Pin Inversion (0x30)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x30
Data Length:   1 byte  - 0x01
Data:          1 byte
              B0: Inversion flag
                  0x00 = Normal logic (High level unmute, Low level mute)
                  0x01 = Inverted logic (Low level unmute, High level mute)
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x30
Data Length:   1 byte  - 0x01
Data:          1 byte
              B0: Current inversion flag status
                  0x00 = Normal logic
                  0x01 = Inverted logic
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  1. This command is used to set inversion logic for the Mute pin output
  2. Use this command when certain hardware designs have opposite Mute polarity from default
  3. The configuration is automatically saved to Flash and persists after power-off
  4. Takes effect immediately and returns current status
  • Mute pin polarity is opposite to default in hardware design
  • Need to adapt different hardware revisions of devices

Command Example

55 AA 03 30 01 01 34

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header
Version 1 byte 03 Sent by MCU to XU316
Command 1 byte 30 Set Mute pin inversion
Data Length 1 byte 01 1 data byte follows
Inversion flag 1 byte 01 0x01 = inverted logic
Checksum 1 byte 34 Sum of all bytes from 55 to inversion flag, modulo 256

Get Current Audio Format (0x31)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0x31
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x31
Data Length:   1 byte  - 0x02 (2 bytes)
Data:          2 bytes
              Byte 0: Audio stream format, see section 4.3 Audio Stream Format
              Byte 1: Audio type, see section 4.3 Audio Type
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by MCU to query current playback audio stream format and type from XU316
  • The return format is consistent with the 0x22 proactive report command
  • If the audio type is DSD and the format is AUDIO_44100, XU316 will correct it to PCM in the response
  • If no valid audio stream is present, returns 0xFF 0x00

Command Example

55 AA 03 31 00 33

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is a command sent by MCU to XU316
Command 1 byte 31 Current command is “Get Current Audio Format”
Data Length 1 byte 00 No additional data
Checksum 1 byte 33 Sum of all bytes from 55 to 00, modulo 256

Command Example

55 AA 00 31 02 03 00 35

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 00 Indicates this frame is returned by XU316 to MCU
Command 1 byte 31 Response for “Get Current Audio Format”
Data Length 1 byte 02 Two data bytes follow
Audio stream format 1 byte 03 Current format is AUDIO_96000 (96kHz)
Audio type 1 byte 00 Current type is PCM
Checksum 1 byte 35 Sum of all bytes from 55 to last data byte, modulo 256

DAC Configuration Selection (0xF0)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0xF0
Data Length:   1 byte  - 4
Data:          4 bytes
              Byte 0: 0: Enable I2C DAC configuration  1: Disable I2C DAC configuration
              Byte 1 - 3: reserved
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0xF0
Data Length:   1 byte  - 0
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • Test command for MCU to set DAC configuration selection in XU316. Let XU316 configure DAC via DAC I2C or MCU configure DAC itself
  • This command is product-specific and not supported by all products. Please refer to product specification for support details.

Command Example

55 AA 03 F0 04 00 00 00 00 F6

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is a command sent by MCU to XU316
Command 1 byte F0 Current command is “DAC Configuration Selection Command”
Data Length 1 byte 04 4 data bytes follow
Byte 0 1 byte 00 Enable XU316 to configure DAC via I2C
Byte 1-3 3 bytes 00 00 00 Reserved bytes, all set to 00 in this example
Checksum 1 byte F6 Sum of all bytes from 55 to the last data byte, modulo 256

Get Firmware Version Command (0xF1)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0xF1
Data Length:   1 byte  - 2
Data:          2 bytes -
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0xF1
Data Length:   1 byte  - 0
Data:          3 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • Get firmware version

Command Example

55 AA 03 F1 02 00 00 F5

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is a command sent by MCU to XU316
Command 1 byte F1 Current command is “Get Firmware Version Command”
Data Length 1 byte 02 Two data bytes follow
Data 2 bytes 00 00 Reserved bytes, set to 00 as placeholder in this example
Checksum 1 byte F5 Sum of all bytes from 55 to the last data byte, modulo 256

Query Complete Version Number (0xF3)

MCU Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0xF3
Data Length:   1 byte  - 0x00
Data:          0 bytes - none
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

XU316 Returns

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0xF3
Data Length:   1 byte  - N (ASCII version string length, varies by model)
Data:          N bytes - complete firmware version string (all ASCII)
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by MCU to query the complete firmware version number from XU316
  • Unlike the 0xF1 command (which only returns a 3-byte BCD major version J.M.N), 0xF3 returns the complete ASCII version string
  • Version string format is <model>_v<major>.<minor>.<revision>_b<build>
  • For example, user firmware returns hf87611_v8.1.0_b01, factory firmware returns hf87611_v5.5.8_b01

Command Example

55 AA 03 F3 00 F5

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 03 Indicates this frame is a command sent by MCU to XU316
Command 1 byte F3 Current command is “Query Complete Version Number”
Data Length 1 byte 00 No additional data
Checksum 1 byte F5 Sum of all bytes from 55 to 00, modulo 256

Command Example

55 AA 00 F3 12 68 66 38 37 36 31 31 5F 76 38 2E 31 2E 30 5F 62 30 31 C5

Field Breakdown

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 00 Indicates this frame is returned by XU316 to MCU
Command 1 byte F3 Response for “Query Complete Version Number”
Data Length 1 byte 12 18 data bytes follow
Version string 18 bytes 68 66 38 37 36 31 31 5F 76 38 2E 31 2E 30 5F 62 30 31 ASCII string hf87611_v8.1.0_b01
Checksum 1 byte C5 Sum of all bytes from 55 to the last data byte, modulo 256

HID Passthrough Data to MCU via XU316 (0xEE)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0xEE
Data Length:   1 byte  - 0x39 (57 bytes), due to HID protocol limitation, data length must be 57 bytes
Data:          57 bytes - Due to HID protocol limitation, passthrough data must be 57 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

MCU Returns (can return multiple frames)

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x03
Command:       1 byte  - 0xEE
Data Length:   1 byte  - 0x39 (57 bytes), due to HID protocol limitation, data length must be 57 bytes
Data:          57 bytes - Due to HID protocol limitation, passthrough data must be 57 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used for HID to initiate passthrough data to MCU via XU316
  • Generally the passthrough data is MCU OTA data or MCU data replied to HID

Example Notes

The byte sequences in this section are derived from the base protocol frame format (checksum = sum of all bytes from frame header, modulo 256), for development reference; mode values in the examples are from the product datasheet section 2.1 table — each product follows its own datasheet.

Flow 1: Device Startup Handshake

After power-on, XU316 and MCU complete the startup handshake in the following order; business commands can only be used after the handshake completes:

sequenceDiagram
    participant X as XU316
    participant M as MCU
    X->>M: 0x00 Start-up (with basic info / power-on config CRC)
    M-->>X: Startup options (set 0x01/0x02 bits as needed)
    opt Update basic info
        X->>M: 0x01 Read product info
        M-->>X: 60-byte product basic info
    end
    opt Update power-on config
        X->>M: 0x02 Read power-on config
        M-->>X: 14-byte power-on config
    end
    X->>M: 0x03 Get current input/output mode
    M-->>X: 5-byte mode value (see datasheet section 2.1 table)
    X->>M: 0x04 Get current user config
    M-->>X: 14-byte user config
    X->>M: 0x05 Startup complete
    M-->>X: Acknowledgment

Complete byte formats and timing details of each command: see the "Device Startup and Initialization" chapter of "XU316 UART Base Protocol".

Flow 2: Switch Input/Output Mode (0x23)

Example: switch to S/PDIF1 input mode (mode value 0x10, 0x80, 0x65, 0x10, 0x03, from the product datasheet section 2.1 table).

MCU Sends:

55 AA 03 23 05 10 80 65 10 03 32
Byte Segment Example Description
Frame Header 55 AA Fixed frame header
Version 03 MCU→XU316 command
Command 23 Set input/output mode
Data Length 05 5 mode bytes follow
Mode data 10 80 65 10 03 Target mode value (see product datasheet section 2.1 table)
Checksum 32 Sum of all bytes from frame header, modulo 256

XU316 Returns: 55 AA 00 23 00 22 (pure acknowledgment frame)

Restart After Mode Switch

XU316 may need to restart to load the new mode firmware. After restart, the device repeats the startup handshake flow (the restart reason field in the 0x00 command is 0x01 mode switch restart); the MCU should respond again as in Flow 1.

Flow 3: Receive Playback Volume Report (0x24)

After the user adjusts volume on the computer, XU316 proactively reports the current playback volume to MCU (example: both channels at -24dB, i.e. 0xE8):

XU316 Sends:

55 AA 00 24 02 E8 E8 F5
Byte Segment Example Description
Frame Header 55 AA Fixed frame header
Version 00 XU316→MCU data
Command 24 Send playback volume
Data Length 02 2 volume bytes follow
Left channel E8 -24dB (0xFF is Mute, 0 is 0dB)
Right channel E8 -24dB
Checksum F5 Sum of all bytes from frame header, modulo 256

MCU Returns: 55 AA 03 24 00 26 (pure acknowledgment frame)

Flow 4: Media Control — Play/Pause (0x21)

MCU-side button triggers play/pause (control code 0x02); XU316 converts it to an HID command sent to the computer:

MCU Sends: 55 AA 03 21 01 02 26

XU316 Returns: 55 AA 00 21 00 20 (pure acknowledgment frame)

Other control codes (volume up/down, previous/next track, fast forward, rewind, mute) are listed in the mapping table of the 0x21 command details; the frame format is identical, only the data byte and checksum differ.

Flow 5: Query Current Audio Format (0x31)

MCU Sends: 55 AA 03 31 00 33

XU316 Returns (example: 96kHz PCM):

55 AA 00 31 02 03 00 35
Byte Segment Example Description
Audio stream format 03 AUDIO_96000 (96kHz); full table in base protocol section 4.3
Audio type 00 PCM

Flow 6: Get Firmware Version (0xF1)

MCU Sends: 55 AA 03 F1 02 00 00 F5

XU316 Returns (example: V1.2.5):

55 AA 00 F1 03 01 02 05 FB
Byte Segment Example Description
Data Length 03 3-byte version number
Version data 01 02 05 Major.Minor.Revision (V1.2.5)

4.3 EQ and Tone Control Commands (UART/HID dual codes)

Each function has one command code per transport (HID code = UART code + 0x4A); both formats are shown for every command below.

UART Command HID Command Name Function
0x40 0x8A SET_EQ_MODE Switch EQ Mode
0x41 0x8B GET_EQ_MODE Get EQ Mode Information
0x42 0x8C SET_MODE_GAIN_AND_NAME Set Mode Overall Gain and Name
0x43 0x8D SET_EQ_PARAMS Send EQ Parameters
0x44 0x8E GET_EQ_PARAMS Read EQ Parameters
0x45 0x8F GET_DEVICE_INFO Get Device Information
0x46 0x90 RESET_EQ_PARAMS Reset EQ Parameters
0x47 0x91 GET_EQ_MODE_COUNT Get Total EQ Mode Count
0x48 0x92 SET_AND_SAVE_EQ_MODE Set and Save EQ Mode
0x49 0x93 SET_VOLUME Set Volume Level (Disabled)
0x4A 0x94 GET_VOLUME Get Volume Level (Disabled)
0x4B 0x95 GET_LED_INFO Get LED Information (Disabled)
0x4C 0x96 SET_LED_SWITCH Set LED Switch (Disabled)
0x4D 0x97 GET_LED_SWITCH Get LED Switch (Disabled)
0x4E 0x98 GET_LED_STATUS Get LED Status (Disabled)
0x4F 0x99 GET_LED_COUNT Get LED Count (Disabled)
0x50 0x9A GET_UAC_MODE_INFO Get UAC Mode Information (Disabled)
0x51 0x9B SET_UAC_MODE Set UAC Mode (Disabled)
0x52 0x9C GET_CURRENT_UAC_MODE Get Current UAC Mode (Disabled)
0x53 0x9D SET_EQ_ENABLE Set EQ Enable Switch
0x54 0x9E GET_EQ_ENABLE Get EQ Enable Switch
0x55 0x9F GET_SAMPLE_FORMAT Get Sample Rate and Format
0x56 0xA0 SET_GAIN_MODE Set Gain Mode (Disabled)
0x57 0xA1 GET_GAIN_MODE Get Gain Mode (Disabled)
0x58 0xA2 SET_FILTER_MODE Set Filter Mode (Disabled)
0x59 0xA3 GET_FILTER_MODE Get Filter Mode (Disabled)
0x5A 0xA4 SET_GAME_MODE Set Game Mode (Disabled)
0x5B 0xA5 GET_GAME_MODE Get Game Mode (Disabled)
0x5C 0xA6 GET_FIRMWARE_VERSION Get Firmware Version
0x5D 0xB3 SET_EQ_BAND_COUNT Set EQ Band Count
0x5E 0xB4 GET_EQ_BAND_COUNT Get EQ Band Count

Switch EQ Mode(SET_EQ_MODE,UART 0x40 / HID 0x8A)

UART serial format (command 0x40):

Function: Switch current EQ mode
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x40    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Mode Value (0-6: Presets, 7-9: User)
6        | 1      | Checksum| Checksum

Device Processing:

  • Directly sets g_current_eq_mode = data[5]
  • Does not involve parameter transmission or calculation

USB HID format (command header 0x8A):

Function: Switch current EQ mode

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8A
3 1 mode Mode value (0-6: preset modes, 7-9: user modes)
4-63 60 reserved Reserved fields (fill with 0)

Get EQ Mode Information(GET_EQ_MODE,UART 0x41 / HID 0x8B)

UART serial format (command 0x41):

Function: Read EQ mode information
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x41    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Mode Value (0-9: Valid mode, 0xFF: Get current info)
6        | 1      | Checksum| Checksum

Device Processing:

  • If mode is 0xFF, returns current mode value, overall gain, and mode name.
  • If mode is a valid value (0-9), returns specified mode value, overall gain, and mode name.

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x41    | Command Code
4        | 1      | 0x15    | Data Length (21 bytes)
5        | 1      | uint8   | Mode Value (Current or specified)
6-9      | 4      | int32   | Gain Value (Range 0 to -50dB, signed integer)
10-25    | 16     | char    | Mode Name (UTF-8 encoded, 16 bytes)
26       | 1      | Checksum| Checksum

Usage Notes:

  • When sending mode=0xFF, returns information for the currently active EQ mode.
  • When sending mode=0-9, returns gain and name information for the specified mode (does not switch current mode).

USB HID format (command header 0x8B):

Function: Get current mode value, overall gain, and mode name

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8B
3 1 mode Mode value (0-9: specified mode; 0xFF: get current mode info)
4-63 60 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8B (echo)
3 1 mode Current mode value
4-7 4 gain Overall gain (int32, little endian, range -50dB ~ 0dB)
8-23 16 name Mode name (UTF-8 string)
24-63 40 reserved Reserved fields (fill with 0)

Usage Notes:

  • Send mode = 0xFF to return the currently active EQ mode information
  • Send mode = 0-9 to return the specified mode gain and name (does not switch the current mode)

Set Mode Overall Gain and Name(SET_MODE_GAIN_AND_NAME,UART 0x42 / HID 0x8C)

UART serial format (command 0x42):

Function: Set EQ mode overall gain and name
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x42    | Command Code
4        | 1      | 0x15    | Data Length (21 bytes)
5        | 1      | uint8   | Mode Value (0-9)
6-9      | 4      | int32   | Gain Value (Range 0 to -50dB, signed integer)
10-25    | 16     | char    | Mode Name (UTF-8 encoded, 16 bytes)
26       | 1      | Checksum| Checksum

Device Processing:

  1. Parses mode value, gain value, and mode name.
  2. Sets the specified mode's EQ overall gain and name for all sample rates' left and right channels.
  3. Supports all sample rates: 44100, 48000, 88200, 96000, 176400, 192000 Hz.

USB HID format (command header 0x8C):

Function: Set overall gain and name for target mode

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8C
3 1 mode Target mode value (0-9)
4-7 4 gain Overall gain (int32, little endian, range -50dB ~ 0dB)
8-23 16 name Mode name (UTF-8 string)
24-63 40 reserved Reserved fields (fill with 0)

Send EQ Parameters(SET_EQ_PARAMS,UART 0x43 / HID 0x8D)

UART serial format (command 0x43):

Function: Send parameters for a single filter
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x43    | Command Code
4        | 1      | 0x13    | Data Length (19 bytes: 1 mode + 1 index + 1 type + 4 floats totaling 16 bytes)
5        | 1      | uint8   | Mode Value (0-9)
6        | 1      | uint8   | Filter Band Index (0-7)
7        | 1      | uint8   | Filter Type
8-11     | 4      | float   | Center Frequency (Hz)
12-15    | 4      | float   | Q Value
16-19    | 4      | float   | Bandwidth (Hz)
20-23    | 4      | float   | Gain (dB)
24       | 1      | Checksum| Checksum

Filter Type Codes:

Code Filter Type
0x00 Bypass Filter
0x01 All Pass Filter
0x02 Peak Filter
0x03 Low Pass Filter
0x04 High Pass Filter
0x05 Band Pass Filter
0x06 Band Reject Filter
0x07 Notch Filter
0x08 Constant Q Filter
0x09 Low Shelf Filter
0x0A High Shelf Filter

Device Processing:

  1. Parses parameters and stores them into the corresponding mode for all sample rates.
  2. Calls eq_calculate_coefficients_from_params() to calculate coefficients.
  3. Stores calculated coefficients into the corresponding mode for all sample rates.
  4. Automatically applies to all sample rates: 44100, 48000, 88200, 96000, 176400, 192000 Hz.

USB HID format (command header 0x8D):

Function: Send single filter parameters

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8D
3 1 mode Mode value (0-9)
4 1 band Filter index (0-7)
5 1 type Filter type code
6-9 4 freq Center frequency Hz (float, little endian)
10-13 4 q Q value (float, little endian)
14-17 4 bw Bandwidth Hz (float, little endian)
18-21 4 gain Gain dB (float, little endian)
22-63 42 reserved Reserved fields (fill with 0)

Filter Type Codes:

Code Type Code Type
0x00 Bypass 0x06 Band Reject
0x01 All Pass 0x07 Notch
0x02 Peak 0x08 Constant Q
0x03 Low Pass 0x09 Low Shelf
0x04 High Pass 0x0A High Shelf
0x05 Band Pass

Data Format Notes:

Floating Point and Byte Order

  • All floating-point numbers follow IEEE 754 float standard with little endian byte order
  • All multi-byte integers use Little Endian byte order

Read EQ Parameters(GET_EQ_PARAMS,UART 0x44 / HID 0x8E)

UART serial format (command 0x44):

Function: Read parameters of a single filter
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x44    | Command Code
4        | 1      | 0x02    | Data Length
5        | 1      | uint8   | Mode Value (0-9)
6        | 1      | uint8   | EQ Index (0-7)
7        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x44    | Command Code
4        | 1      | 0x13    | Data Length (19 bytes: 1 mode + 1 index + 1 type + 4 floats totaling 16 bytes)
5        | 1      | uint8   | Mode Value (0-9)
6        | 1      | uint8   | Filter Band Index (0-7)
7        | 1      | uint8   | Filter Type
8-11     | 4      | float   | Center Frequency (Hz)
12-15    | 4      | float   | Q Value
16-19    | 4      | float   | Bandwidth (Hz)
20-23    | 4      | float   | Gain (dB)
24       | 1      | Checksum| Checksum

USB HID format (command header 0x8E):

Function: Read parameters of specified filter

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8E
3 1 mode Mode value (0-9)
4 1 band Filter index (0-7)
5-63 59 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8E (echo)
3 1 mode Mode value
4 1 band Filter index
5 1 type Filter type code
6-9 4 freq Center frequency Hz (float, little endian)
10-13 4 q Q value (float, little endian)
14-17 4 bw Bandwidth Hz (float, little endian)
18-21 4 gain Gain dB (float, little endian)
22-63 41 reserved Reserved fields (fill with 0)

Get Device Information(GET_DEVICE_INFO,UART 0x45 / HID 0x8F)

UART serial format (command 0x45):

Function: Get device basic information
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x45    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x45    | Command Code
4        | 1      | 0x34    | Data Length (52 bytes: 2 PID + 2 VID + 16 Product + 16 Vendor + 16 SN)
5-6      | 2      | uint16  | Product ID (PID, Little Endian)
7-8      | 2      | uint16  | Vendor ID (VID, Little Endian)
9-24     | 16     | char    | Product String (UTF-8, 16 bytes)
25-40    | 16     | char    | Vendor String (UTF-8, 16 bytes)
41-56    | 16     | char    | Serial Number String (UTF-8, 16 bytes)
57       | 1      | Checksum| Checksum

USB HID format (command header 0x8F):

Function: Get basic device identification information

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8F
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x8F (echo)
3-4 2 pid Product ID (uint16, little endian)
5-6 2 vid Vendor ID (uint16, little endian)
7-22 16 product Product string (UTF-8)
23-38 16 vendor Vendor string (UTF-8)
39-54 16 sn Serial number string (UTF-8)
55-63 9 reserved Reserved fields (fill with 0)

Reset EQ Parameters(RESET_EQ_PARAMS,UART 0x46 / HID 0x90)

UART serial format (command 0x46):

Function: Delete customer-customized EQ parameters and restore preset parameters
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x46    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Mode Number (0-9, 0xFF means restore all including EQ params, overall gain, mode name)
6        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x46    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Status Code (0x00=Success, 0x01=Failure)
6        | 1      | Checksum| Checksum

Device Processing:

  1. Deletes the EQ parameter file stored in Flash for the specified mode.
  2. Deletes the gain and mode name Flash storage file.
  3. Restores the header file preset parameters for that mode.
  4. If mode number is 0xFF, resets all modes.
  5. Returns operation status.

USB HID format (command header 0x90):

Function: Reset EQ parameters for specified mode or all modes

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x90
3 1 mode Mode number (0-9, 0xFF = reset all modes)
4-63 60 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x90 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4-63 60 reserved Reserved fields (fill with 0)

Get Total EQ Mode Count(GET_EQ_MODE_COUNT,UART 0x47 / HID 0x91)

UART serial format (command 0x47):

Function: Get the total number of predefined plus user modes (excluding disabled modes)
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x47    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x57    | Command Code (Note: Matches Chinese doc which says 0x57 here, likely typo in doc but preserving)
4        | 1      | 0x02    | Data Length (2 bytes)
5        | 1      | uint8   | Total Modes (Currently 10, containing 0-9 total 10 modes)
6        | 1      | uint8   | Predefined Mode Count (Currently 7, containing 0-6 total 7 preset modes)
7        | 1      | Checksum| Checksum

USB HID format (command header 0x91):

Function: Get total EQ modes and preset mode count (excluding disabled modes)

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x91
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x91 (echo)
3 1 total Total modes (e.g., 0-9 means 10 modes)
4 1 preset_total Preset mode count (e.g., 0-6 means 7 presets)
5-63 59 reserved Reserved fields (fill with 0)

Set and Save EQ Mode(SET_AND_SAVE_EQ_MODE,UART 0x48 / HID 0x92)

UART serial format (command 0x48):

Function: Set current EQ mode and save to Flash, automatically restore on power-on
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x48    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Mode Value (0-9: 0-6 presets, 7-9 user modes)
6        | 1      | Checksum| Checksum

Device Processing:

  • Saves mode value to Flash.
  • Automatically reads and restores this mode from Flash on power-on.

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x48    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Status Code (0x00=Success, 0x01=Failure)
6        | 1      | Checksum| Checksum

USB HID format (command header 0x92):

Function: Set current EQ mode and save to Flash, automatically restored on power up

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x92
3 1 mode Mode value (0-6: preset modes, 7-9: user modes)
4-63 60 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x92 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4-63 60 reserved Reserved fields (fill with 0)

Set Volume Level(SET_VOLUME,UART 0x49 / HID 0x93)【Disabled·Code Point Reserved】

UART serial format (command 0x49):

Function: Set device volume level
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x49    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Volume Level (0-60: 0=Min, 60=Max)
6        | 1      | Checksum| Checksum

Parameter Description:

  • Volume Level Range: 0-60 (Total 61 levels)
  • Description: Controls device output volume level
  • 0: Minimum Volume (approx -127.5dB)
  • 60: Maximum Volume (0dB)
  • Approximately 2dB attenuation change per level

Device Processing:

  • Parameter will be automatically saved to Flash via existing periodic save mechanism.
  • If parameter exceeds range (>60), firmware will reject setting and return false.

USB HID format (command header 0x93):

Function: Set device output volume level

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x93
3 1 volume Volume level (0-60)
4-63 60 reserved Reserved fields (fill with 0)

Parameter Description:

  • Volume level range: 0-60 (total 61 levels)
  • 0: Minimum volume (approx -127.5dB)
  • 60: Maximum volume (0dB)
  • Approximately 2dB attenuation change per level

Device Processing: - Parameters are automatically saved to Flash via existing timed save mechanism - If parameter is out of range (>60), firmware will reject the setting and return false

Return Value: No direct return value. To confirm volume setting, use GET_VOLUME (0x94) command.

Get Volume Level(GET_VOLUME,UART 0x4A / HID 0x94)【Disabled·Code Point Reserved】

UART serial format (command 0x4A):

Function: Read device current volume level
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4A    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4A    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Current Volume Level (0-60)
6        | 1      | Checksum| Checksum

USB HID format (command header 0x94):

Function: Read current device volume level

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x94
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x94 (echo)
3 1 volume Current volume level (0-60)
4-63 60 reserved Reserved fields (fill with 0)

Get LED Information(GET_LED_INFO,UART 0x4B / HID 0x95)【Disabled·Code Point Reserved】

UART serial format (command 0x4B):

Function: Read LED index and LED name
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4B    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | LED Index (0-7, current device only has 1 LED, index 0)
6        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4B    | Command Code
4        | 1      | 0x11    | Data Length (17 bytes)
5        | 1      | uint8   | LED Index (0-7)
6-21     | 16     | char    | LED Name (UTF-8 encoded, 16 bytes)
22       | 1      | Checksum| Checksum

USB HID format (command header 0x95):

Function: Read LED index and LED name

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x95
3 1 led_index LED index (0-7)
4-63 60 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x95 (echo)
3 1 led_index LED index (0-7)
4-19 16 led_name LED name (UTF-8 string)
20-63 44 reserved Reserved fields (fill with 0)

Set LED Switch(SET_LED_SWITCH,UART 0x4C / HID 0x96)【Disabled·Code Point Reserved】

UART serial format (command 0x4C):

Function: Set LED switch state
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4C    | Command Code
4        | 1      | 0x02    | Data Length
5        | 1      | uint8   | LED Index (0-7, current device only has 1 LED, index 0)
6        | 1      | uint8   | LED Switch (0=OFF, 1=ON)
7        | 1      | Checksum| Checksum

Device Processing:

  • When LED switch is OFF, all LED outputs are disabled, no LED is displayed.
  • When LED switch is ON, LED displays normally.

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4C    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Status Code (0x00=Success, 0x01=Failure)
6        | 1      | Checksum| Checksum

USB HID format (command header 0x96):

Function: Set LED switch status

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x96
3 1 led_index LED index (0-7)
4 1 onoff LED switch (0=OFF, 1=ON)
5-63 59 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x96 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4-63 60 reserved Reserved fields (fill with 0)

Get LED Switch(GET_LED_SWITCH,UART 0x4D / HID 0x97)【Disabled·Code Point Reserved】

UART serial format (command 0x4D):

Function: Read LED switch state
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4D    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | LED Index (0-7, current device only has 1 LED, index 0)
6        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4D    | Command Code
4        | 1      | 0x02    | Data Length
5        | 1      | uint8   | LED Index (0-7)
6        | 1      | uint8   | LED Switch (0=OFF, 1=ON)
7        | 1      | Checksum| Checksum

USB HID format (command header 0x97):

Function: Read LED switch status

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x97
3 1 led_index LED index (0-7)
4-63 60 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x97 (echo)
3 1 led_index LED index (0-7)
4 1 onoff LED switch (0=OFF, 1=ON)
5-63 59 reserved Reserved fields (fill with 0)

Get LED Status(GET_LED_STATUS,UART 0x4E / HID 0x98)【Disabled·Code Point Reserved】

UART serial format (command 0x4E):

Function: Read LED RGB color and status
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4E    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | LED Index (0-7, current device only has 1 LED, index 0)
6        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4E    | Command Code
4        | 1      | 0x05    | Data Length
5        | 1      | uint8   | LED Index (0-7)
6        | 1      | uint8   | R Color Value (0-255)
7        | 1      | uint8   | G Color Value (0-255)
8        | 1      | uint8   | B Color Value (0-255)
9        | 1      | uint8   | LED Status (0=Off, 1=Solid, 2=Slow Blink, 3=Fast Blink, 4=Breathe)
10       | 1      | Checksum| Checksum

LED Status Enum:

  • 0: LED_STATUS_OFF (Off)
  • 1: LED_STATUS_SOLID (Solid On)
  • 2: LED_STATUS_SLOW_BLINK (Slow Blink)
  • 3: LED_STATUS_FAST_BLINK (Fast Blink)
  • 4: LED_STATUS_BREATHE (Breathe)

Note:

  • RGB color values are converted based on current LED color definition (active low).
  • LED status is determined based on current LED display mode (solid/blink).

USB HID format (command header 0x98):

Function: Read LED RGB color and display status

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x98
3 1 led_index LED index (0-7)
4-63 60 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x98 (echo)
3 1 led_index LED index (0-7)
4 1 r R color value (0-255)
5 1 g G color value (0-255)
6 1 b B color value (0-255)
7 1 led_status LED status (0=Off, 1=Solid, 2=Slow Flash, 3=Fast Flash, 4=Breathing)
8-63 56 reserved Reserved fields (fill with 0)

LED Status Enumeration: - 0: LED_STATUS_OFF (Off) - 1: LED_STATUS_SOLID (Solid) - 2: LED_STATUS_SLOW_BLINK (Slow Flash) - 3: LED_STATUS_FAST_BLINK (Fast Flash) - 4: LED_STATUS_BREATHE (Breathing)

Note

  • RGB color values are based on current LED color definition conversion (active low)
  • LED status is based on current LED display mode (solid/blinking) judgment

Get LED Count(GET_LED_COUNT,UART 0x4F / HID 0x99)【Disabled·Code Point Reserved】

UART serial format (command 0x4F):

Function: Read total number of LEDs supported by device
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4F    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x4F    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Total LEDs (Current device is 1)
6        | 1      | Checksum| Checksum

Device Processing:

  • Returns total number of LEDs supported by device.
  • Current device only has 1 LED, so returns 1.
  • LED index range is 0 to (Total LEDs - 1).

USB HID format (command header 0x99):

Function: Read total number of LEDs supported by device

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x99
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x99 (echo)
3 1 led_total Total LEDs
4-63 60 reserved Reserved fields (fill with 0)

Get UAC Mode Information(GET_UAC_MODE_INFO,UART 0x50 / HID 0x9A)【Disabled·Code Point Reserved】

UART serial format (command 0x50):

Function: Read UAC mode count and mode name list
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x50    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x50    | Command Code
4        | 1      | 0x11    | Data Length (17 bytes)
5        | 1      | uint8   | Total UAC Modes (Currently 2, containing UAC1.0 and UAC2.0)
6-13     | 8      | char    | Mode 0 Name (UTF-8, 8 bytes, e.g., "UAC2.0")
14-21    | 8      | char    | Mode 1 Name (UTF-8, 8 bytes, e.g., "UAC1.0")
22       | 1      | Checksum| Checksum

Device Processing:

  • Returns total UAC modes (currently 2).
  • Returns name for each mode (max 8 chars).
  • Mode 0 corresponds to UAC2.0, Mode 1 corresponds to UAC1.0.

USB HID format (command header 0x9A):

Function: Read UAC mode count and name list

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9A
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9A (echo)
3 1 count Total UAC modes (e.g., 2)
4-11 8 name0 Mode 0 name (UTF-8, max 8 bytes)
12-19 8 name1 Mode 1 name (UTF-8, max 8 bytes)
20-63 44 reserved Reserved fields (fill with 0)

Set UAC Mode(SET_UAC_MODE,UART 0x51 / HID 0x9B)【Disabled·Code Point Reserved】

UART serial format (command 0x51):

Function: Set UAC mode (UAC1.0 or UAC2.0)
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x51    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | UAC Mode Value (0=UAC2.0, 1=UAC1.0)
6        | 1      | Checksum| Checksum

Device Processing:

  • Sets UAC mode and reboots device.
  • Note: Device will not return a response after reboot.

USB HID format (command header 0x9B):

Function: Set UAC mode (UAC1.0/UAC2.0)

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9B
3 1 uac_mode UAC mode value (0=UAC2.0, 1=UAC1.0)
4-63 60 reserved Reserved fields (fill with 0)

Device Processing:

  • Note: Device will not send response after reboot

Get Current UAC Mode(GET_CURRENT_UAC_MODE,UART 0x52 / HID 0x9C)【Disabled·Code Point Reserved】

UART serial format (command 0x52):

Function: Read current UAC mode
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x52    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x52    | Command Code
4        | 1      | 0x09    | Data Length (9 bytes)
5        | 1      | uint8   | Current UAC Mode Value (0=UAC2.0, 1=UAC1.0)
6-13     | 8      | char    | Current UAC Mode Name (UTF-8, 8 bytes, e.g., "UAC2.0" or "UAC1.0")
14       | 1      | Checksum| Checksum

Device Processing:

  • Returns current UAC mode name (max 8 chars).

USB HID format (command header 0x9C):

Function: Read current UAC mode and name

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9C
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9C (echo)
3 1 uac_mode Current UAC mode (0=UAC2.0, 1=UAC1.0)
4-11 8 name Current mode name (UTF-8, max 8 bytes)
12-63 52 reserved Reserved fields (fill with 0)

Set EQ Enable Switch(SET_EQ_ENABLE,UART 0x53 / HID 0x9D)

UART serial format (command 0x53):

Function: Set EQ enable switch (Enable/Disable)
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x53    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | EQ Enable Switch (0=OFF Disable, 1=ON Enable)
6        | 1      | Checksum| Checksum

Device Processing:

  • Only saves EQ enable status to Flash (independent file storage), does not affect saved modes.

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x53    | Command Code
4        | 1      | 0x02    | Data Length
5        | 1      | uint8   | Status Code (0x00=Success, 0x01=Failure)
6        | 1      | uint8   | Current EQ Enable Status (0=OFF, 1=ON)
7        | 1      | Checksum| Checksum

USB HID format (command header 0x9D):

Function: Set EQ enable switch (enable/disable)

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9D
3 1 enable EQ enable switch (0=OFF, 1=ON)
4-63 60 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9D (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4 1 enable Current EQ enable status (0=OFF, 1=ON)
5-63 59 reserved Reserved fields (fill with 0)

Get EQ Enable Switch(GET_EQ_ENABLE,UART 0x54 / HID 0x9E)

UART serial format (command 0x54):

Function: Read EQ enable switch status
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x54    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x54    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | EQ Enable Switch Status (0=OFF Disable, 1=ON Enable)
6        | 1      | Checksum| Checksum

Device Processing:

  • Returns current EQ enable switch status (0=OFF, 1=ON).

USB HID format (command header 0x9E):

Function: Read current EQ enable status

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9E
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9E (echo)
3 1 enable Current EQ enable status (0=OFF, 1=ON)
4 1 saved_mode Saved mode value (0-9, 0xFF = not saved)
5-63 59 reserved Reserved fields (fill with 0)

Get Sample Rate and Format(GET_SAMPLE_FORMAT,UART 0x55 / HID 0x9F)

UART serial format (command 0x55):

Function: Read current sample rate and DSD mode
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x55    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x55    | Command Code
4        | 1      | 0x05    | Data Length (5 bytes)
5-8      | 4      | uint32  | Sample Rate (samFreq, Little Endian, Unit: Hz)
9        | 1      | uint8   | DSD Mode (dsdMode: 0=PCM, 1=DOP, 2=Native DSD)
10       | 1      | Checksum| Checksum

Device Processing:

  • Returns current sample rate (32-bit unsigned integer, Little Endian, Unit: Hz).
  • Returns DSD mode (0 means PCM format, >0 means DSD format).
  • Device will automatically report this information when sample rate or DSD mode changes (proactively sent via UART).

Auto-Report Mechanism:

  • Device monitors sample rate and DSD mode changes.
  • When these values change, device automatically constructs 0x55 response packet and sends via UART.

USB HID format (command header 0x9F):

Function: Read current sampling rate, DSD mode, and DAC sampling resolution

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9F
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x9F (echo)
3-6 4 sample_rate Sampling rate (uint32, little endian, unit: Hz)
7 1 dsd_mode DSD mode (0=PCM, 1=DOP, 2=Native DSD)
8-62 55 reserved Reserved fields (fill with 0)

Auto-Report Mechanism: - Device monitors changes in sampling rate and DSD mode - When these values change, device automatically constructs 0x9F response packet and reports via HID status report - Host can receive these auto-reported status changes via HID GET_REPORT

Set Gain Mode(SET_GAIN_MODE,UART 0x56 / HID 0xA0)【Disabled·Code Point Reserved】

UART serial format (command 0x56):

Function: Set gain mode
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x56    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Gain Mode Value (0=Low Impedance, 1=High Impedance)
6        | 1      | Checksum| Checksum

Parameter Description:

  • Gain Mode Range: 0-1
  • Description: Controls device gain level
  • 0: Low Impedance Mode (Suitable for high sensitivity headphones)
  • 1: High Impedance Mode (Suitable for high impedance headphones)

Device Processing:

  • Parameter will be automatically saved to Flash via existing periodic save mechanism.

USB HID format (command header 0xA0):

Function: Set gain mode (low impedance/high impedance)

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA0
3 1 gain_mode Gain mode (0=Low Impedance, 1=High Impedance)
4-63 60 reserved Reserved fields (fill with 0)

Parameter Description: - 0: Low impedance mode (suitable for high sensitivity headphones) - 1: High impedance mode (suitable for high impedance headphones)

Return Value: No direct return value. To confirm gain mode setting, use GET_GAIN_MODE (0xA1) command.

Get Gain Mode(GET_GAIN_MODE,UART 0x57 / HID 0xA1)【Disabled·Code Point Reserved】

UART serial format (command 0x57):

Function: Read device current gain mode
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x57    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x57    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Current Gain Mode (0=Low Impedance, 1=High Impedance)
6        | 1      | Checksum| Checksum

USB HID format (command header 0xA1):

Function: Read current device gain mode

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA1
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA1 (echo)
3 1 gain_mode Current gain mode (0=Low Impedance, 1=High Impedance)
4-63 60 reserved Reserved fields (fill with 0)

Set Filter Mode(SET_FILTER_MODE,UART 0x58 / HID 0xA2)【Disabled·Code Point Reserved】

UART serial format (command 0x58):

Function: Set filter mode
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x58    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Filter Mode Value (0-7: 8 filter modes)
6        | 1      | Checksum| Checksum

Parameter Description:

  • Filter Mode Range: 0-7 (Total 8 modes)
  • Description: Select DAC digital filter type
  • 0: Minimum Phase filter (default)
  • 1: Linear Phase Apodizing Fast Roll-off filter
  • 2: Linear phase fast roll-off filter
  • 3: Linear Phase Fast Roll-off low-ripple filter
  • 4: Linear phase slow roll-off filter
  • 5: Minimum phase fast roll-off filter
  • 6: Minimum phase slow roll-off filter
  • 7: Minimum Phase Fast Roll-Off Low Dispersion

Device Processing:

  • Parameter will be automatically saved to Flash via existing periodic save mechanism.
  • If parameter exceeds range (>7), firmware will reject setting and return false.

USB HID format (command header 0xA2):

Function: Set DAC digital filter mode

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA2
3 1 filter_mode Filter mode value (0-7)
4-63 60 reserved Reserved fields (fill with 0)

Filter Mode Definitions: - 0: Minimum Phase filter (default) - 1: Linear Phase Apodizing Fast Roll-off filter - 2: Linear phase fast roll-off filter - 3: Linear Phase Fast Roll-off low-ripple filter - 4: Linear phase slow roll-off filter - 5: Minimum phase fast roll-off filter - 6: Minimum phase slow roll-off filter - 7: Minimum Phase Fast Roll-Off Low Dispersion

Return Value: No direct return value. To confirm filter mode setting, use GET_FILTER_MODE (0xA3) command.

Get Filter Mode(GET_FILTER_MODE,UART 0x59 / HID 0xA3)【Disabled·Code Point Reserved】

UART serial format (command 0x59):

Function: Read device current filter mode
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x59    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x59    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Current Filter Mode (0-7)
6        | 1      | Checksum| Checksum

USB HID format (command header 0xA3):

Function: Read current device filter mode

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA3
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA3 (echo)
3 1 filter_mode Current filter mode (0-7)
4-63 60 reserved Reserved fields (fill with 0)

Set Game Mode(SET_GAME_MODE,UART 0x5A / HID 0xA4)【Disabled·Code Point Reserved】

UART serial format (command 0x5A):

Function: Set game mode
Direction: Host→Device
Data Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5A    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Game Mode Value (0=No effect, 1=FPS, 2=Virtual 7.1)
6        | 1      | Checksum| Checksum

Parameter Description:

  • Game Mode Range: 0-2
  • Description: Select game audio effect mode
  • 0: No effect (Standard Stereo)
  • 1: FPS Mode (Enhanced Positioning)
  • 2: Virtual 7.1 (Surround Sound Effect)

Device Processing:

  • Parameter will be automatically saved to Flash via existing periodic save mechanism.
  • If parameter exceeds range (>2), firmware will reject setting and return false.

USB HID format (command header 0xA4):

Function: Set game audio mode

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA4
3 1 game_mode Game mode (0=No effect, 1=FPS, 2=Virtual 7.1)
4-63 60 reserved Reserved fields (fill with 0)

Game Mode Definitions: - 0: No effect (standard stereo) - 1: FPS mode (enhanced positioning) - 2: Virtual 7.1 (surround sound effect)

Return Value: No direct return value. To confirm game mode setting, use GET_GAME_MODE (0xA5) command.

Get Game Mode(GET_GAME_MODE,UART 0x5B / HID 0xA5)【Disabled·Code Point Reserved】

UART serial format (command 0x5B):

Function: Read device current game mode
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5B    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5B    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Current Game Mode (0=No effect, 1=FPS, 2=Virtual 7.1)
6        | 1      | Checksum| Checksum

USB HID format (command header 0xA5):

Function: Read current device game mode

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA5
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA5 (echo)
3 1 game_mode Current game mode (0=No effect, 1=FPS, 2=Virtual 7.1)
4-63 60 reserved Reserved fields (fill with 0)

Get Firmware Version(GET_FIRMWARE_VERSION,UART 0x5C / HID 0xA6)

UART serial format (command 0x5C):

Function: Read device firmware version number
Direction: Host→Device
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5C    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5C    | Command Code
4        | 1      | 0x03    | Data Length (3 bytes)
5        | 1      | uint8   | Major Version (BCD, e.g., 0x01 means 1)
6        | 1      | uint8   | Minor Version (BCD, e.g., 0x00 means 0)
7        | 1      | uint8   | Revision Version (BCD, e.g., 0x0C means 12)
8        | 1      | Checksum| Checksum

Version Number Format:

  • Version number uses BCD (Binary Coded Decimal) format.
  • 3 bytes represent: Major Version, Minor Version, Revision Version.
  • Example: 0x01 0x00 0x0C means version 1.0.12.

USB HID format (command header 0xA6):

Function: Read device firmware version (BCD format)

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA6
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA6 (echo)
3 1 major Major version (BCD format)
4 1 minor Minor version (BCD format)
5 1 patch Patch version (BCD format)
6-63 58 reserved Reserved fields (fill with 0)

Version Format Description: - Version uses BCD (Binary Coded Decimal) format - 3 bytes represent: major version, minor version, patch version - Example: 0x01 0x00 0x0C represents version 1.0.12

Set EQ Band Count(SET_EQ_BAND_COUNT,UART 0x5D / HID 0xB3)

UART serial format (command 0x5D):

Function: Set EQ band count and save to Flash, controlling the number of DSP cores participating in EQ processing
Direction: MCU→XU316
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5D    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | EQ Band Count (8/16/24/32)
6        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5D    | Command Code
4        | 1      | 0x02    | Data Length
5        | 1      | uint8   | Status Code (0x00=Success, 0x01=Failure)
6        | 1      | uint8   | Current EQ Band Count (read back actual effective value)
7        | 1      | Checksum| Checksum

Parameter Description:

  • Band Count Values: Only 8, 16, 24, and 32 are supported; other values are rejected by XU316.
  • Processing Resource Mapping:
    • 8 bands: 1 DSP core participates in processing
    • 16 bands: 2 DSP cores participate in processing
    • 24 bands: 3 DSP cores participate in processing
    • 32 bands: All 4 DSP cores participate in processing (default)

XU316 Processing:

  • Validates band count value (only 8/16/24/32 accepted; invalid values return failure status).
  • Switches the number of DSP cores participating in EQ processing.
  • Band count setting is saved to Flash and automatically restored on power-on.
  • The "Current EQ Band Count" in the response is the read-back actual effective value for MCU confirmation.

Relation to Parameter Storage:

  • Switching band count does not delete stored filter parameters.
  • When switching from a high to a low band count, Band parameters beyond the current count are retained but do not participate in processing; they automatically take effect again when switching back to a higher count.

Response Example:

55 AA 00 5D 02 00 10 6E

MCU Send Example:

55 AA 00 5D 01 10 6D

Field Breakdown (Send)

Field Length Example Value Description
Frame Header 2 bytes 55 AA Fixed frame header, marks the start of a protocol frame
Version 1 byte 00 Protocol version number, fixed to 0x00 in this protocol
Command 1 byte 5D "Set EQ Band Count" command
Data Length 1 byte 01 1 byte of data follows
EQ Band Count 1 byte 10 Hex 0x10, i.e. decimal 16; set to 16 bands (2 DSP cores participate in processing)
Checksum 1 byte 6D Sum of all bytes from 55 through the band count, modulo 256

Field Breakdown (Response)

Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 00 Protocol version, fixed to 0x00 in this protocol
Command 1 byte 5D Response for the "Set EQ Band Count" command
Data Length 1 byte 02 2 data bytes follow
Status Code 1 byte 00 0x00 indicates success (only 8/16/24/32 accepted; invalid values return failure)
Current EQ Band Count 1 byte 10 Read-back actual effective value: 16 bands
Checksum 1 byte 6E Sum of all bytes from 55 to the band count byte, modulo 256

USB HID format (command header 0xB3):

Function: Set EQ band count, supports dynamic switching among 8/16/24/32 bands, controls number of DSP cores participating in processing

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB3
3 1 band_count EQ band count (8/16/24/32)
4-63 60 reserved Reserved fields (fill with 0)

EQ Band Count Definitions: - 8: Only Core0 participates in processing - 16: Core0 + Core1 participate in processing - 24: Core0 + Core1 + Core2 participate in processing - 32: All 4 cores participate in processing

Device Processing: - Only accepts 8, 16, 24, 32; other values are rejected - Saved to Flash (independent file eq_band_cnt), restored on power-up - After setting, triggers parameter sync to tile1, cores on tile1 not participating in processing bypass audio

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB3 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4 1 band_count Current EQ band count (8/16/24/32)
5-63 59 reserved Reserved fields (fill with 0)

Note: HID headers from 0xA7 onward are used for firmware upgrade; band count commands use 0xB3/0xB4 and do not follow the +0x4A mapping.

Get EQ Band Count(GET_EQ_BAND_COUNT,UART 0x5E / HID 0xB4)

UART serial format (command 0x5E):

Function: Read XU316 current EQ band count
Direction: MCU→XU316
Request Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5E    | Command Code
4        | 1      | 0x00    | Data Length
5        | 1      | Checksum| Checksum

Response Packet Format:

Byte Pos | Length | Content | Description
---------|--------|---------|------
0        | 1      | 0x55    | Header 1
1        | 1      | 0xAA    | Header 2
2        | 1      | 0x00    | Version
3        | 1      | 0x5E    | Command Code
4        | 1      | 0x01    | Data Length
5        | 1      | uint8   | Current EQ Band Count (8/16/24/32, default 32)
6        | 1      | Checksum| Checksum

Function Description:

  • Returns the currently effective EQ band count (8/16/24/32, default 32)

MCU Send Example:

55 AA 00 5E 00 5D
Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 00 Protocol version, fixed to 0x00 in this protocol
Command 1 byte 5E Current command is "Get EQ Band Count"
Data Length 1 byte 00 This command carries no data
Checksum 1 byte 5D Sum of all bytes from 55 to the data length byte, modulo 256

XU316 Response Example:

55 AA 00 5E 01 20 7E
Byte Segment Length Example Description
Frame Header 2 bytes 55 AA Fixed frame header indicating start of a protocol frame
Version 1 byte 00 Protocol version, fixed to 0x00 in this protocol
Command 1 byte 5E Response for the "Get EQ Band Count" command
Data Length 1 byte 01 1 data byte follows
Current EQ Band Count 1 byte 20 Hex 0x20 = decimal 32, indicating 32 bands (default)
Checksum 1 byte 7E Sum of all bytes from 55 to the band count byte, modulo 256

USB HID format (command header 0xB4):

Function: Read current EQ band count

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB4
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB4 (echo)
3 1 band_count Current EQ band count (8/16/24/32)
4-63 60 reserved Reserved fields (fill with 0)

Preset Mode Definitions

Mode Index Mode Name Purpose Type
0 JAZZ Optimized for jazz Preset
1 POP Optimized for pop Preset
2 ROCK Optimized for rock Preset
3 CLASSIC Optimized for classical Preset
4 R&B Optimized for rhythm music Preset
5 3A Game Optimized for 3A games Preset
6 FPS Optimized for FPS games Preset
7 User 1 User-defined mode 1 User
8 User 2 User-defined mode 2 User
9 User 3 User-defined mode 3 User

Mode Characteristics

  • Preset modes: factory presets, cannot be modified, optimized for specific music types
  • User modes: support custom parameters, can be saved and reset

Parameter Constraints

Protocol Limitations and Constraints

Hardware limitations

  • Filter band count: supports 8/16/24/32 (set via 0x5D, query via 0x5E; saved to Flash and restored on power-on, default 32 = all 4 DSP cores participating; only these four values are accepted, invalid values are rejected)
  • Mode count: 10 modes, 0-9 (modes 0-6 preset, 7-9 user; filter states are automatically cleared on mode switching)
  • Sample rate support: 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, 192kHz (device capability, independent of protocol fields)

Parameter ranges

Parameter Range Format
Center frequency (freq) 20Hz - 20kHz float (little-endian)
Q value (q) 0.1 - 30.0 float (little-endian)
Bandwidth (bw) 1Hz - 20kHz float (little-endian)
Gain (gain) -24dB - +24dB float (little-endian)
Overall gain (mode gain) -50dB - 0dB int32 (little-endian)

Mode Switching Flow

  1. Send SET_EQ_MODE to switch mode (UART 0x40 / HID 0x8A)
  2. Device updates internal mode state
  3. Send GET_EQ_MODE to confirm (UART 0x41 / HID 0x8B)
  4. Device responds with current mode state

Parameter Setting Flow

  1. Send SET_EQ_MODE to switch to the target mode (UART 0x40 / HID 0x8A)
  2. Send the 8 filter parameter commands one by one (UART 0x43 / HID 0x8D)
  3. Device receives and updates internal parameter cache
  4. Optional: send GET_EQ_PARAMS to verify (UART 0x44 / HID 0x8E)

Parameter Reading Flow

  1. Send SET_EQ_MODE to switch to the target mode (UART 0x40 / HID 0x8A)
  2. Send the GET_EQ_PARAMS request (UART 0x44 / HID 0x8E)
  3. Device prepares response data
  4. Read the response

Notes

  1. Timing: wait for the device to finish processing before sending the next command (5ms+ interval recommended)
  2. Data integrity: parameters of all filters within the currently effective band count must be sent, even if some filters are unused (band count is managed and queried via 0x5D/0x5E, default 32)
  3. Mode sync: after setting a mode, read it back to ensure synchronization
  4. Parameter validation: overall gain (0x42) accepts -50 to 0 dB, out-of-range values are clamped to the boundary then stored; filter parameters (0x43) are validity-checked only — any NaN/Inf parameter or zero center frequency causes the whole frame to be rejected (status code 0x01); EQ band count (0x5D) accepts only 8/16/24/32
  5. Device-side coefficient calculation: the host only sends parameters (freq/q/bw/gain); XU316 calculates filter coefficients in real time (with dynamic bshift calculation to ensure coefficient precision)
  6. Checksum: every command must carry a correct checksum — the low 8 bits of the sum of all bytes from frame header to end of data

4.4 HID Device Control Commands

Command Header Name Function Applicability Notes
0xA7 FIRMWARE_UPGRADE_START Start firmware upgrade
0xA8 FIRMWARE_UPGRADE_DATA Transmit firmware data block 57 bytes per block
0xA9 FIRMWARE_UPGRADE_END End firmware upgrade Device verifies image integrity
0xAA FIRMWARE_UPGRADE_STATUS Get upgrade status
0xAB FIRMWARE_UPGRADE_ABORT Abort firmware upgrade
0xAC FIRMWARE_UPGRADE_ERASE Erase upgrade image
0xAE DEVICE_REBOOT Device reboot No response
0xB3 SET_EQ_BAND_COUNT Set EQ band count 8/16/24/32 bands, saved to Flash
0xB4 GET_EQ_BAND_COUNT Get EQ band count
0x80 SET_UPSAMPLE Set sample rate upsampling 0=disable 1=enable
0x81 GET_UPSAMPLE Get upsampling status
0xB0 SET_EX3D_CMD Send EX3D set command VID 0x20B1/PID 0x80D3 only
0xB1 GET_EX3D_CMD Read EX3D command VID 0x20B1/PID 0x80D3 only

Set Sample Rate Upsampling SET_UPSAMPLE (0x80)

Function: Set device sampling rate upsampling switch

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x80
3 1 upsample Upsample status (0=Disable, 1=Enable)
4-63 60 reserved Reserved fields (fill with 0)

Parameter Description: - Upsample status: 0=Disable upsampling, 1=Enable upsampling

Return Value: No direct return value. To confirm upsampling status, use GET_UPSAMPLE (0x81).

Get Upsampling Status GET_UPSAMPLE (0x81)

Function: Read device current sampling rate upsampling status

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x81
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0x81 (echo)
3 1 upsample Current upsample status (0=Disabled, 1=Enabled)
4-63 60 reserved Reserved fields (fill with 0)

Start Firmware Upgrade FIRMWARE_UPGRADE_START (0xA7)

Function: Start firmware upgrade process, send firmware size and get upgrade parameters

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xA7
3-6 4 fw_size Firmware size (bytes, uint32, little endian)
7-63 57 reserved Reserved fields (fill with 0)

Response Format (64 bytes) (Auto-report):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xA7
2 1 status Status code (0x00=success, 0x01=failure, 0x03=invalid size)
3-6 4 aligned_size Page-aligned actual size (uint32, little endian)
7-8 2 total_blocks Total blocks (uint16, little endian)
9-63 55 reserved Reserved fields (fill with 0)

Transmit Firmware Data Block FIRMWARE_UPGRADE_DATA (0xA8)

Function: Transfer firmware data block, 57 bytes per block

Request Format (64 bytes):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xA8
2-3 2 block_num Block number (starting from 0, uint16, little endian)
4 1 data_len Data length (fixed 57)
5-61 57 data Firmware data (57 bytes)
62 1 checksum Checksum (sum of bytes 0-61 mod 256)

Response Format (64 bytes) (Auto-report):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xA8
2 1 status Status code (0x00=success, 0x04=block number error, 0x05=checksum error)
3-4 2 ack_block Acknowledged block number (uint16, little endian)
5-63 59 reserved Reserved fields (fill with 0)

End Firmware Upgrade FIRMWARE_UPGRADE_END (0xA9)

Function: Complete firmware transfer, verify image integrity

Request Format (64 bytes):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xA9
2-5 4 fw_size Total firmware size (for verification, uint32, little endian)
6-63 58 reserved Reserved fields (fill with 0)

Response Format (64 bytes) (Auto-report):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xA9
2 1 status Status code (0x00=success, 0x01=failure)
3-63 61 reserved Reserved fields (fill with 0)

Get Upgrade Status FIRMWARE_UPGRADE_STATUS (0xAA)

Function: Query upgrade status, progress, received blocks, total blocks, etc.

Request Format (64 bytes):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xAA
2-63 62 reserved Reserved fields (fill with 0)

Response Format (64 bytes) (Auto-report):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xAA
2 1 status Upgrade status (0=Idle, 1=Preparing, 2=Transferring, 3=Finalizing, 4=Completed, 5=Error, 6=Aborted)
3-4 2 received_blocks Received blocks (uint16, little endian)
5-6 2 total_blocks Total blocks (uint16, little endian)
7-8 2 written_pages Written pages (uint16, little endian)
9-10 2 total_pages Total pages (uint16, little endian)
11-14 4 received_bytes Transferred bytes (uint32, little endian)
15-18 4 total_bytes Total bytes (uint32, little endian)
19 1 error_code Error code
20-63 44 reserved Reserved fields (fill with 0)

Upgrade Status Enumeration: - 0: IDLE (Idle) - 1: PREPARING (Preparing) - 2: TRANSFERRING (Transferring) - 3: FINALIZING (Finalizing) - 4: COMPLETED (Completed) - 5: ERROR (Error) - 6: ABORTED (Aborted)

Abort Firmware Upgrade FIRMWARE_UPGRADE_ABORT (0xAB)

Function: Abort current upgrade process, optionally erase transferred data

Request Format (64 bytes):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xAB
2 1 erase_flag Erase flag (0x00=keep data, 0x01=erase data)
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes) (Auto-report):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xAB
2 1 status Status code (0x00=success)
3-63 61 reserved Reserved fields (fill with 0)

Erase Upgrade Image FIRMWARE_UPGRADE_ERASE (0xAC)

Function: Erase existing upgrade image in Flash

Request Format (64 bytes):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xAC
2-63 62 reserved Reserved fields (fill with 0)

Response Format (64 bytes) (Auto-report):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xAC
2 1 status Status code (0x00=success)
3-63 61 reserved Reserved fields (fill with 0)

Device Reboot DEVICE_REBOOT (0xAE)

Function: Reboot device immediately

Request Format (64 bytes):

Offset Length Field Name Description
0 1 sync_header Sync header: 0x77
1 1 cmd_header Command header: 0xAE
2-63 62 reserved Reserved fields (fill with 0)

Response: No response, device reboots immediately.

Set EQ Band Count SET_EQ_BAND_COUNT (0xB3)

Function: Set EQ band count, supports dynamic switching among 8/16/24/32 bands, controls number of DSP cores participating in processing

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB3
3 1 band_count EQ band count (8/16/24/32)
4-63 60 reserved Reserved fields (fill with 0)

EQ Band Count Definitions: - 8: Only Core0 participates in processing - 16: Core0 + Core1 participate in processing - 24: Core0 + Core1 + Core2 participate in processing - 32: All 4 cores participate in processing

Device Processing: - Only accepts 8, 16, 24, 32; other values are rejected - Saved to Flash (independent file eq_band_cnt), restored on power-up - After setting, triggers parameter sync to tile1, cores on tile1 not participating in processing bypass audio

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB3 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4 1 band_count Current EQ band count (8/16/24/32)
5-63 59 reserved Reserved fields (fill with 0)

Get EQ Band Count GET_EQ_BAND_COUNT (0xB4)

Function: Read current EQ band count

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB4
3-63 61 reserved Reserved fields (fill with 0)

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB4 (echo)
3 1 band_count Current EQ band count (8/16/24/32)
4-63 60 reserved Reserved fields (fill with 0)

Send EX3D Set Command SET_EX3D_CMD (0xB0)

Function: Send EX3D setting command, encapsulates all EX3D SET commands for spatial audio parameter configuration

Applicable Devices: VID 0x20B1, PID 0x80D3 (V7.1 spatial audio dedicated devices)

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0
3-6 4 ex3d_cmd EX3D command code (SET format)
7-10 4 param1 int32 Parameter 1 (varies by command)
11-14 4 param2 int32 Parameter 2 (varies by command)
15-18 4 param3 int32 Parameter 3 (varies by command)
19-63 45 reserved Reserved fields (fill with 0)

Supported EX3D SET Commands:

EX3D Command Code Command Name Function Description
0x84 CMD_SOUND_FIELD Set sound field mode
0x87 CMD_LMT_THRESHOLD Set gunshot threshold
0x93 CMD_EXPAND_GAIN Set footstep gain

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4-7 4 ex3d_cmd EX3D command code (echo)
8-11 4 retval Return value (0xFFFFFFFF indicates parameter error)
12-63 52 reserved Reserved fields (fill with 0)

Read EX3D Command GET_EX3D_CMD (0xB1)

Function: Read EX3D parameters, encapsulates all EX3D GET commands for spatial audio parameter reading

Applicable Devices: VID 0x20B1, PID 0x80D3 (V7.1 spatial audio dedicated devices)

Request Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1
3-6 4 ex3d_cmd EX3D command code (GET format)
7-10 4 param1 uint32 Parameter 1 (channel number, index, etc.)
11-63 53 reserved Reserved fields (fill with 0)

Supported EX3D GET Commands:

EX3D Command Code Command Name Function Description
0x184 CMD_SOUND_FIELD Get sound field mode
0x187 CMD_LMT_THRESHOLD Get gunshot threshold
0x18D CMD_LEVEL Get audio level
0x193 CMD_EXPAND_GAIN Get footstep gain

Response Format (64 bytes):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1 (echo)
3-6 4 ex3d_cmd EX3D command code (echo)
7-10 4 retval1 uint32 Return value 1
11-14 4 retval2 uint32 Return value 2
15-18 4 retval3 uint32 Return value 3
19-63 45 reserved Reserved fields (fill with 0)

EX3D Sub-Command Detailed Descriptions

EX3D Protocol Note

The following commands are sent via 0xB0/0xB1 encapsulation and are only applicable to V7.1 spatial audio devices with VID 0x20B1, PID 0x80D3.

2.3.1 EX3D Command Code Format Description
  • SET Command Format: base_command_code & ~0x0100 (clear bit 9)
  • Example: Set gunshot threshold = 0x87 & ~0x0100 = 0x87
  • Example: Set footstep gain = 0x93 & ~0x0100 = 0x93

  • GET Command Format: base_command_code | 0x0100 (set bit 9)

  • Example: Get gunshot threshold = 0x87 | 0x0100 = 0x187
  • Example: Get footstep gain = 0x93 | 0x0100 = 0x193
2.3.2 Sound Field Mode Control (CMD_SOUND_FIELD = 0x84)

Function: Set or get current sound field mode
Application Scenario: Switch between FPS Game/RPG Game/3A Game sound field effects

SET Command Request Packet Format (0xB0 encapsulated):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0
3-6 4 ex3d_cmd EX3D command code (0x84 = CMD_SET(CMD_SOUND_FIELD))
7-10 4 mode uint32 User mode value: 1=FPS Game, 2=RPG Game, 3=3A Game
11-63 53 reserved Reserved fields (fill with 0)

User Mode → Internal IR Algorithm Mapping:

User Value Meaning STEREO_EN=1 (IR) V71_AUDIO_MODE=1 (IR)
1 FPS Game IR_GAME (1) IR_7_1_GAME (4)
2 RPG Game IR_MUSIC (2) IR_7_1_MUSIC (5)
3 3A Game IR_MOVIE (3) IR_7_1_MOVIE (6)

SET Command Response Packet Format:

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4-7 4 ex3d_cmd EX3D command code (0x84, echo)
8-11 4 retval Return value (0xFFFFFFFF=invalid index, others=success)
12-63 52 reserved Reserved fields (fill with 0)

GET Command Request Packet Format (0xB1 encapsulated):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1
3-6 4 ex3d_cmd EX3D command code (0x184 = CMD_GET(CMD_SOUND_FIELD))
7-63 57 reserved Reserved fields (fill with 0)

GET Command Response Packet Format:

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1 (echo)
3-6 4 ex3d_cmd EX3D command code (0x184, echo)
7-10 4 mode uint32 Current user mode value (1=FPS Game, 2=RPG Game, 3=3A Game)
11-63 53 reserved Reserved fields (fill with 0)
2.3.3 Gunshot Threshold Control (CMD_LMT_THRESHOLD = 0x87)

Function: Set/get gunshot sound effect trigger threshold
Application Scenario: Detect gunshots and trigger corresponding audio processing in FPS Game/3A Game modes

SET Command Request Packet Format (0xB0 encapsulated):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0
3-6 4 ex3d_cmd EX3D command code (0x87 = CMD_SET(CMD_LMT_THRESHOLD))
7-10 4 threshold int32 Threshold value (range: -96 ~ 0 dB)
11-63 53 reserved Reserved fields (fill with 0)

SET Command Response Packet Format:

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4-7 4 ex3d_cmd EX3D command code (0x87, echo)
8-11 4 retval Return value (0xFFFFFFFF=invalid index, others=success)
12-63 52 reserved Reserved fields (fill with 0)

GET Command Request Packet Format (0xB1 encapsulated):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1
3-6 4 ex3d_cmd EX3D command code (0x187 = CMD_GET(CMD_LMT_THRESHOLD))
7-63 57 reserved Reserved fields (fill with 0)

GET Command Response Packet Format:

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1 (echo)
3-6 4 ex3d_cmd EX3D command code (0x187, echo)
7-10 4 threshold int32 Current threshold value (range: -96 ~ 0 dB)
11-63 53 reserved Reserved fields (fill with 0)
2.3.4 Footstep Gain Control (CMD_EXPAND_GAIN = 0x93)

Function: Set/get footstep sound effect gain
Application Scenario: Enhance footstep effects in FPS Game/3A Game modes

SET Command Request Packet Format (0xB0 encapsulated):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0
3-6 4 ex3d_cmd EX3D command code (0x93 = CMD_SET(CMD_EXPAND_GAIN))
7-10 4 gain int32 Gain value (range: 0 ~ 24 dB)
11-63 53 reserved Reserved fields (fill with 0)

SET Command Response Packet Format:

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB0 (echo)
3 1 status Status code (0x00=success, 0x01=failure)
4-7 4 ex3d_cmd EX3D command code (0x93, echo)
8-11 4 retval Return value (0xFFFFFFFF=invalid index, others=success)
12-63 52 reserved Reserved fields (fill with 0)

GET Command Request Packet Format (0xB1 encapsulated):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1
3-6 4 ex3d_cmd EX3D command code (0x193 = CMD_GET(CMD_EXPAND_GAIN))
7-63 57 reserved Reserved fields (fill with 0)

GET Command Response Packet Format:

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1 (echo)
3-6 4 ex3d_cmd EX3D command code (0x193, echo)
7-10 4 gain int32 Current gain value (range: 0 ~ 24 dB)
11-63 53 reserved Reserved fields (fill with 0)
2.3.5 Level Retrieval (CMD_LEVEL = 0x8D)

Function: Get channel level data
Application Scenario: Real-time audio level meter display

GET Command Request Packet Format (0xB1 encapsulated):

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1
3-6 4 ex3d_cmd EX3D command code (0x18D = CMD_GET(CMD_LEVEL))
7-10 4 count uint32 Channel count (1-16)
11-63 53 reserved Reserved fields (fill with 0)

GET Command Response Packet Format:

Offset Length Field Name Description
0 1 report_id Fixed value: 0x01
1 1 sync_header Sync header: 0x77
2 1 cmd_header Command header: 0xB1 (echo)
3-6 4 ex3d_cmd EX3D command code (0x18D, echo)
7 onwards N levels float32[] Array of channel level values
... ... ... Reserved fields (fill with 0)

Firmware Upgrade Flow

  1. Send FIRMWARE_UPGRADE_START (0xA7) with the firmware size
  2. Device returns the page-aligned size and total block count
  3. Send FIRMWARE_UPGRADE_DATA (0xA8) in a loop to transfer firmware data blocks
  4. After the transfer, send FIRMWARE_UPGRADE_END (0xA9) to finish the upgrade
  5. Device verifies image integrity and returns status

EX3D Sound Field Read Flow

Applicable devices: VID 0x20B1, PID 0x80D3 (V7.1 spatial audio dedicated devices)

  1. Send GET_EX3D_CMD (0xB1) wrapping CMD_SOUND_FIELD (0x184)
  2. Device returns the current sound field mode (1=FPS Game, 2=RPG Game, 3=3A Game)
  3. Update the UI state based on the sound field mode

EX3D Sound Field Set Flow

Applicable devices: VID 0x20B1, PID 0x80D3 (V7.1 spatial audio dedicated devices)

  1. Send SET_EX3D_CMD (0xB0) wrapping CMD_SOUND_FIELD (0x84) and the target mode value
  2. Device updates the internal sound field mode state and returns a response
  3. When switching from RPG Game to FPS Game/3A Game, re-read the FPS control parameters

EX3D FPS Control Parameter Read Flow

Applicable devices: VID 0x20B1, PID 0x80D3 (V7.1 spatial audio dedicated devices)

  1. Send GET_EX3D_CMD (0xB1) wrapping CMD_LMT_THRESHOLD (0x187) to read the gunshot threshold
  2. Send GET_EX3D_CMD (0xB1) wrapping CMD_EXPAND_GAIN (0x193) to read the footstep gain
  3. Device returns the current threshold and gain values respectively

5. Hardware Specifications

5.1 Product Dimensions

13±0.1mm(L)X13±0.1mm(W)X0.8±0.1mm(H)

5.2 Module Package Diagram

A316-Mini-V1 Package Diagram
Figure 3: A316-Mini-V1 Package Diagram

6. Minimum System Reference Design

A316-Mini-V1 Minimum System Reference Design
Figure 4: A316-Mini-V1 Minimum System Reference Design (HF87621_VC1 is based on the A316-Mini-V1 module)

7. Product Packaging Information

Tray + Outer Box Packaging

8. Revision History

Version Date Description Revised by
V1.0 2025-09-19 Initial Release
V1.1 2026-08-26 Added "Product Control Commands" chapter (same-source maintained with protocol command references)

9. Consultation & Feedback

Click to Expand Consultation & Feedback Form
×

Notice

Company Name:

Email Address:

Subject:

Message: