# DX-WF24 AT 命令参考

## 1. 适用范围与约定

本文整理 DX-WF24 Wi-Fi/BLE 模块的串口 AT 命令，不是通用 ESP-AT 命令表。不同厂商或固件的同名命令，参数含义可能不同。

来源：

- `DX-WF24_串口UART_应用指导.pdf`，正文标注版本 V2.0、日期 2026-03-17。
- `DX-WF24 通讯操作示例.pdf`。
- 本次 `/dev/ttyUSB0` 测试记录，固件版本 `WF24_V1.1.0`。
- 资料目录：`/home/xuke/Downloads/DX-WF24资料包 20250717/02 模块功能应用指导/`。

**验证范围：**本次实际得到成功响应的命令包括 `AT`、`AT+GMR`、`AT+UART_DEF?`、`AT+RST`。其余命令按厂家文档整理，未逐项实测；新版本文档中的功能不保证旧固件全部支持。

### 串口与格式

| 项目 | 默认值 |
|---|---|
| 波特率 | 115200 |
| 数据位 | 8 |
| 校验 | 无 |
| 停止位 | 1 |
| 本次测试流控 | 无 |
| 普通 AT 命令结束符 | CRLF，即 `\r\n`，十六进制 `0D 0A` |

- 命令使用大写和 ASCII 标点，不能使用中文逗号或全角问号。
- 下文 `<参数>` 是占位符，发送时替换为实际值，不发送尖括号。
- `[参数]` 表示可选参数，不发送方括号。
- 表中的普通命令省略末尾 `\r\n`；`+++` 是例外，**不带回车换行**。
- 成功响应通常以 `OK` 结束；错误和异步消息见后文。
- 长度参数指字节数，不是字符数。UTF-8 中文字符通常占多个字节。
- 测试中连续发送完整 `AT\r\n` 可以成功，按键间隔较大的逐字发送曾出现异常响应。脚本应完整发送一条命令。

### 默认网络参数

- SoftAP：SSID `WF24`，密码 `12345678`，IP/网关 `10.0.0.1`，掩码 `255.255.255.0`。
- BLE 名称：`WF24-BLE`。
- BLE 服务 UUID：`FFE0`；特征 UUID：`FFE1`（Notify/Write）、`FFE2`（Write）。
- 上述是厂家默认值，不表示设备当前一定仍使用这些配置。

## 2. 基础命令

对应 UART 指导 §5.1，印刷页 10–11。

| 命令 | 用途 | 响应/注意事项 |
|---|---|---|
| `AT` | 通信测试 | `OK` |
| `AT+GMR` | 查询固件版本 | `+VERSION=<version>`，随后 `OK` |
| `AT+UART_DEF?` | 查询串口参数 | `+UART_DEF:<baudrate>,<databits>,<stopbits>,<parity>` |
| `AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>` | 保存串口配置到 Flash | **自动重启**；主机随后须使用新参数 |
| `AT+RST` | 软件重启 | `OK`，随后 `power on`；会中断连接 |
| `AT+RESTORE` | 恢复出厂设置 | **擦除保存的配置并重启，谨慎执行** |

UART 参数：

- 波特率：4800、9600、19200、38400、57600、115200、230400、460800、921600、2000000。
- 数据位：7 或 8。
- 停止位：1 或 2。
- 校验：0=None，1=Odd，2=Even。

设置示例（会重启，不要混入只读巡检脚本）：

```text
AT+UART_DEF=115200,8,1,0
```

本次实测：

```text
发送: AT+GMR\r\n
收到: \r\n+VERSION=WF24_V1.1.0\r\n\r\nOK\r\n

发送: AT+UART_DEF?\r\n
收到: \r\n+UART_DEF:115200,8,1,0\r\n\r\nOK\r\n
```

## 3. Wi-Fi 命令

对应 UART 指导 §5.2，印刷页 12–20。

### 3.1 模式、连接与扫描

