Skip to content

XU316 UART Base Protocol

Protocol Overview

Functional Scope and Purpose

This document specifies the base protocol for UART communication between XU316 zero-code products and MCU, including: frame format and transmission mechanism, device startup and initialization flow, startup basic commands (0x00-0x05), and common data structure definitions.

Business control commands (0x20-0x31, 0xF0-0xF3, 0xEE) vary by product firmware application. Their byte-level details are organized into per-product UART Command Set documents — enter from the Communication Protocols Index or the "UART Control Commands" chapter of the corresponding product datasheet.

1. Protocol Foundation Specification

1.1 Underlying Communication Protocol

Based on UART (Universal Asynchronous Receiver/Transmitter) Protocol

Parameter Value
Baud Rate 115200 bps
Data Bits 8
Parity None
Stop Bits 1
Flow Control None

1.2 Frame Format and Data Transmission

General Frame Format

All commands and responses follow this frame format:

Field Byte Count Description
Frame Header 2 Fixed as 0x55aa
Version 1 Protocol version number
Command 1 Indicates frame function
Data Length 1 Length N of subsequent data, excluding final checksum byte
Data N Specific data content
Checksum 1 Sum of all bytes from frame header, modulo 256

Data Transmission Notes

All multi-byte data is transmitted in Big Endian mode. All example data in the protocol is shown in hexadecimal format.

1.3 Communication Mechanism

1.3.1 Acknowledgment Mechanism

Acknowledgment and Timeout Handling

  • All commands require response acknowledgment from the recipient
  • Default command timeout is 300ms, timeout indicates communication failure
  • Special commands may have different timeout values, specified in respective command descriptions

1.3.2 Retry and Fault Tolerance Mechanism

flowchart TD
    A[Send Command] --> B{Wait for Response}
    B -->|Timeout| C[Resend Command]
    C --> D{Retry Count<4?}
    D -->|Yes| B
    D -->|No| E[Use Default Configuration]
    B -->|Response Received| F[Process Response]

2. Device Startup and Initialization

2.1 Startup Interaction Flow

sequenceDiagram
    participant XU316
    participant MCU
    participant Flash

    rect
        Note over XU316,Flash: System Loader Firmware


        rect
            Note over XU316,MCU: Power-On Startup Phase
            XU316->>MCU: Send start-up command (0x00)
            Note over XU316:
            alt Timeout with no response (max 4 attempts, if all fail enter USB->I2S mode directly)
                XU316->>MCU: Resend start-up command (0x00)
            end
            MCU-->>XU316: Return startup options
            Note over XU316: Parse startup options
        end

        rect
            Note over XU316,Flash: Basic Information Update Phase
            alt Startup option does not include 0x01 (do not update basic product info)
                XU316->>Flash: Read basic product info
                Flash-->>XU316: Return basic product info
            else Startup option includes 0x01 (update basic product info) or Flash data incomplete
                XU316->>MCU: Send read basic product info command (0x01)
                MCU-->>XU316: Return new basic product info
                XU316->>Flash: Save configuration
            end
        end

        rect
            Note over XU316,Flash: Power-On Configuration Retrieval Phase
            alt Startup option does not include 0x02 (do not update power-on config)
                XU316->>Flash: Read power-on configuration
                Flash-->>XU316: Return power-on configuration data
            else Startup option includes 0x02 (update power-on config) or Flash data incomplete
                XU316->>MCU: Send get power-on config command (0x02)
                MCU-->>XU316: Return new power-on config
                XU316->>Flash: Save new power-on config
            end
        end

        rect
            Note over XU316: Loading Application Mode Phase
            XU316->>MCU: Send get current mode command (0x03)
            MCU-->>XU316: Return current mode
            Note over XU316: Load corresponding mode based on current mode
         end

    end

    rect
        Note over XU316,MCU: APP Running Phase
        XU316->>MCU: Get current user config command (0x04)
        MCU-->>XU316: Return current user config
        Note over XU316: Initialize APP and apply current user config
        XU316->>MCU: Send startup complete command (0x05)
        MCU-->>XU316: Return completion command response
        par Parallel Processing
            loop Status Reporting
                XU316->>MCU: Status change or 15s timer send
            end
            loop Business Processing
                MCU->>XU316: Send business commands
                XU316-->>MCU: Respond to business commands
            end
        end
    end

