Files
phaten-audio/zh/docs/dev_doc/protocols/xu316_zerocode_protocol.md
PhatenIoT-yan e469ee0144 update
2026-03-09 16:50:37 +08:00

32 KiB
Raw Blame History

title, status, description, authors, tags, search
title status description authors tags search
XU316 USB HiFi解码器免开发产品配置协议 new XU316 USB HiFi解码器免开发产品配置协议文档
admin
协议
XU316
USB音频
UART
boost
2

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 Mute0-0dB -127-127dB 校验和: 1字节 - 从帧头开始按字节求和结果对256求余

**XU316返回**
```
帧头:    2字节 - 0x55aa
版本:    1字节 - 0x00
命令字:   1字节 - 0x25
数据长度: 1字节 - 0x00
数据:    0字节
校验和:   1字节 - 从帧头开始按字节求和结果对256求余
```

=== "功能说明" - 该命令用于XU316向MCU报告当前麦克风录音音量 - 是预留命令,当前未使用

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求余
```

=== "功能说明" - 发送音频格式的时间延迟

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 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 | 音量值,具体映射由应用定义 |

=== "音频流格式" | 值 | 格式 | 采样率 | |-------|-------------------|-----------------| | 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"