| 命令 | 用途/参数 |
|---|---|
| `AT+CWMODE?` | 查询 Wi-Fi 模式 |
| `AT+CWMODE=<mode>` | **0=Station，1=SoftAP，2=Station+SoftAP**；默认 0 |
| `AT+CWJAP?` | 查询已连接 AP 信息，包括 SSID、BSSID、信道、RSSI |
| `AT+CWJAP=<ssid>,<pwd>[,<bssid>]` | Station 连接 AP；SSID/密码最长各 32 字节 |
| `AT+CWJAPINFO?` | 查询保存的 Wi-Fi 名称和密码；**可能泄露密码，注意日志** |
| `AT+CWQAP` | Station 断开 AP |
| `AT+CWSTATE?` | 查询 Wi-Fi 状态与 SSID |
| `AT+CWLAP?` | 扫描可用 AP，需 Station 模式 |
| `AT+CWHOSTNAME?` | 查询路由器侧显示的主机名 |
| `AT+CWHOSTNAME=<host_name>` | 设置主机名，最长 28 字节，默认 `WF24` |

`CWSTATE` 状态值：

| 值 | 含义 |
|---|---|
| 0 | 尚未进行 Wi-Fi 连接 |
| 1 | 已连接 AP，但还未获取 IPv4 地址 |
| 2 | 已连接 AP，并已获取 IPv4 地址 |
| 3 | 正在连接或重连 |
| 4 | 已断开 |

连接示例（替换为自己的网络）：

```text
AT+CWMODE=0
AT+CWJAP=YOUR_SSID,YOUR_PASSWORD
AT+CWSTATE?
AT+CIPSTA?
```

`CWJAP` 的 `OK` 不一定代表已经拿到 IP；还应等待类似 `+CWJAP:1,<ssid>,<ip>` 的通知，或查询状态是否为 2。

### 3.2 SoftAP

| 命令 | 用途/参数 |
|---|---|
| `AT+CWSAP?` | 查询 SoftAP 配置 |
| `AT+CWSAP=<ssid>,<pwd>[,<channel>[,<ssid_hidden>]]` | 设置 SoftAP；信道 0–13，隐藏 SSID：0=不隐藏、1=隐藏 |
| `AT+CWQIF` | 断开所有接入 SoftAP 的 Station |
| `AT+CWQIF=<mac>` | 断开指定 Station |
| `AT+CIPAP?` | 查询 SoftAP 的 IP、网关、掩码 |

示例：

```text
AT+CWMODE=1
AT+CWSAP=WF24-Test,12345678,11,0
AT+CIPAP?
```

**注意：**文档说明密码不足 8 位时会变为无密码模式，不能用短密码代替安全密码。

### 3.3 IP、DHCP、MAC、报头

| 命令 | 用途/参数 |
|---|---|
| `AT+CIPSTA?` | 查询 Station 的 IP、网关、掩码 |
| `AT+CIPSTA=<ip>,<gateway>,<netmask>` | 设置静态 IP；须先关闭 DHCP |
| `AT+CWDHCP?` | 查询 DHCP 状态 |
| `AT+CWDHCP=<operate>` | 0=关闭，1=开启；默认 1 |
| `AT+CIPSTAMAC?` | 查询 Station MAC |
| `AT+CIPSTAMAC=<mac>` | 设置 Station MAC，**自动重启** |
| `AT+CIPAPMAC?` | 查询 SoftAP MAC |
| `AT+CIPAPMAC=<mac>` | 设置 SoftAP MAC，**自动重启** |
| `AT+REHEAD?` | 查询 TCP/UDP/MQTT 接收报头开关 |
| `AT+REHEAD=<mode>` | 0=关闭，1=开启；默认 1 |
| `AT+PING=<host>` | Ping 域名或 IPv4 地址，返回耗时或超时信息 |

静态 IP 示例（地址须按实际网络规划，避免冲突）：

```text
AT+CWDHCP=0
AT+CIPSTA=192.168.1.80,192.168.1.1,255.255.255.0
```

MAC 设置限制：最高字节的 bit0 不能为 1。厂家文档还要求 AP+STA 模式下两个 MAC 设置一致；这是该文档的模块专用要求，不应推广到其他设备。

### 3.4 SNTP

| 命令 | 用途/参数 |
|---|---|
| `AT+CIPSNTPCFG?` | 查询 SNTP 配置 |
| `AT+CIPSNTPCFG=<enable>,<timezone>,<server>` | enable：0=禁用、1=启用；时区 -12 至 12，单位小时；**自动重启** |
| `AT+CIPSNTPTIME?` | 查询网络时间 |

示例：

```text
AT+CIPSNTPCFG=1,8,cn.ntp.org.cn
AT+CIPSNTPTIME?
```

