跳到正文
目录 展开 收起

最近群里不少小伙伴都在玩大疆一代 4G 模块,热度挺高。大家常见的玩法是把它接到 NAS 上,再用 Docker 跑 VoHive 管理短信和网络。看他们折腾得热闹,我也跟着买了一个。

早上收到快递,我直接把模块带到了公司。NAS 在家,Docker 方案只能等晚上回去再玩;眼前正好有一台 Windows 电脑,那就先插上去,看看原厂状态能不能直接跑起来。

其实我最先想到的,还是照群友们的思路:直接在这台 Windows 上用 Docker Desktop 跑 SIM 管理面板。Compose 本身不难,真正卡住的是 USB 设备透传——Windows 和 Docker 的 Linux 环境之间还隔着一层,挂载 /dev:/dev 也不会凭空把 Windows 里的模块送进容器。继续走下去还得折腾 WSL、usbipd 之类的转发链路,我当时只是想快速试机,便没有继续做 Windows Docker 方案,转而研究原生驱动。

设备管理器很快热闹起来:一个 USB 复合设备,下面挂着五个总线自报名称为 Baiwang 的未知设备,整整齐齐五个黄色感叹号。

网上的教程大多从 Linux、OpenWrt 或 VoHive 开始,紧接着就是「改机」「改 ID」甚至「刷机」。我只想先确认一件事:原厂状态能不能在 Windows 上收短信、上 4G?

答案是可以。

先把几个词说清楚

  • VID/PID:每个 USB 设备都有的一对「身份证号」。VID 表示厂商,PID 表示产品型号;Windows 会据此决定能否自动找到对应驱动。
  • MI_02、MI_04:这块模块插到电脑后,实际上同时提供了好几个功能;MI 后的数字只是其中一个功能接口的编号,不是模块型号。
  • AT 指令:向 4G 模块发送的短文本命令,用于查询 SIM 卡、信号、运营商和短信等状态。发送最简单的 AT,模块回复 OK,就说明串口能通信。
  • WWAN:Windows 对「蜂窝网络网卡」的称呼,也就是让电脑通过 SIM 卡使用 4G 上网的那张网卡。

这次实测没有向模块写入或改动任何配置。做的事情只有两件:

  1. 为用于发送 AT 指令的 MI_02 选择串口驱动;
  2. 为用于 4G 上网的 MI_04 选择蜂窝网卡驱动。

最后的结果:

项目实测结果
控制串口正常,Windows 分配为 COM3
模块识别自报 Baiwang,型号 QDC507
固件QDC507GLEFM21_01.001.02.001
SIM正常识别
短信PDU 收发正常,可区分模块存储与 SIM 存储
蜂窝网络Windows Mobile Broadband 正常识别
运营商中国电信
IPv4 / IPv6均正常获取
外网测试指定 4G 源地址访问测试页返回 HTTP 204

下面把完整过程记下来。

Windows 怎么认出它

模块的 USB 身份证号是:

VID_2CA3&PID_4006

其中 VID_2CA3 是厂商编号,PID_4006 是产品编号。普通人不需要记住它们;后面的安装步骤只用它来确认自己选中了模块中正确的功能接口。

通过 ATIAT+GMIAT+GMMAT+QGMR 查询,得到:

Baiwang
QDC507
Revision: QDC507GLEFM21

这里的 Baiwang 是模块固件通过 ATIAT+GMI 返回的原始字符串,Windows 读取到的 USB 总线设备描述也是它。

它本质上是移远 EG25-G 系列方案,只是原厂状态使用 DJI 的 USB 身份证号 2CA3:4006,而非常见的移远编号。硬件和协议能力都在,Windows 自动匹配不到的只是这张「身份证」。

把它看成一栋房子会更好理解:模块只插了一根 USB 线,但里面有五个不同用途的「房间」。我们只需要进入第 2 个和第 4 个:

接口常见用途本文是否处理
MI_00模块诊断
MI_01GPS 定位
MI_02发送查询指令的串口
MI_03模块内部辅助功能
MI_044G 上网网卡

