32 KiB
title, status, description, authors, tags, search
| title | status | description | authors | tags | search | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| XU316 USB HiFi解码器免开发产品配置协议 | new | XU316 USB HiFi解码器免开发产品配置协议文档 |
|
|
|
XU316 USB HiFi解码器免开发产品配置协议
--8<-- "common/phaten_xmos_support_img.md"
协议概述 :material-file-document-outline:
!!! abstract "功能定位与范围" 本文档详细描述了XU316 USB HiFi解码器免开发产品与MCU之间通过UART进行通信的配置协议。该协议提供了音频设备配置、状态监控和媒体控制的完整功能集。
一、协议基础规范 :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 重试与容错机制
flowchart TD
A[发送命令] --> B{等待响应}
B -->|超时| C[重发命令]
C --> D{重试次数<4?}
D -->|是| B
D -->|否| E[使用默认配置]
B -->|收到响应| F[处理响应]
二、设备启动与初始化 :material-power-plug:
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 启动流程详细说明
=== "上电启动与选项阶段" 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 | | 0x24 | xu316发送播放音量 | XU316→MCU | | 0x25 | 发送录音音量 | XU316→MCU | | 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字节)
数据: 14字节 - 上电配置信息,见4.1-上电配置信息章节
校验和: 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字节)
数据: 14字节 - 用户配置参数,见4.1-用户配置参数章节
校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
```
=== "功能说明" - 该命令用于XU316获取当前用户选择的音量、模式等配置 - 在应用固件加载后、应用启动前执行 - 应用会根据返回的信息初始化相应参数
3.2.6 启动完成命令(0x05)
=== "命令格式"
XU316发送
帧头: 2字节 - 0x55aa 版本: 1字节 - 0x00 命令字: 1字节 - 0x05 数据长度: 1字节 - N 数据: N字节 B0: 启动状态 (0 启动成功,1 模式不匹配,其他值 启动失败) B1-BN: 应用运行参数,见4.1-应用运行参数 校验和: 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 数据: N字节 - 应用运行参数,见4.1-应用运行参数 校验和: 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报告当前音频流的格式和类型 - 通常在播放开始或格式变化时发送 - MCU可根据此信息更新显示,如显示PCM/DSD/MQA/DOP等状态
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)
=== "命令格式"
XU316返回
帧头: 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求余
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x24
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
```
=== "功能说明" - 该命令用于XU316向MCU报告当前播放音量
3.3.6 发送录音音量(0x25)
=== "命令格式"
MCU发送
帧头: 2字节 - 0x55aa 版本: 1字节 - 0x03 命令字: 1字节 - 0x25 数据长度: 1字节 - 0x01 (即1字节) 数据: 1字节 - 0xFF Mute,0-0dB -127:-127dB 校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x25
数据长度: 1字节 - 0x00
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
```
=== "功能说明" - 该命令用于XU316向MCU报告当前麦克风录音音量 - 是预留命令,当前未使用
3.3.7 切换MCLK(0x26)
=== "命令格式"
MCU发送
帧头: 2字节 - 0x55aa 版本: 1字节 - 0x03 命令字: 1字节 - 0x26 数据长度: 1字节 - 1 数据: 1字节 - 0:内部MCLK,1:外部MCLK 校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0x26
数据长度: 1字节 - 0
数据: 0字节
校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
```
=== "功能说明" - 此命令用于XU316控制切换主时钟源 - 可切换使用内部时钟或外部时钟 - 对于某些需要精确同步的音频应用场景很重要
3.3.8 设置 unmute(0x27)
=== "命令格式"
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求余
```
=== "功能说明" - 发送音频格式的时间延迟
3.3.10 获取固件版本命令(0xF1)
=== "命令格式"
MCU发送
帧头: 2字节 - 0x55aa 版本: 1字节 - 0x03 命令字: 1字节 - 0xF1 数据长度: 1字节 - 2 数据: 0字节 - 校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
**XU316返回**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x00
命令字: 1字节 - 0xF1
数据长度: 1字节 - 0
数据: 3字节
校验和: 1字节 - 从帧头开始按字节求和,结果对256求余
```
=== "功能说明" - 获取固件版本
3.4 DAC配置选择(0xF0)
=== "命令格式"
**MCU发送**
```
帧头: 2字节 - 0x55aa
版本: 1字节 - 0x03
命令字: 1字节 - 0xF0
数据长度: 1字节 - 4
数据: 4字节
Byte 0:0: 使能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-65535(ms) | | 麦克风默认音量 | 1 | 见麦克风音量字段说明 | | DAC左声道默认音量 | 1 | 见DAC音量字段说明 | | DAC右声道默认音量 | 1 | 见DAC音量字段说明 | | CRC | 4 | 对所有字段计算的32-bit CRC校验值 |
=== "3. 应用运行参数" | 字段 | 字节数 | 说明 | |-------------------------|--------|-----------------------------------------------| | 输入输出模式 | 5 | 见输入输出模式字段说明 | | 静音时间 | 2 | 0-65535(ms) | | 麦克风音量 | 1 | 见麦克风音量字段说明 | | DAC左声道音量 | 1 | 见DAC音量字段说明 | | DAC右声道音量 | 1 | 见DAC音量字段说明 | | CRC | 4 | 对所有字段计算的32-bit CRC校验值 |
=== "4. 用户配置参数" | 字段 | 字节数 | 说明 | |-------------------------|--------|-----------------------------------------------| | 输入输出模式 | 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编码音频 |
五、咨询反馈
点击展开咨询反馈表单
--8<-- "common/customer_form.md"