查询正确时间前需联网并完成同步。原文同步通知拼写为 `NETWORK TIME SUCCWSS`，具体以固件实际输出为准。

## 4. BLE 命令

对应 UART 指导 §5.3，印刷页 21–22。

| 命令 | 用途/参数 |
|---|---|
| `AT+BLUFINAME?` | 查询蓝牙名称 |
| `AT+BLUFINAME=<name>` | 设置名称，最长 26 字节；**需重启才生效** |
| `AT+BLUFIADDR` | 查询蓝牙 MAC；这里没有 `?` |
| `AT+BLUFI?` | 查询广播状态 |
| `AT+BLUFI=<mode>` | 0=关闭广播，1=开启广播；立即生效 |
| `AT+BLUFISEND?` | 查询 BLE 透传设置 |
| `AT+BLUFISEND=<mode>` | 0=关闭，1=开启 BLE 透传 |
| `+++` | 退出透传，不带 CRLF |

文档对 BLE 透传的操作顺序有矛盾：§1.4 写先设置再连接，§5.3.4 写先连接再设置。本次未实测 BLE，应按固件行为验证，不把其中一种顺序当成确定结论。

## 5. TCP / UDP 命令

对应 UART 指导 §5.4，印刷页 22–26。

| 命令 | 用途/参数 |
|---|---|
| `AT+CIPSERVER?` | 查询 TCP 服务端配置 |
| `AT+CIPSERVER=1,<port>,<type>,<maxlink>` | 建立服务端；type 为 TCP/TCPv6，maxlink 为 1–7 |
| `AT+CIPSERVER=0` | 关闭服务端及其连接 |
| `AT+CIPSTART=TCP,<remote_ip>,<remote_port>` | 建立 TCP 客户端连接 |
| `AT+CIPSTART=UDP,<remote_ip>,<remote_port>,<local_port>,<mode>` | 创建 UDP 会话；0=固定目标，1=动态更新目标 |
| `AT+CIPSTATE?` | 查询 TCP/UDP 会话与 ID |
| `AT+CIPMODE?` | 查询单连接/多连接模式 |
| `AT+CIPMODE=<param>` | **0=多连接，1=单连接**；默认 1 |
| `AT+CIPSEND` | 单连接进入透传，返回 `OK` 和 `>` |
| `AT+CIPSEND=<link_id>,<length>` | 多连接按 ID 和字节数发送；等待 `>` 后发送数据 |
| `+++` | 退出数据模式，不带 CRLF |
| `AT+CIPCLOSE` | 关闭单连接会话 |
| `AT+CIPCLOSE=<link_id>` | 关闭指定会话；ID=20 表示关闭所有会话 |

- 文档给出的上限：TCP 客户端连接 7 个，UDP 会话 5 个。
- 会话 ID 来自 `+CIPSTART:<id>` 或 `AT+CIPSTATE?`，不要假设固定为 0 或 1。
- `CIPMODE` 的含义是此模块的单连接/多连接选择，不能照搬其他模块的同名命令。

### TCP 客户端示例

先连接 Wi-Fi，然后：

```text
AT+CIPMODE=1
AT+CIPSTART=TCP,192.168.1.100,9527
AT+CIPSEND
```

等到 `>` 后，后续串口字节会作为透传数据发送，而不再作为 AT 命令解析。

### 退出透传

厂家规定：三个 `+` 之间的间隔不超过 20ms；第一个 `+` 之前和第三个 `+` 之后各至少保持 20ms 静默。

```bash
sleep 0.1
tsend -e '+++'
sleep 0.1
```

不能写成 `tsend +++`，因为普通 `tsend` 会添加 CRLF。文档说明退出命令没有常规命令回复，不应无条件 `trecv 'OK\r\n'`。

### 多连接定长发送示例

假设已存在会话 ID=1：

```text
AT+CIPMODE=0
AT+CIPSEND=1,8
```

等待 `>` 后，发送恰好 8 字节：

```bash
tsend -e '12345678'
```

## 6. MQTT 命令

对应 UART 指导 §5.5，印刷页 26–32。