在设备管理器里,它们的硬件 ID 类似:

USB\VID_2CA3&PID_4006&MI_00
USB\VID_2CA3&PID_4006&MI_01
USB\VID_2CA3&PID_4006&MI_02
USB\VID_2CA3&PID_4006&MI_03
USB\VID_2CA3&PID_4006&MI_04

「不刷机」到底省略了什么

很多教程所说的「刷机」,实际是在模块里把 USB 身份证号从:

2CA3:4006 # DJI

永久改成:

2C7C:0125 # Quectel

改完后 Linux 能自动找到常见驱动,使用起来确实方便;但这个改动会写入模块,拔线或卸载 Windows 驱动都不会还原。

本文完全不做这一步。代价是 Windows 不会自动匹配驱动,需要在设备管理器里手动指定。好处也很直接:模块保持原厂身份,整个过程可以通过卸载 Windows 设备驱动撤销。

真正替换模块系统软件的「刷固件」风险更高,还可能影响通信校准和设备身份。为了查询状态、收发短信和 4G 上网,没有必要碰它。

准备签名驱动

需要两类驱动:

qcser.inf # 串口
qcwwan.inf # WWAN 网卡

可以使用 Quectel LTE&5G Windows USB Driver,或系统中已有的 Microsoft WHCP 签名 Qualcomm 驱动。先检查驱动仓库:

Terminal window
pnputil /enum-drivers |
Select-String -Pattern 'qcser|qcwwan|Quectel|Qualcomm' -Context 3,5

重点看两项:

Original Name: qcser.inf / qcwwan.inf
Published Name: oemXX.inf

oemXX.inf 的编号由每台 Windows 自己分配,不能照抄别人的 oem107.infoem108.inf。找到实际路径后检查签名:

Terminal window
Get-AuthenticodeSignature 'C:\Windows\INF\oemXX.inf'

Status 应为 Valid

第一步:把 MI_02 装成 AT 串口

这一步的目标是让 Windows 给模块分配一个 COM 端口,之后就能用普通串口工具或 PowerShell 向它发送查询命令。

在设备管理器的「其他设备」中,逐个查看 Baiwang

右键 → 属性 → 详细信息 → 硬件 ID

找到:

USB\VID_2CA3&PID_4006&MI_02

然后:

更新驱动程序
→ 浏览我的电脑以查找驱动程序
→ 让我从计算机上的可用驱动程序列表中选取
→ 显示所有设备
→ 从磁盘安装

选择实际的 qcser.inf,型号选择:

Qualcomm HS-USB AT Port 9003

如果用的是移远驱动包,名称可能是:

Quectel USB AT Port

不要选 DiagnosticsNMEAQDLoader。确认 Windows 的不匹配提示后,设备会出现在「端口(COM 和 LPT)」下。我的机器分配到了 COM3

第二步:用 AT 指令验证

下面这段 PowerShell 只执行查询,不修改模块配置。将 COM3 换成设备管理器中的实际端口;它相当于依次问模块「能通信吗、SIM 能用吗、信号和运营商是什么」。

Terminal window
$port = [System.IO.Ports.SerialPort]::new('COM3', 115200, 'None', 8, 'One')
$port.ReadTimeout = 2500
$port.WriteTimeout = 2000
$port.DtrEnable = $true
$port.RtsEnable = $true
try {
$port.Open()
Start-Sleep -Milliseconds 400
foreach ($cmd in @(
'AT',
'ATI',
'AT+QGMR',
'AT+CPIN?',
'AT+QCCID',
'AT+CSQ',
'AT+CEREG?',
'AT+COPS?'
)) {
$port.DiscardInBuffer()
$port.Write("$cmd`r")
Start-Sleep -Milliseconds 900
"--- $cmd ---"
$port.ReadExisting()
}
}
finally {
if ($port.IsOpen) { $port.Close() }
$port.Dispose()
}

正常结果:

AT → OK
AT+CPIN? → +CPIN: READY
AT+CEREG? → 0,1 或 0,5
AT+COPS? → 当前运营商

