Skip to content

XU316 USB免开发固件通用协议

一、 💡 免开发固件功能范围

  • 固件只专注于处理和音频相关的功能,不处理按键,指示灯等和核心功能无关的功能。
  • 产品的其他用户交互功能由MCU负责处理。
  • MCU和XU316通过UART进行双向通信进行命令和数据交换。
  • 固件通过HID和电脑进行通信。

二、XU316与MCU通信协议

1. 底层协议

基于UART (Universal Asynchronous Receiver/Transmitter) 协议

名词说明

名称 说明
波特率 115200 bps
数据位 8
奇偶校验
停止位 1
数据流控

2. 帧格式

字段 字节数 说明
帧头 2 固定为0x55aa
版本 1 协议版本号
命令字 1 指示帧的功能
数据长度 2 后续数据的长度N
数据 N 具体的数据内容
校验和 1 从帧头开始按字节求和,结果对256求余

注意事项 所有大于1个字节的数据均采用大端模式传输。协议中举例数据为十六进制。

3. XU316启动顺序和MCU交互流程

3.1 上电启动与启动选项阶段(手动上电启动才运行)

步骤

  1. XU316启动会发送开始启动命令(命令字0x00) 给MCU,包含UAC1.0 VID/PID、UAC2.0 VID/PID、基础信息CRC和上电配置信息CRC。
  2. MCU接收启动命令,检查信息是否要更新基础信息和上电配置信息,并发相应的回复给XU316, XU316等待MCU响应启动, 最多3秒。
  3. 如果300ms未收到响应,XU316重发启动命令最多尝试4次。如果4次都没有收到响应,则直接加载默认USB配置枚举USB。
  4. MCU响应开始启动命令给XU316,包含启动选项。
  5. XU316解析启动选项。

3.2 基础信息更新阶段(手动上电启动才运行)

条件:启动选项包含0x01(更新基础产品信息)

  1. XU316请求读取基础产品信息, 发送0x01命令
  2. MCU返回新基础产品信息给XU316。
  3. XU316更新保存配置。

3.3 上电配置获取阶段(手动上电启动才运行)

条件:启动选项包含0x02(更新上电配置)或者从Flash读取数据不完整。

  1. XU316请求获取上电配置。 发送0x02命令
  2. MCU返回新上电配置给XU316。
  3. XU316更新保存配置。

3.4 Loading应用固件阶段

步骤:

  1. XU316获取当前模式, 发送0x03命令。
  2. MCU返回当前模式给XU316。
  3. XU316根据当前模式加载对应模式。

APP运行阶段

步骤:

  1. XU316获取当前用户配置(音量等), 命令0x04。
  2. MCU返回当前用户配置给XU316。
  3. XU316初始化APP并应用当前用户配置。
  4. XU316发送启动完成命令给MCU, 命令0x05。
  5. MCU返回完成命令响应给XU316。

4. 命令字列表

命令字 命令描述
0x00 开始启动
0x01 读取产品信息
0x02 读取上电配置信息
0x03 获取当前音频模式
0x04 获取当前用户配置
0x05 启动完成命令
0x20 报告应用状态
0x21 媒体控制
0x22 设置播放音频流格式和类型
0x23 设置音频模式
0x24 发送播放音量
0x25 发送录音音量
0x01 HID启动MCU OTA升级命令
0x02 HID发送MCU升级数据包
0x03 HID发送MCU升级结束包

注意事项:

  1. 所有命令都需要遵循基本帧格式
  2. 部分命令需要等待对方确认响应
  3. 某些命令在特定条件下才能使用(如OTA相关命令)
  4. 命令响应超时时间通常为5秒
  5. 应用命令要在XU316启动命令完成后后再发送相关命令

5. 协议机制

5.1 确认机制

  • 所有命令都需要对方回复确认
  • 默认命令5秒超时时间,超时后视为失败,除非标注其他超时时间

6. 业务协议

6.1 基础功能命令