| 命令 | 用途 |
|---|---|
| `AT+MQTTCONNCFG?` | 查询连接属性 |
| `AT+MQTTCONNCFG=<keepalive>,<clean_flag>,<lwt_topic>,<lwt_msg>,<lwt_qos>,<lwt_retain>` | 设置心跳、清理会话标志、遗嘱；须未连接 MQTT |
| `AT+MQTTLONGCLIENTID?` | 查询客户端 ID |
| `AT+MQTTLONGCLIENTID=<client_id>` | 设置客户端 ID，最长 256 字节 |
| `AT+MQTTLONGUSERNAME?` | 查询登录用户名 |
| `AT+MQTTLONGUSERNAME=<username>` | 设置用户名，最长 256 字节 |
| `AT+MQTTLONGPASSWORD?` | 查询密码；**避免记录或公开输出** |
| `AT+MQTTLONGPASSWORD=<password>` | 设置密码，最长 256 字节 |
| `AT+MQTTCONN?` | 查询连接状态、服务器、端口、重连配置 |
| `AT+MQTTCONN=<host>,<port>,<reconnect>` | 连接服务器；reconnect：0=不自动重连，1=自动重连 |
| `AT+MQTTPUBRAW=<topic>,<length>,<qos>,<retain>` | 发布消息：等 `>` 后发送指定字节数 |
| `AT+MQTTSUB?` | 查询订阅 |
| `AT+MQTTSUB=<topic>,<qos>` | 订阅主题 |
| `AT+MQTTUNSUB=<topic>` | 取消订阅 |
| `AT+MQTTCLEAN` | 断开 MQTT |
| `AT+MQTTCERTIFI?` | 查询证书配置 |
| `AT+MQTTCERTIFI=<mode>,<verify_type>,<verify_len>` | 设置证书相关参数；证书数据提交过程需另行确认 |

参数说明：

- keepalive：0–7200 秒，默认 120。
- clean_flag：文档描述 1=使能清理、0=禁用，但参数名写为 `disable_clean_session`，语义有歧义，需验证。
- 遗嘱主题和消息：各最长 64 字节。
- QoS：0=最多一次，1=至少一次，2=恰好一次。
- retain：0=不保留，1=保留。
- 发布主题最长 128 字节，消息最长 1000 字节。
- 订阅主题最长 120 字节，最多 8 个订阅。
- 证书 mode：0=MQTT、1=MQTTS；verify_type：0=无验证、1=单向验证；证书长度最大 2048 字节。双向认证需厂家定制。

### MQTT 示例

替换服务器地址和凭据；客户端 ID 应唯一：

```text
AT+MQTTLONGCLIENTID=wf24-test-001
AT+MQTTLONGUSERNAME=YOUR_USER
AT+MQTTLONGPASSWORD=YOUR_PASSWORD
AT+MQTTCONN=192.168.1.100,1883,1
AT+MQTTSUB=wf24/down,0
AT+MQTTPUBRAW=wf24/up,5,0,0
```

没有用户名密码验证时跳过对应设置。连接时应确认 `+MQTTCONNECTED:...` 通知。发布命令返回 `>` 后发送 `hello`，**不追加换行**：

```bash
tsend -e 'hello'
```

成功发布的通知示例：`+MQTTPUB:OK`。

## 7. HTTP 命令

对应 UART 指导 §5.6，印刷页 32–34。

| 命令 | 用途/参数 |
|---|---|
| `AT+HTTPPARA?` | 查询 URL 和端口 |
| `AT+HTTPPARA=<url>,<port>` | 设置 URL（最长 256 字节）和端口 |
| `AT+HTTPRQH?` | 查询请求头 |
| `AT+HTTPRQH=<key>,<value>` | 设置请求头，key 长度 1–50，value 长度 1–255 字节 |
| `AT+HTTPACTION=<request>` | 0=GET、1=POST、2=PUT、3=DELETE、4=HEAD |
| `AT+HTTPDATA=<data_len>` | 提交请求体，长度 1–1024 字节；等 `>` 后发送数据 |

厂家示例：

```text
AT+HTTPPARA="http://httpbin.org/post",80
AT+HTTPRQH="Content-Type","application/json"
AT+HTTPDATA=10
```

等待 `>`，发送恰好 10 字节请求体，随后再按实际应用发起请求。HTTP 状态码（例如 405）与 AT 命令的 `OK` 不同：`OK` 不代表 HTTP 业务成功。

## 8. 简易配对 / 自动通信

