Files
phaten-audio/zh/docs/dev_doc/protocols/xu316_zerocode_protocol.md

971 lines
32 KiB
Markdown
Raw Normal View History

2025-05-13 11:25:54 +08:00
---
2025-05-14 15:25:41 +08:00
title: XU316 USB HiFi解码器免开发产品配置协议
2025-05-13 11:25:54 +08:00
status: new
2025-05-14 15:25:41 +08:00
description: XU316 USB HiFi解码器免开发产品配置协议文档
2025-05-13 11:25:54 +08:00
authors:
- admin
tags:
- 协议
- XU316
- USB音频
- UART
search:
boost: 2
---
2025-05-14 15:25:41 +08:00
# XU316 USB HiFi解码器免开发产品配置协议
2025-05-13 11:25:54 +08:00
--8<-- "common/phaten_xmos_support_img.md"
## 协议概述 :material-file-document-outline:
!!! abstract "功能定位与范围"
2025-05-14 15:25:41 +08:00
本文档详细描述了XU316 USB HiFi解码器免开发产品与MCU之间通过UART进行通信的配置协议。该协议提供了音频设备配置、状态监控和媒体控制的完整功能集。
2025-05-13 11:25:54 +08:00
## 一、协议基础规范 :material-connection:
### 1.1 底层通信协议
**基于UART (Universal Asynchronous Receiver/Transmitter) 协议**
| 参数 | 值 |
|:---------------:|:--------------------:|
| 波特率 | 115200 bps |
| 数据位 | 8 |
| 奇偶校验 | 无 |
| 停止位 | 1 |
| 数据流控 | 无 |
### 1.2 帧格式与数据传输
!!! example "通用帧格式"
所有命令和响应均遵循以下帧格式:
| 字段 | 字节数 | 说明 |
|:----------:|:--------:|:-----------------------------------------:|
| 帧头 | 2 | 固定为0x55aa |
| 版本 | 1 | 协议版本号 |
| 命令字 | 1 | 指示帧的功能 |
| 数据长度 | 1 | 后续数据的长度N不包含最后的校验和字节 |
| 数据 | N | 具体的数据内容 |
| 校验和 | 1 | 从帧头开始按字节求和结果对256求余 |
!!! warning "数据传输说明"
所有大于1个字节的数据均采用 **大端模式** 传输。协议中示例数据均以十六进制表示。
### 1.3 通信机制
#### 1.3.1 确认机制
!!! tip "确认与超时处理"
- 所有命令均需对方回复确认
- 默认命令超时时间为300ms超时后视为通信失败
- 特殊命令可能有不同的超时时间,会在相应命令描述中说明
#### 1.3.2 重试与容错机制
```mermaid
flowchart TD
A[发送命令] --> B{等待响应}
B -->|超时| C[重发命令]
C --> D{重试次数<4?}
D -->|是| B
D -->|否| E[使用默认配置]
B -->|收到响应| F[处理响应]
```
## 二、设备启动与初始化 :material-power-plug:
### 2.1 启动交互流程
```mermaid
sequenceDiagram
participant XU316
participant MCU
participant Flash
rect
Note over XU316,Flash: System Loader固件
rect
Note over XU316,MCU: 上电启动阶段
XU316->>MCU: 发送开始启动命令(0x00)
Note over XU316:
alt 超时未收到响应(最多尝试4次如果4次都没有收到响应直接进入USB->I2S模式)
XU316->>MCU: 重发送开始启动命令(0x00)
end
MCU-->>XU316: 返回启动选项
Note over XU316: 解析启动选项
end
rect
Note over XU316,Flash: 基础信息更新阶段
alt 启动选项不包含0x01(不更新基础产品信息)
XU316->>Flash: 读取基础产品信息
Flash-->>XU316: 返回基础产品信息
else 启动选项包含0x01(更新基础产品信息)或者从Flash读取数据不完整
XU316->>MCU: 发送读取基础产品信息命令(0x01)
MCU-->>XU316: 返回新基础产品信息
XU316->>Flash: 保存配置
end
end
rect
Note over XU316,Flash: 上电配置获取阶段
alt 启动选项不包含0x02(不更新上电配置)
XU316->>Flash: 读取上电配置
Flash-->>XU316: 返回上电配置数据
else 启动选项包含0x02(更新上电配置)或者从Flash读取数据不完整
XU316->>MCU: 发送获取上电配置命令(0x02)
MCU-->>XU316: 返回新上电配置
XU316->>Flash: 保存新上电配置
end
end
rect
Note over XU316: Loading应用模式阶段
XU316->>MCU: 发送获取当前模式命令(0x03)
MCU-->>XU316: 返回当前模式
Note over XU316: 根据当前模式loading对应模式
end
end
rect
Note over XU316,MCU: APP运行阶段
XU316->>MCU: 获取当前用户配置命令(0x04)
MCU-->>XU316: 返回当前用户配置
Note over XU316: 初试化APP并应用当前用户配置
XU316->>MCU: 发送启动完成命令(0x05)
MCU-->>XU316: 返回完成命令响应
par 并行处理
loop 状态上报
XU316->>MCU: 状态改变或15S定时发送
end
loop 业务处理
MCU->>XU316: 发送业务指令
XU316-->>MCU: 响应业务指令
end
end
end
```
### 2.2 启动流程详细说明
=== "上电启动与选项阶段"
1. XU316启动会发送开始启动命令(命令字0x00) 给MCU包含:
- UAC1.0 VID/PID
- UAC2.0 VID/PID
- 基础信息CRC
- 上电配置信息CRC
2. MCU接收启动命令检查信息是否需要更新并发送相应回复
3. XU316等待MCU响应
4. 如果超时未收到响应XU316重发启动命令最多4次
5. 若仍无响应则直接加载默认USB配置枚举USB
6. 如有正常响应XU316解析启动选项
=== "基础信息更新阶段"
**执行条件**: 启动选项包含0x01更新基础产品信息
**步骤**:
1. XU316发送0x01命令请求读取基础产品信息
2. MCU返回新基础产品信息给XU316
3. XU316更新并保存配置到内部存储
=== "上电配置获取阶段"
**执行条件**: 启动选项包含0x02更新上电配置或从Flash读取数据不完整
**步骤**:
1. XU316发送0x02命令请求获取上电配置
2. MCU返回新上电配置给XU316
3. XU316更新并保存配置到内部存储
=== "应用固件加载阶段"
**步骤**:
1. XU316发送0x03命令获取当前输入输出模式
2. MCU返回当前模式信息给XU316
3. XU316根据返回模式加载对应输入输出模式
=== "应用初始化阶段"
**步骤**:
1. XU316发送0x04命令获取当前用户配置
2. MCU返回当前用户配置给XU316
3. XU316初始化应用并应用相关配置
4. XU316发送0x05命令表示启动完成
5. MCU返回确认响应
## 三、协议命令集 :material-console:
### 3.1 命令分类概览
=== "启动与基础命令(0x00-0x0F)"
| 命令字 | 命令描述 | 发送方向 |
|:--------:|:---------------------------------------------|:----------:|
| 0x00 | 开始启动 | XU316→MCU |
| 0x01 | 读取产品信息 | XU316→MCU |
| 0x02 | 读取上电配置信息 | XU316→MCU |
| 0x03 | 获取当前输入输出模式 | XU316→MCU |
| 0x04 | 获取当前用户配置 | XU316→MCU |
| 0x05 | 启动完成命令 | XU316→MCU |
=== "业务控制命令(0x20-0x2F)"
| 命令字 | 命令描述 | 发送方向 |
|:--------:|:---------------------------------------------|:----------:|
| 0x20 | 报告应用状态 | XU316→MCU |
| 0x21 | 媒体控制 | MCU→XU316 |
| 0x22 | 报告播放音频流格式和类型 | XU316→MCU |
| 0x23 | 设置输入输出模式 | MCU→XU316 |
2025-11-13 09:43:27 +08:00
| 0x24 | xu316发送播放音量 | XU316→MCU |
| 0x25 | 发送录音音量 | XU316→MCU |
2025-05-13 11:25:54 +08:00
| 0x26 | 切换MCLK | MCU→XU316 |
=== "HID-MCU互相透传命令(0xEE-0xEF)"
| 命令字 | 命令描述 | 发送方向 |
|:--------:|:---------------------------------------------|:----------:|
| 0xEE | HID发起的通过XU316透传给MCU的命令 | XU316→MCU |
=== "DAC控制指令(0xF0-0xFF)"
| 命令字 | 命令描述 | 发送方向 |
|:--------:|:---------------------------------------------|:----------:|
| 0xF0 | DAC配置选择命令 | MCU→XU316 |
!!! note "命令使用说明"
1. 所有命令必须遵循基本帧格式规范
2. 每个命令都需要对方回复确认后才视为执行成功
3. 业务控制命令(0x20及以上)仅可在设备启动完成后使用
### 3.2 基础功能命令详解
#### 3.2.1 开始启动0x00
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x00
数据长度: 1字节 - 17
数据: 17字节
B0: 重启原因 (0x00上电重启, 0x01切换模式重启, 0xFF其他原因)
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: 基础信息32bit CRC
B13-16: 上电配置信息32bit CRC
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x00
数据长度: 1字节 - 0x1
数据: 1字节
B0: 启动选项
0x00 使用所有的默认信息
0x01 需要更新基础产品信息
0x02 需要更新上电配置信息
0x04 需要更新其他配置信息
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
1. 该命令在XU316上电或重启后首先发送用于告知MCU设备已启动
2. XU316将当前存储的产品信息CRC和配置信息CRC发送给MCU
3. MCU通过比对CRC确定是否需要更新XU316中的配置信息
4. MCU在响应中通过启动选项字段告知XU316后续需要执行的操作
=== "使用流程"
```mermaid
flowchart TB
A[XU316启动] -->B[发送0x00命令]
B -->C{MCU响应}
C -->|超时| D[重发命令]
D -->E{重试次数<4?}
E -->|是| C
E -->|否| F[使用默认配置]
C -->|正常响应| G[解析启动选项]
G -->|0x01| H[更新基础产品信息]
G -->|0x02| I[更新上电配置信息]
G -->|0x04| J[更新其他配置信息]
G -->|0x00| K[继续启动流程]
```
=== "注意事项"
* 如果MCU无响应XU316会使用存储的默认配置继续启动
* 重启原因字段可用于MCU识别XU316重启的具体原因以便进行不同处理
* 当需要更新多项信息时MCU可将多个选项通过位操作组合在一起
#### 3.2.2 读取产品信息0x01
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x01
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x01
数据长度: 1字节 - 0x3C (60字节)
数据: 60字节 - 产品基础信息,详见数据字段说明
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 该命令用于XU316获取产品基本信息如VID/PID、产品名称等
- 执行条件启动选项中包含0x01标志或产品信息CRC不匹配
- XU316收到此信息后会更新内部存储的产品基础信息
=== "数据结构"
产品基础信息数据结构(60字节):
```
VID1 (UAC1.0): 2字节
PID1 (UAC1.0): 2字节
VID2 (UAC2.0): 2字节
PID2 (UAC2.0): 2字节
ManufactureName: 16字节 (字符串)
ProductName: 16字节 (字符串)
SerialNumber: 16字节 (字符串)
CRC: 4字节 (32位CRC校验)
```
#### 3.2.3 读取上电配置信息0x02
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x02
数据长度: 1字节 - 0x00
数据: 0字节 - 无数据
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x02
数据长度: 1字节 - 0x0E (即14字节)
2025-06-11 15:18:43 +08:00
数据: 14字节 - 上电配置信息见4.1-上电配置信息章节
2025-05-13 11:25:54 +08:00
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 该命令用于XU316获取初始上电配置信息
- 执行条件启动选项中包含0x02标志或上电配置CRC不匹配
- XU316会根据此配置信息设置默认输入输出模式、音量等参数
=== "数据结构"
上电配置信息数据结构(14字节):
```
默认输入输出模式: 5字节
静音时间: 2字节 (0-65535ms)
麦克风默认音量: 1字节
DAC左声道默认音量: 1字节
DAC右声道默认音量: 1字节
CRC: 4字节 (32位CRC校验)
```
#### 3.2.4 获取当前输入输出模式0x03
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x03
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x03
数据长度: 1字节 - 0x05 (即5字节)
数据: 5字节 - 输入输出模式,见数据字段章节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 该命令用于XU316在启动时查询当前需要启用的输入输出模式
- XU316会根据返回的模式加载相应的应用固件
- 此命令用于设备启动过程中的模式匹配与确认
#### 3.2.5 获取当前用户配置0x04
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x04
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x04
数据长度: 1字节 - 0xE (即14字节)
2025-06-11 15:18:43 +08:00
数据: 14字节 - 用户配置参数见4.1-用户配置参数章节
2025-05-13 11:25:54 +08:00
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 该命令用于XU316获取当前用户选择的音量、模式等配置
- 在应用固件加载后、应用启动前执行
- 应用会根据返回的信息初始化相应参数
#### 3.2.6 启动完成命令0x05
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x05
数据长度: 1字节 - N
数据: N字节
B0: 启动状态 (0 启动成功1 模式不匹配,其他值 启动失败)
2025-06-11 15:18:43 +08:00
B1-BN: 应用运行参数见4.1-应用运行参数
2025-05-13 11:25:54 +08:00
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x05
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 此命令表示XU316启动流程已完成可以开始正常工作
- 包含启动状态信息告知MCU启动是否成功或遇到问题
- 所有后续业务命令只能在此命令发送成功后使用
### 3.3 业务控制命令详解
!!! warning "使用前提"
以下命令仅可在XU316启动完成后(发送0x05命令并收到响应后)使用
#### 3.3.1 报告应用状态0x20
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x20
数据长度: 1字节 - N
2025-06-11 15:18:43 +08:00
数据: N字节 - 应用运行参数见4.1-应用运行参数
2025-05-13 11:25:54 +08:00
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x20
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 该命令用于XU316向MCU报告当前应用状态
- 通常在状态发生变化时发送,例如音量变化、模式切换等
- MCU可根据此信息更新UI显示或调整相关功能
#### 3.3.2 媒体控制0x21
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x21
数据长度: 1字节 - 0x01 (即1字节)
数据: 1字节 - 媒体控制命令
0x00 音量+ / Vol Up
0x01 音量- / Vol Down
0x02 播放/暂停 / PLAY/PAUSE
0x03 下一曲 / NEXT
0x04 上一曲 / PREV
0x05 快进 / FORWARD
0x06 快退 / REWIND
0x07 静音 / MUTE
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x21
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 此命令用于MCU向XU316发送媒体控制指令
- XU316收到指令后会转换为相应的HID命令发送给电脑
- 适用于实现遥控器或物理按键对媒体播放的控制
=== "控制按键映射表"
| 控制码 | 功能 | USB HID用途 |
|:-----:|:------------------:|:------------------:|
| 0x00 | 音量+ | 增加系统音量 |
| 0x01 | 音量- | 降低系统音量 |
| 0x02 | 播放/暂停 | 控制媒体播放状态 |
| 0x03 | 下一曲 | 切换到下一首歌曲 |
| 0x04 | 上一曲 | 切换到上一首歌曲 |
| 0x05 | 快进 | 在当前曲目中快进 |
| 0x06 | 快退 | 在当前曲目中快退 |
| 0x07 | 静音 | 切换系统静音状态 |
#### 3.3.3 报告播放音频流格式和类型0x22
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x22
数据长度: 1字节 - 0x02 (即2字节)
数据: 2字节 - 音频流格式和类型,见音频流格式和类型字段
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x22
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 该命令用于XU316向MCU报告当前音频流的格式和类型
- 通常在播放开始或格式变化时发送
2025-06-11 15:18:43 +08:00
- MCU可根据此信息更新显示如显示PCM/DSD/MQA/DOP等状态
2025-05-13 11:25:54 +08:00
#### 3.3.4 设置输入输出模式0x23
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x23
数据长度: 1字节 - 0x05 (即5字节)
数据: 5字节 - 输入输出模式,见输入输出模式字段
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x23
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 此命令用于MCU要求XU316切换到特定输入输出模式
- 通常由用户操作触发,如按下模式选择按钮
- XU316可能需要重启以加载新模式的固件
#### 3.3.5 发送播放音量0x24
=== "命令格式"
2026-03-09 16:50:37 +08:00
**XU316返回**
2025-05-13 11:25:54 +08:00
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x24
数据长度: 1字节 - 0x02 (即2字节)
数据: 2字节
字节1: 左声道 (0xFF Mute, 0-0dB, -127-127dB)
字节2: 右声道 (0xFF Mute, 0-0dB, -127-127dB)
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
2026-03-09 16:50:37 +08:00
**MCU发送**
2025-05-13 11:25:54 +08:00
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x24
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
2025-11-13 09:43:27 +08:00
- 该命令用于XU316向MCU报告当前播放音量
2025-05-13 11:25:54 +08:00
#### 3.3.6 发送录音音量0x25
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x25
数据长度: 1字节 - 0x01 (即1字节)
数据: 1字节 - 0xFF Mute0-0dB -127-127dB
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x25
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
2025-11-13 09:43:27 +08:00
- 该命令用于XU316向MCU报告当前麦克风录音音量
- 是预留命令,当前未使用
2025-05-13 11:25:54 +08:00
#### 3.3.7 切换MCLK0x26
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x26
数据长度: 1字节 - 1
数据: 1字节 - 0内部MCLK1外部MCLK
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x26
数据长度: 1字节 - 0
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 此命令用于XU316控制切换主时钟源
- 可切换使用内部时钟或外部时钟
- 对于某些需要精确同步的音频应用场景很重要
#### 3.3.8 设置 unmute0x27
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x27
数据长度: 1字节 - 2
数据: 2字节 -
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x27
数据长度: 1字节 - 0
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 模式切换时dac的 unmute时间延迟 单位是毫秒
#### 3.3.9 发送音频格式的时间延迟0x28
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0x28
数据长度: 1字节 - 2
数据: 2字节 -
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x28
数据长度: 1字节 - 0
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 发送音频格式的时间延迟
2025-05-13 11:25:54 +08:00
2025-06-14 13:48:44 +08:00
#### 3.3.10 获取固件版本命令0xF1
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0xF1
数据长度: 1字节 - 2
2025-12-25 14:21:26 +08:00
数据: 0字节 -
2025-06-14 13:48:44 +08:00
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0xF1
数据长度: 1字节 - 0
2025-12-25 14:21:26 +08:00
数据: 3字节
2025-06-14 13:48:44 +08:00
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 获取固件版本
2025-05-13 11:25:54 +08:00
### 3.4 DAC配置选择0xF0
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0xF0
数据长度: 1字节 - 4
数据: 4字节
Byte 00: 使能I2C配置DAC 1: 禁止I2C配置DAC
Byte 1 - 3: reserved
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0xF0
数据长度: 1字节 - 0
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 测试命令用于MCU想XU316设置DAC配置选择。让XU316通过DAC I2C配置DAC还是MCU自己配置DAC
- 此命令为产品特定命令,不是所有产品都支持。具体支持情况请参考产品规格书说明。
### 3.5 HID和MCU通过XU316数据透传命令
#### 3.5.1 HID通过XU316透传数据给MCU(0xEE)
=== "命令格式"
**XU316发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0xEE
数据长度: 1字节 - 0x39(57字节), 由于HID协议限制数据长度必须是57字节
数据: 57字节 - 由于HID协议限制必须是57字节透传数据
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
**MCU返回(可以返回多帧)**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0xEE
数据长度: 1字节 - 0x39(57字节), 由于HID协议限制数据长度必须是57字节
数据: 57字节 - 由于HID协议限制必须是57字节透传数据
校验和: 1字节 - 从帧头开始按字节求和结果对256求余
```
=== "功能说明"
- 此命令用于HID通过XU316向MCU发起的的透传数据
- 一般透传的数据是MCU的OTA数据或者把MCU的数据回复给HID
## 四、数据结构定义 :material-database:
### 4.1 产品配置数据结构
=== "1. 产品基础信息"
| 字段 | 字节数 | 说明 |
|--------------------|--------|---------------------------------------------------------|
| **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 (字符串最大16字节) |
| **ProductName** | 16 | USB Product Name (字符串最大16字节) |
| **SerialNumber** | 16 | Product Serial Number (字符串最大16字节) |
| **CRC** | 4 | 对所有字段计算的32-bit CRC校验值 |
!!! tip "CRC使用说明"
MCU可以根据XU316传回的CRC值判断是否需要更新产品基础信息。当CRC不匹配时应发送完整的产品基础信息。
=== "2. 上电配置信息"
| 字段 | 字节数 | 说明 |
|-------------------------|--------|-----------------------------------------------|
| **默认输入输出模式** | 5 | 见输入输出模式字段说明 |
| **静音时间** | 2 | 0-65535ms |
| **麦克风默认音量** | 1 | 见麦克风音量字段说明 |
| **DAC左声道默认音量** | 1 | 见DAC音量字段说明 |
| **DAC右声道默认音量** | 1 | 见DAC音量字段说明 |
| **CRC** | 4 | 对所有字段计算的32-bit CRC校验值 |
=== "3. 应用运行参数"
| 字段 | 字节数 | 说明 |
|-------------------------|--------|-----------------------------------------------|
| **输入输出模式** | 5 | 见输入输出模式字段说明 |
| **静音时间** | 2 | 0-65535ms |
| **麦克风音量** | 1 | 见麦克风音量字段说明 |
| **DAC左声道音量** | 1 | 见DAC音量字段说明 |
| **DAC右声道音量** | 1 | 见DAC音量字段说明 |
| **CRC** | 4 | 对所有字段计算的32-bit CRC校验值 |
=== "4. 用户配置参数"
| 字段 | 字节数 | 说明 |
|-------------------------|--------|-----------------------------------------------|
| **输入输出模式** | 5 | 见输入输出模式字段说明 |
| **静音时间** | 2 | 0-65535ms |
| **麦克风音量** | 1 | 见麦克风音量字段说明 |
| **DAC左声道音量** | 1 | 见DAC音量字段说明 |
| **DAC右声道音量** | 1 | 见DAC音量字段说明 |
| **CRC** | 4 | 对所有字段计算的32-bit CRC校验值 |
### 4.2 输入输出模式数据格式
=== "字段位定义"
| 字节 | 功能说明 |
|-----|-----------------------------------------------|
| BYTE 0-BYTE4 | 具体值定义参见产品规格书 |
### 4.3 控制参数数据格式
=== "重启原因"
| 值 | 说明 |
|-------|-------------------------------|
| 0x00 | 上电重启 |
| 0x01 | 切换模式重启 |
| 0xFF | 其他原因重启 |
=== "上电模式"
| 值 | 说明 |
|-------|------------------------------------------------------------|
| 0x00 | 默认模式,启动时使用上电配置信息的参数 |
| 0x01 | 断电记忆模式启动时使用从MCU获取的用户配置参数 |
=== "音量控制参数"
**麦克风音量**
| 值 | 说明 |
|-------|----------------------------------------|
| 0xFF | 静音(Mute) |
| 0x00-0xFE | 音量值,具体映射由应用定义 |
**DAC音量**
| 值 | 说明 |
|-------|----------------------------------------|
| 0x00 | 静音(Mute) |
| 0x01-0xFF | 音量值,具体映射由应用定义 |
=== "音频流格式"
2026-03-09 16:50:37 +08:00
| 值 | 格式 | 采样率 |
2025-05-13 11:25:54 +08:00
|-------|-------------------|-----------------|
2026-03-09 16:50:37 +08:00
| 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 |
2025-05-13 11:25:54 +08:00
| 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 | 未使用 |
=== "音频类型"
| 值 | 类型 | 说明 |
|-------|-------------------|-----------------|
| 0x00 | PCM | 标准PCM音频 |
2025-06-14 13:48:44 +08:00
| 0x01 | DoP | 保留 |
2025-05-13 11:25:54 +08:00
| 0x02 | MQA | MQA编码音频 |
| 0x03 | MQB | MQB编码音频 |
| 0x04 | MQA_Studio | MQA Studio编码 |
2025-06-14 13:48:44 +08:00
| 0x05 | DSD Native | DSD编码音频 |
2025-05-13 11:25:54 +08:00
2025-08-12 17:05:10 +08:00
## 五、咨询反馈
<details>
<summary>点击展开咨询反馈表单</summary>
--8<-- "common/customer_form.md"
2026-03-09 16:50:37 +08:00
</details>