有个容易误判的地方:LTE 注册主要看 CEREG。本次测试里 CEREG: 0,1 已经注册成功,但传统电路域的 CREG 仍可能显示未注册或被拒绝,不影响 LTE 数据业务。

SIM 没插好时常见:

+CME ERROR: 10 # 未检测到 SIM
+CME ERROR: 13 # SIM 失败

断开 USB 电源,重新安装 Nano-SIM,再上电即可。不要带电反复插拔 SIM。

顺手验证短信

短信存储有两个容易混淆的名字:

名称含义
ME模块内部存储,换 SIM 后仍然保留
SM当前 SIM 卡存储

查询当前存储:

AT+CPMS?

例如:

+CPMS: "ME",8,23,"ME",8,23,"ME",8,23

这表示模块内部有 8 个短信分片,不代表当前 SIM 卡中有 8 条短信。切到 SIM 卡查询数量,再恢复模块存储:

AT+CPMS="SM","SM","SM"
AT+CPMS?
AT+CPMS="ME","ME","ME"

常见只读短信命令:

AT+CMGF? # 查询短信模式
AT+CNMI? # 查询新短信通知
AT+CSCA? # 查询短信中心
AT+CMGL=4 # 列出当前存储中的全部短信
AT+CMGR=0 # 读取指定序号

QDC507 默认通常使用 PDU 模式,也就是把短信保存成机器可读的编码。中文长短信会拆成多个分片;读取时需要按顺序合并并解码,短信内容本身没有丢失。

第三步:把 MI_04 装成 WWAN 网卡

这一步完成后,模块会像电脑内置的手机网络功能一样,出现在 Windows 的网络连接中。

回到设备管理器,找到:

USB\VID_2CA3&PID_4006&MI_04

重复「从磁盘安装」,这次选择实际的 qcwwan.inf

优先选择:

Qualcomm HS-USB WWAN Adapter 9003

有些驱动列表不显示带 9003 的名称,可以选择使用同一 qcwwan.ndi 安装段的通用项:

Qualcomm HS-USB WWAN Adapter

Quectel 驱动包中可能显示:

Quectel Wireless Ethernet Adapter

不要选带 MUXMI_03DiagnosticsNMEA 的项。

安装完成后检查:

Terminal window
Get-PnpDevice -PresentOnly |
Where-Object InstanceId -match 'VID_2CA3&PID_4006&MI_04'
Get-NetAdapter -IncludeHidden |
Where-Object InterfaceDescription -match 'Qualcomm|Quectel|WWAN'
netsh mbn show interfaces

Windows 应该能识别出 Mobile Broadband 接口、模块型号、固件、运营商和信号。

第四步:配置 APN

APN 可以理解成运营商给手机或网卡配置的「上网入口名称」。普通手机通常自动填写;这块模块在 Windows 中可能需要手动填一次。

三大运营商常用 APN:

运营商常用 APN
中国移动cmnet
中国联通3gnetuninet
中国电信ctnet

物联网卡、企业卡、定向流量卡应使用服务商给出的专用 APN,不要猜。

部分 Windows 可以在这里添加:

设置 → 网络和 Internet → 手机网络 → APN 设置

但我的 Windows 版本根本没有显示「移动运营商设置」。这时可以直接用 netsh mbn

先查询接口和当前 SIM 信息:

Terminal window
netsh mbn show interfaces
netsh mbn show readyinfo interface="手机网络"

输出中的 Subscriber ID 和 SIM ICC ID 属于敏感标识,不要截图公开。创建 ctnet.xml,将占位内容替换为当前 SIM 的实际值:

<?xml version="1.0" encoding="utf-8"?>
<MBNProfile xmlns="http://www.microsoft.com/networking/WWAN/profile/v1">
<Name>China Telecom ctnet</Name>
<IsDefault>true</IsDefault>
<ProfileCreationType>UserProvisioned</ProfileCreationType>
<SubscriberID>替换为 Subscriber Id</SubscriberID>
<SimIccID>替换为 SIM ICC Id</SimIccID>
<HomeProviderName>China Telecom</HomeProviderName>
<AutoConnectOnInternet>true</AutoConnectOnInternet>
<ConnectionMode>auto</ConnectionMode>
<Context>
<AccessString>ctnet</AccessString>
<Compression>DISABLE</Compression>
<AuthProtocol>NONE</AuthProtocol>
</Context>
</MBNProfile>

