746 lines
27 KiB
Markdown
746 lines
27 KiB
Markdown
|
|
---
|
||
|
|
title: XMOS XU316 HiFi USB Decoder ZeroCode Firmware Configuration Protocol
|
||
|
|
---
|
||
|
|
|
||
|
|
# XMOS XU316 HiFi USB Decoder ZeroCode Firmware Configuration Protocol
|
||
|
|
|
||
|
|
## I. 💡 ZeroCode Firmware Functional Scope
|
||
|
|
|
||
|
|
* The firmware focuses exclusively on audio-related functions and does not handle buttons, indicators, or other functions unrelated to core functionality.
|
||
|
|
* Other user interaction features are managed by the MCU.
|
||
|
|
* MCU and XU316 communicate bidirectionally via UART for command and data exchange.
|
||
|
|
* The firmware communicates with the computer via HID.
|
||
|
|
|
||
|
|
## II. XU316 and MCU Configuration Protocol
|
||
|
|
|
||
|
|
### 1. Low-Level Protocol
|
||
|
|
Based on UART (Universal Asynchronous Receiver/Transmitter) protocol
|
||
|
|
|
||
|
|
#### Terminology
|
||
|
|
| Term | Description |
|
||
|
|
|---------------|--------------------|
|
||
|
|
| Baud Rate | 115200 bps |
|
||
|
|
| Data Bits | 8 |
|
||
|
|
| Parity | None |
|
||
|
|
| Stop Bits | 1 |
|
||
|
|
| Flow Control | None |
|
||
|
|
|
||
|
|
### 2. Frame Format
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|----------|--------|-----------------------------------------|
|
||
|
|
| Header | 2 | Fixed as 0x55aa |
|
||
|
|
| Version | 1 | Protocol version number |
|
||
|
|
| Command | 1 | Indicates the frame's function |
|
||
|
|
| Data Length | 2 | Length of subsequent data N |
|
||
|
|
| Data | N | Specific data content |
|
||
|
|
| Checksum | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
> **Notes**
|
||
|
|
> All multi-byte data is transmitted in big-endian format. Examples in the protocol are in hexadecimal.
|
||
|
|
|
||
|
|
### 3. XU316 Startup Sequence and MCU Interaction Process
|
||
|
|
|
||
|
|
#### 3.1 Power-on Startup and Startup Options Phase (Only runs during manual power-on startup)
|
||
|
|
|
||
|
|
**Steps**:
|
||
|
|
|
||
|
|
1. XU316 startup sends a start command (command 0x00) to the MCU, including UAC1.0 VID/PID, UAC2.0 VID/PID, basic information CRC, and power-on configuration CRC.
|
||
|
|
2. MCU receives the startup command, checks whether basic information and power-on configuration need to be updated, and sends the corresponding response to XU316. XU316 waits for MCU to respond to startup for up to 3 seconds.
|
||
|
|
3. If no response is received within 300ms, XU316 resends the startup command up to 4 times. If no response is received after 4 attempts, it loads the default USB configuration and enumerates USB.
|
||
|
|
4. MCU responds to the startup command to XU316, including startup options.
|
||
|
|
5. XU316 parses the startup options.
|
||
|
|
|
||
|
|
|
||
|
|
#### 3.2 Basic Information Update Phase (Only runs during manual power-on startup)
|
||
|
|
Condition: Startup options include 0x01 (Update basic product information)
|
||
|
|
|
||
|
|
1. XU316 requests to read basic product information, sends command 0x01
|
||
|
|
2. MCU returns new basic product information to XU316.
|
||
|
|
3. XU316 updates and saves the configuration.
|
||
|
|
|
||
|
|
#### 3.3 Power-on Configuration Acquisition Phase (Only runs during manual power-on startup)
|
||
|
|
Condition: Startup options include 0x02 (Update power-on configuration) or data read from Flash is incomplete.
|
||
|
|
|
||
|
|
1. XU316 requests to get power-on configuration. Sends command 0x02
|
||
|
|
2. MCU returns new power-on configuration to XU316.
|
||
|
|
3. XU316 updates and saves the configuration.
|
||
|
|
|
||
|
|
#### 3.4 Loading Application Firmware Phase
|
||
|
|
Steps:
|
||
|
|
|
||
|
|
1. XU316 gets the current mode, sends command 0x03.
|
||
|
|
2. MCU returns the current mode to XU316.
|
||
|
|
3. XU316 loads the corresponding mode based on the current mode.
|
||
|
|
|
||
|
|
#### APP Running Phase
|
||
|
|
Steps:
|
||
|
|
|
||
|
|
1. XU316 gets the current user configuration (volume, etc.), command 0x04.
|
||
|
|
2. MCU returns the current user configuration to XU316.
|
||
|
|
3. XU316 initializes the APP and applies the current user configuration.
|
||
|
|
4. XU316 sends a startup completion command to MCU, command 0x05.
|
||
|
|
5. MCU returns a completion command response to XU316.
|
||
|
|
|
||
|
|
### 4. Command List
|
||
|
|
|
||
|
|
| Command | Description |
|
||
|
|
|--------|---------------------------------------------|
|
||
|
|
| 0x00 | Start Startup |
|
||
|
|
| 0x01 | Read Product Information |
|
||
|
|
| 0x02 | Read Power-on Configuration Information |
|
||
|
|
| 0x03 | Get Current Audio Mode |
|
||
|
|
| 0x04 | Get Current User Configuration |
|
||
|
|
| 0x05 | Startup Completion Command |
|
||
|
|
| 0x20 | Report Application Status |
|
||
|
|
| 0x21 | Media Control |
|
||
|
|
| 0x22 | Set Playback Audio Stream Format and Type |
|
||
|
|
| 0x23 | Set Audio Mode |
|
||
|
|
| 0x24 | Send Playback Volume |
|
||
|
|
| 0x25 | Send Recording Volume |
|
||
|
|
| 0x01 | HID Start MCU OTA Upgrade Command |
|
||
|
|
| 0x02 | HID Send MCU Upgrade Data Packet |
|
||
|
|
| 0x03 | HID Send MCU Upgrade End Packet |
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
> **Notes:**
|
||
|
|
>
|
||
|
|
> 1. All commands must follow the basic frame format
|
||
|
|
> 2. Some commands require confirmation response from the other party
|
||
|
|
> 3. Certain commands can only be used under specific conditions (such as OTA-related commands)
|
||
|
|
> 4. Command response timeout is typically 5 seconds
|
||
|
|
> 5. Application commands should be sent only after XU316 startup commands are completed
|
||
|
|
|
||
|
|
### 5. Protocol Mechanism
|
||
|
|
|
||
|
|
#### 5.1 Confirmation Mechanism
|
||
|
|
|
||
|
|
- All commands require a confirmation reply from the other party
|
||
|
|
- Default command timeout is 5 seconds, after which it's considered failed, unless otherwise specified
|
||
|
|
|
||
|
|
|
||
|
|
### 6. Business Protocol
|
||
|
|
|
||
|
|
#### 6.1 Basic Function Commands
|
||
|
|
|
||
|
|
##### 6.1.1 Start Startup (Command: 0x00)
|
||
|
|
|
||
|
|
###### XU316 Sends:
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|----------|-----|-------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x00 |
|
||
|
|
| **Command** | 1 | 0x00 |
|
||
|
|
| **Data Length** | 1 | 17 |
|
||
|
|
| **Data** | 17 | B0 Restart Reason: 0x00 Power-on restart, 0x01 Mode switch restart, 0xFF Other reason restart |
|
||
|
|
| | | B1-2 unsigned short VID (UAC1.0) |
|
||
|
|
| | | B3-4 unsigned short PID (UAC1.0) |
|
||
|
|
| | | B5-6 unsigned short VID (UAC2.0) |
|
||
|
|
| | | B7-8 unsigned short PID (UAC2.0) |
|
||
|
|
| | | B9-12 unsigned int Basic information 32bit CRC |
|
||
|
|
| | | B13-16 unsigned int Power-on configuration 32bit CRC |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
|
||
|
|
###### MCU Response Field Description
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|----------|-----|--------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x00 |
|
||
|
|
| **Data Length** | 1 | 0x1 |
|
||
|
|
| **Data** | 1 | B0 Startup options, see Data Field Description section; 0x00 Use all default information; 0x01 Update basic product information is required; 0x02 Update power-on configuration information is required; 0x04 Update other configuration information is required. |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
##### 6.1.2 Read Product Information (Command: 0x01)
|
||
|
|
|
||
|
|
##### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x00 |
|
||
|
|
| **Command** | 1 | 0x01 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
##### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x01 |
|
||
|
|
| **Data Length**| 1 | 0x3C (60 bytes) |
|
||
|
|
| **Data** | 60 | Basic product information, see Business Information section |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.1.3 Read Power-on Configuration Information (Command: 0x02)
|
||
|
|
|
||
|
|
##### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x00 |
|
||
|
|
| **Command** | 1 | 0x02 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data, indicating no additional information transmission |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
##### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x02 |
|
||
|
|
| **Data Length**| 1 | 0x0E (14 bytes) |
|
||
|
|
| **Data** | 14 | Power-on configuration information, see Business Information section |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.1.4 Get Current Audio Mode (Command: 0x03)
|
||
|
|
|
||
|
|
##### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x00 |
|
||
|
|
| **Command** | 1 | 0x03 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data, indicating no additional information transmission |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
##### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x03 |
|
||
|
|
| **Data Length**| 1 | 0x05 (5 bytes) |
|
||
|
|
| **Data** | 5 | Audio mode, see Data Field section |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
##### 6.1.5 Get Current User Configuration (Command: 0x04)
|
||
|
|
|
||
|
|
###### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x00 |
|
||
|
|
| **Command** | 1 | 0x04 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data, indicating no additional information transmission |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
###### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x04 |
|
||
|
|
| **Data Length**| 1 | 0x14 (20 bytes) |
|
||
|
|
| **Data** | 14 | User configuration parameters, see Business Information section |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.1.6 Startup Completion Command (Command: 0x05)
|
||
|
|
|
||
|
|
##### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x00 |
|
||
|
|
| **Command** | 1 | 0x05 |
|
||
|
|
| **Data Length**| 1 | 0x15 (21 bytes) |
|
||
|
|
| **Data** | 15 | Startup status and application running parameters |
|
||
|
|
| | | B0: 0 Startup successful, 1 Mode mismatch, other values Startup failed |
|
||
|
|
| | | B1-BN: Application running parameters, see Business Information Description |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
##### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x05 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2 Business Control and Query Commands (Can only be sent after startup is complete)
|
||
|
|
#### 6.2.1 Report Application Status (Command: 0x20)
|
||
|
|
|
||
|
|
#### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x00 |
|
||
|
|
| **Command** | 1 | 0x20 |
|
||
|
|
| **Data Length**| 1 | 0x14 (20 bytes) |
|
||
|
|
| **Data** | 14 | Application running parameters, see **Business Information Description** |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x20 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2.2 Media Control (Command: 0x21)
|
||
|
|
|
||
|
|
#### MCU Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|---------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x21 |
|
||
|
|
| **Data Length**| 1 | 0x01 (1 byte) |
|
||
|
|
| **Data** | 1 | Media control command, see media control field |
|
||
|
|
| | | 0x00 Volume+ / **Vol Up** |
|
||
|
|
| | | 0x01 Volume- / **Vol Down** |
|
||
|
|
| | | 0x02 Play / **PLAY** |
|
||
|
|
| | | 0x03 Next / **NEXT** |
|
||
|
|
| | | 0x04 Previous / **PREV** |
|
||
|
|
| | | 0x05 Fast Forward / **FORWARD** |
|
||
|
|
| | | 0x06 Rewind / **REWIND** |
|
||
|
|
| | | 0x07 Mute / **MUTE** |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### XU316 Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x01 |
|
||
|
|
| **Command** | 1 | 0x21 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2.3 Set Playback Audio Stream Format and Type (Command: 0x22)
|
||
|
|
|
||
|
|
#### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x22 |
|
||
|
|
| **Data Length**| 1 | 0x02 (2 bytes) |
|
||
|
|
| **Data** | 2 | Audio stream format and type, see **Audio Stream Format and Type Field** |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x01 |
|
||
|
|
| **Command** | 1 | 0x22 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2.4 Set Audio Mode (Command: 0x23)
|
||
|
|
|
||
|
|
#### MCU Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x23 |
|
||
|
|
| **Data Length**| 1 | 0x05 (5 bytes) |
|
||
|
|
| **Data** | 5 | Audio mode, see **Audio Mode Field** |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### XU316 Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x01 |
|
||
|
|
| **Command** | 1 | 0x23 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2.5 Send Playback Volume (Command: 0x24)
|
||
|
|
|
||
|
|
#### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|------------|-----|-------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x24 |
|
||
|
|
| **Data Length**| 1 | 0x02 (2 bytes) |
|
||
|
|
| **Data** | 2 | Left channel: 0xFF Mute, 0-0dB -127: -127dB |
|
||
|
|
| | | Right channel: 0xFF Mute, 0-0dB -127: -127dB |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x01 |
|
||
|
|
| **Command** | 1 | 0x24 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2.6 Send Recording Volume (Command: 0x25)
|
||
|
|
|
||
|
|
#### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|----------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x03 |
|
||
|
|
| **Command** | 1 | 0x25 |
|
||
|
|
| **Data Length**| 1 | 0x01 (1 byte) |
|
||
|
|
| **Data** | 1 | 0xFF Mute, 0-0dB -127: -127dB |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|----------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0x55aa |
|
||
|
|
| **Version** | 1 | 0x01 |
|
||
|
|
| **Command** | 1 | 0x25 |
|
||
|
|
| **Data Length**| 1 | 0x00 |
|
||
|
|
| **Data** | 0 | No data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2.7 Switch MCLK (Command Word: 0x26)
|
||
|
|
|
||
|
|
#### XU316 sends:
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
| ------------ | ---------- | --------------------------------------------------------- |
|
||
|
|
| Frame Header | 2 | 0x55aa |
|
||
|
|
| Version | 1 | 0x03 |
|
||
|
|
| Command Word | 1 | 0x26 |
|
||
|
|
| Data Length | 1 | 1 |
|
||
|
|
| Data | 1 | 0: Internal MCLK 1: External MCLK |
|
||
|
|
| Checksum | 1 | Sum from the frame header byte by byte, result modulo 256 |
|
||
|
|
|
||
|
|
#### MCU returns:
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
| ------------ | ---------- | --------------------------------------------------------- |
|
||
|
|
| Frame Header | 2 | 0x55aa |
|
||
|
|
| Version | 1 | 0x01 |
|
||
|
|
| Command Word | 1 | 0x26 |
|
||
|
|
| Data Length | 1 | 0 |
|
||
|
|
| Data | 0 | None |
|
||
|
|
| Checksum | 1 | Sum from the frame header byte by byte, result modulo 256 |
|
||
|
|
|
||
|
|
#### 6.2.8 Test Command (Command Word: 0xF0)
|
||
|
|
|
||
|
|
#### XU316 sends:
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
| ------------ | ---------- | ------------------------------------------------------------ |
|
||
|
|
| Frame Header | 2 | 0x55aa |
|
||
|
|
| Version | 1 | 0x03 |
|
||
|
|
| Command Word | 1 | 0xF0 |
|
||
|
|
| Data Length | 1 | 4 |
|
||
|
|
| Data | 4 | Byte 0: 0: Enable I2C config DAC 1: Disable I2C config DAC Byte 1 - 2: reserved |
|
||
|
|
| Checksum | 1 | Sum from the frame header byte by byte, result modulo 256 |
|
||
|
|
|
||
|
|
#### MCU returns:
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
| ------------ | ---------- | --------------------------------------------------------- |
|
||
|
|
| Frame Header | 2 | 0x55aa |
|
||
|
|
| Version | 1 | 0x01 |
|
||
|
|
| Command Word | 1 | 0x26 |
|
||
|
|
| Data Length | 1 | 0 |
|
||
|
|
| Data | 0 | None |
|
||
|
|
| Checksum | 1 | Sum from the frame header byte by byte, result modulo 256 |
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#### 6.3 MCU OTA Upgrade Commands (Pass-through Mode)
|
||
|
|
|
||
|
|
#### 6.3.1 HID Start MCU OTA Upgrade Command
|
||
|
|
|
||
|
|
#### XU316 Sends: (HID Report ID1 Output Report 40 bytes)
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|---------------------|
|
||
|
|
| **Header** | 2 | 0xaa55 |
|
||
|
|
| **Control Byte** | 1 | 0x01 |
|
||
|
|
| **Extended Bytes**| 3 | FileSize |
|
||
|
|
| **FileSize**| 1 | Length of data in the data field |
|
||
|
|
| **Data** | 32 | Default 0 (this field is for possible extension data) |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-----------------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0xaa55 |
|
||
|
|
| **Control Byte** | 1 | 0x01 |
|
||
|
|
| **Data** | 4 | |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.3.2 HID Send MCU Upgrade Data Packet
|
||
|
|
|
||
|
|
#### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|-------------------------------------|
|
||
|
|
| **Header** | 2 | 0xaa55 |
|
||
|
|
| **Control Byte** | 1 | 0x02 |
|
||
|
|
| **Extended Bytes**| 3 | **address**: Indicates the address of the upgrade data (typically used to specify upgrade location or block) |
|
||
|
|
| **Data Length**| 1 | Length of data in the data field |
|
||
|
|
| **Data** | 32 | data |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|------------------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0xaa55 |
|
||
|
|
| **Control Byte** | 1 | 0x02 |
|
||
|
|
| **Data** | 4 | |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### 6.3.3 HID Send MCU Upgrade End Packet
|
||
|
|
|
||
|
|
#### XU316 Sends
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|------------------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0xaa55 |
|
||
|
|
| **Control Byte** | 1 | 0x03 |
|
||
|
|
| **Extended Bytes**| 3 | Reserved (default 0) |
|
||
|
|
| **Data Length**| 1 | Length of data in the data field |
|
||
|
|
| **Data** | 32 | Reserved (default 0) |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
#### MCU Response
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------|--------|------------------------------------------------------------|
|
||
|
|
| **Header** | 2 | 0xaa55 |
|
||
|
|
| **Control Byte** | 1 | 0x03 |
|
||
|
|
| **Data** | 4 | |
|
||
|
|
| **Checksum** | 1 | Sum of all bytes from header, modulo 256 |
|
||
|
|
|
||
|
|
### 7. Business Information
|
||
|
|
|
||
|
|
#### 7.1 Basic Product Information
|
||
|
|
|
||
|
|
| Field | Bytes | 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 (VID1, PID1, VID2, PID2, ManufactureName, ProductName, SerialNumber) |
|
||
|
|
|
||
|
|
The MCU can determine whether to update the basic product information based on the CRC returned by the XU316.
|
||
|
|
|
||
|
|
#### 7.2 Power-on Configuration Information
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------------------|--------|-----------------------------------------------|
|
||
|
|
| **Default Audio Mode** | 5 | See Audio 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 (Default Audio Mode, Mute Time, Microphone Volume, DAC Left/Right Channel Volume) |
|
||
|
|
|
||
|
|
The MCU can determine whether to update the power-on configuration information based on the CRC returned by the XU316.
|
||
|
|
|
||
|
|
#### 7.3 Application Running Parameters
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------------------|--------|-----------------------------------------------|
|
||
|
|
| **Audio Mode** | 5 | See Audio 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 (Audio Mode, Mute Time, Microphone Volume, DAC Left/Right Channel Volume) |
|
||
|
|
|
||
|
|
#### 7.4 User Configuration Parameters
|
||
|
|
|
||
|
|
| Field | Bytes | Description |
|
||
|
|
|-------------------------|--------|-----------------------------------------------|
|
||
|
|
| **Audio Mode** | 5 | See Audio 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 (Audio Mode, Mute Time, Microphone Volume, DAC Left/Right Channel Volume) |
|
||
|
|
|
||
|
|
### 8. Data Field Description
|
||
|
|
|
||
|
|
#### 8.1 Restart Reason
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|-------------------------------|
|
||
|
|
| 1 byte | 0x00 Power-on restart |
|
||
|
|
| | 0x01 Mode switch restart |
|
||
|
|
| | 0xFF Other reason restart |
|
||
|
|
|
||
|
|
#### 8.2 Startup Options
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|-------------------------------|
|
||
|
|
| 1 byte | 0x00 Use all default information |
|
||
|
|
| | 0x01 Need to update basic product information |
|
||
|
|
| | 0x02 Need to update power-on configuration information |
|
||
|
|
| | 0x04 Need to update IO configuration information |
|
||
|
|
|
||
|
|
#### 8.3 Audio Mode
|
||
|
|
|
||
|
|
| Length | Function Bit | Description |
|
||
|
|
|----------|------|----------------------------------------------------|
|
||
|
|
| 6 bytes | | |
|
||
|
|
| BYTE 0 | Bit 7 | I2S Mode: 0: Master, 1: Slave |
|
||
|
|
| | Bit 6 | Sync Mode: 0: Async, 1: Sync |
|
||
|
|
| | Bit 5 | MIDI: 0: disable, 1: enable |
|
||
|
|
| | Bit 4 | SPDIF in: 0: disable, 1: enable |
|
||
|
|
| | Bit 3 | SPDIF out: 0: disable, 1: enable |
|
||
|
|
| | Bit 2 | ADAT in: 0: disable, 1: enable |
|
||
|
|
| | Bit 1 | ADAT out: 0: disable, 1: enable |
|
||
|
|
| | Bit 0 | DSD out: 0: disable, 1: enable |
|
||
|
|
| BYTE 1 | Bit 0-3 | AUDIO Sample Rate: |
|
||
|
|
| | | 0: 44.1KHz, 1: 48KHz, 2: 88.2KHz, 3: 96KHz, |
|
||
|
|
| | | 4: 176.4KHz, 5: 192KHz, 6: 352.8KHz, 7: 384KHz, |
|
||
|
|
| | | 8: 705.6KHz, 9: 768KHz, 10: 1411.2KHz, 11: 1536KHz |
|
||
|
|
| | Bit 4 | MQA: 0: disable, 1: enable |
|
||
|
|
| | Bit 5 | Audio Class: 0: UAC 1.0, 1: USB UAC 2.0 |
|
||
|
|
| | Bit 6-7 | AUDIO WIDTH: 0: 16bit, 1: 24bit, 2: 32bit |
|
||
|
|
| BYTE 2-3 | Bit 0-5 | Input: 0: disable, x(>0): channel count |
|
||
|
|
| | Bit 6-11 | Output: 0: disable, x(>0): channel count |
|
||
|
|
| | Bit 12-15 | Other cfg |
|
||
|
|
| BYTE 4 | | 0: USB MODE, 1: OPT MODE, 2: COAX MODE, 3: BT MODE, |
|
||
|
|
| | | 4: HDMI ARC MODE, 5: WIFI MODE, 6: AIRPLAY MODE, 7: SPOTIFY MODE |
|
||
|
|
|
||
|
|
#### 8.4 Microphone Volume
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|--------------------------------------------|
|
||
|
|
| 1 byte | 0xFF Mute |
|
||
|
|
| | 0x00-0xFE Defined by MCU and HID application |
|
||
|
|
|
||
|
|
#### 8.5 DAC Volume
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|--------------------------------------------|
|
||
|
|
| 1 byte | 0x00 Mute |
|
||
|
|
| | 0x01-0xFF Defined by MCU and HID application |
|
||
|
|
|
||
|
|
#### 8.6 Power-on Mode
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|------------------------------------------------------------|
|
||
|
|
| 1 byte | 0x00 Default mode, uses power-on configuration parameters at startup |
|
||
|
|
| | 0x01 Power-off memory mode, uses user configuration parameters from MCU at startup |
|
||
|
|
|
||
|
|
#### 8.7 Media Control (Media Buttons)
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|--------------------------------------|
|
||
|
|
| 1 byte | 0x00 Volume+/Vol Up |
|
||
|
|
| | 0x01 Volume-/Vol Down |
|
||
|
|
| | 0x02 Play/PLAY |
|
||
|
|
| | 0x03 Next/NEXT |
|
||
|
|
| | 0x04 Previous/PREV |
|
||
|
|
| | 0x05 Fast Forward/FORWARD |
|
||
|
|
| | 0x06 Rewind/REWIND |
|
||
|
|
| | 0x07 Mute/MUTE |
|
||
|
|
|
||
|
|
#### 8.8 Audio Stream Format and Type
|
||
|
|
|
||
|
|
#### Audio Stream Format
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|--------------------------------------|
|
||
|
|
| 1 byte | 0x00 AUDIO_PCM_44100 |
|
||
|
|
| | 0x01 AUDIO_PCM_48000 |
|
||
|
|
| | 0x02 AUDIO_PCM_88200 |
|
||
|
|
| | 0x03 AUDIO_PCM_96000 |
|
||
|
|
| | 0x04 AUDIO_PCM_176400 |
|
||
|
|
| | 0x05 AUDIO_PCM_192000 |
|
||
|
|
| | 0x06 AUDIO_PCM_352800 |
|
||
|
|
| | 0x07 AUDIO_PCM_384000 |
|
||
|
|
| | 0x08 AUDIO_PCM_705600 |
|
||
|
|
| | 0x09 AUDIO_PCM_768000 |
|
||
|
|
| | 0x0A AUDIO_PCM_1441200 |
|
||
|
|
| | 0x0B AUDIO_PCM_1536000 |
|
||
|
|
| | 0x0C AUDIO_PCM_32000 |
|
||
|
|
| | 0x0D AUDIO_PCM_64000 |
|
||
|
|
| | 0x0E AUDIO_PCM_128000 |
|
||
|
|
| | 0x0F AUDIO_PCM_256000 |
|
||
|
|
| | 0x10 AUDIO_PCM_512000 |
|
||
|
|
| | 0x11 AUDIO_DSD_64 |
|
||
|
|
| | 0x12 AUDIO_DSD_128 |
|
||
|
|
| | 0x13 AUDIO_DSD_256 |
|
||
|
|
| | 0x14 AUDIO_DSD_512 |
|
||
|
|
| | 0x15 AUDIO_DSD_1024 |
|
||
|
|
| | 0x16 AUDIO_MQA_44100 |
|
||
|
|
| | 0x17 AUDIO_MQA_88200 |
|
||
|
|
| | 0x18 AUDIO_MQA_176400 |
|
||
|
|
| | 0x19 AUDIO_MQA_352800 |
|
||
|
|
| | 0x1A AUDIO_MQA_705600 |
|
||
|
|
| | 0x1B AUDIO_MQA_1411200 |
|
||
|
|
| | 0x1C AUDIO_MQA_2822400 |
|
||
|
|
| | 0x1D AUDIO_MQA_5644800 |
|
||
|
|
| | 0x1E AUDIO_MQA_48000 |
|
||
|
|
| | 0x1F AUDIO_MQA_96000 |
|
||
|
|
| | 0x20 AUDIO_MQA_192000 |
|
||
|
|
| | 0x21 AUDIO_MQA_384000 |
|
||
|
|
| | 0x22 AUDIO_MQA_768000 |
|
||
|
|
| | 0x23 AUDIO_MQA_1536000 |
|
||
|
|
| | 0x24 AUDIO_MQA_3072000 |
|
||
|
|
| | 0x25 AUDIO_MQA_6144000 |
|
||
|
|
| | 0x26 AUDIO_MQA_64000 |
|
||
|
|
| | 0x27 AUDIO_MQA_128000 |
|
||
|
|
| | 0x28 AUDIO_MQA_256000 |
|
||
|
|
| | 0x29 AUDIO_MQA_512000 |
|
||
|
|
| | 0x2A AUDIO_MQA_1024000 |
|
||
|
|
| | 0x2B AUDIO_MQA_2048000 |
|
||
|
|
| | 0x2C AUDIO_MQA_4096000 |
|
||
|
|
| | 0x2D AUDIO_MQA_8192000 |
|
||
|
|
| | 0xFF AUDIO_NO_USED |
|
||
|
|
|
||
|
|
#### Audio Type
|
||
|
|
|
||
|
|
| Length | Description |
|
||
|
|
|-------|--------------------------------------|
|
||
|
|
| 1 byte | 0x00 PCM |
|
||
|
|
| | 0x01 Reserve |
|
||
|
|
| | 0x02 MQA |
|
||
|
|
| | 0x03 MQB |
|
||
|
|
| | 0x04 MQA_Studio |
|
||
|
|
| | 0x05 DSD |
|