2.2 Detailed Startup Flow Description

  1. XU316 sends start-up command (command 0x00) to MCU at startup, including:
    • UAC1.0 VID/PID
    • UAC2.0 VID/PID
    • Basic info CRC
    • Power-on config info CRC
  2. MCU receives startup command, checks if info needs updating, and sends corresponding reply
  3. XU316 waits for MCU response
  4. If timeout with no response, XU316 resends startup command up to 4 times
  5. If still no response, directly loads default USB configuration and enumerates USB
  6. If normal response received, XU316 parses startup options

Execution Condition: Startup options include 0x01 (update basic product info)

Steps:

  1. XU316 sends 0x01 command to request reading basic product info
  2. MCU returns new basic product info to XU316
  3. XU316 updates and saves configuration to internal storage

Execution Condition: Startup options include 0x02 (update power-on config) or Flash data is incomplete

Steps:

  1. XU316 sends 0x02 command to request getting power-on configuration
  2. MCU returns new power-on configuration to XU316
  3. XU316 updates and saves configuration to internal storage

Steps:

  1. XU316 sends 0x03 command to get current input/output mode
  2. MCU returns current mode info to XU316
  3. XU316 loads corresponding input/output mode based on returned mode

Steps:

  1. XU316 sends 0x04 command to get current user configuration
  2. MCU returns current user configuration to XU316
  3. XU316 initializes application and applies related configuration
  4. XU316 sends 0x05 command to indicate startup complete
  5. MCU returns confirmation response

3. Protocol Command Set

3.1 Command Classification Overview

Command Command Description Direction
0x00 Start-up XU316→MCU
0x01 Read product info XU316→MCU
0x02 Read power-on config info XU316→MCU
0x03 Get current input/output mode XU316→MCU
0x04 Get current user configuration XU316→MCU
0x05 Startup complete command XU316→MCU
Command Command Description Direction
0x20 Report application status XU316→MCU
0x21 Media control MCU→XU316
0x22 Report playback audio stream format and type XU316→MCU
0x23 Set input/output mode MCU→XU316
0x24 XU316 send playback volume XU316→MCU
0x25 Send recording volume XU316→MCU
0x26 Switch MCLK MCU→XU316
0x27 Set unmute MCU→XU316
0x28 Send audio format time delay MCU→XU316
0x29 Report USB connection status XU316→MCU
0x30 Set Mute pin inversion MCU→XU316
0x31 Get current audio format MCU→XU316
Command Command Description Direction
0xEE HID-initiated command passed through XU316 to MCU XU316→MCU
Command Command Description Direction
0xF0 DAC configuration selection command MCU→XU316
0xF1 Get firmware version command MCU→XU316
0xF3 Query complete version number MCU→XU316

Command Usage Instructions

  1. All commands must follow basic frame format specification
  2. Each command requires recipient acknowledgment for successful execution
  3. Business control commands (0x20 and above) can only be used after device startup complete

Business Command Details Are Organized by Functional Domain

Different product firmwares support different business command subsets. Startup and basic commands (0x00-0x05) are detailed in section 3.2 of this chapter; byte-level details of business commands are organized by functional domain in the command reference pages, and are also embedded in the "Product Control Commands" chapter of product datasheets:

3.2 Basic Function Command Details

3.2.1 Start-up (0x00)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x00
Data Length:   1 byte  - 17
Data:         17 bytes
              B0:     Restart reason (0x00 power-on restart, 0x01 mode switch restart, 0xFF other reason)
              B1-2:   USB Vendor ID (UAC1.0)
              B3-4:   USB Product ID (UAC1.0)
              B5-6:   USB Vendor ID (UAC2.0)
              B7-8:   USB Product ID (UAC2.0)
              B9-12:  Basic info 32-bit CRC
              B13-16: Power-on config info 32-bit CRC
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  - 0x00
Data Length:   1 byte  - 0x1
Data:          1 byte
              B0: Startup options
                  0x00 Use all default info
                  0x01 Need to update basic product info
                  0x02 Need to update power-on config info
                  0x04 Need to update other config info
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  1. This command is sent first by XU316 after power-on or restart to notify MCU that device has started
  2. XU316 sends currently stored product info CRC and config info CRC to MCU
  3. MCU compares CRC to determine if XU316 config info needs updating
  4. MCU notifies XU316 of subsequent operations to execute through startup options field in response