6.1.1 开始启动(命令字:0x00)
XU316发送:
字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x00
数据长度 1 17
数据 17 B0 重启原因:0x00 上电重启,0x01 切换模式重启,0xFF 其他原因重启
B1-2 unsigned short VID(UAC1.0)
B3-4 unsigned short PID(UAC1.0)
B5-6 unsigned short VID(UAC2.0)
B7-8 unsigned short PID(UAC2.0)
B9-12 unsigned int 基础信息32bit CRC
B13-16 unsigned int 上电配置信息32bit CRC
校验和 1 从帧头开始按字节求和,结果对256求余
MCU返回字段描述
字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x00
数据长度 1 0x1
数据 1 B0 启动选项,见数据字段说明章节
校验和 1 从帧头开始按字节求和,结果对256求余
6.1.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求余

6.1.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 上电配置信息,见业务信息章节
校验和 1 从帧头开始按字节求和,结果对256求余

6.1.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求余
6.1.5 获取当前用户配置(命令字:0x04)
XU316发送
字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x04
数据长度 1 0x00
数据 0 无数据,表示没有额外的信息传输
校验和 1 从帧头开始按字节求和,结果对256求余
MCU返回
字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x04
数据长度 1 0x14 (即 20 字节)
数据 14 用户配置参数,见业务信息章节
校验和 1 从帧头开始按字节求和,结果对256求余

6.1.6 启动完成命令(命令字:0x05)

XU316发送
字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x05
数据长度 1 0x15 (即 21 字节)
数据 15 启动状态和应用运行参数
B0: 0 启动成功,1 模式不匹配,其他值 启动失败
B1-BN: 应用运行参数,见业务信息说明
校验和 1 从帧头开始按字节求和,结果对256求余
MCU返回
字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x05
数据长度 1 0x00
数据 0 无数据
校验和 1 从帧头开始按字节求和,结果对256求余

6.2 业务控制和查询命令(启动完成后才能发送)

6.2.1 报告应用状态(命令字:0x20)

XU316发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x00
命令字 1 0x20
数据长度 1 0x14 (即 20 字节)
数据 14 应用运行参数,见 业务信息说明
校验和 1 从帧头开始按字节求和,结果对256求余

MCU返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x20
数据长度 1 0x00
数据 0 无数据
校验和 1 从帧头开始按字节求和,结果对256求余

6.2.2 媒体控制(命令字:0x21)

MCU发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x21
数据长度 1 0x01 (即 1 字节)
数据 1 媒体控制命令,见媒体控制字段
0x00 音量+ / Vol Up
0x01 音量- / Vol Down
0x02 播放 / PLAY
0x03 下一曲 / NEXT
0x04 上一曲 / PREV
0x05 快进 / FORWARD
0x06 快退 / REWIND
0x07 静音 / MUTE
校验和 1 从帧头开始按字节求和,结果对256求余

XU316返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x01
命令字 1 0x21
数据长度 1 0x00
数据 0 无数据
校验和 1 从帧头开始按字节求和,结果对256求余

6.2.3 设置播放音频流格式和类型(命令字:0x22)

XU316发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x22
数据长度 1 0x02 (即 2 字节)
数据 2 音频流格式和类型,见 音频流格式和类型字段
校验和 1 从帧头开始按字节求和,结果对256求余

MCU返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x01
命令字 1 0x22
数据长度 1 0x00
数据 0 无数据
校验和 1 从帧头开始按字节求和,结果对256求余

6.2.4 设置音频模式(命令字:0x23)

MCU发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x23
数据长度 1 0x05 (即 5 字节)
数据 5 音频模式,见 音频模式字段
校验和 1 从帧头开始按字节求和,结果对256求余

XU316返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x01
命令字 1 0x23
数据长度 1 0x00
数据 0 无数据
校验和 1 从帧头开始按字节求和,结果对256求余

6.2.5 发送播放音量(命令字:0x24)

XU316发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x24
数据长度 1 0x02 (即 2 字节)
数据 2 左声道:0xFF Mute,0-0dB -127:-127dB
右声道:0xFF Mute,0-0dB -127:-127dB
校验和 1 从帧头开始按字节求和,结果对256求余

MCU返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x01
命令字 1 0x24
数据长度 1 0x00
数据 0 无数据
校验和 1 从帧头开始按字节求和,结果对256求余

6.2.6 发送录音音量(命令字:0x25)

XU316发送

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x03
命令字 1 0x25
数据长度 1 0x01 (即 1 字节)
数据 1 0xFF Mute,0-0dB -127:-127dB
校验和 1 从帧头开始按字节求和,结果对256求余