导入并连接:

Terminal window
netsh mbn add profile interface="手机网络" name="D:\路径\ctnet.xml"
netsh mbn show profiles interface="手机网络"
netsh mbn connect interface="手机网络" connmode=name name="China Telecom ctnet"

本次连接时,netsh 首先返回了 0x139f,看起来像失败;但几秒后接口已经进入 Connected。所以不要只看第一行错误码,应该检查实际状态:

Terminal window
Start-Sleep -Seconds 8
netsh mbn show interfaces
Get-NetIPConfiguration -InterfaceAlias '手机网络'

如果已经获得运营商地址、默认网关和 DNS,就说明数据会话已建立。

验证流量确实走 4G

电脑同时连接 Wi-Fi 或有线网络时,直接访问网页未必走 4G。可以绑定蜂窝接口的 IPv4 地址进行测试:

Terminal window
$src = Get-NetIPAddress -InterfaceAlias '手机网络' -AddressFamily IPv4 |
Where-Object IPAddress -notlike '169.254.*' |
Select-Object -First 1 -ExpandProperty IPAddress
ping.exe -n 3 -S $src 1.1.1.1
curl.exe --interface $src `
-o NUL `
-w "HTTP=%{http_code} CONNECT=%{time_connect}s TOTAL=%{time_total}s`n" `
http://connectivitycheck.gstatic.com/generate_204

本次实测:

1.1.1.1:3/3 成功
HTTP:204
连接耗时:约 70ms

说明蜂窝接口本身已经可以正常访问互联网。

断开和重连:

Terminal window
netsh mbn disconnect interface="手机网络"
netsh mbn connect `
interface="手机网络" `
connmode=name `
name="China Telecom ctnet"

换卡后需要做什么

同一运营商换卡时,APN 通常不变;换运营商时一般要换 APN。Windows 会把这份配置和具体 SIM 卡关联,因此即使同运营商换卡,旧配置也可能不再匹配。

换卡后:

Terminal window
netsh mbn show readyinfo interface="手机网络"
netsh mbn show profiles interface="手机网络"

删除旧配置:

Terminal window
netsh mbn delete profile `
interface="手机网络" `
name="China Telecom ctnet"

再使用新卡的信息和正确的 APN 重新生成配置。

为什么做不到真正的插上即用

实验已经证明,驱动本身完全能工作,缺的只有硬件 ID 匹配:

模块:2CA3:4006
通用驱动声明的设备:05C6:* / 2C7C:0125 等

想让 Windows 真正自动安装,只有两条路:

  1. 把模块 ID 改成通用驱动认识的 2C7C:0125
  2. 做一份包含 2CA3:4006 且由可信厂商或微软签名的驱动。

第一条会写模块配置,不符合本文目标;第二条不是改两行 INF 就行,修改后原签名会失效。

不过可以做一个管理员运行的一键工具,用 Windows SetupAPI 自动完成 MI_02MI_04 的驱动选择,再按 SIM 运营商生成 APN。它仍然是在 Windows 中安装驱动,但用户不必再进设备管理器逐项点击,而且完全不用刷模块。

收尾

这次最有价值的结论不是「QDC507 能上网」——Linux 社区早就证明了。真正补上的拼图是:模块的 USB 身份证号不同,并不妨碍它在 Windows 下查询状态、收发短信和使用 4G 数据;它只让 Windows 无法自动匹配驱动。

我原本买它,就是打算晚上带回家接 NAS、跑 Docker。这趟公司里的 Windows 测试算是开箱后的前菜,却顺手验证了一条更轻的路:如果目标只是把模块临时用作短信终端或备用 4G 网卡,先别刷,两次手动绑定驱动已经足够。

参考资料