flowchart TB
    A[XU316 Startup] -->B[Send 0x00 Command]
    B -->C{MCU Response}
    C -->|Timeout| D[Resend Command]
    D -->E{Retry Count<4?}
    E -->|Yes| C
    E -->|No| F[Use Default Configuration]
    C -->|Normal Response| G[Parse Startup Options]
    G -->|0x01| H[Update Basic Product Info]
    G -->|0x02| I[Update Power-On Config Info]
    G -->|0x04| J[Update Other Config Info]
    G -->|0x00| K[Continue Startup Flow]
  • If MCU has no response, XU316 will use stored default configuration to continue startup
  • Restart reason field can be used by MCU to identify specific reason for XU316 restart for different handling
  • When multiple info items need updating, MCU can combine multiple options through bit operations

Command Example

55 AA 03 00 01 03 06

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 returned by MCU to XU316
Command 1 byte 00 Current command is “Start-up”
Data Length 1 byte 01 One data byte follows
Startup options 1 byte 03 0x01 + 0x02 are both set: update basic product info and power-on config info
Checksum 1 byte 06 Sum of all bytes from 55 to 03, modulo 256

3.2.2 Read Product Info (0x01)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x01
Data Length:   1 byte  - 0x00
Data:          0 bytes
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  - 0x01
Data Length:   1 byte  - 0x3C (60 bytes)
Data:         60 bytes - Product basic info, see data field description
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to get basic product info such as VID/PID, product name, etc.
  • Execution condition: Startup options include 0x01 flag or product info CRC mismatch
  • After receiving this info, XU316 will update internally stored product basic info

Product basic info data structure (60 bytes):

VID1 (UAC1.0):        2 bytes
PID1 (UAC1.0):        2 bytes
VID2 (UAC2.0):        2 bytes
PID2 (UAC2.0):        2 bytes
ManufactureName:     16 bytes (string)
ProductName:         16 bytes (string)
SerialNumber:        16 bytes (string)
CRC:                  4 bytes (32-bit CRC checksum)

Command Example

55 AA 03 01 3C 20 B1 00 17 20 B1 00 16 50 48 41 54 45 4E 00 00 00 00 00 00 00 00 00 00 58 55 33 31 36 20 44 41 43 00 00 00 00 00 00 00 53 4E 32 34 30 30 30 31 00 00 00 00 00 00 00 00 27 2B F6 44 51

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 returned by MCU to XU316
Command 1 byte 01 Current command is “Read Product Info”
Data Length 1 byte 3C 60 data bytes follow
VID1 2 bytes 20 B1 USB VID for UAC1.0
PID1 2 bytes 00 17 USB PID for UAC1.0
VID2 2 bytes 20 B1 USB VID for UAC2.0
PID2 2 bytes 00 16 USB PID for UAC2.0
ManufactureName 16 bytes 50 48 41 54 45 4E 00 00 00 00 00 00 00 00 00 00 ASCII string PHATEN, padded with 00 to 16 bytes
ProductName 16 bytes 58 55 33 31 36 20 44 41 43 00 00 00 00 00 00 00 ASCII string XU316 DAC, padded with 00 to 16 bytes
SerialNumber 16 bytes 53 4E 32 34 30 30 30 31 00 00 00 00 00 00 00 00 ASCII string SN240001, padded with 00 to 16 bytes
CRC 4 bytes 27 2B F6 44 32-bit CRC for product basic info (little-endian, example only)
Checksum 1 byte 51 Sum of all bytes from 55 to 44, modulo 256

3.2.3 Read Power-On Config Info (0x02)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x02
Data Length:   1 byte  - 0x00
Data:          0 bytes - No data
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  - 0x02
Data Length:   1 byte  - 0x0E (14 bytes)
Data:         14 bytes - Power-on config info, see section 4.1-Power-On Config Info
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to get initial power-on configuration info
  • Execution condition: Startup options include 0x02 flag or power-on config CRC mismatch
  • XU316 will set default input/output mode, volume and other parameters based on this config info

