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 | 发送播放音量 | MCU→XU316 |
0x25 | 发送录音音量 | MCU→XU316 |
0x26 | 切换MCLK | MCU→XU316 |
命令字 | 命令描述 | 发送方向 |
---|---|---|
0xEE | HID发起的通过XU316透传给MCU的命令 | XU316→MCU |
命令字 | 命令描述 | 发送方向 |
---|---|---|
0xF0 | DAC配置选择命令 | 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)¶
3.2.3 读取上电配置信息(0x02)¶
3.2.4 获取当前输入输出模式(0x03)¶
3.2.5 获取当前用户配置(0x04)¶
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.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_PCM_44100 | 44.1kHz PCM |
0x01 | AUDIO_PCM_48000 | 48kHz PCM |
0x02 | AUDIO_PCM_88200 | 88.2kHz PCM |
0x03 | AUDIO_PCM_96000 | 96kHz PCM |
0x04 | AUDIO_PCM_176400 | 176.4kHz PCM |
0x05 | AUDIO_PCM_192000 | 192kHz PCM |
0x06 | AUDIO_PCM_352800 | 352.8kHz PCM |
0x07 | AUDIO_PCM_384000 | 384kHz PCM |
0x08 | AUDIO_PCM_705600 | 705.6kHz PCM |
0x09 | AUDIO_PCM_768000 | 768kHz PCM |
0x0A | AUDIO_PCM_1441200 | 1.4112MHz PCM |
0x0B | AUDIO_PCM_1536000 | 1.536MHz PCM |
0x0C | AUDIO_PCM_32000 | 32kHz PCM |
0x0D | AUDIO_PCM_64000 | 64kHz PCM |
0x0E | AUDIO_PCM_128000 | 128kHz PCM |
0x0F | AUDIO_PCM_256000 | 256kHz PCM |
0x10 | AUDIO_PCM_512000 | 512kHz PCM |
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 |
0x16 | AUDIO_MQA_44100 | 44.1kHz MQA |
0x17 | AUDIO_MQA_88200 | 88.2kHz MQA |
0x18 | AUDIO_MQA_176400 | 176.4kHz MQA |
0x19 | AUDIO_MQA_352800 | 352.8kHz MQA |
0x1A | AUDIO_MQA_705600 | 705.6kHz MQA |
0x1B | AUDIO_MQA_1411200 | 1.4112MHz MQA |
0x1C | AUDIO_MQA_2822400 | 2.8224MHz MQA |
0x1D | AUDIO_MQA_5644800 | 5.6448MHz MQA |
0x1E | AUDIO_MQA_48000 | 48kHz MQA |
0x1F | AUDIO_MQA_96000 | 96kHz MQA |
0x20 | AUDIO_MQA_192000 | 192kHz MQA |
0x21 | AUDIO_MQA_384000 | 384kHz MQA |
0x22 | AUDIO_MQA_768000 | 768kHz MQA |
0x23 | AUDIO_MQA_1536000 | 1.536MHz MQA |
0x24 | AUDIO_MQA_3072000 | 3.072MHz MQA |
0x25 | AUDIO_MQA_6144000 | 6.144MHz MQA |
0xFF | AUDIO_NO_USED | 未使用 |
值 | 类型 | 说明 |
---|---|---|
0x00 | PCM | 标准PCM音频 |
0x01 | Reserve | 保留 |
0x02 | MQA | MQA编码音频 |
0x03 | MQB | MQB编码音频 |
0x04 | MQA_Studio | MQA Studio编码 |
0x05 | DSD | DSD编码音频 |