diff --git "a/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\212\266\346\200\201.png" "b/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..f5817a3b1d50704a143b5683c5bb75a1a5936862 Binary files /dev/null and "b/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\212\266\346\200\201.png" differ diff --git "a/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PIN\347\212\266\346\200\201.png" "b/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PIN\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..c6071535c55eb6f323120e1be44a300f7ce1549b Binary files /dev/null and "b/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PIN\347\212\266\346\200\201.png" differ diff --git "a/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PUK\347\212\266\346\200\201.png" "b/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PUK\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..74b1c3bf9c2f7d22287f44e26c501d0796d4975b Binary files /dev/null and "b/docs/FAQ/zh/media/net/AT\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PUK\347\212\266\346\200\201.png" differ diff --git "a/docs/FAQ/zh/media/net/AT\345\217\243\350\277\233\350\241\214CFUN\345\210\207\346\215\242.png" "b/docs/FAQ/zh/media/net/AT\345\217\243\350\277\233\350\241\214CFUN\345\210\207\346\215\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..6a36366b6d5df5174e8bb4205ca0f48ba8b6a1be Binary files /dev/null and "b/docs/FAQ/zh/media/net/AT\345\217\243\350\277\233\350\241\214CFUN\345\210\207\346\215\242.png" differ diff --git "a/docs/FAQ/zh/media/net/REPL\347\253\257\345\217\243\346\211\247\350\241\214CFUN\345\210\207\346\215\242.png" "b/docs/FAQ/zh/media/net/REPL\347\253\257\345\217\243\346\211\247\350\241\214CFUN\345\210\207\346\215\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..d41baf39ceb95f81c9322ab4f459ffd42017bbd2 Binary files /dev/null and "b/docs/FAQ/zh/media/net/REPL\347\253\257\345\217\243\346\211\247\350\241\214CFUN\345\210\207\346\215\242.png" differ diff --git "a/docs/FAQ/zh/media/net/SIM\345\220\257\347\224\250PIN\347\240\201\351\252\214\350\257\201.png" "b/docs/FAQ/zh/media/net/SIM\345\220\257\347\224\250PIN\347\240\201\351\252\214\350\257\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..55b336b7fb16126d0a5ad9d95f5e9901e0270b79 Binary files /dev/null and "b/docs/FAQ/zh/media/net/SIM\345\220\257\347\224\250PIN\347\240\201\351\252\214\350\257\201.png" differ diff --git "a/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\203\255\346\217\222\346\213\224\351\205\215\347\275\256.png" "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\203\255\346\217\222\346\213\224\351\205\215\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..a67082afa8863ef902c21b308e7fb79a793a7578 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\203\255\346\217\222\346\213\224\351\205\215\347\275\256.png" differ diff --git "a/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\212\266\346\200\201.png" "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..37fdec3c86e958a47ec1886f13e4755e776ec478 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\347\212\266\346\200\201.png" differ diff --git "a/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PIN\347\212\266\346\200\201.png" "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PIN\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..61f06d4450b37c6bf6ae11ca9f90db698fb17979 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PIN\347\212\266\346\200\201.png" differ diff --git "a/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PUK\347\212\266\346\200\201.png" "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PUK\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e22d1e67a230268213af9dfcd30b422080e7a8a Binary files /dev/null and "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242SIM\345\215\241\351\224\201PUK\347\212\266\346\200\201.png" differ diff --git "a/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242\346\263\250\347\275\221\346\213\250\345\217\267\347\212\266\346\200\201.png" "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242\346\263\250\347\275\221\346\213\250\345\217\267\347\212\266\346\200\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..24999df97d0b88cc49861038dbcdd8af91e46715 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\344\272\244\344\272\222\345\217\243\346\237\245\350\257\242\346\263\250\347\275\221\346\213\250\345\217\267\347\212\266\346\200\201.png" differ diff --git "a/docs/FAQ/zh/media/net/\345\274\200\345\220\257SIM\345\215\241\347\203\255\346\217\222\346\213\224\345\212\237\350\203\275.png" "b/docs/FAQ/zh/media/net/\345\274\200\345\220\257SIM\345\215\241\347\203\255\346\217\222\346\213\224\345\212\237\350\203\275.png" new file mode 100644 index 0000000000000000000000000000000000000000..f357af6e5da5aadf35dd150186c141e1c4372e4d Binary files /dev/null and "b/docs/FAQ/zh/media/net/\345\274\200\345\220\257SIM\345\215\241\347\203\255\346\217\222\346\213\224\345\212\237\350\203\275.png" differ diff --git "a/docs/FAQ/zh/media/net/\346\237\245\350\257\242apn\344\270\272\347\251\272.png" "b/docs/FAQ/zh/media/net/\346\237\245\350\257\242apn\344\270\272\347\251\272.png" new file mode 100644 index 0000000000000000000000000000000000000000..fd0fd605bbe2a5dcdd28aa0af1f2a83b45c7d993 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\346\237\245\350\257\242apn\344\270\272\347\251\272.png" differ diff --git "a/docs/FAQ/zh/media/net/\346\237\245\350\257\242apn\351\205\215\347\275\256.png" "b/docs/FAQ/zh/media/net/\346\237\245\350\257\242apn\351\205\215\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..5462709e9e2599ce447cad37bc59cfd6a0836c0a Binary files /dev/null and "b/docs/FAQ/zh/media/net/\346\237\245\350\257\242apn\351\205\215\347\275\256.png" differ diff --git "a/docs/FAQ/zh/media/net/\346\270\205\347\251\272\346\263\250\347\275\221apn.png" "b/docs/FAQ/zh/media/net/\346\270\205\347\251\272\346\263\250\347\275\221apn.png" new file mode 100644 index 0000000000000000000000000000000000000000..8814bf0222fee865916660004241a10787940981 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\346\270\205\347\251\272\346\263\250\347\275\221apn.png" differ diff --git "a/docs/FAQ/zh/media/net/\350\276\223\345\205\245PIN\351\252\214\350\257\201.png" "b/docs/FAQ/zh/media/net/\350\276\223\345\205\245PIN\351\252\214\350\257\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..0c2fc4e77223d2e7409fa986c08b699e1d52b330 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\350\276\223\345\205\245PIN\351\252\214\350\257\201.png" differ diff --git "a/docs/FAQ/zh/media/net/\350\276\223\345\205\245PUK\350\247\243\351\224\201.png" "b/docs/FAQ/zh/media/net/\350\276\223\345\205\245PUK\350\247\243\351\224\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..853ef72b32251c04944c3a0412191d309f25bec9 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\350\276\223\345\205\245PUK\350\247\243\351\224\201.png" differ diff --git "a/docs/FAQ/zh/media/net/\351\205\215\347\275\256apn\344\277\241\346\201\257.png" "b/docs/FAQ/zh/media/net/\351\205\215\347\275\256apn\344\277\241\346\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..0da59a9e19c969aa30bfd287a40a0a2442c8c6f8 Binary files /dev/null and "b/docs/FAQ/zh/media/net/\351\205\215\347\275\256apn\344\277\241\346\201\257.png" differ diff --git a/docs/FAQ/zh/network/README.md b/docs/FAQ/zh/network/README.md index 241e8221a4f43d7218c9e03c7ff0181fa8aeda0e..690217b3e019a0b2cce8e0f1b9364afe3b90f987 100644 --- a/docs/FAQ/zh/network/README.md +++ b/docs/FAQ/zh/network/README.md @@ -11,4 +11,7 @@ - [阿里 IoT 平台问题](./aliyun.md) - [信号问题](./signal.md) - [HTTP相关问题](./http.md) -- [短信问题](./sms.md) \ No newline at end of file +- [短信问题](./sms.md) + +* [常见无法上网问题总结去排查](./net-handle-exception.md) +* [modem相关常用AT说明](./modem-at.md) \ No newline at end of file diff --git a/docs/FAQ/zh/network/modem-at.md b/docs/FAQ/zh/network/modem-at.md new file mode 100644 index 0000000000000000000000000000000000000000..744f7488a8b7e21f92e1b2ccc7837c0412fdb54f --- /dev/null +++ b/docs/FAQ/zh/network/modem-at.md @@ -0,0 +1,976 @@ +# Modem相关常用AT说明 + +本文主要介绍QuecPython支持的各个平台模组和modem相关的一些常用AT指令。 + +> 下面列出的AT指令,在一些模组上可能被裁剪,如果用户遇到相关AT在一些模组上执行失败的情况,可以咨询我司FAE或者研发人员。 + +## 注网状态查询 + +查询GSM或者GPRS网络注册状态一般使用`AT+CGREG?`或`AT+CREG?`,查询LTE网络注册状态,一般使用`AT+CEREG?`。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PS 域网络注册状态 +
查询命令AT+CGREG?
响应格式+CEREG: <n>,<stat>[,<lac>,<ci>[,<AcT>]]