Power-on config info data structure (14 bytes):

Default input/output mode:       5 bytes
Mute time:                       2 bytes (0-65535ms)
Microphone default volume:       1 byte
DAC left channel default volume: 1 byte
DAC right channel default volume:1 byte
CRC:                             4 bytes (32-bit CRC checksum)

Command Example

55 AA 03 02 0E 01 00 00 00 00 01 2C 20 30 30 C1 7A 1E 1A 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 returned by MCU to XU316
Command 1 byte 02 Current command is “Read Power-On Config Info”
Data Length 1 byte 0E 14 data bytes follow
Default input/output mode 5 bytes 01 00 00 00 00 Example mode data; each byte definition depends on product specification
Mute time 2 bytes 01 2C 300ms in big-endian encoding
Microphone default volume 1 byte 20 Example default microphone volume
DAC left channel default volume 1 byte 30 Example default left channel volume
DAC right channel default volume 1 byte 30 Example default right channel volume
CRC 4 bytes C1 7A 1E 1A 32-bit CRC for power-on config (little-endian, example only)
Checksum 1 byte 33 Sum of all bytes from 55 to 1A, modulo 256

3.2.4 Get Current Input/Output Mode (0x03)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x03
Data Length:   1 byte  - 0x00
Data:          0 bytes
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  - 0x03
Data Length:   1 byte  - 0x05 (5 bytes)
Data:          5 bytes - Input/output mode, see data field section
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 at startup to query currently enabled input/output mode
  • XU316 will load corresponding application firmware based on returned mode
  • This command is used for mode matching and confirmation during device startup

Command Example

55 AA 03 03 05 01 00 00 00 00 0B

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 returned by MCU to XU316
Command 1 byte 03 Current command is “Get Current Input/Output Mode”
Data Length 1 byte 05 5 data bytes follow
Input/output mode 5 bytes 01 00 00 00 00 Example mode data; definitions depend on product specification
Checksum 1 byte 0B Sum of all bytes from 55 to the last mode byte, modulo 256

3.2.5 Get Current User Configuration (0x04)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x04
Data Length:   1 byte  - 0x00
Data:          0 bytes
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  - 0x04
Data Length:   1 byte  - 0xE (14 bytes)
Data:         14 bytes - User config parameters, see section 4.1-User Config Parameters
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command is used by XU316 to get currently user-selected volume, mode and other configurations
  • Executed after application firmware loaded, before application startup
  • Application will initialize corresponding parameters based on returned info

Command Example

55 AA 03 04 0E 02 00 00 00 00 00 C8 18 28 28 3A 8A 5B 2E 93

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 returned by MCU to XU316
Command 1 byte 04 Current command is “Get Current User Configuration”
Data Length 1 byte 0E 14 data bytes follow
Input/output mode 5 bytes 02 00 00 00 00 Example current user-selected mode data; definitions depend on product specification
Mute time 2 bytes 00 C8 200ms in big-endian encoding
Microphone volume 1 byte 18 Example current microphone volume
DAC left channel volume 1 byte 28 Example current left channel volume
DAC right channel volume 1 byte 28 Example current right channel volume
CRC 4 bytes 3A 8A 5B 2E 32-bit CRC for user configuration (little-endian, example only)
Checksum 1 byte 93 Sum of all bytes from 55 to 2E, modulo 256

3.2.6 Startup Complete Command (0x05)

XU316 Sends

Frame Header:  2 bytes - 0x55aa
Version:       1 byte  - 0x00
Command:       1 byte  - 0x05
Data Length:   1 byte  - N
Data:          N bytes
              B0: Startup status (0 startup success, 1 mode mismatch, other values startup failure)
              B1-BN: 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  - 0x05
Data Length:   1 byte  - 0x00
Data:          0 bytes
Checksum:      1 byte  - Sum of all bytes from frame header, modulo 256

  • This command indicates XU316 startup flow has completed and can begin normal operation
  • Contains startup status info to notify MCU if startup succeeded or encountered problems
  • All subsequent business commands can only be used after this command is successfully sent

