diff --git a/.DS_Store b/.DS_Store index c44617c..4c43080 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/en/docs/dev_doc/protocols/xu316_zerocode_protocol.md b/en/docs/dev_doc/protocols/xu316_zerocode_protocol.md index 4a4115a..ccb70fe 100644 --- a/en/docs/dev_doc/protocols/xu316_zerocode_protocol.md +++ b/en/docs/dev_doc/protocols/xu316_zerocode_protocol.md @@ -228,6 +228,7 @@ sequenceDiagram | 0x27 | Set unmute | MCU→XU316 | | 0x28 | Send audio format time delay | MCU→XU316 | | 0x29 | Report USB connection status | XU316→MCU | + | 0x30 | Set Mute pin inversion | MCU→XU316 | === "HID-MCU Passthrough Commands (0xEE-0xEF)" | Command | Command Description | Direction | @@ -373,7 +374,7 @@ sequenceDiagram **Command Example** ``` - 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 + 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 27 2B F6 44 51 ``` **Field Breakdown** @@ -391,8 +392,8 @@ sequenceDiagram | ManufactureName | 16 bytes | `50 48 41 54 45 4E 00 00 00 00 00 00 00 00 00 00` | ASCII string `PHATEN`, padded with `00` to 16 bytes | | ProductName | 16 bytes | `58 55 33 31 36 20 44 41 43 00 00 00 00 00 00 00` | ASCII string `XU316 DAC`, padded with `00` to 16 bytes | | SerialNumber | 16 bytes | `53 4E 32 34 30 30 30 31 00 00 00 00 00 00 00 00` | ASCII string `SN240001`, padded with `00` to 16 bytes | - | CRC | 4 bytes | `12 34 56 78` | 32-bit CRC for product basic info (example only) | - | Checksum | 1 byte | `D9` | Sum of all bytes from `55` to `78`, modulo 256 | + | CRC | 4 bytes | `27 2B F6 44` | 32-bit CRC for product basic info (little-endian, example only) | + | Checksum | 1 byte | `51` | Sum of all bytes from `55` to `44`, modulo 256 | #### 3.2.3 Read Power-On Config Info (0x02) @@ -437,7 +438,7 @@ sequenceDiagram **Command Example** ``` - 55 AA 03 02 0E 01 00 00 00 00 01 2C 20 30 30 11 22 33 44 6A + 55 AA 03 02 0E 01 00 00 00 00 01 2C 20 30 30 C1 7A 1E 1A 33 ``` **Field Breakdown** @@ -453,8 +454,8 @@ sequenceDiagram | Microphone default volume | 1 byte | `20` | Example default microphone volume | | DAC left channel default volume | 1 byte | `30` | Example default left channel volume | | DAC right channel default volume | 1 byte | `30` | Example default right channel volume | - | CRC | 4 bytes | `11 22 33 44` | 32-bit CRC for power-on config (example only) | - | Checksum | 1 byte | `6A` | Sum of all bytes from `55` to `44`, modulo 256 | + | CRC | 4 bytes | `C1 7A 1E 1A` | 32-bit CRC for power-on config (little-endian, example only) | + | Checksum | 1 byte | `33` | Sum of all bytes from `55` to `1A`, modulo 256 | #### 3.2.4 Get Current Input/Output Mode (0x03) @@ -534,7 +535,7 @@ sequenceDiagram **Command Example** ``` - 55 AA 03 04 0E 02 00 00 00 00 00 C8 18 28 28 55 66 77 88 00 + 55 AA 03 04 0E 02 00 00 00 00 00 C8 18 28 28 3A 8A 5B 2E 93 ``` **Field Breakdown** @@ -550,8 +551,8 @@ sequenceDiagram | Microphone volume | 1 byte | `18` | Example current microphone volume | | DAC left channel volume | 1 byte | `28` | Example current left channel volume | | DAC right channel volume | 1 byte | `28` | Example current right channel volume | - | CRC | 4 bytes | `55 66 77 88` | 32-bit CRC for user configuration (example only) | - | Checksum | 1 byte | `00` | Sum of all bytes from `55` to `88`, modulo 256 | + | CRC | 4 bytes | `3A 8A 5B 2E` | 32-bit CRC for user configuration (little-endian, example only) | + | Checksum | 1 byte | `93` | Sum of all bytes from `55` to `2E`, modulo 256 | #### 3.2.6 Startup Complete Command (0x05) @@ -698,6 +699,24 @@ sequenceDiagram | 0x06 | Rewind | Rewind in current track | | 0x07 | Mute | Toggle system mute state | +=== "MCU Sends Example" + + **Command Example** + ``` + 55 AA 03 21 01 02 26 + ``` + + **Field Breakdown** + + | Byte Segment | Length | Example | Description | + |:-------|:-----|:-------|:-----| + | Frame Header | 2 bytes | `55 AA` | Fixed frame header indicating start of a protocol frame | + | Version | 1 byte | `03` | Indicates this frame is a command sent by MCU to XU316 | + | Command | 1 byte | `21` | Current command is “Media Control” | + | Data Length | 1 byte | `01` | One data byte follows | + | Control code | 1 byte | `02` | Indicates “Play/Pause” | + | Checksum | 1 byte | `26` | Sum of all bytes from `55` to control code, modulo 256 | + #### 3.3.3 Report Playback Audio Stream Format and Type (0x22) === "Command Format" @@ -771,13 +790,31 @@ sequenceDiagram - Typically triggered by user operation, such as pressing mode selection button - XU316 may need to restart to load new mode firmware +=== "MCU Sends Example" + + **Command Example** + ``` + 55 AA 03 23 05 02 00 00 00 00 2C + ``` + + **Field Breakdown** + + | Byte Segment | Length | Example | Description | + |:-------|:-----|:-------|:-----| + | Frame Header | 2 bytes | `55 AA` | Fixed frame header indicating start of a protocol frame | + | Version | 1 byte | `03` | Indicates this frame is a command sent by MCU to XU316 | + | Command | 1 byte | `23` | Current command is “Set Input/Output Mode” | + | Data Length | 1 byte | `05` | 5 mode bytes follow | + | Input/output mode | 5 bytes | `02 00 00 00 00` | Example target mode data; definitions depend on product specification | + | Checksum | 1 byte | `2C` | Sum of all bytes from `55` to the last mode byte, modulo 256 | + #### 3.3.5 Send Playback Volume (0x24) === "Command Format" - **XU316 Returns** + **XU316 Sends** ``` Frame Header: 2 bytes - 0x55aa - Version: 1 byte - 0x03 + Version: 1 byte - 0x00 Command: 1 byte - 0x24 Data Length: 1 byte - 0x02 (2 bytes) Data: 2 bytes @@ -786,10 +823,10 @@ sequenceDiagram Checksum: 1 byte - Sum of all bytes from frame header, modulo 256 ``` - **MCU Sends** + **MCU Returns** ``` Frame Header: 2 bytes - 0x55aa - Version: 1 byte - 0x00 + Version: 1 byte - 0x03 Command: 1 byte - 0x24 Data Length: 1 byte - 0x00 Data: 0 bytes @@ -820,20 +857,20 @@ sequenceDiagram #### 3.3.6 Send Recording Volume (0x25) === "Command Format" - **MCU Sends** + **XU316 Sends** ``` Frame Header: 2 bytes - 0x55aa - Version: 1 byte - 0x03 + Version: 1 byte - 0x00 Command: 1 byte - 0x25 Data Length: 1 byte - 0x01 (1 byte) Data: 1 byte - 0xFF Mute, 0-0dB -127: -127dB Checksum: 1 byte - Sum of all bytes from frame header, modulo 256 ``` - **XU316 Returns** + **MCU Returns** ``` Frame Header: 2 bytes - 0x55aa - Version: 1 byte - 0x00 + Version: 1 byte - 0x03 Command: 1 byte - 0x25 Data Length: 1 byte - 0x00 Data: 0 bytes @@ -988,7 +1025,64 @@ sequenceDiagram | Data Length | 1 byte | `00` | Pure acknowledgment frame with no data | | Checksum | 1 byte | `2B` | Sum of all bytes from `55` to `00`, modulo 256 | -#### 3.3.11 Get Firmware Version Command (0xF1) +#### 3.3.11 Set Mute Pin Inversion (0x30) + +=== "Command Format" + **MCU Sends** + ``` + Frame Header: 2 bytes - 0x55aa + Version: 1 byte - 0x03 + Command: 1 byte - 0x30 + Data Length: 1 byte - 0x01 + Data: 1 byte + B0: Inversion flag + 0x00 = Normal logic (High level unmute, Low level mute) + 0x01 = Inverted logic (Low level unmute, High level mute) + Checksum: 1 byte - Sum of all bytes from frame header, modulo 256 + ``` + + **XU316 Returns** + ``` + Frame Header: 2 bytes - 0x55aa + Version: 1 byte - 0x00 + Command: 1 byte - 0x30 + Data Length: 1 byte - 0x01 + Data: 1 byte + B0: Current inversion flag status + 0x00 = Normal logic + 0x01 = Inverted logic + Checksum: 1 byte - Sum of all bytes from frame header, modulo 256 + ``` + +=== "Function Description" + 1. This command is used to set inversion logic for the Mute pin output + 2. Use this command when certain hardware designs have opposite Mute polarity from default + 3. The configuration is automatically saved to Flash and persists after power-off + 4. Takes effect immediately and returns current status + +=== "Use Cases" + - Mute pin polarity is opposite to default in hardware design + - Need to adapt different hardware revisions of devices + +=== "MCU Example" + + **Command Example** + ``` + 55 AA 03 30 01 01 34 + ``` + + **Field Breakdown** + + | Byte Segment | Length | Example | Description | + |:-------|:-----|:-------|:-----| + | Frame Header | 2 bytes | `55 AA` | Fixed frame header | + | Version | 1 byte | `03` | Sent by MCU to XU316 | + | Command | 1 byte | `30` | Set Mute pin inversion | + | Data Length | 1 byte | `01` | 1 data byte follows | + | Inversion flag | 1 byte | `01` | 0x01 = inverted logic | + | Checksum | 1 byte | `34` | Sum of all bytes from `55` to inversion flag, modulo 256 | + +#### 3.3.12 Get Firmware Version Command (0xF1) === "Command Format" **MCU Sends** @@ -1007,13 +1101,31 @@ sequenceDiagram Version: 1 byte - 0x00 Command: 1 byte - 0xF1 Data Length: 1 byte - 0 - Data: 0 bytes + Data: 3 bytes Checksum: 1 byte - Sum of all bytes from frame header, modulo 256 ``` === "Function Description" - Get firmware version +=== "MCU Sends Example" + + **Command Example** + ``` + 55 AA 03 F1 02 00 00 F5 + ``` + + **Field Breakdown** + + | Byte Segment | Length | Example | Description | + |:-------|:-----|:-------|:-----| + | Frame Header | 2 bytes | `55 AA` | Fixed frame header indicating start of a protocol frame | + | Version | 1 byte | `03` | Indicates this frame is a command sent by MCU to XU316 | + | Command | 1 byte | `F1` | Current command is “Get Firmware Version Command” | + | Data Length | 1 byte | `02` | Two data bytes follow | + | Data | 2 bytes | `00 00` | Reserved bytes, set to `00` as placeholder in this example | + | Checksum | 1 byte | `F5` | Sum of all bytes from `55` to the last data byte, modulo 256 | + ### 3.4 DAC Configuration Selection (0xF0) @@ -1045,6 +1157,25 @@ sequenceDiagram - Test command for MCU to set DAC configuration selection in XU316. Let XU316 configure DAC via DAC I2C or MCU configure DAC itself - This command is product-specific and not supported by all products. Please refer to product specification for support details. +=== "MCU Sends Example" + + **Command Example** + ``` + 55 AA 03 F0 04 00 00 00 00 F6 + ``` + + **Field Breakdown** + + | Byte Segment | Length | Example | Description | + |:-------|:-----|:-------|:-----| + | Frame Header | 2 bytes | `55 AA` | Fixed frame header indicating start of a protocol frame | + | Version | 1 byte | `03` | Indicates this frame is a command sent by MCU to XU316 | + | Command | 1 byte | `F0` | Current command is “DAC Configuration Selection Command” | + | Data Length | 1 byte | `04` | 4 data bytes follow | + | Byte 0 | 1 byte | `00` | Enable XU316 to configure DAC via I2C | + | Byte 1-3 | 3 bytes | `00 00 00` | Reserved bytes, all set to `00` in this example | + | Checksum | 1 byte | `F6` | Sum of all bytes from `55` to the last data byte, modulo 256 | + ### 3.5 HID and MCU Data Passthrough Commands via XU316 #### 3.5.1 HID Passthrough Data to MCU via XU316 (0xEE) diff --git a/zh/docs/dev_doc/protocols/xu316_zerocode_protocol.md b/zh/docs/dev_doc/protocols/xu316_zerocode_protocol.md index eba2a81..8c6e2f9 100755 --- a/zh/docs/dev_doc/protocols/xu316_zerocode_protocol.md +++ b/zh/docs/dev_doc/protocols/xu316_zerocode_protocol.md @@ -228,6 +228,7 @@ sequenceDiagram | 0x27 | 设置 unmute | MCU→XU316 | | 0x28 | 发送音频格式的时间延迟 | MCU→XU316 | | 0x29 | 报告USB连接状态 | XU316→MCU | + | 0x30 | 设置Mute引脚反转 | MCU→XU316 | === "HID-MCU互相透传命令(0xEE-0xEF)" | 命令字 | 命令描述 | 发送方向 | @@ -373,7 +374,7 @@ sequenceDiagram **命令示例** ``` - 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 + 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 27 2B F6 44 51 ``` **逐段解析** @@ -391,8 +392,8 @@ sequenceDiagram | 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 取余的结果 | + | CRC | 4字节 | `27 2B F6 44` | 产品基础信息的 32 位 CRC 校验值(小端序),这里仅作为示例演示 | + | 校验和 | 1字节 | `51` | 从 `55` 开始到 `44` 结束,所有字节相加后对 256 取余的结果 | #### 3.2.3 读取上电配置信息(0x02) @@ -437,7 +438,7 @@ sequenceDiagram **命令示例** ``` - 55 AA 03 02 0E 01 00 00 00 00 01 2C 20 30 30 11 22 33 44 6A + 55 AA 03 02 0E 01 00 00 00 00 01 2C 20 30 30 C1 7A 1E 1A 33 ``` **逐段解析** @@ -453,8 +454,8 @@ sequenceDiagram | 麦克风默认音量 | 1字节 | `20` | 示例默认麦克风音量 | | DAC左声道默认音量 | 1字节 | `30` | 示例默认左声道音量 | | DAC右声道默认音量 | 1字节 | `30` | 示例默认右声道音量 | - | CRC | 4字节 | `11 22 33 44` | 上电配置的 32 位 CRC 校验值,这里仅作为示例演示 | - | 校验和 | 1字节 | `6A` | 从 `55` 开始到 `44` 结束,所有字节相加后对 256 取余的结果 | + | CRC | 4字节 | `C1 7A 1E 1A` | 上电配置的 32 位 CRC 校验值(小端序),这里仅作为示例演示 | + | 校验和 | 1字节 | `33` | 从 `55` 开始到 `1A` 结束,所有字节相加后对 256 取余的结果 | #### 3.2.4 获取当前输入输出模式(0x03) @@ -534,7 +535,7 @@ sequenceDiagram **命令示例** ``` - 55 AA 03 04 0E 02 00 00 00 00 00 C8 18 28 28 55 66 77 88 00 + 55 AA 03 04 0E 02 00 00 00 00 00 C8 18 28 28 3A 8A 5B 2E 93 ``` **逐段解析** @@ -550,8 +551,8 @@ sequenceDiagram | 麦克风音量 | 1字节 | `18` | 示例当前麦克风音量 | | DAC左声道音量 | 1字节 | `28` | 示例当前左声道音量 | | DAC右声道音量 | 1字节 | `28` | 示例当前右声道音量 | - | CRC | 4字节 | `55 66 77 88` | 用户配置的 32 位 CRC 校验值,这里仅作为示例演示 | - | 校验和 | 1字节 | `00` | 从 `55` 开始到 `88` 结束,所有字节相加后对 256 取余的结果 | + | CRC | 4字节 | `3A 8A 5B 2E` | 用户配置的 32 位 CRC 校验值(小端序),这里仅作为示例演示 | + | 校验和 | 1字节 | `93` | 从 `55` 开始到 `2E` 结束,所有字节相加后对 256 取余的结果 | #### 3.2.6 启动完成命令(0x05) @@ -700,6 +701,7 @@ sequenceDiagram === "MCU发送示例" + **命令示例** ``` 55 AA 03 21 01 02 26 ``` @@ -790,6 +792,7 @@ sequenceDiagram === "MCU发送示例" + **命令示例** ``` 55 AA 03 23 05 02 00 00 00 00 2C ``` @@ -925,6 +928,7 @@ sequenceDiagram === "MCU发送示例" + **命令示例** ``` 55 AA 03 26 01 01 2A ``` @@ -1039,7 +1043,64 @@ sequenceDiagram | 数据长度 | 1字节 | `00` | 表示这是一条纯确认帧,不携带额外数据 | | 校验和 | 1字节 | `2B` | 从 `55` 开始到 `00` 结束,所有字节相加后对 256 取余的结果 | -#### 3.3.11 获取固件版本命令(0xF1) +#### 3.3.11 设置Mute引脚反转(0x30) + +=== "命令格式" + **MCU发送** + ``` + 帧头: 2字节 - 0x55aa + 版本: 1字节 - 0x03 + 命令字: 1字节 - 0x30 + 数据长度: 1字节 - 0x01 + 数据: 1字节 + B0: 反转标志 + 0x00 = 正常逻辑(高电平解除静音,低电平静音) + 0x01 = 反转逻辑(低电平解除静音,高电平静音) + 校验和: 1字节 - 从帧头开始按字节求和,结果对256求余 + ``` + + **XU316返回** + ``` + 帧头: 2字节 - 0x55aa + 版本: 1字节 - 0x00 + 命令字: 1字节 - 0x30 + 数据长度: 1字节 - 0x01 + 数据: 1字节 + B0: 当前反转标志状态 + 0x00 = 正常逻辑 + 0x01 = 反转逻辑 + 校验和: 1字节 - 从帧头开始按字节求和,结果对256求余 + ``` + +=== "功能说明" + 1. 该命令用于设置Mute引脚的输出逻辑反转 + 2. 当某些硬件设计的Mute逻辑与默认相反时,使用此命令进行适配 + 3. 配置会自动保存到Flash,断电后保持 + 4. 设置后立即生效,并返回当前状态 + +=== "使用场景" + - 硬件设计中Mute脚极性与默认相反 + - 需要适配不同硬件版本的设备 + +=== "MCU示例" + + **命令示例** + ``` + 55 AA 03 30 01 01 34 + ``` + + **逐段解析** + + | 字节段 | 长度 | 示例值 | 说明 | + |:-------|:-----|:-------|:-----| + | 帧头 | 2字节 | `55 AA` | 固定帧头 | + | 版本 | 1字节 | `03` | MCU发送给XU316 | + | 命令字 | 1字节 | `30` | 设置Mute引脚反转 | + | 数据长度 | 1字节 | `01` | 1字节数据 | + | 反转标志 | 1字节 | `01` | 0x01=反转逻辑 | + | 校验和 | 1字节 | `34` | 从 `55` 开始到反转标志结束,所有字节相加后对 256 取余的结果 | + +#### 3.3.12 获取固件版本命令(0xF1) === "命令格式" **MCU发送** @@ -1067,6 +1128,7 @@ sequenceDiagram === "MCU发送示例" + **命令示例** ``` 55 AA 03 F1 02 00 00 F5 ``` @@ -1115,6 +1177,7 @@ sequenceDiagram === "MCU发送示例" + **命令示例** ``` 55 AA 03 F0 04 00 00 00 00 F6 ```