对应 UART 指导 §5.7，印刷页 34–36。

| 命令 | 用途/注意事项 |
|---|---|
| `AT+SIMPLEMODE?` | 查询简易模式和角色 |
| `AT+SIMPLEMODE=<mode>,<stata>` | 设置模式与角色；**自动重启** |
| `AT+SIMPLECLIENT?` | 查询保存的客户端配置 |
| `AT+SIMPLECLIENT=<type>,<remote_host>,<remote_port>` | 保存客户端参数；type 为 TCP/UDP |
| `AT+SIMPLESERVER?` | 查询保存的服务端配置 |
| `AT+SIMPLESERVER=1,<port>,<type>,<maxlink>` | 按文档示例保存服务端参数；详见下方笔误说明 |

模式与角色：

| mode | 模式 | 可用 stata |
|---|---|---|
| 0 | 正常模式 | 默认组合为 `0,0` |
| 1 | 配对透传，不经路由器 | 0=STA+客户端；1=AP+服务端 |
| 2 | 路由透传 | 2=STA+客户端；3=STA+服务端 |
| 3 | MQTT 模式 | 4=STA+MQTT 单发；5=STA+MQTT 连发透传 |

- 简易模式要求单连接模式，即 `AT+CIPMODE=1`。
- 正常模式下通讯相关配置不保证断电保存；不能据此推断所有设置都不保存，例如 `UART_DEF` 明确保存到 Flash。
- 配对/路由模式保存相应 TCP 配置；MQTT 模式保存相应 MQTT 配置。
- mode=3、stata=5 时，配置发布指令后进入透传；需要 `+++` 退出才能修改发布主题。
- `SIMPLECLIENT`、`SIMPLESERVER` 使用前需确认符合相应简易模式条件。

**文档笔误：**服务端设置表写 `AT+SIMPLESERVE=`，但查询和示例使用 `AT+SIMPLESERVER`，表内参数数量与示例也不一致。本文沿用完整示例 `AT+SIMPLESERVER=1,9527,TCP,2`，尚未实测确认。

## 9. 异步通知（URC）

URC 可能穿插在命令响应中，不一定由当前命令触发。

| 通知 | 含义 |
|---|---|
| `power on` | 模块启动 |
| `+WFCST:<mac>` | Station 接入 SoftAP |
| `+WFDST:<mac>` | Station 离开 SoftAP |
| `+STA_CONNECTED:<id>,<ip>,<port>` | TCP 客户端接入 |
| `+STA_DISCONNECTED:<id>,<ip>,<port>` | TCP 客户端断开 |
| `+TRXTC:<id>,<ip>,<port>` | TCP 客户端与服务端断开 |
| `+TRX:<id>,<ip>,<port>` | UDP 会话断开 |
| `+TRDTS:<id>,<ip>,<port>,<length>,<data>` | TCP 服务端收到数据 |
| `+TRDTC:<id>,<ip>,<port>,<length>,<data>` | TCP 客户端收到数据 |
| `+TRD:<id>,<ip>,<port>,<length>,<data>` | UDP 收到数据 |
| `+MQTTSUBRECV:<topic>,<length>,<data>` | 收到订阅消息 |
| `+MQTTCONNECTED:...` | MQTT 已连接（厂家示例） |
| `+MQTTDISCONNECTED` | MQTT 已断开 |
| `ALREADY SUBSCRIBE` | 主题已订阅 |
| `NO UNSUBSCRIBE` | 要取消的主题未订阅 |
| `BLE_CONNECT_SUCCESS` | BLE 已连接 |
| `BLE_DISCONNECT_SUCCESS` | BLE 已断开 |

## 10. 错误码与文档差异

| 错误码 | 含义 |
|---|---|
| 101 | 参数长度错误 |
| 102 | 状态或模式错误 |
| 103 | 参数数据异常 |
| 104 | 指令错误 |
| 201 | 找不到符合条件的服务器，客户端连接失败 |
| 202 | 已有一个服务器存在，创建失败 |
| 203 | MQTT 连接失败 |

厂家通用错误格式写为 `EEROR=<code>`，而本次实测见过 `ERROR=104`；Ping 文档还列出 `ERROR:<code>`。因此不能只等待固定字符串 `ERROR\r\n`：它不会匹配 `ERROR=104\r\n`。

其他需要注意的原文差异：