Command Example

55 AA 03 05 00 07

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 05 Acknowledges “Startup Complete Command”
Data Length 1 byte 00 Pure acknowledgment frame with no data
Checksum 1 byte 07 Sum of all bytes from 55 to 00, modulo 256

4. Data Structure Definitions

4.1 Product Configuration Data Structures

Field Byte Count Description
VID1 2 USB Vendor ID (UAC1.0)
PID1 2 USB Product ID (UAC1.0)
VID2 2 USB Vendor ID (UAC2.0)
PID2 2 USB Product ID (UAC2.0)
ManufactureName 16 USB Manufacture Name (string, max 16 bytes)
ProductName 16 USB Product Name (string, max 16 bytes)
SerialNumber 16 Product Serial Number (string, max 16 bytes)
CRC 4 32-bit CRC checksum calculated for all fields

CRC Usage Notes

MCU can determine if product basic info needs updating based on CRC value returned by XU316. When CRC mismatch occurs, should send complete product basic info.

Field Byte Count Description
Default input/output mode 5 See input/output mode field description
Mute time 2 0-65535 (ms)
Microphone default volume 1 See microphone volume field description
DAC left channel default volume 1 See DAC volume field description
DAC right channel default volume 1 See DAC volume field description
CRC 4 32-bit CRC checksum calculated for all fields
Field Byte Count Description
Input/output mode 5 See input/output mode field description
Mute time 2 0-65535 (ms)
Microphone volume 1 See microphone volume field description
DAC left channel volume 1 See DAC volume field description
DAC right channel volume 1 See DAC volume field description
CRC 4 32-bit CRC checksum calculated for all fields
Field Byte Count Description
Input/output mode 5 See input/output mode field description
Mute time 2 0-65535 (ms)
Microphone volume 1 See microphone volume field description
DAC left channel volume 1 See DAC volume field description
DAC right channel volume 1 See DAC volume field description
CRC 4 32-bit CRC checksum calculated for all fields

4.2 Input/Output Mode Data Format

Byte Function Description
BYTE 0-BYTE4 Specific value definitions refer to product specification

4.3 Control Parameter Data Formats

Value Description
0x00 Power-on restart
0x01 Mode switch restart
0xFF Other reason restart
Value Description
0x00 Default mode, use power-on config info parameters at startup
0x01 Power-off memory mode, use user config parameters from MCU at startup

Microphone Volume

Value Description
0xFF Mute
0x00-0xFE Volume value, specific mapping defined by application

DAC Volume

Value Description
0x00 Mute
0x01-0xFF Volume value, specific mapping defined by application
Value Format Sample Rate
0x00 AUDIO_44100 44.1kHz
0x01 AUDIO_48000 48kHz
0x02 AUDIO_88200 88.2kHz
0x03 AUDIO_96000 96kHz
0x04 AUDIO_176400 176.4kHz
0x05 AUDIO_192000 192kHz
0x06 AUDIO_352800 352.8kHz
0x07 AUDIO_384000 384kHz
0x08 AUDIO_705600 705.6kHz
0x09 AUDIO_768000 768kHz
0x0A AUDIO_1441200 1.4112MHz
0x0B AUDIO_1536000 1.536MHz
0x0C AUDIO_32000 32kHz
0x0D AUDIO_64000 64kHz
0x0E AUDIO_128000 128kHz
0x0F AUDIO_256000 256kHz
0x10 AUDIO_512000 512kHz
0x11 AUDIO_DSD_64 DSD64
0x12 AUDIO_DSD_128 DSD128
0x13 AUDIO_DSD_256 DSD256
0x14 AUDIO_DSD_512 DSD512
0x15 AUDIO_DSD_1024 DSD1024
0xFF AUDIO_NO_USED Not used
Value Type Description
0x00 PCM Standard PCM audio
0x01 DoP Reserved
0x02 MQA MQA encoded audio
0x03 MQB MQB encoded audio
0x04 MQA_Studio MQA Studio encoding
0x05 DSD Native DSD encoded audio

5. Consultation and Feedback

Click to expand consultation and feedback form
×

Notice

Company Name:

Email Address:

Subject:

Message: