TCP
一、TCP 概述
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。TCP 通过三次握手建立连接,使用滑动窗口进行流量控制,以及通过校验和、确认应答、超时重传等机制来保证数据的可靠性。它是互联网协议套件(TCP/IP 协议族)的核心组成部分,广泛应用于各种网络应用中。
工作原理:
1.1 连接建立:TCP 协议使用三次握手协议来建立连接。
- 客户端发送一个 SYN(同步序列编号)报文给服务端,并携带一个随机生成的初始序列号。
- 服务端收到 SYN 报文后,发送一个 SYN+ACK(同步序列编号 + 确认应答)报文给客户端,表示确认收到了客户端的 SYN 报文,并携带自己的初始序列号。
- 客户端收到服务端的 SYN+ACK 报文后,发送一个 ACK(确认应答)报文给服务端,表示确认收到了服务端的 SYN+ACK 报文。至此,TCP 连接建立完成。
1.2 数据传输:
在连接建立后,双方就可以开始传输数据了。TCP 协议会将应用层发送的数据分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元 MTU 的限制),并为每个报文段分配一个序号。接收端在收到报文段后,会按照序号进行排序,并发送确认应答(ACK)给发送端。如果发送端在合理的往返时延(RTT)内未收到确认应答,则会重传对应的报文段。
1.3 连接释放:TCP 协议使用四次挥手协议来终止连接。
- 客户端发送一个 FIN(结束)报文给服务端,表示自己想要关闭连接。
- 服务端收到 FIN 报文后,发送一个 ACK 报文给客户端,表示确认收到了客户端的 FIN 报文。此时,客户端到服务端的连接关闭,但服务端到客户端的连接仍然打开。
- 服务端在发送完所有剩余数据后,也发送一个 FIN 报文给客户端,表示自己也想要关闭连接。
- 客户端收到服务端的 FIN 报文后,发送一个 ACK 报文给服务端,表示确认收到了服务端的 FIN 报文。至此,TCP 连接完全关闭。
二、演示功能概述
本文教你怎么使用 AT 命令,通过几个简单的步骤,就可以让合宙 4G 模组与 TCP 服务器通讯。
1. 使用 TCP 服务器 2. 4G 模组插卡开机后,使用 AT 指令完成 TCP 连接建立,数据发送,数据接收以及链接关闭操作
三、准备硬件环境
工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下硬件环境。
本文章使用 Air780EPS 核心板做演示;
参考:硬件环境清单,准备以及组装好硬件环境。
四、准备软件环境
工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下软件环境。
1. Luatools工具;
2. LLCOM 串口通信工具;
4. 本教程使用的AT固件版本号是:AirM2M_780EPS_V2005_LTE_AT,如果版本号不正确,参考:固件版本确认和烧录检查确认。
五、使用方法举例
5.1 确认开发板正常开机并联网正常
本次教程所用固件版本是V2005,通过 Luatools烧录过固件后可以通过打印来判断设备情况,具体参考下图:
5.2 TCP 相关相关命令
六、TCP 通信实例
在本文中,我们将使用合宙 TCP/UDP web 测试工具,点击右侧连接进入工具:https://netlab.luatos.com,浏览器中出现如下界面:
点击右上角“打开 TCP”,在 WEB 页面左上角会显示当前可用于连接的 TCP 服务器 IP 地址和端口号
如下图标记处,待测试的 IP 地址为:112.125.89.8,端口号为:43316
注意:读者进行测试时 IP 和端口会随机分配,测试中我们替换成对应的 IP 和端口号即可。
6.1 TCP 非透传应用:模块做为客户端,单链接,发送和接收数据
事实上,数据发送方式有快发和慢发两种,由 AT+CIPQSEND=n命令来设置。
1. n=0:快发模式0(缺省值),当服务器收到数据,模块返回:"SEND OK"(单链接)或 "n,SEND OK"(多链接);
2. n=1:快发模式1,当数据发送到模块,终端返回:"DATAACCEPT:length"(单链接) "DATAACCEPT:n,length" (多链接);
3. n=2:慢发模式当服务器收到数据,模块返回:"SEND OK"(单链接)或 "n,SEND OK"(多链接);
4. 慢发模式每发送一笔数据需要服务器那边的确认,而快发则发送到模块就可以了,不需要服务器的确认。推荐使用 0 或 1;
5. 这两种快发模式实现机制没有区别,区别只在于发送完数据,模式 0 提示 "SEDN OK",模式 1 提示 "DATA ACCEPT",使用快发模式时建议使用 CIPACK 命令查询每笔数据对端是否已经收到;
6. 6.1节使用分别介绍快发、慢发两种模式,其他小节只介绍快发模式介绍。
建立链接
AT+CREG? //查询当前 GPRS 注册状态
+CREG: 0,1 //+CREG: 0,0,表示禁用 URC 上报,+CREG: 0,1,标识已经注册 GPRS 网络,而且是本地网
OK
AT+CGATT? //查看当前 GPRS 附着状态
+CGATT:1 //+CGATT:1 ,标明当前 GPRS 已经附着
OK
AT+CIPMUX=0 //设置为单链接模式,mode:0-单路连接模式,1-多路连接模式
OK
AT+CIPQSEND=1 //注意:数据发送选择“快发模式1”时,选用指令AT+CIPQSEND=1 设置为快发模式。数据发送选择“慢发模式2”时,选用指令AT+CIPQSEND=2 设置为慢发模式。
OK
AT+CSTT //启动任务,设置APN模块注册网络后会从网络自动获取<apn>并激活一个PDP上下文(此<apn>可以通过AT+CGDCONT?来查询),所以直接输入AT+CSTT即可,模块内部会按照自动获取的<apn>来设置CSTT的APN
OK
AT+CIICR //激活移动场景,获取 IP 地址
OK
AT+CIFSR //查询分配的 IP 地址
10.83.172.111 //此处 IP 随机
AT+CIPSTATUS //查询下链接状态
OK
STATE: IP STATUS
OK
AT+CIPSTART="TCP","112.125.89.8",43316 //连接服务器其中:"TCP"为链接的协议类型"112.125.89.8"为对端服务器的 IP 地址43316_为对端服务器的 TCP 端口号,注:CIPSTART 设置命令所有的参数,双括号可以用,也可以不用
CONNECT OK //如果链接成功,会有如此 URC 上报
AT+CIPSTATUS //查询下链接状态
OK
STATE: CONNECT OK //链接建立成功
此时,模组已经与服务器建立连接,如下图所示:
不定长数据发送(快发模式1)
AT+CIPSEND //发送数据(不定长度,手动发送)
> //等待发送数据
1234567890<CTRL-Z> //当出现">"后,输入待发送的数据:0123456789。<CTRL-Z>用来发送数据,发送16进制数0x1A即等同于发送<CTRL-Z>
AT+CIPACK //每发一笔,查询下发送状态,可以知道上笔数据服务器有没有收到
+CIPACK:10,10,0 //第一个10,表明已经发送的数据字节数,第二个10表示服务器收到的数据字节数,0表示服务器尚未收到的数据字节数
OK
不定长数据发送(慢发模式2)
AT+CIPSEND //发送数据(不定长度,手动发送)
> //等待发送数据
1234567890<CTRL-Z> //当出现">"后,输入待发送的数据:0123456789。<CTRL-Z>用来发送数据,发送16进制数0x1A即等同于发送<CTRL-Z>
SEND OK //当服务器收到数据, 模块返回 SEND OK ,否则阻塞
OK
定长数据发送(快发模式1)
AT+CIPSEND=10 //发送数据(确定长度)
>
1234567890 //输入发送数据``
DATA ACCEPT:10 //输入数据达到 10 个字节,不用发送`<CTRL-Z>`数据会自动发送
定长数据发送(慢发模式2)
AT+CIPSEND=10 //发送数据(确定长度)
>
1234567890 //输入发送数据``
SEND OK //当服务器收到数据, 模块返回 SEND OK ,否则阻塞
定时定长数据发送(快发模式1)
AT+CIPATS=1,10 //设置自动发送,自动发送的定时为 10S
OK
AT+CIPSEND //发送数据
>
1234567890 //
DATA ACCEPT:10 //10s 定时器溢出,不用发送`<CTRL-Z>`,数据会自己发送
定时定长数据发送(慢发模式2)
AT+CIPATS=1,10 //设置自动发送,自动发送的定时为 10S
OK
AT+CIPSEND //发送数据
>
1234567890 //
SEND OK //当服务器收到数据, 模块返回 SEND OK ,否则阻塞
定时数据发送(快发模式1)
AT+CIPSEND=100 //设置自动发送,自动发送的定时为 10S
>
123
DATA ACCEPT:3 //10s 定时器溢出,输入内壁不必达到 100 字节,也不用发送`<CTRL-Z>`,数据会自己发送
定时数据发送(慢发模式2)
AT+CIPSEND=100 //设置自动发送,自动发送的定时为 10S
>
123
SEND OK //当服务器收到数据, 模块返回 SEND OK ,否则阻塞
关闭链接
AT+CIPCLOSE \\关闭TCP链接
CLOSE OK \\关闭成功
AT+CIPSTATUS \\查询下链接状态
OK
STATE: TCP CLOSED //TCP链接已经关闭
AT+CIPSHUT //关闭移动场景
SHUT OK //关闭成功
AT+CIFSR //查询当前的模块IP
+CME ERROR: 3 //IP地址已经没有了
6.2 TCP 非透传应用 :模块做为客户端,单链接,发送数据,开启 SSL 功能
AT+CIPMUX=0 //设置为单链接模式
OK
AT+CIPQSEND=1 //发送模式为快发
OK
AT+CIPSTATUS //查询下链接状态
OK
STATE: IP INITIAL
AT+CIPSSL=1 //打开SSL功能(本例中双方都不需要验证证书)
AT+CIPSTART="TCP","112.125.89.8",43316 //当模块设置为单链接并且状态为IP INITIAL时,也可以用CIPSTART直接建立连接,不必先输入CSTT CIICR CIFSR请写实际的服务器地址和端口,不要照抄
OK
CONNECT OK //如果链接成功,会有如此URC上报
AT+CIPSEND
> //等待输入数据
1234567890<CTRL-Z> //<CTRL-Z>用来发送数据,发送16进制数0x1A即等同于发送<CTRL-Z>。
DATA ACCEPT:10 //表明模块接收了从TE输入的10个字节的待发数据
//+CIPCLOSE,+CIPSHUT,不再赘述
6.3 TCP 非透传应用 :模块做为客户端,单链接,发送数据,开启 SSL 功能(双向证书验证)
如下图,获取服务器证书文件,保存到电脑,可以用文本编辑器打开
证书内容如下,我们需要提取证书的内容进行
AT+CIPMUX=0 //设置为单链接模式
OK
AT+CIPQSEND=1 //发送模式为快发
AT+CIPSSL=1 //开启SSL功能开关为开
OK
AT+FSCREATE="ca.crt" //创建CA 证书文件
OK
AT+FSCREATE="client.crt' //创建客户端证书文件
OK
AT+FSWRITE="ca.crt",0,2048,15 //文件长度2080只是举例,要根据实际填写。下同。
>-----BEGIN CERTIFICATE----- //输入CA证书文件内容
MIIDgjCCAwmgAwIBAgISA9MxeG4GzrsxOY7oWT2jrKelMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NjAeFw0yNDEwMDMwOTAwMzRaFw0yNTAxMDEwOTAwMzNaMBwxGjAYBgNVBAMTEW5l
dGxhYi5sdWF0b3MuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzLqQss+Z
bn8zlyMlE6Xtq0/Gd/Ux8murlgpAXrzdlCcoZgjmIC3mQhQx4HlcjgRLdXyh3XLI
LlemDEbrkBJaVaOCAhMwggIPMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggr
BgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU62woHzRv
J1cX+P+tmCySndjp1+wwHwYDVR0jBBgwFoAUkydGmAOpUWiOmNbEQkjbI79YlNIw
VQYIKwYBBQUHAQEESTBHMCEGCCsGAQUFBzABhhVodHRwOi8vZTYuby5sZW5jci5v
cmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNi5pLmxlbmNyLm9yZy8wHAYDVR0RBBUw
E4IRbmV0bGFiLmx1YXRvcy5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEwggEEBgor
BgEEAdZ5AgQCBIH1BIHyAPAAdgDgkrP8DB3I52g2H95huZZNClJ4GYpy1nLEsE2l
bW9UBAAAAZJR0Z0tAAAEAwBHMEUCIQCIuAsQnfCzh0xlz+8nEw7yBvGQ8MAfmELU
PejZyEbLjAIgQnRv6odRVz8Pt54u84qnf4tM9SgdI2A2Kx87o4spVg4AdgDPEVbu
1S58r/OHW9lpLpvpGnFnSrAX7KwB0lt3zsw7CAAAAZJR0Z1ZAAAEAwBHMEUCIQCL
VV7u73e/V1KRYbkt3IKkPyKRTN6cKIajPfjfgKq+AAIgRt5FyNzIDARVZujHRbCL
Vc3H6kC/0LuwyEYhZMQ/0YAwCgYIKoZIzj0EAwMDZwAwZAIwY9s6nTj7FfAE77x/
ZdbfgdYUGO+q9XxlMN32ebgqmmbY4h0JjqrYqCqfZuHu1F1dAjAmoSlGnUH/pBnb
yBWKVh63tfSmIiSQHbBveqsAtnXoQMPdQe/5Lh6uZWrypR7FTwc=
-----END CERTIFICATE-----
OK
AT+FSWRITE="client.key",0,2048,10 //
>-----BEGIN CERTIFICATE-----
MIIEnzCCA4egAwIBAgIDH3xuMA0GCSqGSIb3DQEBCwUAMG4xCzAJBgNVBAYTAkNO
MSMwIQYDVQQDDBpvbmxpbmUuaW90ZGV2aWNlLmJhaWR1LmNvbTEOMAwGA1UECgwF
QkFJRFUxDDAKBgNVBAsMA0JDRTEcMBoGCSqGSIb3DQEJARYNaW90QGJhaWR1LmNv
bTAeFw0yNDEwMjkxMjM5MThaFw0zNDEwMjcxMjM5MThaMEcxDjAMBgNVBAoMBUJh
aWR1MQswCQYDVQQGEwJDTjEaMBgGA1UEAwwRYXNmYWx5ZC9haXI3ODBlU2UxDDAK
BgNVBAsMA0JDRTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALbGRgGP
RSzElGAHsxnG0KCkq4K/X/pIhCKJCCgbdTryfWySX/HDakhDz2gT7ILomPo3QjlP
AaaxiWilXq2NQFx/P10pudXmc8bmO9NOcCz9M1ApoMi5tEaoVo+L3cnswJGvHbDI
w9JlltB3DlB9ilj5URfw4u8T0vww8IqOWaeTF53l7bsyk9CFvNZ5eItDii8fUsrf
hy7s6Rrw2VDIonGP4M1Ou6E8L0qy4y0iiP+cK8zV20ova6d/dVczAwuGZD2jWsEE
u7QNqP9VkMwifxqiszJFMpZz1FNQrHCWXeDt649niCwTTN5d/pGcctPzIL6pfzna
8Fod1OWHDfYFyTMCAwEAAaOCAWswggFnMB0GA1UdDgQWBBQLAioG0aLxTXvAbOEX
uEZTVHf6qDAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFLPrE8QwTwDCp+sVDszY
Kyd2E2RXMIGjBgNVHR8EgZswgZgwgZWggZKggY+GgYxodHRwOi8vcGtpaW92LmJh
aWR1YmNlLmNvbS92MS9wa2kvY3JsP2NtZD1jcmwmZm9ybWF0PVBFTSZpc3N1ZXI9
Qz1DTixDTj1vbmxpbmUuaW90ZGV2aWNlLmJhaWR1LmNvbSxFTUFJTEFERFJFU1M9
aW90QGJhaWR1LmNvbSxPPUJBSURVLE9VPUJDRTBCBggrBgEFBQcBAQQ2MDQwMgYI
KwYBBQUHMAGGJmh0dHA6Ly9wa2lpb3YuYmFpZHViY2UuY29tL3YxL3BraS9vY3Nw
MA4GA1UdDwEB/wQEAwID+DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQw
DQYJKoZIhvcNAQELBQADggEBADUYPyiNvcRvM+DxAQEJpPI0V0eVKgeksgolUcRk
1ZiCcnWioJRplIm5I9qVFXUghzcronxkC7zUOfZO2wrn0ORFLZF3+s58a3+eHAV2
lxFKfHtHdhRXdlu91mN2p9ByGT07Amh7Rqp12t7ZCvKiWwB98/mvGgo59ZwNFpsX
+Sa2M9Z5Zr0OAlnEV+EiMZQobPY122+uqh3ws6UEm0Nco+WTxzh2rzD+FfKbqTsu
ET1UgRPh6qVgsg9ZvhlGjjFySTWOwy9KcJIbYuJD1BTBf4n6n8DvbN0QGza2gKxt
OkcTiXs7SpVDMuuBGau01K2o6Ay1PgFUnI1dqa17gW3oY40=
-----END CERTIFICATE----- //输入客户端密钥文件内容
OK
AT+SSLCFG="cacert",0,"ca.crt" //设置服务器CA 证书SSL 上下文id,在单链接的情况下缺省为0
OK
AT+SSLCFG="clientcert",0,"client.crt" //设置客户端证书
OK
AT+SSLCFG="client.key",0,"client.key' //设置客户端KEY
OK
AT+SSLCFG="seclevel",0,2 //设置安全等级
OK
AT+SSLCFG="ciphersuite",0,0X0035 //设置加密套件
OK
AT+SSLCFG="clientrandom",0,101B12C3141516171F19202122232425262728293031323334353637 //设置随机数
OK
AT+CIPSTART=TCP,tcplab.openluat.com,57513 //
OK
ONNECT OK
AT+CIPSEND=10 //发送数据(确定长度)
> //等待输入数据
1234567890
DATA ACCEPT:10 //输入数据达到10个字节,不用发送<CTRL-Z>数据会自动发送
AT+CIPSHUT
OK
AT+CIPSSL=0 //关闭 SSL 功能
OK
6.6 透明传输应用 :TCP 数据传输
数据透传(Transparent Transmission)是指将原始数据从一个设备直接传输到另一个设备,不对数据(除“+++”退出透传模式指令外)进行任何处理或解析,这种方式类似于数据的"直通车",确保数据的完整性和一致性,透传模式能够实现更高的传输效率和更低的延迟。
AT+CIPMODE=1 //开启透明传输模式
OK
AT+CIPSTART="TCP","112.125.89.8",43316 //建立TCP链接,其中:"TCP"为链接的协议类型,"112.125.89.8"为对端服务器的IP地址,43316为对端服务器的TCP端口号
OK
_
_CONNECT //如果链接成功,会有如此URC上报
指令执行实例截图如下:
发送数据“123456789”原样发送到服务器
服务器下发的数据原样发送到模组
通过“+++”可以退出透传模式:
如果想返回 AT 命令模式,则在数据后面输入 +++
注:+++ 需要满足一定的条件才会被模块认为是退出透传模式,否则会被认为是数据:
-
第一个 + 之前需要 1000ms 的间隔
-
最后一个 + 之后需要 500ms 的间隔
-
三个 + 之间的间隔不能超过 500ms
+++ //末尾不要加回车
OK //OK表示已经返回到AT命令模式
指令执行实例截图;
退出透传模式后,可以正常执行 AT 指令
AT+CIPCLOSE //关闭TCP链接
CLOSE OK //关闭成功
AT+CIPSHUT //关闭移动场景
SHUT OK //关闭成功
OK
当传输中有协议栈错误发生时,会转入 AT 命令状态并上报该错误码
TCP ERROR:xx 或CLOSED
AT+CIPSHUT //此时可以通过AT指令关闭移动场景
SHUT OK
6.7 APN 设置与专网卡
用户根据自己使用的网络类型来区分,sim 卡可以分为公网卡和专网卡两种;对于如何判断自己手里的 sim 卡是公网卡还是专网卡可以通过下面两种办法区分:
- 咨询 sim 卡供应商;
- 如果有 apn 账号、或者有密码、或者有加密类型,则可以认为是专网卡。
对于公网卡和专网卡设置和查询有不同的指令,合宙 Air7XXE系列 4G 模组设置和查询 APN 相关指令可以参考下图:
设置apn指令流程:
AT+CPIN? //检查卡是否正常
AT+CPNETAPN=2,jscmiot,u9682,iot98765,2 //举例,根据实际填写,不能照抄
AT+CGATT? //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上,1表示正常
APN 及专网卡常见问题
1. 模块如何设置 APN
1、如果是公网SIM卡,不需要用户主动设置APN,软件自动去网络端查询APN进行设置。
2、如果是专网SIM卡,首先咨询SIM卡提供商APN参数,然后通过AT+CPNETAPN=mode,“apnname”,“user”,“pwd”,authmoded进行专网卡的参数设置。
1. 专网卡连接服务器失败
1、有的专网卡没设置APN的情况下也能激活PDP,但是不能连专网卡指定的服务器,或者开机后模块没自动激活PDP,这个时候参考1,检查APN参数是否设置正确。
2、如果有其他厂家的模块,对比测试下是否连接正常。
3、如果无法百分百保证服务器配置没问题,最好在服务器端用wireshark抓包,或者在服务器上安装一个第三方工具,开启一个服务器端口来对比测试。
4、用定向Ip的物联网卡,需要把域名或IP加入白名单才能使用。
1. 专网卡访问白名单
用定向 IP 的物联网卡,需要把域名或 IP 加入白名单才能使用,下面列出模块会访问的域名或 IP 服务器。
七、总结
7.1 模块上电初始化以及 TCPIP流程
7.2 单链接状态机
当输入 TCPIP 相关命令以后, 模块的状态也会发生相应的迁移。 查询状态的命令是 AT+CIPSTATUS
7.3 多链接状态机
关于单连接状态机的几点说明:
1.输入 AT+CIICR, 会马上进入 IP CONFIG 状态, 当返回 OK 后, 会进入到 IP GPRSACT 状态;
2.输入 AT+CIPSTART 后, 会立马进入 IP/UDP CONNECTING 状态, 如果后续模块上报 CONNECT OK 这个 URC,表明连接服务器成功, 此时进入 CONNECT OK 状态;
3.输入 AT+CIPCLOSE 后, 立马进入 TCP/UDP CLOSING 状态, 此时如果模块上报 CLOSE OK, 则表明关闭与服务器的连接成功, 此时模块进入 TCP/UDP CLOSED 状态;
4.如果模块上报 +PDP DEACT 这个 URC, 则标志着模块释放 PDP 上下文, 并进入了 PDP DEACT 状态;
5.在 IP GPRSACT, IP STATUS, CONNECT OK 以及 TCP/UDP CLOSED 状态下, 输入 AT+CGATT=0, 则也可以使模块释放上下文, 进入 PDP DEACT 状态;
6.模块进入 PDP DEACT 状态, 仍需要输入 AT+CIPSHUT, 进入 IP INITIAL 状态;
7.模块在各个状态下均可以输入 AT+CIPSHUT, 进入 IP INITIAL 状态。
八、参考资料
8.1 合宙 Air780EPS 模组资料中心
https://docs.openluat.com/air780eps/
8.2 Air780EPS AT TCP 快速入门教程
https://docs.openluat.com/air780eps/at/quick_start/tcp/
九、使用到的工具
https://docs.openluat.com/air_tools/
十、常见问题 Q&A
10.1 问:开发板发送 AT 指令无任何响应?
a.确保模组已经开机;
b.开发板有两个 USB 端口,确保 Micro USB 接入开发板标识 USB 的端口上;
c.电脑 USB 驱动是否安装正确;
d.串口助手是否选择了正确 AT 指令端口;
e.检查串口助手参数是否设置正确,如波特率,停止位,奇偶校验,停止位,新行发送等;
f.确保模组固件为标准 AT 固件。
10.2 问:模组 AT 指令测试正常,但无法建立 TCP 链接?
a.检查模组建立 TCP 链接前是否已经获取到 IP 地址,通过指令 AT+CIFSR 查看;
b.检查 TCP 参数是否正确,如指令 AT+CIPSTART="TCP",XXX,YYY, “xxx”表示 TCP 连接 IP 地址"YYY"为端口号,同时需要确保发送建立 TCP 连接前服务器对应的端口处于打开状态。
10.3 问:重试多次 PDP 激活失败,TCP 应用一直连接失败,怎么解决?
a.使用 RESET 引脚复位模块。
b.极端情况下,直接给模块断电,再上电,POWER KEY。