- SNTP 查询表写 `AT+CIPSNTPTIME?`，一处示例没有 `?`。本文采用查询表写法，待固件验证。
- 原文出现全角 `？`、中文逗号，实际发送须换为 ASCII。
- BLE 透传连接顺序、MQTT clean 标志、简易服务端拼写存在歧义，已在对应章节标注。
- `\r\n$ ` 曾在测试中出现，但不是本指南列出的正常 AT 成功响应；不能仅凭 `$` 判定模块进入某种特定 Shell。

## 11. 在 tio-go 脚本中使用

### 11.1 运行方式

```bash
# 脚本结束即退出；省略设备时默认 /dev/ttyUSB0
tio-go -r run.sh ttyUSB0

# 程序 -e 控制 tsend 内容回显
tio-go -e -r run.sh ttyUSB0

# 每次连接成功执行脚本，结束后保留交互；重连后再次执行
tio-go -rr run.sh ttyUSB0
```

`tsend()`、`trecv()` 在运行时前置到提交给 bash 的脚本文本，**不需要写到 run.sh，也不会改写原脚本**。Socket 传输由 Go 处理，不依赖 socat。

避免在 `-rr` 脚本中无条件执行恢复出厂、重启或改变串口参数的命令，以免重复初始化、丢失配置或无法重新通信。

### 11.2 发送

```bash
tsend AT                    # 发送 AT\r\n
tsend -e 'AT\r\n'          # 解释转义，不额外追加 CRLF
printf 'hello' | tsend       # 管道字节原样发送
echo -e '111\r' | tsend     # 发送 111\r\n；末尾 LF 来自 echo 本身
```

`tsend -e` 控制转义，`tio-go -e` 控制回显，两者含义不同。定长正文和 `+++` 不要用普通 `tsend` 自动添加的换行。

### 11.3 接收边界

```bash
trecv                            # 读到第一个 \r\n，包含结束符
trecv -r 2 '\r\n'               # 按同一结束符读两次
trecv 'OK\r\n'                   # 读到 OK\r\n
trecv 'OK\r\n' 'ERROR\r\n'       # 任意一个匹配即返回
trecv -r 2 'OK\r\n' 'ERROR\r\n' # 每次都使用同一组候选结束符
```

收到 `\r\nOK\r\n` 时：

- 第一次无参数 `trecv` 只得到开头的 `\r\n`。
- 第二次无参数 `trecv` 得到 `OK\r\n`。
- 不会把结束符后面的数据一并消费。
- `trecv` 是字节匹配工具，不理解 AT 语义；未匹配时继续等待。
- 多结束符是候选关系，不是先无限等待第一个再尝试第二个。
- `trecv -r 2 3 '\r\n'` 中 `3` 会被当作另一个候选结束符，不是“第二个次数”，不要这样写。

### 11.4 查询示例

下面只查询，不重启也不修改配置。使用已知错误码结束符，兼容本次固件和文档的两种拼写：

```bash
# run.sh 的示例内容；函数由 tio-go 注入。
for cmd in AT AT+GMR 'AT+UART_DEF?'; do
    tsend "$cmd"
    trecv 'OK\r\n' \
        'ERROR=101\r\n' 'ERROR=102\r\n' 'ERROR=103\r\n' 'ERROR=104\r\n' \
        'EEROR=101\r\n' 'EEROR=102\r\n' 'EEROR=103\r\n' 'EEROR=104\r\n'
done
```

该示例只打印结果，不会因为匹配到错误字符串就自动判定脚本失败；需要业务判断时应自行解析返回内容。未知错误格式仍可能导致等待，可按实际抓包增加候选结束符。

## 12. 使用建议

1. 先用 `AT`、`AT+GMR`、`AT+UART_DEF?` 确认基本通信和固件版本。
2. 巡检优先使用查询命令，不要随意执行重置或写 Flash。
3. 网络操作的 `OK` 与后续连接成功通知分开处理。
4. 数据模式下先退出透传再发 AT；退出符必须无 CRLF。
5. 定长发送先等 `>`，正文严格按字节数发送。
6. 记录日志时遮盖 Wi-Fi 密码、MQTT 密码、证书和业务数据。
7. 本文不是全部固件变体的兼容性保证；遇到 `104` 或状态错误时对照固件版本、工作模式及厂家资料排查。
