XU316 USB HiFi解码器免开发产品配置协议¶
协议概述 ¶
功能定位与范围
本文档详细描述了XU316 USB HiFi解码器免开发产品与MCU之间通过UART进行通信的配置协议。该协议提供了音频设备配置、状态监控和媒体控制的完整功能集。
一、协议基础规范 ¶
1.1 底层通信协议¶
基于UART (Universal Asynchronous Receiver/Transmitter) 协议
| 参数 | 值 |
|---|---|
| 波特率 | 115200 bps |
| 数据位 | 8 |
| 奇偶校验 | 无 |
| 停止位 | 1 |
| 数据流控 | 无 |
1.2 帧格式与数据传输¶
通用帧格式
所有命令和响应均遵循以下帧格式:
| 字段 | 字节数 | 说明 |
|---|---|---|
| 帧头 | 2 | 固定为0x55aa |
| 版本 | 1 | 协议版本号 |
| 命令字 | 1 | 指示帧的功能 |
| 数据长度 | 1 | 后续数据的长度N,不包含最后的校验和字节 |
| 数据 | N | 具体的数据内容 |
| 校验和 | 1 | 从帧头开始按字节求和,结果对256求余 |
数据传输说明
所有大于1个字节的数据均采用 大端模式 传输。协议中示例数据均以十六进制表示。
1.3 通信机制¶
1.3.1 确认机制¶
确认与超时处理
- 所有命令均需对方回复确认
- 默认命令超时时间为300ms,超时后视为通信失败
- 特殊命令可能有不同的超时时间,会在相应命令描述中说明
1.3.2 重试与容错机制¶
flowchart TD
A[发送命令] --> B{等待响应}
B -->|超时| C[重发命令]
C --> D{重试次数<4?}
D -->|是| B
D -->|否| E[使用默认配置]
B -->|收到响应| F[处理响应] 二、设备启动与初始化 ¶
2.1 启动交互流程¶
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 启动流程详细说明¶
- XU316启动会发送开始启动命令(命令字0x00) 给MCU,包含:
- UAC1.0 VID/PID
- UAC2.0 VID/PID
- 基础信息CRC
- 上电配置信息CRC
- MCU接收启动命令,检查信息是否需要更新,并发送相应回复
- XU316等待MCU响应
- 如果超时未收到响应,XU316重发启动命令最多4次
- 若仍无响应,则直接加载默认USB配置枚举USB
- 如有正常响应,XU316解析启动选项
执行条件: 启动选项包含0x01(更新基础产品信息)
步骤:
- XU316发送0x01命令请求读取基础产品信息
- MCU返回新基础产品信息给XU316
- XU316更新并保存配置到内部存储
执行条件: 启动选项包含0x02(更新上电配置)或从Flash读取数据不完整
步骤:
- XU316发送0x02命令请求获取上电配置
- MCU返回新上电配置给XU316
- XU316更新并保存配置到内部存储
步骤:
- XU316发送0x03命令获取当前输入输出模式
- MCU返回当前模式信息给XU316
- XU316根据返回模式加载对应输入输出模式
步骤:
- XU316发送0x04命令获取当前用户配置
- MCU返回当前用户配置给XU316
- XU316初始化应用并应用相关配置
- XU316发送0x05命令表示启动完成
- MCU返回确认响应
三、协议命令集 ¶
3.1 命令分类概览¶
| 命令字 | 命令描述 | 发送方向 |
|---|---|---|
| 0x00 | 开始启动 | XU316→MCU |
| 0x01 | 读取产品信息 | XU316→MCU |
| 0x02 | 读取上电配置信息 | XU316→MCU |
| 0x03 | 获取当前输入输出模式 | XU316→MCU |
| 0x04 | 获取当前用户配置 | XU316→MCU |
| 0x05 | 启动完成命令 | XU316→MCU |
| 命令字 | 命令描述 | 发送方向 |
|---|---|---|
| 0x20 | 报告应用状态 | XU316→MCU |
| 0x21 | 媒体控制 | MCU→XU316 |
| 0x22 | 报告播放音频流格式和类型 | XU316→MCU |
| 0x23 | 设置输入输出模式 | MCU→XU316 |
| 0x24 | xu316发送播放音量 | XU316→MCU |
| 0x25 | 发送录音音量 | XU316→MCU |
| 0x26 | 切换MCLK | MCU→XU316 |
| 0x27 | 设置 unmute | MCU→XU316 |
| 0x28 | 发送音频格式的时间延迟 | MCU→XU316 |
| 0x29 | 报告USB连接状态 | XU316→MCU |
| 命令字 | 命令描述 | 发送方向 |
|---|---|---|
| 0xEE | HID发起的通过XU316透传给MCU的命令 | XU316→MCU |
| 命令字 | 命令描述 | 发送方向 |
|---|---|---|
| 0xF0 | DAC配置选择命令 | MCU→XU316 |
| 0xF1 | 获取固件版本命令 | MCU→XU316 |
命令使用说明
- 所有命令必须遵循基本帧格式规范
- 每个命令都需要对方回复确认后才视为执行成功
- 业务控制命令(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返回
- 该命令在XU316上电或重启后首先发送,用于告知MCU设备已启动
- XU316将当前存储的产品信息CRC和配置信息CRC发送给MCU
- MCU通过比对CRC确定是否需要更新XU316中的配置信息
- MCU在响应中通过启动选项字段告知XU316后续需要执行的操作
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返回
- 该命令用于XU316获取产品基本信息,如VID/PID、产品名称等
- 执行条件:启动选项中包含0x01标志或产品信息CRC不匹配
- XU316收到此信息后会更新内部存储的产品基础信息
产品基础信息数据结构(60字节):
命令示例
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 12 34 56 78 D9
逐段解析
| 字节段 | 长度 | 示例值 | 说明 |
|---|---|---|---|
| 帧头 | 2字节 | 55 AA | 固定帧头,表示一帧协议数据开始 |
| 版本 | 1字节 | 03 | 表示这是 MCU 返回给 XU316 的数据 |
| 命令字 | 1字节 | 01 | 表示当前命令是“读取产品信息” |
| 数据长度 | 1字节 | 3C | 表示后面紧跟着 60 字节的数据区 |
| VID1 | 2字节 | 20 B1 | UAC1.0 的 USB VID |
| PID1 | 2字节 | 00 17 | UAC1.0 的 USB PID |
| VID2 | 2字节 | 20 B1 | UAC2.0 的 USB VID |
| PID2 | 2字节 | 00 16 | UAC2.0 的 USB PID |
| ManufactureName | 16字节 | 50 48 41 54 45 4E 00 00 00 00 00 00 00 00 00 00 | ASCII 字符串 PHATEN,后面不足 16 字节的部分用 00 补齐 |
| ProductName | 16字节 | 58 55 33 31 36 20 44 41 43 00 00 00 00 00 00 00 | ASCII 字符串 XU316 DAC,后面用 00 补齐到 16 字节 |
| SerialNumber | 16字节 | 53 4E 32 34 30 30 30 31 00 00 00 00 00 00 00 00 | ASCII 字符串 SN240001,后面用 00 补齐到 16 字节 |
| CRC | 4字节 | 12 34 56 78 | 产品基础信息的 32 位 CRC 校验值,这里仅作为示例演示 |
| 校验和 | 1字节 | D9 | 从 55 开始到 78 结束,所有字节相加后对 256 取余的结果 |
3.2.3 读取上电配置信息(0x02)¶
XU316发送
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x02
数据长度: 1字节 - 0x00
数据: 0字节 - 无数据
校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
MCU返回
- 该命令用于XU316获取初始上电配置信息
- 执行条件:启动选项中包含0x02标志或上电配置CRC不匹配
- XU316会根据此配置信息设置默认输入输出模式、音量等参数
上电配置信息数据结构(14字节):
命令示例
逐段解析
| 字节段 | 长度 | 示例值 | 说明 |
|---|---|---|---|
| 帧头 | 2字节 | 55 AA | 固定帧头,表示一帧协议数据开始 |
| 版本 | 1字节 | 03 | 表示这是 MCU 返回给 XU316 的数据 |
| 命令字 | 1字节 | 02 | 表示当前命令是“读取上电配置信息” |
| 数据长度 | 1字节 | 0E | 表示后面紧跟着 14 字节的数据区 |
| 默认输入输出模式 | 5字节 | 01 00 00 00 00 | 示例模式数据,具体每个字节的含义由产品规格书定义 |
| 静音时间 | 2字节 | 01 2C | 按大端模式表示 300ms |
| 麦克风默认音量 | 1字节 | 20 | 示例默认麦克风音量 |
| DAC左声道默认音量 | 1字节 | 30 | 示例默认左声道音量 |
| DAC右声道默认音量 | 1字节 | 30 | 示例默认右声道音量 |
| CRC | 4字节 | 11 22 33 44 | 上电配置的 32 位 CRC 校验值,这里仅作为示例演示 |
| 校验和 | 1字节 | 6A | 从 55 开始到 44 结束,所有字节相加后对 256 取余的结果 |
3.2.4 获取当前输入输出模式(0x03)¶
3.2.5 获取当前用户配置(0x04)¶
XU316发送
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x04
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
MCU返回
- 该命令用于XU316获取当前用户选择的音量、模式等配置
- 在应用固件加载后、应用启动前执行
- 应用会根据返回的信息初始化相应参数
命令示例
逐段解析
| 字节段 | 长度 | 示例值 | 说明 |
|---|---|---|---|
| 帧头 | 2字节 | 55 AA | 固定帧头,表示一帧协议数据开始 |
| 版本 | 1字节 | 03 | 表示这是 MCU 返回给 XU316 的数据 |
| 命令字 | 1字节 | 04 | 表示当前命令是“获取当前用户配置” |
| 数据长度 | 1字节 | 0E | 表示后面紧跟着 14 字节的数据区 |
| 输入输出模式 | 5字节 | 02 00 00 00 00 | 示例用户当前选择的模式数据,具体每个字节的定义由产品规格书决定 |
| 静音时间 | 2字节 | 00 C8 | 按大端模式表示 200ms |
| 麦克风音量 | 1字节 | 18 | 示例当前麦克风音量 |
| DAC左声道音量 | 1字节 | 28 | 示例当前左声道音量 |
| DAC右声道音量 | 1字节 | 28 | 示例当前右声道音量 |
| CRC | 4字节 | 55 66 77 88 | 用户配置的 32 位 CRC 校验值,这里仅作为示例演示 |
| 校验和 | 1字节 | 00 | 从 55 开始到 88 结束,所有字节相加后对 256 取余的结果 |
3.2.6 启动完成命令(0x05)¶
3.3 业务控制命令详解¶
使用前提
以下命令仅可在XU316启动完成后(发送0x05命令并收到响应后)使用
3.3.1 报告应用状态(0x20)¶
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返回
- 此命令用于MCU向XU316发送媒体控制指令
- XU316收到指令后会转换为相应的HID命令发送给电脑
- 适用于实现遥控器或物理按键对媒体播放的控制
| 控制码 | 功能 | USB HID用途 |
|---|---|---|
| 0x00 | 音量+ | 增加系统音量 |
| 0x01 | 音量- | 降低系统音量 |
| 0x02 | 播放/暂停 | 控制媒体播放状态 |
| 0x03 | 下一曲 | 切换到下一首歌曲 |
| 0x04 | 上一曲 | 切换到上一首歌曲 |
| 0x05 | 快进 | 在当前曲目中快进 |
| 0x06 | 快退 | 在当前曲目中快退 |
| 0x07 | 静音 | 切换系统静音状态 |
3.3.3 报告播放音频流格式和类型(0x22)¶
3.3.4 设置输入输出模式(0x23)¶
3.3.5 发送播放音量(0x24)¶
3.3.6 发送录音音量(0x25)¶
3.3.7 切换MCLK(0x26)¶
3.3.8 设置 unmute(0x27)¶
3.3.9 发送音频格式的时间延迟(0x28)¶
3.3.10 报告USB连接状态(0x29)¶
3.3.11 获取固件版本命令(0xF1)¶
3.4 DAC配置选择(0xF0)¶
3.5 HID和MCU通过XU316数据透传命令¶
3.5.1 HID通过XU316透传数据给MCU(0xEE)¶
四、数据结构定义 ¶
4.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校验值 |
CRC使用说明
MCU可以根据XU316传回的CRC值判断是否需要更新产品基础信息。当CRC不匹配时,应发送完整的产品基础信息。
| 字段 | 字节数 | 说明 |
|---|---|---|
| 默认输入输出模式 | 5 | 见输入输出模式字段说明 |
| 静音时间 | 2 | 0-65535(ms) |
| 麦克风默认音量 | 1 | 见麦克风音量字段说明 |
| DAC左声道默认音量 | 1 | 见DAC音量字段说明 |
| DAC右声道默认音量 | 1 | 见DAC音量字段说明 |
| CRC | 4 | 对所有字段计算的32-bit CRC校验值 |
| 字段 | 字节数 | 说明 |
|---|---|---|
| 输入输出模式 | 5 | 见输入输出模式字段说明 |
| 静音时间 | 2 | 0-65535(ms) |
| 麦克风音量 | 1 | 见麦克风音量字段说明 |
| DAC左声道音量 | 1 | 见DAC音量字段说明 |
| DAC右声道音量 | 1 | 见DAC音量字段说明 |
| CRC | 4 | 对所有字段计算的32-bit CRC校验值 |
| 字段 | 字节数 | 说明 |
|---|---|---|
| 输入输出模式 | 5 | 见输入输出模式字段说明 |
| 静音时间 | 2 | 0-65535(ms) |
| 麦克风音量 | 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 | 音量值,具体映射由应用定义 |
| 值 | 格式 | 采样率 |
|---|---|---|
| 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 | 未使用 |
| 值 | 类型 | 说明 |
|---|---|---|
| 0x00 | PCM | 标准PCM音频 |
| 0x01 | DoP | 保留 |
| 0x02 | MQA | MQA编码音频 |
| 0x03 | MQB | MQB编码音频 |
| 0x04 | MQA_Studio | MQA Studio编码 |
| 0x05 | DSD Native | DSD编码音频 |