OK
参数说明n整型,控制指定 URC 的上报。
0 - 禁止上报网络注册 URC
1 - 允许上报网络注册 URC +CGREG: <stat>
2 - 允许上报网络注册和位置信息 URC +CGREG: <stat>[,<lac>,<ci>[,<AcT>]]
stat整型,GPRS 注册状态。
0 - 未注册。MT 当前未搜索到待注册的运营商。
1 - 已注册,归属地网络。
2 - 未注册,但 MT 当前正尝试附着或搜索网络以进行注册。
3 - 注册被拒绝。
4 - 未知。
5 - 已注册,漫游状态
lac字符串类型。十六进制格式的两字节位置区号。
ci字符串类型。十六进制格式的16位(GSM)或28位(LTE)小区 ID。
AcT整型。注册网络的接入技术。
0 - GSM
2 - UTRAN
3 - GSM W/EGPRS
4 - UTRAN W/HSDPA
5 - UTRAN W/HSUPA
6 - UTRAN W/HSDPA and HSUPA
7 - E-UTRAN
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EPS 网络注册状态查询 +
查询命令AT+CEREG?
响应格式+CEREG: <n>,<stat>[,<tac>,<ci>[,<AcT>]]

OK
参数说明n整型,控制非请求结果码的显示。
0 - 禁止上报网络注册 URC
1 - 允许上报网络注册 URC +CEREG: <stat>
2 - 允许上报网络注册和位置信息 URC +CEREG: <stat>[,<tac>,<ci>[,<AcT>]]
stat整型,EPS注册状态。
0 - 未注册。MT 当前未搜索到待注册的运营商。
1 - 已注册,归属地网络。
2 - 未注册,但 MT 当前正尝试附着或搜索网络以进行注册。
3 - 注册被拒绝。
4 - 未知。
5 - 已注册,漫游状态
tac字符串类型。十六进制格式的两字节位置区号。
ci字符串类型。十六进制格式的 28 字节(E-UTRAN)小区 ID。
AcT整型。注册网络的接入技术。
0 - GSM
2 - UTRAN
3 - GSM W/EGPRS
4 - UTRAN W/HSDPA
5 - UTRAN W/HSUPA
6 - UTRAN W/HSDPA and HSUPA
7 - E-UTRAN
+ +示例: + +``` +AT+CEREG? ++CEREG: 0,1 + +OK + +AT+CGREG? ++CGREG: 0,1 + +OK + +AT+CREG? ++CREG: 0,1 + +OK +``` + + + +## 查询网络信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
查询网络信息 +
查询命令AT+QNWINFO
响应格式+QNWINFO: <AcT>,<oper>,<band>,<channel>

OK
参数说明AcT字符串类型,选择的网络制式。
"NONE"
"GSM"
"GPRS"
"EDGE"
"WCDMA"
"HSDPA"
"HSUPA"
"HSPA+"
"TDD LTE"
"FDD LTE"
oper字符串类型,数字格式运营商名称。
band字符串类型。选择的频段。
channel整型。信道ID,也叫绝对频点号。
+ +示例: + +``` +AT+QNWINFO ++QNWINFO: "FDD LTE","46001","LTE BAND 3",1650 + +OK +``` + + + +## 查询服务小区信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
查询服务小区信息 +
查询命令AT+QENG="servingcell"
响应格式+QENG: "servingcell",<state>,<act>,<is_tdd>,<MCC>,<MNC>,<cellID>,<PCI>,<EARFCN>,<freq_band_ind>,<UL_bandwidth>,<DL_bandwidth>,<TAC>,<RSRP>,<RSRQ>,<RSSI>,<SINR>,<srxlev>

OK
参数说明state字符串类型,控表示UE的状态。
SEARCH - UE正在搜网,但尚未发现合适的 GSM/LTE 小区。
LIMSRV - UE驻留在小区中,但尚未在网络上注册。
NOCONN - UE驻留在小区中并已在网络上注册,并且处于空闲模式。
CONNECT - UE驻留在小区中并已在网络上注册,并且正在进行通话。
act字符串类型,网络制式。
is_tdd字符串类型。通信模式。
TDD - 时分双工模式。
FDD - 频分双工模式。
MCC整型。移动设备国家码。
MNC整型。移动设备网络码。
cellID整型。小区ID,该参数确定 16 位(GSM)或 28 位(LTE)小区ID。
PCI整型。物理小区标识。LTE中终端以此区分不同小区的无线信号。
EARFCN整型。E-UTRA 绝对射频信道号。
freq_band_ind整型。band号。
UL_bandwidth整型。上行带宽。
DL_bandwidth整型。下行带宽。
TAC整型。跟踪区域码。
RSRP整型。信号接收功率,单位:dBm。
RSRQ整型。接收质量,单位:dB。
RSSI整型。接收信号强度指示,单位:dBm。
SINR整型。信噪比,单位:dB。
srxlev整型。小区选择接收电平值,单位:dB。
+ +示例: + +``` +AT+QENG="servingcell" ++QENG: "servingcell","NOCONN","LTE","FDD",460,01,2A9BE38,367,1850,3,5,5,DF5C,-65,-9,-54,34,0 + +OK + +``` + + + +## APN查询与设置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
APN 查询 +
查询命令AT+CGDCONT?

响应格式
+CGDCONT: <cid>,<PDP_type>,<APN>,<PDP_addr>,<data_comp>,<head_comp>[…]

OK
设置命令AT+CGDCONT=<cid>[,<PDP_type>[,<APN>[,<PDP_addr>[,<data_comp>[,<head_comp>[,<Pv4AddrAlloc>[,<request_type>[,<P-CSCF_discovery>[,<IM_CN_Signalling_Flag_Ind>]]]]]]]]]