MCU返回

字段 字节数 说明
帧头 2 0x55aa
版本 1 0x01
命令字 1 0x25
数据长度 1 0x00
数据 0 无数据
校验和 1 从帧头开始按字节求和,结果对256求余

6.3 MCU OTA升级命令(透传方式)

6.3.1 HID启动MCU OTA升级命令

XU316发送:(HID报告ID1输出报告40字节)

字段 字节数 说明
帧头 2 0xaa55
控制字 1 0x01
扩展字节 3 FileSize
FileSize 1 数据字段中数据的长度
数据 32 默认为0(此字段用于可能的扩展数据)
校验和 1 从帧头开始按字节求和,结果对256求余

MCU返回

字段 字节数 说明
帧头 2 0xaa55
控制字 1 0x01
数据 4
校验和 1 从帧头开始按字节求和,结果对256求余

6.3.2 HID发送MCU升级数据包

XU316发送

字段 字节数 说明
帧头 2 0xaa55
控制字 1 0x02
扩展字节 3 address:表示升级数据的地址(通常用于指定升级位置或块)
数据长度 1 data字段中数据的长度
数据 32 data
校验和 1 从帧头开始按字节求和,结果对256求余

MCU返回

字段 字节数 说明
帧头 2 0xaa55
控制字 1 0x02
数据 4
校验和 1 从帧头开始按字节求和,结果对256求余

6.3.3 HID发送MCU升级结束包

XU316发送

字段 字节数 说明
帧头 2 0xaa55
控制字 1 0x03
扩展字节 3 保留(默认为0)
数据长度 1 data字段中数据的长度
数据 32 保留(默认为0)
校验和 1 从帧头开始按字节求和,结果对256求余

MCU返回

字段 字节数 说明
帧头 2 0xaa55
控制字 1 0x03
数据 4
校验和 1 从帧头开始按字节求和,结果对256求余

7. 业务信息

7.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 对所有字段(VID1, PID1, VID2, PID2, ManufactureName, ProductName, SerialNumber)计算的 32-bit CRC 校验值

MCU可以根据XU316传回的的CRC来判断是否需要更新产品基础信息。

7.2 上电配置信息

字段 字节数 说明
默认音频模式 5 见音频模式字段说明
静音时间 2 0-65535(ms)
麦克风默认音量 1 见麦克风音量字段说明
DAC左声道默认音量 1 见DAC音量字段说明
DAC右声道默认音量 1 见DAC音量字段说明
CRC 4 对所有字段(默认音频模式、静音时间、麦克风音量、DAC左/右声道音量)计算的 32-bit CRC 校验值

MCU可以根据XU316传回的的CRC来判断是否需要更新上电配置信息。

7.3 应用运行参数

字段 字节数 说明
音频模式 5 见音频模式字段说明
静音时间 2 0-65535(ms)
麦克风音量 1 见麦克风音量字段说明
DAC左声道音量 1 见DAC音量字段说明
DAC右声道音量 1 见DAC音量字段说明
CRC 4 对所有字段(音频模式、静音时间、麦克风音量、DAC左/右声道音量)计算的 32-bit CRC 校验值

7.4 用户配置参数

字段 字节数 说明
音频模式 5 见音频模式字段说明
静音时间 2 0-65535(ms)
麦克风音量 1 见麦克风音量字段说明
DAC左声道音量 1 见DAC音量字段说明
DAC右声道音量 1 见DAC音量字段说明
CRC 4 对所有字段(音频模式、静音时间、麦克风音量、DAC左/右声道音量)计算的 32-bit CRC 校验值

8. 数据字段说明

8.1 重启原因

长度 说明
1字节 0x00 上电重启
0x01 切换模式重启
0xFF 其他原因重启

8.2 启动选项

长度 说明
1字节 0x00 使用所有的默认信息
0x01 需要更新基础产品信息
0x02 需要更新上电配置信息
0x04 需要更新IO配置信息

8.3 音频模式

