59 KiB
Quectel LTE Standard(A) 系列 TCP/IP 应用指导
版本: V1.6
日期: 2023-10-30
状态: 受控文件
前言
移远通信提供该文档内容以支持客户的产品设计。客户须按照文档中提供的规范、参数来设计产品。同时,您理解并同意,移远通信提供的参考设计仅作为示例。您同意在设计您目标产品时使用您独立的分析、评估和判断。在使用本文档所指导的任何硬软件或服务之前,请仔细阅读本声明。您在此承认并同意,尽管移远通信采取了商业范围内的合理努力来提供尽可能好的体验,但本文档和其所涉及服务是在"可用"基础上提供给您的。移远通信可在未事先通知的情况下,自行决定随时增加、修改或重述本文档。
使用和披露限制
许可协议
除非移远通信特别授权,否则我司所提供硬软件、材料和文档的接收方须对接收的内容保密,不得将其用于除本项目的实施与开展以外的任何其他目的。
版权声明
移远通信产品和本协议项下的第三方产品可能包含受移远通信或第三方材料、硬软件和文档版权保护的相关资料。除非事先得到书面同意,否则您不得获取、使用、向第三方披露我司所提供的文档和信息,或对此类受版权保护的资料进行复制、转载、抄袭、出版、展示、翻译、分发、合并、修改,或创造其衍生作品。移远通信或第三方对受版权保护的资料拥有专有权,不授予或转让任何专利、版权、商标或服务商标权的许可。为避免歧义,除了正常的非独家、免版税的产品使用许可,任何形式的购买都不可被视为授予许可。对于任何违反保密义务、未经授权使用或以其他非法形式恶意使用所述文档和信息的违法侵权行为,移远通信有权追究法律责任。
商标
除另行规定,本文档中的任何内容均不授予在广告、宣传或其他方面使用移远通信或第三方的任何商标、商号及名称,或其缩略语,或其仿冒品的权利。
第三方权利
您理解本文档可能涉及一个或多个属于第三方的硬软件和文档("第三方材料")。您对此类第三方材料的使用应受本文档的所有限制和义务约束。
移远通信针对第三方材料不做任何明示或暗示的保证或陈述,包括但不限于任何暗示或法定的适销性或特定用途的适用性、平静受益权、系统集成、信息准确性以及与许可技术或被许可人使用许可技术相关的不侵犯任何第三方知识产权的保证。本协议中的任何内容都不构成移远通信对任何移远通信产品或任何其他硬软件、设备、工具、信息或产品的开发、增强、修改、分销、营销、销售、提供销售或以其他方式维持生产的陈述或保证。此外,移远通信免除因交易过程、使用或贸易而产生的任何和所有保证。
隐私声明
为实现移远通信产品功能,特定设备数据将会上传至移远通信或第三方服务器(包括运营商、芯片供应商或您指定的服务器)。移远通信严格遵守相关法律法规,仅为实现产品功能之目的或在适用法律允许的情况下保留、使用、披露或以其他方式处理相关数据。当您与第三方进行数据交互前,请自行了解其隐私保护和数据安全政策。
免责声明
- 移远通信不承担任何因未能遵守有关操作或设计规范而造成损害的责任。
- 移远通信不承担因本文档中的任何因不准确、遗漏、或使用本文档中的信息而产生的任何责任。
- 移远通信尽力确保开发中功能的完整性、准确性、及时性,但不排除上述功能错误或遗漏的可能。除非另有协议规定,否则移远通信对开发中功能的使用不做任何暗示或法定的保证。在适用法律允许的最大范围内,移远通信不对任何因使用开发中功能而遭受的损害承担责任,无论此类损害是否可以预见。
- 移远通信对第三方网站及第三方资源的信息、内容、广告、商业报价、产品、服务和材料的可访问性、安全性、准确性、可用性、合法性和完整性不承担任何法律责任。
版权所有 © 上海移远通信技术股份有限公司 2023,保留一切权利。
文档历史
| 版本 | 日期 | 作者 | 变更表述 |
|---|---|---|---|
| 1.0 | 2019-10-28 | Larson Li | 初始版本 |
| 1.1 | 2019-10-30 | Larson Li | 1. 更新参数APN鉴权方式取值含义(第2.1.1章) 2. 更新参数取值范围(第2.1.4章、第2.1.6章和第2.1.12章) |
| 1.2 | 2020-07-24 | Larson Li | 1. 增加文档适用模块EG912Y系列和EC200S-CN 2. 更新 AT+QICFG="tcp/keepalive"中的取值范围(第2.2.15章) 3. 新增如下AT命令:AT+QICFG="viewmode"、AT+QICFG="passiveclosed"、AT+QICFG="recvind"、AT+QICFG="tcp/accept" |
| 1.3 | 2021-04-20 | Larson Li | 1. 增加文档适用模块EC200N-CN和EC600N-CN 2. 更新参数取值范围(第2.3.1章) 3. 新增如下AT命令(第2.3.15章):AT+QICFG="tcp/retranscfg"、AT+QICFG="send/buffersize"、AT+QICFG="send/auto"、AT+QICFG="recv/ignore"、AT+QICFG="formatcfg"、AT+QICFG="qisend/timeout"、AT+QICFG="close/mode" |
| 1.4 | 2022-03-02 | Larson Li | 1. 增加文档适用模块EC200A系列、EC800N-CN和EG915N-EU |
| 1.5 | 2023-01-11 | Larson Li | 1. 更新适用模块:新增EC200M-CN、EC600M-CN、EC800M-CN、EG810M-CN和EG912N-EN;更新EG915N-EU为EG915N系列;删除EC200T系列和EC600S-CN 2. 删除TCP/IP AT命令使用流程图中的AT+CREG?命令(第1.2章) 3. 新增如下AT命令(第2.3.1章):AT+QICFG="sendinfo"、AT+QICFG="pdp/retry" |
| 1.6 | 2023-10-23 | Fawei ZHOU | 1. 更新适用模块:新增EC600K-CN、EC800K系列、EG800K系列和EG950A系列;更新EC200N-CN为EC200N系列 2. 新增 AT+QICFG="wakeup/data"和 URC +QIURC:"wakeup/data"(第2.3.1章和第2.4.6章) 3. 新增AT+QICFG="send/auto"的参数(第2.3.1章) 4. 新增AT+QICFG="recv/ignore"的参数(第2.3.1章) 5. 新增AT+QICFG相关备注(第2.3.1章) 6. 新增TCP可选项配置示例(第3.10章) |
目录
- 1 引言
- 2 TCP/IP AT命令详解
- 2.1 AT命令说明
- 2.2 AT示例声明
- 2.3 AT命令详解
- 2.3.1 AT+QICFG 配置可选参数
- 2.3.2 AT+QICSGP 配置TCP/IP场景参数
- 2.3.3 AT+QIACT 激活PDP场景
- 2.3.4 AT+QIDEACT 去激活PDP场景
- 2.3.5 AT+QIOPEN 打开Socket服务
- 2.3.6 AT+QICLOSE 关闭Socket服务
- 2.3.7 AT+QISTATE 查询Socket服务状态
- 2.3.8 AT+QISEND 发送数据
- 2.3.9 AT+QIRD 读取收到的TCP/IP数据
- 2.3.10 AT+QISENDEX 发送16进制字符串数据
- 2.3.11 AT+QISWTMD 切换数据访问模式
- 2.3.12 AT+QPING 进行远程服务器Ping操作
- 2.3.13 AT+QNTP 使用NTP服务器同步本地时间
- 2.3.14 AT+QIDNSCFG 配置DNS服务器地址
- 2.3.15 AT+QIDNSGIP 用域名获取IP地址
- 2.3.16 AT+QISDE 控制是否回显AT+QISEND要发送的数据
- 2.3.17 AT+QIGETERROR 查询上一个AT命令错误代码
- 2.4 URC说明
- 3 示例
- 4 错误代码
- 5 附录:参考文档及术语缩写
1 引言
移远通信 LTE Standard(A) 系列模块内置 TCP/IP 协议栈,Host 可以直接通过 AT 命令访问网络;这极大降低了模块对 PPP 和外部 TCP/IP 协议栈的依赖性,从而降低终端设计的成本。
LTE Standard(A) 系列模块可提供 TCP 客户端、UDP 客户端、TCP 服务器和 UDP 服务器等 Socket 服务。
1.1 适用模块
| 模块系列 | 模块 |
|---|---|
| LTE Standard(A) | EC200A 系列、EC200S 系列、EC600N-CN、EC600K-CN、EC800M-CN、EC800N-CN、EC800K 系列、EG800K 系列、EG810M-CN、EG912N-EN、EG912Y-EU、EG915N 系列、EG950A 系列 |
1.2 使用TCP/IP AT命令的流程
通过 TCP/IP AT 命令,Host 可以配置 PDP 场景、激活/去激活 PDP 场景、打开/关闭 Socket 服务,并通过 Socket 服务发送/接收数据。
TCP/IP AT 命令使用流程:
-
建议开关机流程
- 关机:发送
AT+QPOWD,等待 12s 以上,直接断电 - 开机:先使 Power Key 按键处于低电平状态,等待 2s 后,再拉高 Power Key
- 关机:发送
-
查询 (U)SIM 卡状态
- 执行
AT+CPIN,如果 20s 后命令AT+CPIN无法识别 (U)SIM 卡状态,建议重启模块
- 执行
-
PS 业务
- 当
AT+CGREG?/AT+CEREG?结果中的<stat>等于 1 或者 5,表示模块已在 UMTS/LTE 网络注册上 PS 业务 - 等待 60s 后,不管是否注册上 PS 业务,都进入下一个流程
- 当
-
配置 PDP Context 激活参数
- 通过
AT+QICSGP命令配置 APN、User Name、Password 和 Auth Type - 通过
AT+CGQMIN/AT+CGEQMIN/AT+CGQREQ/AT+CGEQREQ配置 QoS 参数
- 通过
-
激活 PDP Context
- 通过
AT+QIACT=<contextID>激活 PDP Context - 通过
AT+QIACT?查询 PDP Context IP 地址
- 通过
-
打开连接
- 通过
AT+QIOPEN打开连接 - 等待
+QIOPEN:<connectID>,<err>输出,建议等待 150 秒
- 通过
-
发送数据
- 通过
AT+QISEND=<connectID>命令发送数据
- 通过
-
TCP 连接的维护和检测
- 通过
AT+QISEND=<connectID>[,<send_length>]发送数据,建议定期向远程端发送小数据包以维护和检测 TCP 连接 - 通过
AT+QISEND=<connectID>,0查询 ACK 的发送 - 如果在 2 分钟后(每 5s 查询一次,一共查询 24 次),对方没有收到数据,说明 TCP 连接可能出现异常,请执行
AT+QICLOSE关闭这个 TCP 连接,然后通过AT+QIOPEN重新建立 TCP 连接
- 通过
注意事项:
- 请注意必须接收到上一个 AT 命令的执行结果后(例如:OK / CME ERROR / CMS ERROR),才能执行下一个 AT 命令。一般情况下,如果在 60s 内没有收到 AT 命令执行结果,建议重启模块。
- 若 150s 内未收到
AT+QIACT响应,10s 内未收到AT+QICLOSE响应,40s 内未收到AT+QIDEACT响应,建议重启模块。 - 不建议频繁重启模块。如果因为执行 AT 命令连续 3 次重启模块失败,此后第一次可立即重启,然后等待 10 分钟,再进行第二次重启,如果仍重启失败,建议等待 30 分钟,再进行第三次重启,以此类推,逐渐增大重启的时间间隔。
- 请注意,根据 3GPP 协议,LTE 模块在成功附着网络后将自动激活默认承载(通常 PDP 上下文 ID 为 1)。若因 APN 问题导致激活失败或类型不符,需通过以下步骤重新配置:先执行
AT+CFUN=0关闭网络,再使用AT+QICSGP配置正确的 APN,最后执行AT+CFUN=1重启模块以重新激活。
1.3 数据访问模式说明
LTE Standard(A) 系列模块支持以下 3 种数据访问模式:
| 模式 | 说明 |
|---|---|
| 缓存模式 | 可以通过 AT+QISEND 发送数据。从网络接收数据时,模块会缓存所接收的数据,并直接上报 URC +QIURC:"recv",<connectID>,之后用户可以通过 AT+QIRD 来读取缓存数据。 |
| 直吐模式 | 可以通过 AT+QISEND 发送数据。从网络接收数据时,数据会以 URC 格式直接输出到 COM 口。 |
| 透传模式 | 相对应的串口(比如 UART 口、USB Modem 口等)会进入独占模式,通过 COM 口接收的数据会直接发送到网络端,从网络接收到的数据会从 COM 口直接输出。+++ 可以用来退出透传模式。 |
退出透传模式:
用户可以通过 +++ 或者 DTR(需先设置 AT&D1)两种方式退出透传模式。为了防止 +++ 被当成数据发送,实际操作时必须遵循以下步骤:
+++输入前 1 秒或更长时间内不能输入其它任何数据;- 必须在 1 秒内输入
+++,并且不能输入其它任何数据; +++输入后 1 秒内不能输入其它任何数据;- 通过
+++或者 DTR(设置AT&D1)方式使模块退出透传模式,直到模块返回 OK;此时模块成功退出透传模式。
切换到透传模式:
- 通过执行
AT+QISWTMD:执行此命令时,指定<access_mode>为 2;若返回 CONNECT,则表示成功切换至透传模式。 - 通过
ATO方式:退出透传模式后,可通过ATO再切换回至透传模式;若返回 CONNECT,则表示成功切换至透传模式。若模块之前未曾进入过透传模式,执行ATO则会返回 NO CARRIER。
备注:
- 在缓存模式和直吐模式下,可通过
AT+QISEND发送数据。 - 在缓存模式下,如果缓存不为空,直到通过
AT+QIRD读取缓存里面所有接收的数据后,模块才会上报一个新的 URC。 - 在透传模式下,不可执行 AT 命令。若因网络错误或者其他原因导致 Socket 连接断开,模块会上报 NO CARRIER,并退出透传模式,在这种情况下可以执行
AT+QICLOSE来关闭 Socket 服务。
2 TCP/IP AT命令详解
2.1 AT命令说明
2.1.1 定义
<CR>回车符<LF>换行符<...>参数名称。实际命令行中不包含尖括号[...]可选参数或 TA 信息响应的可选部分。实际命令行中不包含方括号。若无特别说明,配置命令中的可选参数被省略时,将默认使用其之前已设置的值或其默认值- 下划线参数的默认设置
2.1.2 AT命令语句
前缀 AT 或 at 必须加在每个命令行的开头。输入 <CR> 将终止命令行。通常,命令后面跟随形式为 <CR><LF><response><CR><LF> 的响应。在本文档中表现命令和响应的表格中,省略了 <CR><LF>,仅显示命令和响应。
| AT命令类型 | 语句 | 描述 |
|---|---|---|
| 测试命令 | AT+<cmd>=? |
测试是否存在相应的命令,并返回有关其参数的类型、值或范围的信息 |
| 查询命令 | AT+<cmd>? |
查询相应命令的当前参数值 |
| 设置命令 | AT+<cmd>=<p1>[,<p2>[,<p3>...]] |
设置用户可定义的参数值 |
| 执行命令 | AT+<cmd> |
返回特定的参数信息或执行特定的操作 |
2.2 AT示例声明
本文中的示例仅为方便用户了解 AT 命令的使用方法,不构成移远通信对终端流程设计的建议或意见,也不代表模块应被设置成相应示例中的状态。某些 AT 命令存在多个示例,这些示例之间不存在承接关系或连续性。AT 命令示例中存在的 URL、域名、IP 地址、用户名/账号以及密码等(若有),仅为示意以供说明之用;实际使用时须根据实际情况进行修改。
2.3 AT命令详解
2.3.1 AT+QICFG 配置可选参数
该命令用于配置可选参数。
测试命令: AT+QICFG=?
设置命令格式:
| 功能 | 命令 | 响应 |
|---|---|---|
| 设置待发数据包最大长度 | AT+QICFG="transpktsize"[,<transpktsize>] |
查询:+QICFG:"transpktsize",<transpktsize>OK |
| 设置透传模式下自动发送数据前的等待时间 | AT+QICFG="transwaittm"[,<transwaittm>] |
查询:+QICFG:"transwaittm",<transwaittm>OK |
| 设置收发数据格式(仅限非透传模式) | AT+QICFG="dataformat"[,<send_data_format>,<recv_data_format>] |
查询:+QICFG:"dataformat",<send_data_format>,<recv_data_format>OK |
| 设置已接收数据的输出格式 | AT+QICFG="viewmode"[,<view_mode>] |
查询:+QICFG:"viewmode",<view_mode>OK |
| 设置是否在服务器关闭时被动关闭TCP连接 | AT+QICFG="passiveclosed"[,<closed>] |
查询:+QICFG:"passiveclosed",<closed>OK |
| 设置UDP数据的读取模式 | AT+QICFG="udp/readmode"[,<mode>] |
查询:+QICFG:"udp/readmode",<mode>OK |
| 设置UDP数据的发送模式 | AT+QICFG="udp/sendmode"[,<mode>] |
查询:+QICFG:"udp/sendmode",<mode>OK |
| 设置是否发送TCP保活信息 | AT+QICFG="tcp/keepalive"[,<enable>[,<idle_time>[,<interval_time>[,<probe_cnt>]]]] |
查询:+QICFG:"tcp/keepalive",<enable>,<idle_time>,<interval_time>,<probe_cnt>OK |
| 设置在缓存模式下接收数据后上报URC是否显示数据长度 | AT+QICFG="recvind"[,<show_length>] |
查询:+QICFG:"recvind",<show_length>OK |
| 设置重传次数和重传间隔 | AT+QICFG="tcp/retranscfg"[,<retran_times>,<retran_time>] |
查询:+QICFG:"tcp/retranscfg",<retran_times>,<retran_time>OK |
| 启用或禁用自动接收来自客户端的TCP连接 | AT+QICFG="tcp/accept"[,<state>] |
查询:+QICFG:"tcp/accept",<state>OK |
| 设置单次发送数据的最大长度 | AT+QICFG="send/buffersize"[,<buffer_size>] |
查询:+QICFG:"send/buffersize",<buffer_size>OK |
| 设置周期性发送心跳包数据 | AT+QICFG="send/auto",<connectID>[,<cycle_time>[,<msg_auto>][,<data_format>][,<try_times>]] |
查询:+QICFG:"send/auto",<connectID>,<cycle_time>,<msg_auto>,<data_format>,<try_times>OK |
| 设置过滤指定数据 | AT+QICFG="recv/ignore",<connectID>[,<msg_ignore>][,<data_format>] |
查询:+QICFG:"recv/ignore",<connectID>,<msg_ignore>,<data_format>OK |
设置发送 AT+QISEND 命令返回 > 的格式 |
AT+QICFG="formatcfg"[,<format>] |
查询:+QICFG:"formatcfg",<format>OK |
| 设置发送 AT+QISEND 命令的最大响应时间 | AT+QICFG="qisend/timeout"[,<timeout>] |
查询:+QICFG:"qisend/timeout",<timeout>OK |
| 设置异步断开TCP连接 | AT+QICFG="close/mode"[,<close_mode>] |
查询:+QICFG:"close/mode",<close_mode>OK |
| 启用或禁用以URC形式显示AT+QISEND返回信息 | AT+QICFG="sendinfo"[,<send_view_mode>] |
查询:+QICFG:"sendinfo",<send_view_mode>OK |
| 设置SEND OK返回模式 | AT+QICFG="TCP/SendMode"[,<send_mode>] |
查询:+QICFG:"TCP/SendMode",<send_mode>OK |
| 设置PDP激活或去激活重试次数和时间 | AT+QICFG="pdp/retry",<pdpmode>,<ratmode>,<counts>,<retry_time> |
查询:+QICFG:"pdp/retry",<pdpmode>,<ratmode>,<counts>,<retry_time>OK |
| 设置唤醒报文数据 | AT+QICFG="wakeup/data",<connectID>[,<wakeup_data>[,<data_format>]] |
查询:+QICFG:"wakeup/data",<connectID>,<wakeup_data>,<data_format>OK |
参数说明:
| 参数 | 说明 |
|---|---|
<transpktsize> |
整型。透传模式下,待发数据包最大长度。范围:1~1460;默认值:1024;单位:字节 |
<transwaittm> |
整型。透传模式下,待发数据小于 <transpktsize> 时,自动发送数据前的等待时间。范围:0~20;默认值:2;单位:100毫秒 |
<send_data_format> |
整型。发送数据格式。0=文本模式,1=十六进制模式 |
<recv_data_format> |
整型。接收数据格式。0=文本模式,1=十六进制模式 |
<view_mode> |
整型。接收数据的输出方式。0=data header\r\ndata,1=data header,data |
<closed> |
整型。启用或禁用TCP连接在服务器关闭后自动断开。0=禁用,1=启用 |
<mode> |
整型。UDP数据读取/发送模式。0=禁用块模式,1=启用流模式 |
<enable> |
整型。启用或禁用发送TCP保活信息。0=禁用,1=启用 |
<idle_time> |
整型。触发保活循环时间。范围:1~1800;单位:秒 |
<interval_time> |
整型。在循环时间内发送数据包间隔时间。范围:25~100;单位:秒 |
<probe_cnt> |
整型。保活探测次数 |
<show_length> |
整型。在缓存模式下,启用或禁用在接收数据后上报的URC中显示数据长度。0=禁用,1=启用 |
<retran_times> |
整型。在循环时间内重连次数。范围:3~12 |
<retran_time> |
整型。在循环时间内重连间隔。范围:5~1000;单位:毫秒 |
<state> |
整型。0=禁用自动接受来自客户端的TCP连接,1=启用自动接受来自客户端的TCP连接 |
<buffer_size> |
整型。单次发送数据的最大长度 |
<connectID> |
整型。Socket连接号。范围:0~11 |
<cycle_time> |
整型。设置发送心跳包的时间周期。范围:20~86400;单位:秒 |
<msg_auto> |
字符串类型。发送心跳包内容 |
<msg_ignore> |
字符串类型。过滤数据内容 |
<format> |
整型。> 输出格式。0=0D0A>,1=0D0A>0D0A |
<timeout> |
整型。设置输出 > 后的超时时间 |
<close_mode> |
整型。启用或禁用异步断开TCP连接。0=禁用,1=启用 |
<send_view_mode> |
整型。启用或禁用以URC形式显示AT+QISEND或AT+QISENDEX返回信息。0=禁用,1=启用 |
<send_mode> |
整型。SEND OK返回模式。0=发送数据后立即返回SEND OK,1=收到服务器ACK后返回SEND OK,2=收到服务器ACK后返回<connectID>,SEND OK,3=收到服务器ACK后上报+QIURC:SEND OK,4=收到服务器ACK后上报+QIURC:<connectID>,SEND OK |
<pdpmode> |
整型。0=去激活模式,1=激活模式 |
<ratmode> |
整型。0=4G模式,1=2G模式 |
<counts> |
整型。实际执行激活或去激活的次数 = <counts> 的取值 + 1 |
<retry_time> |
整型。单次执行激活或去激活的最大时间。单位:秒 |
<wakeup_data> |
字符串类型。唤醒报文数据 |
<data_format> |
整型。输入的报文数据类型。0=十六进制ASCII码(自动转换为十六进制字符串处理),1=十六进制字符串,2=字符串 |
<try_times> |
整型。重试次数。范围:0~10 |
最大响应时间: 300 毫秒
特性说明: 参数配置不保存(部分命令立即生效)
备注:
- 若配置为 2(字符串类型),则需注意字符串数据中不能包含特殊字符(如 ASCII 特殊控制字符和转义字符等),否则需配置为 0 或 1。
AT+QICFG="wakeup/data"配置完指定的数据后,服务器下发的其他数据均会被丢弃,仅当报文数据被唤醒时或者网络发生异常事件时,才会通知 MCU 唤醒。
2.3.2 AT+QICSGP 配置TCP/IP场景参数
该命令用于配置 <APN>、<username> 和 <password> 以及其他 TCP/IP 场景参数。QoS 配置需通过 AT+CGQMIN、AT+CGEQMIN、AT+CGQREQ 和 AT+CGEQREQ。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QICSGP=? |
+QICSGP:(支持的<contextID>范围),(支持的<context_type>范围),<APN>,<username>,<password>,(支持的<authentication>范围)OK |
| 查询命令 | AT+QICSGP=<contextID> |
+QICSGP:<context_type>,<APN>,<username>,<password>,<authentication>OK |
| 设置命令 | AT+QICSGP=<contextID>,<context_type>[,<APN>[,<username>[,<password>[,<authentication>[,<cdma_pwd>]]]]] |
OK 如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。场景ID。范围:1~15 |
<context_type> |
整型。协议类型。1=IPv4,2=IPv6,3=IPv4v6 |
<APN> |
字符串类型。接入点名称 |
<username> |
字符串类型。用户名。最大长度:127字节 |
<password> |
字符串类型。密码 |
<authentication> |
整型。APN鉴权方式。0=None,1=PAP,2=CHAP,3=PAP或CHAP |
<cdma_pwd> |
整型。是否在CDMA网络下保存 <username> 和 <password>。0=不保存,1=保存 |
特性说明: 该命令立即生效;参数配置自动保存。
举例:
AT+QICSGP=1
+QICSGP: 1,"","","",0
OK
AT+QICSGP=1,1,"UNINET","","",1
OK
2.3.3 AT+QIACT 激活PDP场景
在用 AT+QIACT 激活 PDP 场景前,需要使用 AT+QICSGP 配置场景。场景激活后,可以通过 AT+QIACT? 查询 IP 地址。
虽然 <contextID> 的范围为 1~15,但是模块最多仅可同时激活 3 路 PDP 场景。受网络状态影响,执行 AT+QIACT 后,等待返回结果 OK 或者 ERROR 的最大时间为 150 秒,在结果尚未返回之前,无法执行任何 AT 命令。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QIACT=? |
+QIACT:(支持的<contextID>范围)OK |
| 查询命令 | AT+QIACT? |
返回当前所有被激活的场景与IP地址:+QIACT: <contextID>,<context_state>,<context_type>,<IP_address>... OK |
| 设置命令 | AT+QIACT=<contextID> |
激活指定场景:OK 如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。场景ID。范围:1~15 |
<context_state> |
整型。场景状态。0=去激活,1=激活 |
<context_type> |
整型。协议类型。1=IPv4,2=IPv6,3=IPv4v6 |
<IP_address> |
字符串类型。场景激活后的本地IP地址 |
最大响应时间: 受网络状态影响,最大响应时间 150 秒。
2.3.4 AT+QIDEACT 去激活PDP场景
该命令用于去激活特定场景,断开在这个场景内建立的所有 TCP/IP 连接。受网络状态影响,执行 AT+QIDEACT 后,等待返回结果 OK 或者 ERROR 的最大时间为 40 秒。在结果尚未返回之前,无法执行任何 AT 命令。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QIDEACT=? |
OK |
| 设置命令 | AT+QIDEACT=<contextID> |
OK 如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。场景ID。范围:1~15 |
最大响应时间: 受网络状态影响,最大响应时间 40 秒。
2.3.5 AT+QIOPEN 打开Socket服务
该命令用于打开 Socket 服务。服务类型可通过 <service_type> 指定,数据访问模式(缓存模式、直吐模式和透传模式)可通过 <access_mode> 配置,URC +QIOPEN 将指示 Socket 服务是否成功打开。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QIOPEN=? |
+QIOPEN:(支持的<contextID>范围),(支持的<connectID>范围),"TCP/UDP/TCPLISTENER/UDPSERVICE","<IP_address>/<domain_name>",<remote_port>,<local_port>,(支持的<access_mode>范围)OK |
| 设置命令 | AT+QIOPEN=<contextID>,<connectID>,"<service_type>","<IP_address>/<domain_name>",<remote_port>,<local_port>,<access_mode> |
如果数据访问模式是透传模式(=2)并且成功打开服务:CONNECT 如有错误:ERROR 如果数据访问模式是缓存模式(=0)或者直吐模式(=1):OK +QIOPEN:<connectID>,<err>当服务成功打开, <err> 是 0 |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。场景ID。范围:1~15 |
<connectID> |
整型。Socket连接号。范围:0~11 |
<service_type> |
字符串类型。Socket服务类型。 "TCP"=客户端建立TCP连接 "UDP"=客户端建立UDP连接 "TCPLISTENER"=建立TCP服务器监听TCP连接 "UDPSERVICE"=建立UDP服务 |
<IP_address> |
如果 <service_type> 是 "TCP" 或 "UDP",则为远程服务器的IP地址;如果 <service_type> 是 "TCPLISTENER" 或 "UDPSERVICE",请输入 127.0.0.1 |
<domain_name> |
字符串类型。远程服务器的域名地址 |
<remote_port> |
整型。远程服务器端口。范围:0~65535。仅当 <service_type> 是 "TCP" 或 "UDP" 时才有效 |
<local_port> |
整型。本地端口。范围:0~65535。如果配置本地端口;否则本地端口会被指定 |
<access_mode> |
整型。连接数据访问模式。0=缓存模式,1=直吐模式,2=透传模式 |
<err> |
错误码。请参考第4章 |
最大响应时间: 受网络状态影响,最大响应时间 150 秒。
备注:
- 如果
<service_type>是 "TCP LISTENER",那么模块作为 TCP 服务器使用。接受一个新的 TCP 连接后,模块会自动指定一个<connectID>并上报 URC+QIURC:"incoming",<connectID>,<serverID>,<remoteIP>,<remote_port>;其中<connectID>范围为 0~11。 - 如果
<service_type>是 "UDP SERVICE",则可通过<local_port>向远程 IP 收发 UDP 数据。 - 等待
+QIOPEN:<connectID>,<err>输出,建议等待 150 秒;如果 150 秒内未接收到该 URC,则需通过AT+QICLOSE来关闭 Socket。
2.3.6 AT+QICLOSE 关闭Socket服务
该命令用于关闭特定的 Socket 服务。受网络状态影响,执行 AT+QICLOSE 后,等待返回结果 OK 或者 ERROR 的最大时间为 10 秒(此为默认值,可以通过 <timeout> 来修改)。在结果尚未返回之前,无法执行任何 AT 命令。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QICLOSE=? |
+QICLOSE:(支持的<connectID>范围),(支持的<timeout>范围)OK |
| 设置命令 | AT+QICLOSE=<connectID>[,<timeout>] |
关闭成功:OK 关闭失败:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
<timeout> |
整型。输出响应结果的超时时间值。若未在时间范围内接收到其他客户端的 FIN ACK,模块会强制关闭 Socket。范围:0~65535;默认值:10;单位:秒 |
最大响应时间: 默认 10 秒,取决于 <timeout> 取值。
2.3.7 AT+QISTATE 查询Socket服务状态
该命令用于查询 Socket 服务状态。若 <query_type> 为 0,则返回在特定场景下现存所有 Socket 服务的状态;若 <query_type> 为 1,则返回特定 Socket 服务的状态。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QISTATE=? |
OK |
| 查询/执行命令 | AT+QISTATE? 或 AT+QISTATE |
返回现存所有连接状态:+QISTATE: <connectID>,<service_type>,<IP_address>,<remote_port>,<local_port>,<socket_state>,<contextID>,<serverID>,<access_mode>,<AT_port>... OK |
| 设置命令(query_type=0) | AT+QISTATE=<query_type>,<contextID> |
返回特定场景下现存所有连接的状态:+QISTATE: <connectID>,<service_type>,<IP_address>,<remote_port>,<local_port>,<socket_state>,<contextID>,<serverID>,<access_mode>,<AT_port>... OK |
| 设置命令(query_type=1) | AT+QISTATE=<query_type>,<connectID> |
+QISTATE: <connectID>,<service_type>,<IP_address>,<remote_port>,<local_port>,<socket_state>,<contextID>,<serverID>,<access_mode>,<AT_port>OK |
参数说明:
| 参数 | 说明 |
|---|---|
<query_type> |
整型。查询类型。0=查询特定场景下所有Socket服务的连接状态,1=查询特定Socket服务连接状态 |
<contextID> |
整型。场景ID。范围:1~15 |
<connectID> |
整型。Socket连接号。范围:0~11 |
<service_type> |
字符串类型。Socket服务类型。"TCP"/"UDP"/"TCPLISTENER"/"TCP INCOMING"/"UDPSERVICE" |
<IP_address> |
字符串类型。IP地址 |
<remote_port> |
整型。远程端口号 |
<local_port> |
整型。本地端口号 |
<socket_state> |
整型。Socket状态。0=Initial(尚未建立连接),1=Opening,2=Connected,3=Listening,4=Closing |
<serverID> |
整型。仅在 <service_type> 为 "TCP INCOMING" 时才有效 |
<access_mode> |
整型。0=缓存模式,1=直吐模式,2=透传模式 |
<AT_port> |
字符串类型。Socket服务的COM口。如 "usbmodem"、"usbat"、"uart1"、"cmux1"~"cmux4" |
最大响应时间: 300 毫秒
2.3.8 AT+QISEND 发送数据
若特定 Socket 服务的数据访问模式是缓存模式(<access_mode>=0)或者直吐模式(<access_mode>=1),可通过 AT+QISEND 发送数据。
- SEND FAIL 表示发送缓存已满,可以尝试重新发送数据;
- ERROR 表示在发送数据过程中遇到错误,请延迟一段时间后再次发送数据,发送数据的最大长度为 1460 字节;
- SEND OK 并不表示数据已经成功发送至服务器,可通过
AT+QISEND=<connectID>,0查询数据是否已经发送至服务器。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QISEND=? |
+QISEND:(支持的<connectID>范围),(支持的<send_length>范围)OK |
| 设置命令(发送不定长数据) | AT+QISEND=<connectID> |
>响应 > 后,输入需要发送的数据;按 Ctrl+Z 发送数据,按 Esc 取消发送。(1) 若 <send_view_mode>=0:若连接已建立且发送成功:SEND OK 若发送缓存已满:SEND FAIL 若连接未建立:ERROR (2) 若 <send_view_mode>=1:若连接已建立: +QISEND:<connectID>,<status>,<freesize>OK |
| 设置命令(发送定长数据) | AT+QISEND=<connectID>,<send_length> |
>响应 > 后,输入长度等于 <send_length> 的数据。若连接已建立且发送成功:SEND OK 若发送缓存已满:SEND FAIL 若连接未建立:ERROR |
| 设置命令(UDP SERVICE发送) | AT+QISEND=<connectID>,<send_length>,<remoteIP>,<remote_port> |
>响应 > 后,输入长度等于 <send_length> 的数据。若连接已建立且发送成功:SEND OK 若发送缓存已满:SEND FAIL 若连接未建立:ERROR |
| 设置命令(查询发送状态) | AT+QISEND=<connectID>,0 |
若指定连接存在:+QISEND:<connectID>,<total_send_length>,<acked_length>,<nacked_length>OK 如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
<send_length> |
整型。发送数据字节长度。范围:0~1460;单位:字节 |
<send_view_mode> |
整型。设置是否以URC形式显示AT+QISEND指令执行信息。0=禁用,1=启用 |
<status> |
整型。0=发送数据到套接字缓冲区成功,1=接收缓冲区满,发送失败 |
<freesize> |
整型。当前缓冲区中的空闲空间。范围:0~10240;单位:字节 |
<remoteIP> |
字符串类型。远程IP地址(必须是点分十进制格式)。仅当 <service_type>="UDPSERVICE" 才有效 |
<remote_port> |
整型。远程端口。仅当 <service_type>="UDPSERVICE" 才有效 |
<total_send_length> |
整型。已发送数据总长度。单位:字节 |
<acked_length> |
整型。已确认数据长度。单位:字节 |
<nacked_length> |
整型。未确认数据长度。单位:字节 |
2.3.9 AT+QIRD 读取收到的TCP/IP数据
在缓存模式下,模块收到数据后会先缓存数据并上报 +QIURC:"recv",<connectID>,之后可通过 AT+QIRD 读取所述数据。
缓存中仍有数据时,模块若再次接收到数据,将不会再上报 URC;直到缓存中所有数据均被读取,才会上报新的 URC。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QIRD=? |
+QIRD:(支持的<connectID>范围),(支持的<read_length>范围)OK |
| 设置命令(TCP/UDP/TCP INCOMING) | AT+QIRD=<connectID>[,<read_length>] |
若无数据:+QIRD: 0OK 若数据存在: +QIRD:<read_length><CR><LF><data>OK |
| 设置命令(UDP SERVICE) | AT+QIRD=<connectID> |
若无数据:+QIRD: 0OK 若数据存在: +QIRD:<read_length>,<remoteIP>,<remote_port><CR><LF><data>OK |
| 设置命令(查询接收数据总长度) | AT+QIRD=<connectID>,0 |
若指定连接存在:+QIRD:<total_length>,<have_read_length>,<unread_length>OK |
参数说明:
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
<read_length> |
整型。待读取数据的最大长度。范围:0~1500;单位:字节 |
<remoteIP> |
字符串类型。远程IP地址。仅当 <service_type>="UDPSERVICE" 时才有效 |
<remote_port> |
整型。远程端口。仅当 <service_type>="UDPSERVICE" 才有效 |
<total_length> |
整型。已接收数据的总长度。单位:字节 |
<have_read_length> |
整型。已读取数据的长度。单位:字节 |
<unread_length> |
整型。未读取数据的长度。单位:字节 |
2.3.10 AT+QISENDEX 发送16进制字符串数据
该命令用于发送 16 进制字符串数据,不适用于 "UDP SERVICE" 和 "TCP LISTENER" 两种 Socket 服务类型。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QISENDEX=? |
+QISENDEX:(支持的<connectID>范围),<hex_string>OK |
| 设置命令 | AT+QISENDEX=<connectID>,<hex_string> |
(1) 若 <send_view_mode>=0:若数据发送成功:SEND OK 若发送缓存已满:SEND FAIL 若连接不存在:ERROR (2) 若 <send_view_mode>=1:若连接已建立: +QISENDEX:<connectID>,<status>,<freesize>OK 若连接未建立:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
<hex_string> |
字符串类型。16进制字符串数据。最大长度:512字节 |
<status> |
整型。0=发送数据到套接字缓冲区成功,1=接收缓冲区满,发送失败 |
<freesize> |
整型。当前缓冲区中的空闲空间。范围:0~10240;单位:字节 |
2.3.11 AT+QISWTMD 切换数据访问模式
该命令用于切换数据访问模式:缓存模式、直吐模式和透传模式。建立 Socket 服务时,可以通过 AT+QIOPEN 的 <access_mode> 来指定数据访问模式,Socket 服务打开以后,可以通过 AT+QISWTMD 来切换模式。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QISWTMD=? |
+QISWTMD:(支持的<connectID>范围),(支持的<access_mode>范围)OK |
| 设置命令 | AT+QISWTMD=<connectID>,<access_mode> |
若 <access_mode>=0 或 1 且切换成功:OK若 <access_mode>=2 且切换成功:CONNECT如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
<access_mode> |
整型。连接数据访问模式。0=缓存模式,1=直吐模式,2=透传模式 |
特性说明: 该命令立即生效;参数配置不保存。
2.3.12 AT+QPING 进行远程服务器Ping操作
该命令用于检测 Host 网络协议可达性。在使用 Ping 工具前,Host 应首先通过 AT+QIACT 激活 <contextID> 对应的场景。在 <timeout> 期间内返回结果,<timeout> 默认值是 4 秒。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QPING=? |
+QPING:(支持的<contextID>范围),<server>,(支持的<timeout>范围),(支持的<pingnum>范围)OK |
| 设置命令 | AT+QPING=<contextID>,<server>[,<timeout>[,<pingnum>]] |
若远程服务器Ping操作成功: OK +QPING:<result>[,<IP_address>,<bytes>,<time>,<ttl>][...] +QPING:<err>,<sent>,<rcvd>,<lost>,<min_time>,<max_time>,<avg_time>如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。场景ID。范围:1~15 |
<server> |
字符串类型。远程服务器地址。可以是域名或点分十进制IP |
<timeout> |
整型。设置每个Ping请求回应等待最大时间。范围:1~255;默认值:4;单位:秒 |
<pingnum> |
整型。设置Ping请求最大次数。范围:1~10;默认值:4 |
<result> |
整型。每个Ping请求结果。0=从服务器接收到Ping响应 |
<IP_address> |
字符串类型。远程服务器IP地址 |
<bytes> |
整型。发送Ping请求字节长度。单位:字节 |
<time> |
整型。发送Ping请求后等待响应时间。单位:毫秒 |
<ttl> |
整型。Ping请求回应数据包TTL值 |
<err> |
整型。0=正常结束,其他值=错误码 |
<sent> |
整型。Ping请求发送次数 |
<rcvd> |
整型。得到响应的Ping请求个数 |
<lost> |
整型。超时的Ping请求个数 |
<min_time> |
整型。最小响应时间。单位:毫秒 |
<max_time> |
整型。最大响应时间。单位:毫秒 |
<avg_time> |
整型。平均响应时间。单位:毫秒 |
2.3.13 AT+QNTP 使用NTP服务器同步本地时间
该命令用于通过 NTP 服务器同步本地时间到 UTC 时间。在同步之前,Host 需通过 AT+QIACT 来激活 <contextID> 对应的场景。受网络状态影响,等待返回结果最多需要 125 秒。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QNTP=? |
+QNTP:(支持的<contextID>范围),<server>,(支持的<port>范围)OK |
| 查询命令 | AT+QNTP? |
若在同步时间过程中:OK |
| 设置命令 | AT+QNTP=<contextID>,<server>[,<port>[,<autosettime>]] |
同步成功:OK 如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。场景ID。范围:1~15 |
<server> |
字符串类型。NTP服务器地址 |
<port> |
整型。NTP服务器端口。范围:1~65535 |
<autosettime> |
整型。是否自动设置同步时间到本地时间。0=不设置,1=设置 |
<err> |
错误码。请参考第4章 |
<time> |
字符串类型。从NTP服务器上同步的时间 |
最大响应时间: 受网络状态影响,最大响应时间 125 秒。
特性说明: 该命令立即生效;参数配置不保存。
2.3.14 AT+QIDNSCFG 配置DNS服务器地址
该命令用于配置 DNS 服务器地址。在配置 DNS 地址之前,Host 需通过 AT+QIACT 来激活 <contextID> 对应的场景。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QIDNSCFG=? |
+QIDNSCFG:(支持的<contextID>范围),<pridnsaddr>,<secdnsaddr>OK |
| 设置命令 | AT+QIDNSCFG=<contextID>[,<pridnsaddr>[,<secdnsaddr>]] |
若省略可选参数,则查询指定PDP场景的当前DNS服务器地址:+QIDNSCFG:<contextID>,<pridnsaddr>,<secdnsaddr>OK 若指定任意可选参数,则设置指定PDP场景的主要DNS服务器地址和次要DNS服务器地址:OK 如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。PDP场景ID。范围:1~15 |
<pridnsaddr> |
字符串类型。主要DNS服务器地址 |
<secdnsaddr> |
字符串类型。次要DNS服务器地址 |
特性说明: 该命令立即生效;参数配置不保存。
2.3.15 AT+QIDNSGIP 用域名获取IP地址
查询 DNS 之前,Host 需通过 AT+QIACT 来激活 <contextID> 对应的场景。受网络状态影响,等待返回响应结果最多需要 60 秒。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QIDNSGIP=? |
OK |
| 设置命令 | AT+QIDNSGIP=<contextID>,<hostname> |
OK 以URC格式返回结果: +QIURC:"dnsgip",<err>,<IP_count>,<DNS_ttl>+QIURC:"dnsgip",<hostIPaddr>[...] |
参数说明:
| 参数 | 说明 |
|---|---|
<contextID> |
整型。PDP场景ID。范围:1~15 |
<hostname> |
字符串类型。域名 |
<err> |
错误码。请参考第4章 |
<IP_count> |
整型。<hostname> 对应的IP地址数 |
<DNS_ttl> |
整型。DNS的TTL值。单位:秒 |
<hostIPaddr> |
字符串类型。<hostname> IP地址 |
最大响应时间: 受网络状态影响,最大响应时间 60 秒。
2.3.16 AT+QISDE 控制是否回显AT+QISEND要发送的数据
该命令用于控制是否回显 AT+QISEND 要发送的数据,即是否回显输入的待发送数据。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QISDE=? |
+QISDE:(支持的<echo>列表)OK |
| 查询命令 | AT+QISDE? |
+QISDE:<echo>OK |
| 设置命令 | AT+QISDE=<echo> |
OK 如有错误:ERROR |
参数说明:
| 参数 | 说明 |
|---|---|
<echo> |
整型。是否回显AT+QISEND要发送的数据。0=不回显,1=回显 |
最大响应时间: 300 毫秒
特性说明: 该命令立即生效;参数配置不保存。
2.3.17 AT+QIGETERROR 查询上一个AT命令错误代码
若执行 TCP/IP 命令后返回 ERROR,错误详情可通过 AT+QIGETERROR 查询。需注意 AT+QIGETERROR 只返回上一个 TCP/IP AT 命令错误代码。
| 命令类型 | 命令 | 响应 |
|---|---|---|
| 测试命令 | AT+QIGETERROR=? |
OK |
| 执行命令 | AT+QIGETERROR |
+QIGETERROR:<err>,<errcode_description>OK |
参数说明:
| 参数 | 说明 |
|---|---|
<err> |
错误码。请参考第4章 |
<errcode_description> |
字符串类型。指示详细错误信息 |
最大响应时间: 300 毫秒
2.4 URC说明
TCP/IP AT 命令的 URC 统一以 +QIURC: 形式上报 Host,涉及数据接收、连接断开和接入等。
2.4.1 +QIURC:"closed" 连接断开通知
当 TCP Socket 服务连接被远程客户端断开或者因为网络异常导致断开,模块将上报该 URC,同时该 Socket 将处于 "Closing" 状态(<socket_state>=4),调用 AT+QICLOSE=<connectID> 后 Socket 服务可恢复成 "Initial" 状态。
+QIURC:"closed",<connectID>
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
2.4.2 +QIURC:"recv" 数据接收通知
在缓存模式或者直吐模式下,模块接收到数据后会上报 URC 通知 Host。
- 缓存模式下: URC 格式为
+QIURC:"recv",<connectID>;URC 上报后,Host 可通过AT+QIRD读取数据。请注意,如果缓存不为空且模块再次接收数据的情况下,只有当 Host 通过AT+QIRD读取所有接收的数据后,模块才会上报新的 URC。 - 直吐模式下: 接收的数据会直接从 COM 端输出。
| 场景 | URC格式 |
|---|---|
| 缓存模式 | +QIURC:"recv",<connectID> |
| 直吐模式(TCP/UDP/TCP INCOMING) | +QIURC:"recv",<connectID>,<currentrecvlength><CR><LF><data> |
| 直吐模式(UDP SERVICE) | +QIURC:"recv",<connectID>,<currentrecvlength>,<remoteIP>,<remote_port><CR><LF><data> |
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
<currentrecvlength> |
整型。实际接收数据的长度 |
<remoteIP> |
字符串类型。远程IP地址 |
<remote_port> |
整型。远程端口 |
<data> |
整型。读取的数据。单位:字节 |
2.4.3 +QIURC:"incoming full" 客户端连接已满通知
如果客户端连接已达限额,或者已经没有 Socket 系统资源可供分配,有新的客户端连接请求时模块会上报 URC。
+QIURC:"incoming full"
2.4.4 +QIURC:"incoming" 客户端连接通知
如果 <service_type> 为 "TCP LISTENER",当一个远程客户端连接到这个服务器时,Host 会给新连接自动分配一个空闲的 <connectID>,其中 <connectID> 范围是 0~11。此时模块会上报该 URC。新连接的 <service_type> 是 "TCP INCOMING",<access_mode> 是缓存模式。
+QIURC:"incoming",<connectID>,<serverID>,<remoteIP>,<remote_port>
| 参数 | 说明 |
|---|---|
<connectID> |
整型。模块自动为客户端连接指定分配的Socket服务。范围:0~11 |
<serverID> |
整型。接受客户端连接的服务器 |
<remoteIP> |
字符串类型。客户端连接的远程IP地址 |
<remote_port> |
整型。客户端连接的远程端口 |
2.4.5 +QIURC:"pdpdeact" PDP去激活通知
PDP 可以被网络去激活。PDP 被去激活以后,模块会上报该 URC 通知 Host,Host 需执行 AT+QIDEACT 去激活场景并重置所有连接。
+QIURC:"pdpdeact",<contextID>
| 参数 | 说明 |
|---|---|
<contextID> |
整型。场景ID。范围:1~15 |
2.4.6 +QIURC:"wakeup/data" 唤醒报文数据接收通知
模块收到服务器下发的唤醒报文数据时,上报该 URC。
+QIURC:"wakeup/data",<connectID>
| 参数 | 说明 |
|---|---|
<connectID> |
整型。Socket连接号。范围:0~11 |
3 示例
3.1 场景配置和激活
3.1.1 场景配置
AT+QICSGP=1,1,"UNINET","","",1 // 配置场景1,APN配置为"UNINET"(中国联通)
OK
3.1.2 场景激活
AT+QIACT=1 // 激活场景1,受网络状态影响,最大响应时间为150秒
OK // 场景激活成功
AT+QIACT? // 查询场景状态
+QIACT: 1,1,1,"10.45.123.45"
OK
3.1.3 场景去激活
AT+QIDEACT=1 // 去激活场景1
OK // 场景去激活成功,受网络状态影响,最大响应时间为40秒
3.2 TCP客户端在缓存模式下工作
3.2.1 创建TCP客户端连接并进入缓存模式
AT+QIOPEN=1,0,"TCP","220.180.239.212",8009,0,0 // 场景是1,<connectID>为0
OK
+QIOPEN:0,0 // TCP客户端连接成功
AT+QISTATE=1,0 // 检查连接状态
+QISTATE:0,"TCP","220.180.239.212",8009,65514,2,1,0,0,"usbmodem"
OK
3.2.2 Buffer模式下发送数据
AT+QISEND=0
>test1
SEND OK
AT+QISEND=0,4
>test
SEND OK
AT+QISEND=0,0
+QISEND:9,9,0
OK
AT+QISENDEX=0,"3132333435"
SEND OK
AT+QISEND=0,0
+QISEND:14,14,0
OK
注意: SEND OK 不能代表数据已经成功发送到服务器。Host 可以通过
AT+QISEND=0,0来查询数据是否到达服务器。
3.2.3 Buffer模式下从远程服务器接收数据
+QIURC:"recv",0
AT+QIRD=0,1500
+QIRD:14
test1
OK
AT+QIRD=0,1500
+QIRD:0
OK
AT+QIRD=0,0
+QIRD:14,14,0
OK
3.2.4 断开连接
AT+QICLOSE=0 // 断开<connectID>为0的连接
OK
3.3 TCP客户端在透传模式下工作
3.3.1 创建TCP客户端连接并进入透传模式
AT+QIOPEN=1,0,"TCP","220.180.239.212",8009,0,2 // 场景为1,<connectID>为0
CONNECT // 连接成功
3.3.2 透传模式下发送数据
<All data got from COM port will be sent to internet directly>
3.3.3 透传模式接收远程器端数据
Test 1 // 所有从网络接收的数据都会通过COM端口直接输出
3.3.4 断开TCP客户端连接
+++ // 退出透传模式
OK
AT+QICLOSE=0 // 断开TCP连接
OK
3.4 TCP客户端在直吐模式下工作
3.4.1 创建TCP客户端连接并进入直吐模式
AT+QIOPEN=1,0,"TCP","220.180.239.212",8009,0,1 // 场景为1,<connectID>为0
OK
+QIOPEN:0,0
AT+QISTATE=1,0
+QISTATE:0,"TCP","220.180.239.212",8009,65344,2,1,0,1,"usbmodem"
OK
3.4.2 直吐模式下发送数据
AT+QISEND=0
>test1
SEND OK
AT+QISEND=0,5
>test2
SEND OK
AT+QISEND=0,0
+QISEND:10,10,0
OK
3.4.3 直吐模式下接收远程服务器端数据
+QIURC:"recv",0,4
test
3.4.4 断开TCP用户端连接
AT+QICLOSE=0
OK
3.5 TCP服务器在缓存模式下工作
3.5.1 启动TCP服务器
AT+QIOPEN=1,1,"TCPLISTENER","127.0.0.1",0,2020,0 // 场景为1,<connectID>为1
OK
+QIOPEN:1,0 // TCP服务器启动成功
AT+QISTATE=0,1
+QISTATE:1,"TCPLISTENER","127.0.0.1",0,2020,3,1,0,0,"usbmodem"
OK
3.5.2 接受客户端的连接请求
+QIURC:"incoming",11,1,"172.31.242.222",54091 // 接受一个TCP连接,<connectID>为11
3.5.3 接收的客户端数据
+QIURC:"recv",11
AT+QIRD=11,1500
+QIRD:4
test
OK
AT+QIRD=11,1500
+QIRD:0
OK
AT+QIRD=11,0
+QIRD:4,4,0
OK
3.5.4 断开TCP服务器连接
AT+QICLOSE=11 // 断开客户端连接
OK
AT+QICLOSE=1 // 关闭TCP服务器监听
OK
3.6 UDP服务示例
3.6.1 打开UDP服务
AT+QIOPEN=1,2,"UDPSERVICE","127.0.0.1",0,3030,0 // 打开UDP服务,<connectID>为2
OK
+QIOPEN:2,0
AT+QISTATE=0,1
+QISTATE:2,"UDPSERVICE","127.0.0.1",0,3030,2,1,0,0,"usbmodem"
OK
3.6.2 向服务器发送UDP数据
AT+QISEND=2,10,"10.7.89.10",6969
>1234567890
SEND OK
3.6.3 接收远程端数据
+QIURC:"recv",2
AT+QIRD=2
+QIRD:4,"10.7.76.34",7687
AAAA
OK
AT+QIRD=2
+QIRD:0
OK
3.6.4 关闭UDP服务
AT+QICLOSE=2
OK
3.7 PING
AT+QPING=1,"www.baidu.com"
OK
+QPING:0,"220.181.38.148",32,70,52
+QPING:0,"220.181.38.148",32,55,52
+QPING:0,"220.181.38.148",32,56,52
+QPING:0,"220.181.38.148",32,55,52
+QPING:0,4,4,0,55,70,59
在场景1中 Ping www.baidu.com,在 Ping 目标IP地址前,Host 需通过
AT+QIACT来激活场景。
3.8 同步本地时间
AT+QNTP=1,"202.112.10.36",123
OK
+QNTP:0,"2019/09/09,01:32:42+32"
AT+CCLK?
+CCLK:"19/09/09,01:32:52+32"
OK
使用NTP服务器 "202.112.10.36:123" 同步时间,同步时间之前,Host 需要通过
AT+QIACT来激活场景。
3.9 获取上一个错误代码示例
AT+QIOPEN=1,"TCP","220.180.239.212",8009,0,1 // 开启Socket服务,省略了<connectID>
ERROR
AT+QIGETERROR
+QIGETERROR:552,invalid parameters
OK
3.10 TCP可选配置项示例
配置唤醒报文数据
AT+QICFG="wakeup/data",1
+QICFG:"wakeup/data",1,"",0
OK
AT+QICFG="wakeup/data",1,"5155454377616b657570" // 配置唤醒报文数据
OK
AT+QICFG="wakeup/data",1
+QICFG:"wakeup/data",1,"5155454377616b657570",0
OK
AT+QICFG="wakeup/data",1,"" // 清除,关闭唤醒功能
OK
AT+QICFG="wakeup/data",1
+QICFG:"wakeup/data",1,"",0
OK
AT+QICFG="wakeup/data",1,"quec wakeup",2 // 配置唤醒报文数据为字符串类型
OK
设置周期性发送心跳包数据
AT+QICFG="send/auto",0,30,"313233343536",0,0 // 配置周期性发送心跳包数据为十六进制ASCII码
OK
AT+QICFG="send/auto",0 // 查询当前配置
+QICFG:"send/auto",0,30,"123456",0,0
OK
AT+QICFG="send/auto",0,30,"hi quectel",2,0 // 配置发送心跳包数据为字符串类型
OK
AT+QICFG="send/auto",0
+QICFG:"send/auto",0,30,"hi quectel",2,0
OK
设置过滤指定数据
AT+QICFG="recv/ignore",0,"313233343536",0 // 配置过滤数据为十六进制ASCII码
OK
AT+QICFG="recv/ignore",0
+QICFG:"recv/ignore",0,"123456",0
OK
AT+QICFG="recv/ignore",0,"313233343536",1 // 配置过滤数据为十六进制字符串
OK
AT+QICFG="recv/ignore",0
+QICFG:"recv/ignore",0,"313233343536",1
OK
4 错误代码
当 TCP/IP 的 AT 命令返回 ERROR 时,具体的错误类型可以通过 AT+QIGETERROR 来查询。需注意 AT+QIGETERROR 查询的是上一个 TCP/IP AT 命令的错误代码。
| 错误码 | 英文描述 | 中文含义 |
|---|---|---|
| 0 | Operation success | 操作成功 |
| 550 | Unknown error | 未知错误 |
| 551 | Operation blocked | 操作受阻 |
| 552 | Invalid parameters | 无效参数 |
| 553 | Memory not enough | 内存不足 |
| 554 | Socket creation failed | 创建Socket失败 |
| 555 | Operation not supported | 操作不支持 |
| 556 | Socket bind failed | Socket绑定失败 |
| 557 | Socket listen failed | Socket监听失败 |
| 558 | Socket write failed | Socket写入失败 |
| 559 | Socket read failed | Socket读取失败 |
| 560 | Socket accept failed | Socket接受失败 |
| 561 | PDP context opening failed | 打开PDP场景失败 |
| 562 | PDP context closure failed | 关闭PDP场景失败 |
| 563 | Socket identity has been used | Socket标识被占用 |
| 564 | DNS busy | DNS忙碌 |
| 565 | DNS parse failed | DNS解析失败 |
| 566 | Socket connect failed | Socket连接失败 |
| 567 | Socket has been closed | Socket被关闭 |
| 568 | Operation busy | 操作忙碌 |
| 569 | Operation timeout | 操作超时 |
| 570 | PDP context broken down | PDP场景出现故障 |
| 571 | Cancel sending | 取消发送 |
| 572 | Operation not allowed | 操作不允许 |
| 573 | APN not configured | APN未配置 |
| 574 | Port busy | 端口忙碌 |
5 附录:参考文档及术语缩写
参考文档
| 文档名称 |
|---|
| [1] Quectel_LTE_Standard(A)系列_AT命令手册 |
术语缩写
| 缩写 | 英文全称 | 中文全称 |
|---|---|---|
| 3GPP | 3rd Generation Partnership Project | 第三代合作伙伴计划 |
| ACK | Acknowledgement | 确认字符 |
| APN | Access Point Name | 接入点名称 |
| ASCII | American Standard Code for Information Interchange | 美国信息交换标准代码 |
| CHAP | Challenge Handshake Authentication Protocol | 挑战握手认证协议 |
| CS | Circuit Switching | 电路交换 |
| DNS | Domain Name System | 域名系统 |
| FIN | Finish | 完成 |
| ID | Mostly refers to Identifier in terms of software | 软件中多数指"标识符" |
| IP | Internet Protocol | 互联网协议 |
| NTP | Network Time Protocol | 网络时间协议 |
| NV | Non-Volatile | 非易失 |
| PAP | Password Authentication Protocol | 密码认证协议 |
| PDP | Packet Data Protocol | 分组数据协议 |
| PPP | Point-to-Point Protocol | 点对点协议 |
| PS | Packet Switching | 分组交换 |
| QoS | Quality of Service | 服务质量 |
| TCP | Transmission Control Protocol | 传输控制协议 |
| TTL | Time to Live | 生存时间 |
| UART | Universal Asynchronous Receiver & Transmitter | 通用异步收发器 |
| UDP | User Datagram Protocol | 用户数据包协议 |
| URC | Unsolicited Result Code | 非请求结果码 |
| USB | Universal Serial Bus | 通用串行总线 |
| (U)SIM | (Universal) Subscriber Identity Module | (通用)用户身份模块 |
| UTC | Coordinated Universal Time | 协调世界时 |
文档信息
- 文档名称:Quectel LTE Standard(A) 系列 TCP/IP 应用指导
- 版本:V1.6
- 日期:2023-10-30
- 适用模块:EC800K 系列、EC600K-CN、EC800M-CN、EC800N-CN、EC200A 系列、EC200N 系列、EC200M-CN、EC600M-CN、EG800K 系列、EG810M-CN、EG912N-EN、EG912Y-EU、EG915N 系列、EG950A 系列等
- 版权所有 © 上海移远通信技术股份有限公司