响应格式
OK或者ERROR
参数说明cid整型,PDP上下文标识,用于指定特定 PDP 上下文的定义。
PDP_type字符串类型,指定分组数据协议类型。
"IP" - 互联网协议版本4
"IPV6" - 互联网协议版本6
"IPV4V6" - 互联网协议版本4和互联网协议版本6
APN字符串类型,接入点名称。
PDP_addr整型,用于标识适用于 PDP 的地址空间中的 MT。如果该值为空或被省略,则TE 在 PDP 启动过程中提供该值,否则,将请求动态地址。可以使用 AT+CGPADDR 读取分配的地址。
data_comp整型。控制 PDP 数据是否需要压缩。(仅适用于 SNDCP)(详细说明,请参考 3GPPTS 44.065)
0 - 关闭(若省略则为默认值)
1 - 打开(制造商指定)
2 - V.42bis
3 - V.44(当前不支持)
head_comp整型。控制 PDP 头部数据压缩。(详细说明,请参考 3GPP TS 44.065 和 3GPP TS25.323)
0 - 关闭(若省略则为默认值)
1 - 打开
2 - RFC1144
3 - RFC2507
4 - RFC3095
特性说明参数配置自动保存。不允许更改已激活上下文的定义。因此如果要修改已激活的某一路PDP,应该先切到CFUN0或者CFUN4状态,然后使用上述AT去设置,设置完成后切换到CFUN1状态。如果要删除某一路PDP上下文配置,使其变成未定义状态,可以使用 AT+CGDCONT=<cid> 命令。
+ +示例: + +``` +//查询 +AT+CGDCONT? ++CGDCONT: 1,"IP","ctnet","0.0.0.0",0,0,0,0,0,0 + +OK + +//设置第一路PDP上下文,IP类型为IPV4,APN为"3gnet" +AT+CGDCONT=1,"IP","3gnet" +OK + +AT+CGDCONT? ++CGDCONT: 1,"IP","3gnet","0.0.0.0",0,0,0,0,0,0 + +OK + +//设置第一路PDP上下文,IP类型为IPV4,APN清空 +AT+CGDCONT=1,"IP","" + +OK + +``` + + + +## 清除历史频点 + +历史频点是指UE在网络注册成功后动态收集的注册成功的小区的频点信息,作用是用于加快下一次搜网注网的过程。正常情况下,用户不应该去清除UE的历史频点信息,否则会导致UE在清除历史频点后的下一次搜网注网较慢的问题。不同平台的模组,清除历史频点的AT指令不一样,下面列出几个平台的对应AT说明。 + +### ASR平台 + + + + + + + + + + + + + + + + + + + + + +
清除历史频点 +
清除命令AT+QCFG="acq/clear"[,<RAT>]
响应格式OK或者ERROR
参数说明RAT整型,清除指定网络制式的历史频点。
1 - LTE
2 - WCDMA
3 - GSM
若省略可选参数RAT,则清除所有网络制式的历史频点。
特性说明该命令立即生效。
+ +示例: + +``` +AT+QCFG="acq/clear" //清除 GSM/WCDMA/LTE历史频点 +OK + +AT+QCFG="acq/clear",1 //清除 LTE网络历史频点 +OK + +AT+QCFG="acq/clear",2 //清除 WCDMA网络历史频点 +OK + +AT+QCFG="acq/clear",3 //清除 GSM网络历史频点 +OK +``` + + + +### Unisoc平台 + + + + + + + + + + + + + + + + + + + + + +
清除历史频点 +
清除命令AT+QCFG="history/freq",<RAT>
响应格式OK或者ERROR
参数说明RAT整型,清除指定网络制式的历史频点。
2 - GSM
4 - LTE
特性说明使用该AT清除历史频点之前,需要先将模组切换到CFUN4状态,清除成功后,再将模组切换回CFUN1状态。
+ +示例: + +``` +步骤1:将模组切换到CFUN4 +AT+CFUN=4 +OK + +步骤2:清除LTE历史频点信息 +AT+QCFG="history/freq",4 +OK + +步骤3:将模组切换到CFUN1 +AT+CFUN=1 +OK +``` + + + +### Qualcomm平台 + + + + + + + + + + + + + + + + + + + + + + + + +
清除历史频点 +
清除GSM网络历史频点AT+QNVFD="/nv/item_files/modem/geran/grr/acq_db"
清除LTE网络历史频点AT+QNVFD="/nv/reg_files/modem/lte/rrc/csp/acq_db"
清除NB-IoT网络历史频点AT+QNVFD="/nv/reg_files/modem/nb1/rrc/csp/acq_db"
响应格式OK或者ERROR
特性说明指令发送成功后,需要硬重启才能生效。
+ +示例: + +``` +AT+QNVFD="/nv/item_files/modem/geran/grr/acq_db" +OK + +AT+QNVFD="/nv/reg_files/modem/lte/rrc/csp/acq_db" +OK + +AT+QNVFD="/nv/reg_files/modem/nb1/rrc/csp/acq_db" +OK +``` + + + +## IMS相关指令 + +### ASR平台 + + + + + + + + + + + + + + + + +
IMS相关指令 +
开启IMS功能AT+QCFG="ims",1
如果不支持上述AT,也可以尝试使用如下AT:
at*imscfg=switch,on
关闭IMS功能AT+QCFG="ims",2
如果不支持上述AT,也可以尝试使用如下AT:
at*imscfg=switch,off
IMS注册状态查询AT+CIREG?
该指令的返回值格式为:
+CIREG: <n>,<reg_info>[,<ext_info>]
OK

参数说明:
n - 整型数,表示是否使能上报。0表示关闭上报,1表示使能上报。
reg_info - 整型数,表示IMS注册状态。0表示没有注册,1表示已注册。

IMS注册成功,reg_info参数值应该为1。
IMS没有注册,reg_info参数值应该为0。
+ + + +### Unisoc平台 + + + + + + + + + + + + + + + + +
IMS相关指令 +
开启IMS功能AT+QIMS="ENABLE"
关闭IMS功能AT+QIMS="DISABLE"
IMS注册状态查询AT+CIREG?
该指令的返回值格式为:
+CIREG: <n>,<reg_info>[,<ext_info>]
OK

参数说明:
n - 整型数,表示是否使能上报。0表示关闭上报,1表示使能上报。
reg_info - 整型数,表示IMS注册状态。0表示没有注册,1表示已注册。

IMS注册成功,reg_info参数值应该为1。
IMS没有注册,reg_info参数值应该为0。
+ + + +## 锁小区指令 + +### ASR平台 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
锁定小区 +
设置命令at*cell=<mode>,<act>,<band>,<freq>,<cellId>
响应格式OK或者CME ERROR
参数说明mode整型,操作模式。
0 - 解除小区、频点锁定
1 - 使能频点锁定
2 - 使能小区锁定
act整型,接入的网络制式。
0 - GSM
1 - UMTS_TD
2 - UMTS_W
3 - LTE
band整型。目标频点或小区所属band。
对于GSM网络:
0 - PGSM 900
1 - DCS GSM 1800
2 - PCS GSM 1900
3 - EGSM 900 (extended)
4 - GSM 450
5 - GSM 480
6 - GSM 850
7 - GSM 750
对于UMTS网络:
0 - Band_1 arfcn 10562-10838
1 - Band_2 9662-9938
2 - Band_3 1162-1513
3 - Band_4 1537-1738
4 - Band_5 4357-4458
5 - Band_6 4387-4413
6 - Band_7 2237-2563
7 - Band_8 2937-3088
8 - Band_9 9237-9387
对于LTE网络:
0 - 63分别对应Band1~Band64
freq整型。目标小区绝对频点号。可以用 AT+QENG="servingcell" 指令查询,对应查询结果中的 EARFCN 参数。
cellId整型。目标小区物理层小区标识号。可以用 AT+QENG="servingcell" 指令查询,对应查询结果中的 PCI 参数。
+ +示例: + +``` +at*cell=2,3,2,1650,465 //锁定LTE网络制式下的1650频点中的465小区 +OK + +解除小区锁定 + +``` + + + +### Unisoc平台 + + + + + + + + + + + + + + + + + + + + + + + + + +
锁定LTE小区 +
设置命令AT+QNWLOCK="lte"[,<mode>[,<freq>[,<pci/freq>[,<freq>[,<freq>,...]]]]]
响应格式OK或者CME ERROR
参数说明mode整型,操作类型。
0 - 解除所有小区锁定。
1 - 锁定一个LTE小区。
2 - 锁定一个或多个LTE小区。
freq整型,目标LTE小区的频点号。
pci/freq整型,目标小区的PCI或者频点号。
如果mode为1,则该参数表示目标小区的物理小区标识PCI。
如果mode为2,则该参数表示目标小区的频点号。
+ +示例: + +``` +AT+QNWLOCK="lte",1,38950,201 //锁定频点号为38950,PCI为201的小区 +OK + +AT+QNWLOCK="lte" //查询当前锁定的小区 ++QNWLOCK: "lte",1,38950,201 + +OK +``` + + + +### Qualcomm平台 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
锁定小区 +
设置命令AT+QNWCFG="pci_lock"[,<RAT>[,<operation>[,<channel>,<cellID>]]]
响应格式OK或者CME ERROR
参数说明RAT字符串类型,网络制式,目前支持如下:
"eMTC"
"NBIoT"
"NTN NBIoT"
operation整型,操作类型。
0 - 解除小区锁定。
1 - 锁定小区
channel整型,目标LTE小区的频点号。
cellID整型,目标LTE小区的物理小区标识PCI。
+ + + +## 锁网络制式指令 + +### ASR平台 + + + + + + + + + + + + + + + + + + + + + +
配置网络制式 +
配置命令AT+QCFG="nwscanmode"[,<scan_mode>]
响应格式OK或者ERROR
参数说明scan_mode整型,网络搜索模式。
0 - 自动
1 - 仅GSM
2 - 仅WCDMA
3 - 仅LTE
若省略可选参数scan_mode,则查询当前网络搜索模式。
特性说明该命令立即生效。
+ +示例: + +``` +AT+QCFG="nwscanmode" //查询当前网络搜索模式 ++QCFG: "nwscanmode",3 + +OK + +AT+QCFG="nwscanmode",3 //设置设备只搜索LTE网络 + +OK +``` + + + +### Unisoc平台 + + + + + + + + + + + + + + + + + + + + + + + + + +
配置网络制式 +
配置命令AT+QCFG="nwscanmode"[,<scan_mode>[,<effect>]]
响应格式OK或者ERROR
参数说明scan_mode整型,网络搜索模式。
0 - 自动
1 - 仅GSM
3 - 仅LTE
若省略可选参数scan_mode,则查询当前网络搜索模式。
effect整型,命令生效方式。
0 - 重启后生效
1 - 立即生效
特性说明配置后,参数自动保存
+ +示例: + +``` +AT+QCFG="nwscanmode" //查询当前网络搜索模式 ++QCFG: "nwscanmode",0 + +OK + +AT+QCFG="nwscanmode",1,1 //设置设备只搜索GSM网络,立即生效 + +OK +``` + + + +### Qualcomm平台 + + + + + + + + + + + + + + + + + + + + + + + + + +
配置网络制式 +
配置命令AT+QCFG="nwscanmode"[,<scan_mode>[,<effect>]]
响应格式OK或者ERROR
参数说明scan_mode整型,网络搜索模式。
0 - 自动
1 - 仅GSM
3 - 仅LTE
若省略可选参数scan_mode,则查询当前网络搜索模式。
effect整型,命令生效方式。
0 - 重启后生效
1 - 立即生效
特性说明配置后,参数自动保存
+ + + +## Band相关指令 + + + +### ASR平台 + + + + + + + + + + + + + + + + + + + + + +
Band 查询 +
查询命令AT+QCFG="band"
响应格式+QCFG: "band",<bandval>,<ltebandval>