长度 功能位 说明
6字节
BYTE 0 Bit 7 I2S Mode:0:Master、1:Slave
Bit 6 Sync Mode: 0:Async、1:Sync
Bit 5 MIDI:0:disable、1:enable
Bit 4 SPDIF in:0:disable、1:enable
Bit 3 SPDIF out:0:disable、1:enable
Bit 2 ADAT in:0:disable、1:enable
Bit 1 ADAT out:0:disable、1:enable
Bit 0 DSD out:0:disable、1:enable
BYTE 1 Bit 0-3 AUDIO Sample Rate:
0:44.1KHz、1:48KHz、2:88.2KHz、3:96KHz、
4:176.4KHz、5:192KHz、6:352.8KHz、7:384KHz、
8:705.6KHz、9:768KHz、10:1411.2KHz、11:1536KHz
Bit 4 MQA:0:disable、1:enable
Bit 5 Audio Class: 0:UAC 1.0、1:USB UAC 2.0
Bit 6-7 AUDIO WIDTH:0:16bit、1:24bit、2:32bit
BYTE 2-3 Bit 0-5 Input:0:disable、x(>0):channel count
Bit 6-11 Output:0:disable、x(>0):channel count
Bit 12-15 Other cfg
BYTE 4 0:USB MODE、1:OPT MODE、2:COAX MODE、3:BT MODE、
4:HDMI ARC MODE、5:WIFI MODE、6:AIRPLAY MODE、7:SPOTIFY MODE

8.4 麦克风音量

长度 说明
1字节 0xFF Mute
0x00-0xFE 有MCU和HID应用自己定义

8.5 DAC音量

长度 说明
1字节 0x00 Mute
0x01-0xFF 有MCU和HID应用自己定义

8.6 上电模式

长度 说明
1字节 0x00 默认模式,启动时使用上电配置信息的参数
0x01 断电记忆模式,启动时使用从MCU获取的用户配置参数

8.7 媒体控制(媒体按键)

长度 说明
1字节 0x00 音量+/Vol Up
0x01 音量-/Vol Down
0x02 播放/PLAY
0x03 下一曲/NEXT
0x04 上一曲/PREV
0x05 快进/FORWARD
0x06 快退/REWIND
0x07 静音/MUTE

8.8 音频流格式和类型

音频流格式

长度 说明
1字节 0x00 AUDIO_PCM_44100
0x01 AUDIO_PCM_48000
0x02 AUDIO_PCM_88200
0x03 AUDIO_PCM_96000
0x04 AUDIO_PCM_176400
0x05 AUDIO_PCM_192000
0x06 AUDIO_PCM_352800
0x07 AUDIO_PCM_384000
0x08 AUDIO_PCM_705600
0x09 AUDIO_PCM_768000
0x0A AUDIO_PCM_1441200
0x0B AUDIO_PCM_1536000
0x0C AUDIO_PCM_32000
0x0D AUDIO_PCM_64000
0x0E AUDIO_PCM_128000
0x0F AUDIO_PCM_256000
0x10 AUDIO_PCM_512000
0x11 AUDIO_DSD_64
0x12 AUDIO_DSD_128
0x13 AUDIO_DSD_256
0x14 AUDIO_DSD_512
0x15 AUDIO_DSD_1024
0x16 AUDIO_MQA_44100
0x17 AUDIO_MQA_88200
0x18 AUDIO_MQA_176400
0x19 AUDIO_MQA_352800
0x1A AUDIO_MQA_705600
0x1B AUDIO_MQA_1411200
0x1C AUDIO_MQA_2822400
0x1D AUDIO_MQA_5644800
0x1E AUDIO_MQA_48000
0x1F AUDIO_MQA_96000
0x20 AUDIO_MQA_192000
0x21 AUDIO_MQA_384000
0x22 AUDIO_MQA_768000
0x23 AUDIO_MQA_1536000
0x24 AUDIO_MQA_3072000
0x25 AUDIO_MQA_6144000
0x26 AUDIO_MQA_64000
0x27 AUDIO_MQA_128000
0x28 AUDIO_MQA_256000
0x29 AUDIO_MQA_512000
0x2A AUDIO_MQA_1024000
0x2B AUDIO_MQA_2048000
0x2C AUDIO_MQA_4096000
0x2D AUDIO_MQA_8192000
0xFF AUDIO_NO_USED

音频类型

长度 说明
1字节 0x00 PCM
0x01 Reserve
0x02 MQA
0x03 MQB
0x04 MQA_Studio
0x05 DSD