OK
参数说明bandval十六进制数据。表示当前配置的 GSM/WCDMA 频段。
ltebandval十六进制数据。表示当前配置的 LTE 频段。
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Band 配置 +
配置命令AT+QCFG="band"[,<bandval>,<ltebandval>]
响应格式OK或者ERROR
参数说明bandval十六进制数字,指定 GSM 和 WCDMA 的频段。
00000000 - 不改变 GSM 和 WCDMA 频段
00000001 - GSM900
00000002 - GSM1800
00000004 - GSM850
00000008 - GSM1900
ltebandval十六进制数字,指定 LTE 的频段。若设置为0,则表示不改变 LTE 频段。
0x1 - LTE B1
0x4 - LTE B3
0x10 - LTE B5
0x40 - LTE B7
0x80 - LTE B8
0x200000000 - LTE B34
0x2000000000 - LTE B38
0x4000000000 - LTE B39
0x8000000000 - LTE B40
0x10000000000 - LTE B41
0x7FFFFFFFFFFFFFFF - 全频段
特性说明配置后立即生效,参数配置自动保存
+ +示例: + +``` +AT+QCFG="band" //查询当前的band配置 ++QCFG: "band",0x0,0x1e200000095 + +OK + +//配置模组LTE频段为B1+B5+B8+B40 +//0x1 + 0x10 + 0x80 + 0x200000000 = 0x200000091 +//注意,配置时十六进制数字前面没有0x +AT+QCFG="band",0,200000091 + +OK +``` + + + +### Unisoc平台 + + + + + + + + + + + + + + + + + + + + + +
Band 查询 +
查询命令AT+QCFG="band"
响应格式+QCFG: "band",<bandval>,<ltebandval>

OK
参数说明bandval十六进制数据。表示当前配置的 GSM/WCDMA 频段。
ltebandval十六进制数据。表示当前配置的 LTE 频段。
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Band 配置 +
配置命令AT+QCFG="band"[,<bandval>,<ltebandval>[,<effect>]]
响应格式OK或者ERROR
参数说明bandval十六进制数字,指定 GSM 和 WCDMA 的频段。
00000000 - 不改变 GSM 和 WCDMA 频段
00000001 - GSM900
00000002 - GSM1800
00000004 - GSM850
00000008 - GSM1900
00000010 - WCDMA 2100
00000020 - WCDMA 1900
00000040 - WCDMA 850
00000080 - WCDMA 900
00000100 - WCDMA 800
00000200 - WCDMA 1700
0000FFFF - 全频段
ltebandval十六进制数字,指定 LTE 的频段。若设置为0,则表示不改变 LTE 频段。
0x1 - LTE B1
0x2 - LTE B2
0x4 - LTE B3
0x8 - LTE B4
0x10 - LTE B5
0x40 - LTE B7
0x80 - LTE B8
0x80000 - LTE B20
0x8000000 - LTE B28
0x200000000 - LTE B34
0x2000000000 - LTE B38
0x4000000000 - LTE B39
0x8000000000 - LTE B40
0x10000000000 - LTE B41
0x7FFFFFFFFFFFFFFF - 全频段
effect整型,配置指令是否立即生效。
0 - UE 重启后生效
1 - 立即生效
特性说明参数配置自动保存
+ +示例: + +``` +AT+QCFG="band" //查询当前的band配置 ++QCFG: "band",0x0,0x1e200000095 + +OK + +//配置模组LTE频段为B1+B5+B8+B40 +//0x1 + 0x10 + 0x80 + 0x200000000 = 0x200000091 +//注意,配置时十六进制数字前面有0x,和ASR平台不一样,ASR平台配置时不带0x前缀 +AT+QCFG="band",0x0,0x200000091 +OK +``` + + + +### Qualcomm平台 + + + + + + + + + + + + + + + + + + + + + + + + + +
Band 查询 +
查询命令AT+QCFG="band"
响应格式+QCFG: "band",<GSM_bandval>,<eMTC_bandval>,<NB-IoT_bandval>

OK
参数说明GSM_bandval十六进制数据。表示当前配置的 GSM频段。
eMTC_bandval十六进制数据。表示当前配置的 eMTC 频段。
NB-IoT_bandval十六进制数据。表示当前配置的 NB-IoT 频段。
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Band 配置 +
配置命令AT+QCFG="band"[,<GSM_bandval>,<eMTC_bandval>,<NB-IoT_bandval>[,<effect>]]
响应格式OK或者ERROR
参数说明GSM_bandval十六进制数字,指定 GSM 的频段。
0 - 不改变 GSM 频段
0x1 - EGSM900
0x2 - DCS1800
0x4 - GSM850
0x8 - PCS1900
0xF - 上述所有频段
eMTC_bandval十六进制数字,指定 eMTC 的频段。
0 - 不改变 eMTC 频段
0x1 - LTE B1
0x2 - LTE B2
0x4 - LTE B3
0x8 - LTE B4
0x10 - LTE B5
0x80 - LTE B8
0x800 - LTE B12
0x1000 - LTE B13
0x20000 - LTE B18
0x40000 - LTE B19
0x80000 - LTE B20
0x1000000 - LTE B25
0x2000000 - LTE B26
0x4000000 - LTE B27
0x8000000 - LTE B28
0x40000000 - LTE B31
0x20000000000000000 - LTE B66
0x800000000000000000 - LTE B72
0x1000000000000000000 - LTE B73
0x1000000000000000000000 - LTE B85
NB-IoT_bandval十六进制数字,指定 NB-IoT 的频段。
0 - 不改变 NB-IoT 频段
0x1 - LTE B1
0x2 - LTE B2
0x4 - LTE B3
0x8 - LTE B4
0x10 - LTE B5
0x80 - LTE B8
0x800 - LTE B12
0x1000 - LTE B13
0x20000 - LTE B18
0x40000 - LTE B19
0x80000 - LTE B20
0x1000000 - LTE B25
0x8000000 - LTE B28
0x40000000 - LTE B31
0x20000000000000000 - LTE B66
0x400000000000000000 - LTE B71
0x800000000000000000 - LTE B72
0x1000000000000000000 - LTE B73
0x1000000000000000000000 - LTE B85
effect整型,配置指令是否立即生效。
0 - UE 重启后生效
1 - 立即生效
特性说明参数配置自动保存
+ +示例: + +``` +//查询当前的band配置 +AT+QCFG="band" ++QCFG: "band",0xf,0x80000,0x10018200000000490e189f + +OK + +//设置eMTC网络支持B1+B3,GSM和NB-IoT保持不变 +AT+QCFG="band",0,0x5,0 + +OK + +``` + diff --git a/docs/FAQ/zh/network/net-handle-exception.md b/docs/FAQ/zh/network/net-handle-exception.md new file mode 100644 index 0000000000000000000000000000000000000000..d3fd83325c64524375f6e06fe7b8244ff6511533 --- /dev/null +++ b/docs/FAQ/zh/network/net-handle-exception.md @@ -0,0 +1,364 @@ +# 常见无法上网问题总结与排查 + +本文主要讲述用户在使用模组过程中,遇到设备无法上网相关的问题时,可能是由哪些原因导致,以及如何进行排查。用户可参考本文中的内容,先自行排查和解决问题。如果按照本文说明进行排查后,仍然没有解决问题,用户可以联系我司FAE来寻求帮助。 + + + +## 常见网络问题 + +模组要能正常的联网,必须经过SIM卡初始化、网络注册、拨号这3个过程,任意一个过程出现问题,都会导致模组无法正常连接网络。导致设备网络异常的大部分问题,通常都是因为一些问题导致SIM卡初始化、网络注册和拨号这几个过程中的某一个过程失败。具体原因可能有很多,这里仅列出常见的几大类问题。 + +* [SIM卡问题](./net-handle-exception.html#SIM卡问题) + +* [信号问题](./net-handle-exception.html#信号问题) + +* [APN问题](./net-handle-exception.html#APN配置错误) + +* [硬件问题](./net-handle-exception.html#硬件问题) + +如果用户按照上述几类情况中的各种步骤尝试后,仍然没有解决问题或者无法确认问题,可以按照如下章节中描述的步骤来抓取CP日志,然后将日志文件打包发送给我司FAE,我司研发人员会去分析这些日志文件,进行问题定位确认。 + +* [抓取CP日志的说明](./net-handle-exception.html#抓取CP日志的说明) + + + +## 问题描述与排查方式 + +### SIM卡问题 + +#### 识别不到SIM卡 + +模组识别SIM卡的过程,本质上其实是模组与SIM卡进行通信的过程,如果因为一些原因导致这个过程通信异常,就会出现模组无法识别到SIM卡的问题现象。下面列出几种比较常见的导致模组无法识别到SIM卡的问题。 + +**问题现象** + +通过如下两种方式查询SIM卡状态,如果出现下图中的现象,说明设备没有识别到SIM卡。 + +方式1:在QPYcom工具中,打开模组的REPL交互端口,进入python命令交互行,通过 `sim.getStatus()` API查询SIM卡状态,如果返回值为0说明没有识别到SIM卡。 + +![](../media/net/交互口查询SIM卡状态.png) + +> 正常应该返回1,表示SIM卡状态正常。 + +方式2:在QPYcom工具中,打开模组的AT端口,发送`AT+CPIN?`命令查询SIM卡状态,如果返回`+CME ERROR: 10`说明没有识别到SIM卡。 + +![](../media/net/AT口查询SIM卡状态.png) + +> 正常应该返回如下: +> +> +CPIN: READY +> +> OK + + + +**排查方式** + +先确认是否插入了SIM卡,如果没有插入,请插入SIM卡后重启设备再重新测试;如果插入了SIM卡,但是设备仍然无法识别到SIM卡,那可能有如下原因: + +情况1:SIM卡没有插好或卡槽松动。 + +可以按照如下步骤排查,如果问题解决了,说明是上述原因导致: + +步骤1:重新插拔SIM卡,重启设备后再重新测试能否识别到SIM卡;如果重启后,设备仍然无法识别到SIM卡,执行步骤2。 + +步骤2:检查一下SIM卡在卡槽中是否存在松动迹象,可尝试增加一个小的卡片或者纸片压一下,重启设备后再重新测试能否识别到SIM卡。如果仍然无法识别到SIM卡,说明是其他原因导致的问题,需要继续排查。 + + + +情况2:SIM卡与卡槽触点接触不良、SIM卡或者卡槽损坏。 + +SIM卡与卡槽触点接触不良的问题,一般是因为SIM卡使用时间较久或者环境原因,使SIM卡引脚触点或者卡槽引脚表面出现磨损氧化等现象,导致SIM卡与卡槽接触不良,甚至损坏。可以采用交叉测试的方式来排查确认: + +假设现在有设备1和2,分别插入了SIM卡A和B,设备1能正常识别到SIM卡A,设备2无法识别到SIM卡B。 + +步骤1:交换不同设备的SIM卡,比如将SIM卡A插到设备2上,SIM卡B插到设备1上,观察问题是跟着SIM卡走还是跟着设备走。 + +步骤2:如果问题跟着SIM卡走,可以尝试使用橡皮擦轻轻擦拭SIM卡上的金属触点,然后重新插入设备,重启设备后再重新测试能否识别到SIM卡。如果重启后,能正常识别,说明是SIM卡引脚导致的接触不良;如果重启后,仍然无法识别到SIM卡,那可能是SIM卡损坏了。 + +步骤3:如果问题跟着设备走,说明很可能是设备端的问题。可以排查是卡槽损坏,还是SIM卡硬件电路问题。 + + + +情况3:SIM卡硬件电路问题。 + +这种情况主要是指设备硬件电路上,SIM卡的卡座到模组SIM相关引脚之间的电路连通性存在问题或者是存在严重信号干扰,导致模组与SIM卡通信失败。使用上述交叉测试的方式排查,如果发现问题跟着设备走,可以通过下面方法进一步确认: + +步骤1:如果有示波器,可以使用示波器监测模组的USIM_VDD、USIM_DATA、USIM_CLK、USIM_RST这几个引脚,然后重启设备,观察这几个引脚是否存在数据波形变化。如果发现某一个引脚在设备重启的整个过程中,始终没有数据波形变化,说明这个引脚与卡槽之间的连通性可能存在问题。同时也关注一下是否存在信号干扰的情况。 + +步骤2:如果没有示波器,可以先使用万用表,对照电路原理图分别测量SIM的卡座与模组的每一条连接线路的连通性是否正常,如果发现某一条线路不通,那可能就是这一条线路的问题。 + +步骤3:如果经过步骤2测试,发现SIM的卡座与模组的连接线路都是正常的,可以尝试更换一个卡槽再重新测试,确认是否是卡槽内部损坏。 + + + +情况4:设备不支持SIM卡热插拔、没有开启热插拔或者热插拔触发电平配置错误。 + +如果用户是在设备上电运行状态下,插入SIM卡,然后发现设备无法识别到SIM卡,可以按照如下步骤排查: + +步骤1:确认当前使用的模组是否支持SIM卡热插拔功能。如果不支持,那就需要在插入SIM卡后,重启设备才能识别到SIM卡。 + +步骤2:如果模组支持SIM卡热插拔功能,并且用户需要使用该功能,确认当前是否开启了SIM卡热插拔功能。可以通过如下方式确认: + +在QPYcom工具中,打开模组的REPL交互端口,进入python命令交互行,通过 `sim.getSimDet()` API查询SIM卡热插拔配置,如果返回的元组第一个参数值为0说明SIM卡热插拔功能没有开启。 + +![](../media/net/交互口查询SIM卡热插拔配置.png) + +步骤3:通过如下接口开启SIM卡热插拔功能,第一个参数表示热插拔功能是否开启,1表示开启,0表示未开启。第二个参数表示热插拔触发电平,需要根据SIM卡实际的在位电平进行设置,如果SIM卡插入时热插拔引脚电平为高则设置为1,如果为低设置为0。该接口在大部分平台上都是立即生效,也有个别平台需要重启才能生效,具体可以参考QuecPython官方网站的wiki说明中的[*热插拔功能*](https://python.quectel.com/doc/API_reference/zh/iotlib/sim.html#%E7%83%AD%E6%8F%92%E6%8B%94%E5%8A%9F%E8%83%BD)章节。 + +![](../media/net/开启SIM卡热插拔功能.png) + + + +#### 启用PIN功能或SIM卡被锁 + +如果SIM卡开启了PIN码验证或者是被锁了,那么SIM卡插入设备后,需要先输入正确的PIN码进行验证或者解锁后才能正常使用,否则设备是不能通过这张SIM卡上网的。 + +**问题现象** + +通过如下两种方式查询SIM卡状态,可以确定SIM卡是否开启了PIN码验证或者被锁: + +方式1:在QPYcom工具中,打开模组的REPL交互端口,进入python命令交互行,通过 `sim.getStatus()` API查询SIM卡状态。 + +* 如果返回值为2,说明SIM卡开启了PIN码验证,需要输入正确的PIN码后才能正常使用。 + +* 如果返回值为3,说明SIM卡已经被锁(连续输入了3次错误的PIN码就会导致SIM卡被锁),此时需要输入正确的PUK来解锁,并且设置一个新的PIN码。 + +![](../media/net/交互口查询SIM卡锁PIN状态.png) + +![](../media/net/交互口查询SIM卡锁PUK状态.png) + + + +方式2:在QPYcom工具中,打开模组的AT端口,发送`AT+CPIN?`命令查询SIM卡状态。 + +* 如果返回`+CPIN: SIM PIN`说明SIM卡开启了PIN码验证,需要输入正确的PIN码后才能正常使用。 + +* 如果返回`+CPIN: SIM PUK`说明SIM卡已经被锁(连续输入了3次错误的PIN码就会导致SIM卡被锁),此时需要输入正确的PUK来解锁,并且设置一个新的PIN码。 + +![](../media/net/AT口查询SIM卡锁PIN状态.png) + +![](../media/net/AT口查询SIM卡锁PUK状态.png) + + + +**排查方式** + +因为SIM卡开启了PIN码验证功能或SIM卡被锁导致设备无法连网的情况。只需要使用正确的PIN或PUK就可以恢复正常。下面分别是解决方式: + +情况1:SIM卡启用了PIN功能,可以通过`sim.verifyPin(pin)` API来输入正确的PIN进行验证,验证通过,SIM卡即可进入正常状态。一般SIM卡默认的PIN是`1234`,如果不确定,可以联系运营商确认,请勿随意输入PIN尝试,否则会导致SIM卡被锁。 + +![](../media/net/输入PIN验证.png) + +> 需要说明的是,使用`sim.verifyPin(pin)` API输入正确PIN验证通过后,PIN码验证功能本身仍然是开启状态,如果此时重启设备,或者执行了CFUN0/1切换操作,那么SIM卡会再次变成需要输入PIN验证的状态。如果用户需要彻底关闭PIN验证功能,可以使用`sim.disablePin(pin) `。 + +情况2:SIM卡被锁,可以通过`sim.unblockPin(puk, newPin)` API来解锁并设置新的PIN码。 + +![](../media/net/输入PUK解锁.png) + +> 通过`sim.unblockPin(puk, newPin)` API输入正确的PUK解锁并设置新的PIN码后,SIM卡会立即恢复到正常状态,但是PIN码验证功能本身仍然是开启状态,如果此时重启设备,或者执行了CFUN0/1切换操作,那么SIM卡会再次变成需要输入PIN验证的状态。这时就需要使用解锁时设置的新的PIN码来验证。 + + + +#### SIM卡欠费或流量限制 + +当SIM卡欠费,或者流量使用达到限制,也可能会导致设备无法正常上网。但是关于SIM卡欠费,不同运营商的SIM卡情况可能不一样,没办法用一个统一的标准去判断。下面列出的问题现象,并非一定就是表示SIM卡欠费,也有可能是其他原因导致。但是出现这些现象的时候,可以先去和运营商确认一下SIM卡是否欠费。 + +**问题现象** + +现象1:设备使用这张SIM卡,之前可以正常注册网络,某一天发现无法注册网络。 + +现象2:注网注册正常,拨号正常,但是无法进行网络业务 + +设备网络注册成功,拨号也成功,可以通过如下方式查询注网拨号状态: + +![](../media/net/交互口查询注网拨号状态.png) + +**排查方式** + +出现上述情况时,用户可以先咨询这张SIM卡的运营商,确认这张SIM卡是否存在欠费或者流量限制的情况。 + + + +#### SIM卡存在区域限制 + +一些专网卡,只能在特定的区域内使用,离开特定区域,设备可能也可以注网拨号成功,但是没办法正常的进行数据业务。 + +**问题现象** + +设备使用某一张SIM卡,在A区域可以正常注网并拨号成功,也能正常进行网络业务,但是离开这个区域后,到其他地方,设备注网拨号成功,但是无法进行网络业务,比如数据发送发不出去或者接收不到数据。 + +> 出现这种现象,并不是一定就是“专网卡的区域限制”,也可能是刚好遇到的SIM卡欠费或者流量限制。具体还是要咨询一下SIM卡的运营商。 + +**排查方式** + +可以先咨询SIM卡运营商确认情况,比如是否存在区域限制、欠费或者流量限制等。 + + + +#### 专网卡IP限制 + +**问题现象** + +设备注网拨号都能成功,拿到了核心网分配的IP地址,但是无法通过socket、mqtt和http等访问公共网络,但是可以连接到特定的服务器。 + +**排查方式** + +先确认使用的是否是专网卡,并且配置了专网的apn,因为有的专网卡只能访问特定的网络,无法访问互联网。这是因为这种专网卡,使用特定apn注网拨号时,网络分配的IP地址是有限制的,这种IP地址只能用来访问专网卡APN对应网络。用户可通过如下两种方式确认: + +方式1:咨询这个专网卡的运营商,确认这个SIM卡能否访问公共网络。 + +方式2:换一张手机能够正常使用的SIM卡,放到设备上,重启后,重新测试,看看能否通过socket、mqtt和http等访问公共网络。如果可以,说明还是和SIM卡有关系,需要咨询运营商确认具体原因,了解是否有什么限制。 + + + +#### 机卡绑定 + +这种问题常见于物联网卡,这种SIM卡一旦在某一台设备上使用,首次注册网络时,运营商那边会将这张卡和当前设备的IMEI进行绑定。后面每次这张SIM卡发起网络注册时,运营商网络都会检查当前网络注册携带的IMEI和这张SIM卡绑定的IMEI是否一致,如果不一致,就拒绝设备的注册请求。 + +**问题现象** + +SIM卡放在设备A上,设备可以正常注册网络并拨号,但是换到设备B上,就出现一直无法注册网络的问题。 + +**排查方式** + +方式1:直接咨询SIM卡运营商确认这种卡是不是存在机卡绑定的情况,如果是,则需要运营商那边协助对SIM卡和设备进行解绑。 + +方式2:找一张手机上正常使用的SIM卡放到同一台设备上,确认是否能正常注册网络和拨号,如果可以说明还是和SIM卡有关系,需要联系运营商确认。 + + + +### 信号问题 + +当设备信号弱,或者信号质量差时,也可能会出现设备无法正常连接网络,或者连接上了但是频繁掉线的问题。影响设备信号强度和质量的因素比较复杂,常见的有天线问题、环境问题以及设备本身硬件问题。下面列出一些常见问题现象和排查方式。 + +**问题现象** + +现象1:设备信号强度很低或者无信号(信号强度主要看CSQ/RSSI/RSRP),或者信号质量很差(信号质量主要看RSRQ/SINR)。可以通过如下接口来查询CSQ/RSRP/RSRQ等信号参数。 + +| 参数 | 查询API | +| ---- | ------------------ | +| CSQ | net.csqQueryPoll() | +| RSSI | net.getSignal() | +| RSRP | net.getSignal() | +| RSRQ | net.getSignal() | +| SINR | net.getSignal(1) | + +信号强弱衡量标准可以参考quecpython官方网站[*信号质量*](https://python.quectel.com/doc/Application_guide/zh/network-comm/nic/cellular/common-concepts.html#%E4%BF%A1%E5%8F%B7%E8%B4%A8%E9%87%8F)章节。 + +现象2:设备无法连接到网络,或者连接上之后,连接不稳定,经常掉线。 + +现象3:设备连接到网络,进行socket、mqtt等网络通信业务时,通信不稳定,经常出现通信失败的情况。 + +**排查方式** + +针对信号强度很低或者无信号的情况,可以采取如下措施排查: + +步骤1:请确认是否接入了天线。如果没有接入,请接上天线再重新测试。 + +步骤2:如果接了天线,可尝试更换其他天线,然后重新测试,并观察信号强度是否有改善。 + +步骤3:如果如果设备是在一个较为封闭的环境下,请将设备拿到室外空旷地带测试,因为设备在封闭环境下,信号会收到很大影响。 + +步骤4:换一个地点测试,因为有时设备可能处于某个小区覆盖边缘,此时信号强度也是很低的。同样可能会出现上述几种现象。 + +步骤5:准备多台设备,用同一张卡或者同一家运营商的同一批次卡测试,确认是个别设备出现问题,还是多台设备都会出现。如果是个别设备出现,那可能是那台设备的硬件问题。如果多台设备都出现问题,可以尝试换个测试地点,如果问题消失,那就说明是环境问题,如果问题仍然存在,那很可能还是设备硬件问题。可以将联系我司协助排查设备硬件是否存在问题,以及确认是否是由于软件问题导致。 + +针对信号质量差的情况,一般都是因为环境中存在干扰导致,也有可能是设备硬件本身存在干扰导致。 + + + +### APN配置错误 + +因为APN配置错误导致设备无法注册到网络的问题,常见于中国之外的国家与地区。因为中国境内大部分运营商网络都有apn自动纠错功能,即设备注册网络时,即使没有配置apn或者配置了错误的apn,对网络注册也没有影响,网络会在设备进行网络注册的过程中下发一个正确的apn下来。 + +**问题现象** + +设备开机一直注册不上网络,通过`net.getState()`方法查询网络注册状态,对应状态值不是1和5。 + +> 出现这种情况,不一定就是apn没有配置或者配置错误,这个只是导致网络注册失败的原因之一。 + +**排查方式** + +一般来说,需要通过对应平台的log工具抓取CP log,提供给我司研发分析,才能确认是否是由于apn问题导致网络注册被拒绝。但是用户也可以先通过如下方式先自己排查看看,如果还是无法解决问题,再抓取相关log提供给我司研发人员分析确认。 + +步骤1:确认是否有针对这张SIM卡配置了APN,如果没有配置,请使用如下方式查询一下当前的apn配置信息;如果是新设备并且是第一次插入SIM卡使用,用户没有配置过APN的情况下,查出来的APN应该是空的,如下图所示 + +![](../media/net/查询apn为空.png) + +如果查出来有apn,但不是当前这张卡的apn,说明这台设备之前使用其他的SIM卡时,用户配置了APN或者那张SIM卡对应的运营商网络下发的,然后设备保存下来了。 + +> 我们建议用户每次更换SIM卡时,都应该为这张SIM卡配置正确的APN参数,这样可以避免因为APN参数不正确导致的网络注册失败问题。 + +步骤2:和这张SIM卡的运营商咨询确认正确的APN,然后使用如下接口来配置,并重启设备,看设备是否可以正常注册到网络。 + +![](../media/net/配置apn信息.png) + +> 上图中只是演示如何配置APN信息,用户实际配置时,要结合自己的实际需求来设置。 + +如果用户配置APN并重启设备后,设备联网成功了,说明之前确实是因为APN没有配置或者配置错误导致的问题。如果配置正确的APN后,设备仍然不能连接到网络,则需要抓取一份包含CFUN0/1切换过程的CP log,提供给我司研发人员进行分析。 + +如果用户无法确认一张SIM卡的正确APN,那么可以尝试使用如下方式将APN清空,然后重启设备,确认设备是否可以正常注册到网络。 + +![](../media/net/清空注网apn.png) + +让设备注网时不携带APN信息,主要是很多运营商网络可以接受设备不携带APN信息的注册,但是不接受设备携带错误的APN。但是也有的运营商网络要求设备必须配置正确APN才能注册成功,既不接受错误的APN,也不接受设备不携带APN信息。 + +> 最佳的方案还是用户去咨询SIM卡对应的运营商确认正确的APN并配置好。“把APN信息清空,让设备注网不携带APN”这种方案,只是为了应对“用户确实不知道正确APN”这种情况而采取的一种尝试方案,并不能解决所有因为APN不正确而导致的注网失败问题,因为有的SIM卡必须配置正确的APN才能注网成功。 + + + +### 硬件问题 + +硬件问题主要是指设备硬件上有元器件损坏、电路短路、电路不通、元器件虚焊以及电路设计问题引起的干扰等问题。通常会直接影响到设备连网功能的硬件问题主要如下: + +* 设备天线存在问题; +* SIM卡卡槽损坏,导致无法识别SIM卡; + +* SIM卡卡槽与模组的连接电路不通或者存在短路情况; + +* 模组的PA损坏或者其他射频相关器件损坏。 + +前面三种硬件相关问题,用户可以按照前面章节描述的方式去排查确认,如果确认不存在这些问题,可以按照如下步骤确认是否是模组内部射频相关器件损坏: + +步骤1:找一两个正常的设备,在同一个地点用同一张SIM卡测试,确认是否可以正常联网,如果可以,进行步骤2; + +步骤2:把异常设备上的模组和正常设备上的模组交换,确认交换后两个设备的网络注册情况: + +* 如果两个设备都能正常连接网络了,那可能是之前存在虚焊方面的问题; + +* 如果问题跟着模组走,即异常设备上的模组换到另一个设备后,另一个设备也无法连网了,那说明很可能是模组内部器件损坏; + +* 如果问题跟着设备走,即异常设备上换了正常的模组后,仍然不能连网,而异常设备上的模组换到另一个正常设备后,另一个设备也能正常连网,说明还是设备本身硬件上存在问题,需要找硬件研发人员协助分析。 + + + +## 抓取CP日志的说明 + +用户需要我司研发人员协助分析设备无法连接网络的问题时,需要抓取空口网络相关的日志。这些日志是有要求的,必须包含设备进行网络注册或者拨号过程。具体可以按照如下步骤来抓取满足条件的日志文件。 + +步骤1:确认模组型号,和我司FAE确认该型号模组使用什么工具抓取CP日志;日志工具的具体使用方式请参考QuecPython官方网站的[*各平台Log工具使用教程*](https://python.quectel.com/doc/Application_guide/zh/dev-tools/LogTool/index.html)部分; + +步骤2:模组先不要插入SIM卡,通过USB数据线连接电脑,设备开机后,打开PC端抓取CP日志的工具,确认工具可以正常抓取模组日志; + +步骤3:将SIM卡插入到模组中,重启设备,确认PC端工具是否正在抓取设备的CP日志,如果没有,需要手动点击开始抓取。开始抓取日志后,等待5~10min,然后点击PC端工具的停止按钮,找到对应日志保存目录,打包保存后,发送给我司FAE或者研发人员。 + +如果用户无法抓取到设备开机时的日志,可以按照如下步骤操作: + +步骤1:确认模组型号,和我司FAE确认该型号模组使用什么工具抓取CP日志; + +步骤2:模组先不要插入SIM卡,通过USB数据线连接电脑,设备开机后,打开PC端抓取CP日志的工具,确认工具可以正常抓取模组日志; + +步骤3:将SIM卡插入到模组中,确保此时PC端工具正在抓取日志。在模组的REPL交互口或者AT口执行CFUN0/1操作,具体如下。 + +方式1:在QPYcom工具中,打开模组的REPL交互端口,进入python命令交互行,通过执行`net.setModemFun(0)`和`net.setModemFun(1)`来实现CFUN0/1的切换过程。 + +![](../media/net/REPL端口执行CFUN切换.png) + +方式2:在QPYcom工具中,打开模组的AT端口,发送`AT+CFUN=0`和`AT+CFUN=1`命令来实现CFUN0/1的切换过程。 + +![](../media/net/AT口进行CFUN切换.png) + +> 无论使用上述哪种方式进行CFUN0/1切换,CFUN0和CFUN1之间的时间间隔应不低于5s。 + +步骤4:CFUN0/1切换后,继续等待5~10min,然后点击PC端工具的停止按钮,找到对应日志保存目录,打包保存后,发送给我司FAE或者研发人员。 \ No newline at end of file diff --git a/docs/FAQ/zh/sidebar.yaml b/docs/FAQ/zh/sidebar.yaml index bf0ab66d60827327bae23d23b610902418de4741..7c9273a28beb62e3ad31b11d2593f5e1403a095f 100644 --- a/docs/FAQ/zh/sidebar.yaml +++ b/docs/FAQ/zh/sidebar.yaml @@ -80,6 +80,10 @@ items: file : network/http.md - label : 短信问题 file : network/sms.md + - label : 常见无法上网问题总结与排查 + file : network/net-handle-exception.md + - label : modem相关常用AT说明 + file : network/modem-at.md - label: 量产和商业应用 file: mp/README.md items: diff --git a/docs/Getting_started/zh/sidebar.yaml b/docs/Getting_started/zh/sidebar.yaml index 5e65dbe30d5dc56c39fa8fd2babc2c93aa0cf036..23d7af15d465ddce21c14c2bb1e0789698ab4e2d 100644 --- a/docs/Getting_started/zh/sidebar.yaml +++ b/docs/Getting_started/zh/sidebar.yaml @@ -17,6 +17,8 @@ items: file: first_python.md - label: 蜂窝基础开发 items: + - label: 不同种类SIM卡APN的配置 + file: sim-apn-config.md - label: 数据拨号 file: network-dev.md - label: Socket基础开发 diff --git a/docs/Getting_started/zh/sim-apn-config.md b/docs/Getting_started/zh/sim-apn-config.md new file mode 100644 index 0000000000000000000000000000000000000000..90f913ffed0bad07dae6743dcef96f83b34ebfad --- /dev/null +++ b/docs/Getting_started/zh/sim-apn-config.md @@ -0,0 +1,199 @@ +# 不同种类SIM卡APN的配置说明 + + + +## 常见SIM卡种类 + +SIM卡是一种用于移动设备连接移动网络的芯片,广泛应用于手机、物联网设备、工业设备等。根据使用场景和网络类型,SIM卡可以分为公网卡、专网卡和物联网卡。 + +### 公网卡 + +公网卡指的是用户日常生活中使用的SIM卡,用于连接互联网这类公共网络。这种卡适用于个人手机、平板电脑等消费电子设备。主要具有如下特点: + +* 套餐多样化,通常有各种流量、语音、短信等套餐,用户可以更具实际需求选择不同的套餐。 + +* 公网卡通常都是绑定一个手机号码,用于发送短信和通话。 + +* 通过公网卡上网,其数据是通过公网传输,数据安全性依赖于运营商提供的加密等安全措施。 +* 公网卡的网络覆盖范围广泛。 + +### 专网卡 + +专网卡通常是为特定行业或者企业定制的一种特殊SIM卡,这种SIM卡一般连接的都是专用网络,而不是公共移动网络。这类SIM卡主要用于需要更高安全性、私密性和稳定性的一些场景中。主要有如下特点: + +* 专网卡依托于专网,网络资源不与公众共享,通信链路一般是独立的,极大地提升了安全性和数据传输的稳定性。 + +* 运营商通常根据客户需求为企业或行业提供定制化的网络解决方案,支持专网卡接入企业自有网络。 + +* 专网卡的通信数据一般不会通过公网传输,因此更适合安全要求极高的场景,例如政府部门、金融机构、军事等。 + +> 有的专网卡,它既可以连接专用网络,又可以连接公共移动网络,具体取决于配置的APN是专用网络的APN还是公共移动网络的APN。 + +### 物联网卡 + +物联网卡也叫IoT卡,是专门为物联网设备设计的SIM卡,适用于各种物联网终端,如智能手表、共享单车、智能家居设备、工业设备等。这类卡专注于数据传输,通常由运营商或第三方物联网平台提供。主要有如下特点: + +* 物联网卡主要用于数据传输,通常不具备语音通话和短信功能,或此类功能较为有限。 + +* 物联网卡通常批量提供给企业用户,用于设备的联网和远程管理,支持设备大规模接入和维护。 + +* 根据数据流量的使用量可以选择不同的计费模式,常见的有按流量计费、按时间计费等方式。 + +* 物联网卡通常支持低功耗广域网(LPWAN)技术,如NB-IoT,适用于覆盖广、设备多、功耗低的应用场景。 + +### 三种卡的主要区别 + +| | 公网卡 | 专网卡 | 物联网卡 | +| ---------------- | ------------------------------ | -------------------------------- | ---------------------------- | +| **主要使用场景** | 个人手机、平板等消费类设备 | 政府、企业、特定行业等高安全需求 | 物联网设备、智能硬件等 | +| **网络类型** | 公共移动网络 | 企业或行业专用网络 | 公共或私有的物联网网络 | +| **安全性** | 依赖运营商的网络安全防护 | 安全性极高,独立于公网 | 较高,通常有多层网络防护 | +| **功能** | 语音、短信、数据流量等综合功能 | 定制化服务,主要用于数据通信 | 数据通信为主,有限的语音功能 | +| **管理方式** | 个人管理,使用灵活 | 企业专属,集中管理 | 批量管理,适用于大量设备 | + + + +## 不同种类SIM卡APN的配置说明 + +模组使用上面几种SIM卡时,一般可以按照如下说明来配置APN等参数,以确保设备能正常进行网络注册和拨号。 + +### 公网卡 + +通常我们在手机上使用公网卡,没有去配置过APN参数,手机也能正常上网,这个主要是由于如下两个原因: + +* 公网卡APN一般都是公开的,网络上都可以查到,手机可能内置了大量公网卡APN信息,做了APN自适应功能,自动匹配了正确的APN。 + +* 公网卡对应的运营商网络有APN自动纠错功能。即设备没有配置APN或者配置错误的APN时,设备在进行网络注册时,当地的运营商网络基站会下发正确的APN给设备。 + +因此对于模组使用公网卡的情况,我们一般有两种配置方式: + +方式1:知道APN的情况下,按照如下方式配置APN信息。 + +```python +import net +import dataCall +import utime + +# 用户需要配置的APN信息,根据实际情况修改 +usrConfig = {'apn': '3gnet', 'username': '', 'password': ''} + +# 获取第一路的APN信息,确认当前使用的是否是用户指定的APN +pdpCtx = dataCall.getPDPContext(1) +if pdpCtx != -1: + if pdpCtx[1] != usrConfig['apn']: + # 如果不是用户需要的APN,使用如下方式配置 + # 第二个参数表示IP类型,需要根据实际情况填写,示例中写的是IPV4类型 + ret = dataCall.setPDPContext(1, 0, usrConfig['apn'], usrConfig['username'], usrConfig['password'], 0) + if ret == 0: + print('APN 配置成功。') + # 重启或者执行CFUN0/1使配置生效 + net.setModemFun(0) + utime.sleep(5) + net.setModemFun(1) + else: + print('APN 配置失败。') + else: + print('APN 已经配置过了。') +else: + print('获取PDP Context失败。') + +``` + +方式2:不知道APN的情况下,可以尝试按如下方式,清空APN,即让设备进行网络注册时不携带APN信息。 + +```python +# 清空第一路APN信息 +dataCall.setPDPContext(1, 0, '', '', '', 0) +# 重启或者执行CFUN0/1使配置生效 +net.setModemFun(0) +utime.sleep(5) +net.setModemFun(1) +``` + +> 方式2是否有效,具体取决于当前网络是否接受设备注网时不携带APN信息。 + +方式3:什么都不配置,直接使用。 + +这种方式一般在中国境内可以尝试,因为中国的移动、电信和联通几个运营商的大部分基站都支持APN自动纠错功能,即模组没有配置APN或者APN错误的情况下,一般都不会影响设备的网络注册。但是对于其他国家和地区,我们不建议用户使用这种方式,还是建议用户使用方式1来配置正确的APN参数。 + +### 专网卡 + +专网卡由于连接的是专用网络,而APN代表的就是要连接什么网络,因此模组使用专网卡时,必须配置APN信息,用户需要先和该专网卡供应商确认正确的APN信息,然后按照如下方式来配置: + +```python +import net +import dataCall +import utime + +# 用户需要配置的APN信息,根据实际情况修改 +usrConfig = {'apn': '3gnet', 'username': '', 'password': ''} + +# 获取第一路的APN信息,确认当前使用的是否是用户指定的APN +pdpCtx = dataCall.getPDPContext(1) +if pdpCtx != -1: + if pdpCtx[1] != usrConfig['apn']: + # 如果不是用户需要的APN,使用如下方式配置 + # 第二个参数表示IP类型,需要根据实际情况填写,示例中写的是IPV4类型。如果专网卡只支持IPV6,则下面第二个参数需要配置为1。 + ret = dataCall.setPDPContext(1, 0, usrConfig['apn'], usrConfig['username'], usrConfig['password'], 0) + if ret == 0: + print('APN 配置成功。') + # 重启或者执行CFUN0/1使配置生效 + net.setModemFun(0) + utime.sleep(5) + net.setModemFun(1) + else: + print('APN 配置失败。') + else: + print('APN 已经配置过了。') +else: + print('获取PDP Context失败。') +``` + + + +### 物联网卡 + +物联网卡一般也是需要专门的APN信息的,因此模组使用物联网卡时,也应该去配置正确的APN信息,这种卡的APN也需要用户去和SIM卡供应商确认清楚。用户可以按照如下方式来配置: + +```python +import net +import dataCall +import utime + +# 用户需要配置的APN信息,根据实际情况修改 +usrConfig = {'apn': '3gnet', 'username': '', 'password': ''} + +# 获取第一路的APN信息,确认当前使用的是否是用户指定的APN +pdpCtx = dataCall.getPDPContext(1) +if pdpCtx != -1: + if pdpCtx[1] != usrConfig['apn']: + # 如果不是用户需要的APN,使用如下方式配置 + # 第二个参数表示IP类型,需要根据实际情况填写,示例中写的是IPV4类型。如果物联网卡只支持IPV6,则下面第二个参数需要配置为1。 + ret = dataCall.setPDPContext(1, 0, usrConfig['apn'], usrConfig['username'], usrConfig['password'], 0) + if ret == 0: + print('APN 配置成功。') + # 重启或者执行CFUN0/1使配置生效 + net.setModemFun(0) + utime.sleep(5) + net.setModemFun(1) + else: + print('APN 配置失败。') + else: + print('APN 已经配置过了。') +else: + print('获取PDP Context失败。') +``` + +物联网络不接受设备进行网络注册时携带错误的APN信息,因此如果用户配置了错误的APN信息会导致设备进行网络注册被拒绝。但是有的物联网络接受设备进行网络注册时,不携带APN信息,如果是这种网络,用户又不清楚当前物联网卡的APN信息,可以尝试清空设备的第一路APN信息,让设备进行网络注册时,不携带APN,具体可按照如下操作进行。 + +```python +# 清空第一路APN信息 +# 第二个参数表示IP类型,需要根据实际情况填写,示例中写的是IPV4类型。如果物联网卡只支持IPV6,则下面第二个参数需要配置为1。 +dataCall.setPDPContext(1, 0, '', '', '', 0) +# 重启或者执行CFUN0/1使配置生效 +net.setModemFun(0) +utime.sleep(5) +net.setModemFun(1) +``` + +由于我们无法提前知道哪个网络是否接受设备进行网络注册时不携带APN,因此我们还是建议用户尽量与SIM卡运营商沟通确认APN信息,然后配置正确的APN信息。 \ No newline at end of file