Quectel EC20 R2.1 AT指令集(TCP/部分)

一、介绍

Quectel EC2x 模块具备嵌入式 TCP/IP堆栈,使主机能够经过 AT 命令直接上网。能够实现TCP客户端、UDP客户端、TCP服务器和UDP服务器。缓存

1.1 使用 AT 命令的过程

  1. 开启模块电源,发送 AT指令,等待模块返回 OK。
    1. 开机过程:保持电源键拉低 2 秒,而后拉高。
    2. 关机过程:发送 AT + QPOWD 命令,再过12 秒后,切断电源。
  2. 查询 SIM 卡状态(AT + CPIN?),若是 20 秒后还没法识别 SIM 卡,从新启动模块。
    1. 若是返回 1 或 5 ,表明 CS 服务注册成功。
  3. 查询 CS 服务(AT + CREG?),若是 90秒后未能在 CS 上注册域名服务,从新启动模块。
  4. 在 60秒内成功注册CS域名服务后,查询 PS 服务(AT + CGREG?/AT + CEREG?)
    1. 若是返回 1 或 5 ,表明 PS 服务注册成功。
  5. 配置 PDP 上下文和 Qos(AT+QICSGP/AT+CGQREQ/AT+CGEQREQ/AT+CGQMIN/AT+CGEQMIN)
  6. 激活 PDP 上下文(AT+QIACT=<CONTEXTID>和 AT+QiACT?)
    1. 若是 150 秒内没有回应,则需重启模块。
    2. 若是重试 3 次都没法激活 PDP,则需停用 PDP 上下文(AT+QIDEACT=<CONTEXTID>),中止成功,转到第 2 步(查询SIM卡状态)从新执行。若是 3 次都没中止成功或超过40秒没有回应,则重启模块。
  7. 打开链接(AT+QIOPEN),返回 connectID,err
    1. 若是重试 5 次或 150 秒内都没链接成功,则需中止 PDP后,转到第 6 步(激活 PDP 上下文)。
  8. 发送数据(AT+QISEND=<connectID>)
    1. 发送数据后,每 5 秒 发送一次确认,若是 24 次后仍未确认,可能 TCP 链接异常,须要关闭当前链接,转到第 7 步(打开链接)从新创建链接。
    2. TCP心跳:定时发送小数据包,来检测 TCP 链接是否正常。
  9. 关闭链接(AT+QICLOSE=<connectID>)
    1. 若是 10 秒内没法关闭链接,须要从新启动模块。

1.2 数据访问模式

  • Buffer access mode  (缓冲区访问模式)
    • 能够经过 AT+QISEND命令发送数据,收到互联网数据时,先保存到缓冲区,并发送 URC 报告(+QIURC:“recv”,<connectID>)。客户端能够经过 AT+QIRD 命令读取数据。
  • Direct push mode  (直推模式)
    • 能够经过 AT+QISEND命令发送数据,收到互联网数据时,数据直接输出到客户端(+QIURC:“recv”,<connectID><CR><LF><data>)。
  • Transparent access mode (透明访问模式,透传)
    • 客户端直接发送数据到互联网,接收的数据直接输出到客户端。
    • 模块切换到缓冲区访问模式。客户端能够使用 “+++”退出透传模式。返回 OK 。退出透传模式时,为了防止 “+++” 被解释为数据,输入 “+++” 以前和以后,1 秒内不能输入任何字符。
    • 能够经过 AT+QISWTMD 命令返回透传模式。将<access_mode>设为 2。若是成功进入透传模式,将返回 CONNECT。
    • 若是ATO从透明访问模式退出后。若是成功从新进入透明访问模式,将返回“CONNECT” 。若是没有进入透明访问模式,ATO将返回“NO CARRIER”。

二、TCP / IP AT命令的描述

2.一、AT命令的描述

AT+QICSGP 配置TCP / IP参数

该命令可用于配置<APN>,<username>,<password>等TCP / IP上下文参数。QoS设置能够由AT + CGQMIN,AT + CGEQMIN,AT + CGQREQ和AT + CGEQREQ配置 。服务器

  • AT+QICSGP=?:查询命令参数。
  • AT+QICSGP=<contextID>:查询 contextID的配置信息。
  • AT+QICSGP=<contextID>[,<context_type>,<APN>[,<username>,<password>)[,<authentication>]]]:配置 contextID信息。
    • <contextID>:整数类型。上下文ID。范围是1-16。
    • <context_type>:整数类型。协议类型。1(IPV4)、2(IPV4V6)。 
    • <APN>字符串类型。接入点名称。
    • <username>:字符串类型。用户名。 
    • <password>:字符串类型。密码。
    • <authentication>:整数类型。身份验证方法。0(没有)、1(PAP)、2(CHAP)、3(PAP或CHAP)。
    • 返回信息:OK 或 ERROR。

AT+QIACT 激活 PDP 上下文

在PDP上下文激活以前,应该配置TCP/IP参数。激活后,经过 AT+QIACT 能够查询IP地址。根据3GPP规范中,该模块同时只支持三个PDP上下文激活,因此客户必须确保PDP上下文激活的数量小于3。根据网络,在 150 秒内返回 OK 或 ERROR,而后执行 AT+QIACT?。在这以前不能执行任何命令。网络

  • AT+QIACT=? :查询命令参数
  • AT+QIACT?:查询当前激活的 PDP 上下文信息。
    • <contextID>:激活的 PDP 上下文 ID。
    • <context_state>:整数类型。上下文状态。0(停用)、1(活动)
    • <context_type>:协议类型。1(IPV4)、2(IPV4V6)。
    • <IP_address>:本地 IP 地址。
  • AT+QIACT=<contextID>:激活 PDP 上下文。
    • <contextID>:激活的 PDP 上下文 ID。
    • 返回信息:OK 或 ERROR、超时时间 150 秒。

AT+QIDEACT 停用 PDP 上下文

  • AT+QIDEACT=?:查询命令参数。
  • AT+QIDEACT=<contextID> :停用指定 PDP 上下文。返回 OK 或 ERROR,超时时间 40 秒。

AT+QIOPEN 打开 Socket 服务

该命令用于打开套接字服务。并发

  • AT+QIOPEN=?:查询命令参数。
  • AT+QIOPEN=<contextID>,<connectID>,<service_type>,<IP_address>/<domain_name>,<remote_port>[,<local_po CONNECTrt>[,<access_mode>]] :打开 Socket 服务。
    • <contextID>  :整数类型。上下文ID。范围是1-16。  
    • <connectID>  :整数类型。套接字服务索引。范围是0-11。  
    • <SERVICE_TYPE>:字符串类型。套接字服务类型。  
      • “ TCP ” :做为客户端启动TCP链接  
      • “ UDP 做为客户端启动UDP链接  
      • “TCP LISTENER”  启动TCP服务器以侦听TCP链接  
      • UDP SERVICE” :启动UDP服务  
    • <IP_address>:字符串类型。 
      • 若是<service_type>是TCP或UD,则表示远程服务器的IP地址,例如 “220.180.239.212”。 
      • 若是<service_type>是TCP LISTENER或UDP SERVICE 地址,请输入“127.0.0.1”。  
    • <domain_name>:字符串类型。远程服务器的域名地址。  
    • <remote_port> :远程服务器的端口,仅在<service_type>为“TCP”或“UDP”时有效范围是0-65535。  
    • <LOCAL_PORT>  :本地端口。范围是0-65535。 
      • 若是<service_type>是“TCP LISTENER”或“UDP SERVICE”,则此参数必须指定。
      • 若是<service_type>是“TCP”或“UDP”。若是<local_port>为0,那么本地端口将是自动分配。不然,将按指定分配本地端口。
    • <access_mode> :整数类型。套接字服务的数据访问模式。
      • 0: 缓冲区访问模式
      • 1:直推模式  
      • 2:透明访问模式
    • <err>:整数类型。操做的错误代码。请参阅第4章

+ QICLOSE关闭套接字服务

该命令用于关闭指定的套接字服务。根据网络的不一样,最多须要一次 10秒(默认值,能够经过<timeout>修改)在执行后   返回“ OK ” “ ERROR AT + QICLOSE。在返回响应以前,没法执行其余AT命令。dom

  • AT + QICLOSE =?:返回命令参数。
  • AT + QICLOSE = <connectID> [,<timeout>]:若是成功关闭,响应: OK, 若是未能关闭,则回复:  错误 
    • <connectID>  :整数类型。套接字服务索引。范围是0-11。
    • <timeout>:整数类型。若是在<timeout>内没有收到其余对等体的FIN ACK,则  

      模块将强制关闭套接字。范围是1-65535,默认值是10。  单位:秒。异步

AT+QISTATE 查询套接字服务状态

该命令用于查询套接字服务状态。若是<query_type>为0,则返回全部现有套接字服务状态 。若是<query_type>为1,则返回指定的套接字服务状态 socket

  • AT+QISTATE=?:测试模块返回是否正常。
  • AT+QISTATE? or AT+QISTATE:返回全部套接字的信息。
  • AT+QISTATE=<query_type>,<contextID>:查询指定上下文的全部套接字的链接状态。
    • <query_type>:整数类型。查询类型。
      • 0:查询指定上下文的链接状态  
      • 1:查询指定套接字服务的链接状态
    • <contextID>  :整数类型。上下文ID。范围是1-16。  
    • <connectID>  :整数类型。套接字服务索引。范围是0-11。  
    • <SERVICE_TYPE>:字符串类型。套接字服务类型。  
      • “ TCP ” :做为客户端启动TCP链接  
      • “ UDP 做为客户端启动UDP链接  
      • “TCP LISTENER”  启动TCP服务器以侦听TCP链接 
      • “TCP INCOMING”:启动TCP服务器接受的TCP链接
      • UDP SERVICE” :启动UDP服务  
    • <IP_address>:字符串类型。 
      • 若是<service_type>是TCP或UD,则表示远程服务器的IP地址,例如 “220.180.239.212”。 
      • 若是<service_type>是TCP LISTENER或UDP SERVICE 地址,请输入“127.0.0.1”。  
    • <remote_port> :远程服务器的端口,仅在<service_type>为“TCP”或“UDP”时有效范围是0-65535。  
    • <LOCAL_PORT>  :本地端口。范围是0-65535。 
      • 若是<service_type>是“TCP LISTENER”或“UDP SERVICE”,则此参数必须指定。
      • 若是<service_type>是“TCP”或“UDP”。若是<local_port>为0,那么本地端口将是自动分配。不然,将按指定分配本地端口。
    • <socket_state>:整数类型。套接字服务状态
      • 0:“初始”:还没有创建链接
      • 1:“打开”:客户端正在链接或服务器正在尝试l isten
      • 2:“已链接”:已创建客户端/传入链接
      • 3:“侦听”:服务器在侦听客户端链接”
      • 4:“关闭”:链接正在关闭 
    • <serverID>:仅在<service_type>为“TCP INCOMING”时有效。<serverID>表明哪一个服务器接受此TCP传入链接,其值与之相同此服务器的“TCP LISTENER”的<connectID>。
    • <access_mode> :整数类型。套接字服务的数据访问模式。
      • 0: 缓冲区访问模式
      • 1:直推模式  
      • 2:透明访问模式
    • <AT_port>:字符串类型。套接字服务的COM端口。  
      • “usbmodem”  :USB MODEM端口
      • “USBAT”  :USB AT PORT
      • “UART1”  :UART PORT1
      • “cmux1”  :MUX PORT 1
      • “cmux2”  :MUX PORT 2
      • “cmux3”  :MUX PORT 3  
      • ​​​​​​​“cmux4”:MUX PORT  4

+ QISEND发送数据

若是指定套接字服务的<access_mode>是缓冲区访问模式或直接推送模式,则数据能够是经过AT + QISEND发送。若是数据成功发送到模块,将返回“ SEND OK ” 不然它将返回“ SEND FAIL ” “ ERROR ” “ SEND FAIL ” 表示发送缓冲区已满客户能够尝试从新发送数据。“ERROR”表示在发送过程当中遇到错误  数据。客户应该延迟一段时间来发送数据。最大数据长度为1460字。“SEND OK”并不意味着数据已成功发送到服务器。客户能够查询数据是否经过AT + QISEND = <connectID>,0命令到达服务器。透传模式下不须要AT指令发送数据tcp

  • AT + QISEND =? :全部命令的这种格式(=?)的做用是测试模块是否支持此指令。
  • AT+QISEND=<connectID>:指定经过那个链接发送不定长的数据。输入完数据后按 CTRL+Z 发送,或按ESC取消发送,若是缓冲区满 返回 SEND FAIL,若是链接关闭或参数错误则返回 ERROR。
  • AT+QISEND=<connectID>,<send_length>:发送定长的数据,在提示符 “>" 后输入数据,长度到达指定值时将自动发送数据。若是缓冲区满 返回 SEND FAIL,若是链接关闭或参数错误则返回 ERROR。
  • AT+QISEND=<connectID>,<send_length>,<remoteIP>,<remote_port> :当服务类型是UDP SERVICE时,使用这条语句发送。流程同上。
  • AT + QISEND = <connectID>,0:当数据长度为0时,语句的做用就是查询发送缓冲区状态。
    • <connectID>:整数类型。套接字服务索引。范围是0-11。
    • <send_length>:整数类型。要发送的数据长度,不能超过1460字节。 
    • <remoteIP>:字符串类型。远程IP地址(必须是点格式),仅在<service_type>是“UDP SERVICE”时才有效。
    • <remote_port> :整数类型。远程端口,仅在<service_type>为“UDP SERVICE”时有效。
    • <total_send_length>:整数类型。发送数据的总长度。单位:字节。
    • <ackedbytes>:整数类型。确认数据的总长度。单位:字节。
    • <unackedbytes>:整数类型。未确认数据的总长度。单位:字节。
    • <err>:整数类型。操做的错误代码。请参阅第4章

AT+QIRD 检索 TCP/IP 数据

在缓冲区访问模式下,模块接收数据后,将数据存入缓冲区,并报告“ + QIURC:“recv”,<connectID>“ ,而后AT + QIRD能够检索数据。  请注意,若是缓冲区不为空,而且模块再次接收数据,则不会报告新的数据URC,直到经过AT + QIRD从缓冲区检索到全部接收到的数据。测试

  • AT+QIRD=?:测试命令
  • AT+QIRD=<connectID>[,<read_length>]:当<service_type>是“TCP” “ UD P” / “TCP INCOMING”时若是指定的链接已收到数据,则响应:+ QIRD:<read_actual_length> <CR> <LF> <data> 
  • AT + QIRD = <connectID>:当<service_type>是“UDP服务”时,若是数据存在则相应+ QIRD:<read_actual_length> <REMOTEIP>,<REMOTE_PORT><CR> <LF> <data> 。
    • <connectID>:整数类型。套接字服务索引。范围是0-11。
    • <read_length>:要检索的最大数据长度。范围是0-1500字节。 
    • <read_actual_length>:接收数据的实际长度。单位:字节。
    • <remoteIP>:字符串类型。远程IP地址(必须是点格式),仅在<service_type>是“UDP”时才有效。
    • <remote_port> :整数类型。远程端口,仅在<service_type>为“UDP”时有效。
    • <data> :检索到的数据。
    • <total_receive_length>:接收数据的总长度。单位:字节。
    • <have_read_length>:读取数据的长度。单位:字节。
    • <unread_length> :未读数据的长度。单位:字节。

+ QISENDEX发送十六进制字符串

  • AT+QISENDEX=?:测试命令
  • AT+QISENDEX=<connectID>,<hex_string>:返回 Send OK,SEND FAIL 或 ERROR。
    • ​​​​​​​<connectID>:整数类型。套接字服务索引。范围是0-11。
    • ​​​​​​​ <hex_string>  :字符串类型。十六进制字符 最大长度为512字节。

AT + QISWTMD切换数据访问模式

该命令可用于切换数据访问模式:缓冲区访问模式、直接推送模式和透明访问模式。启动套接字服务时,能够经过如下方式指定数据访问模式  AT + QIOPEN的<access_mode>参数。打开套接字后,数据访问模式能够经过AT + QISWTMD进行更改。大数据

  • AT + QISWTMD =?:测试命令
  • AT+QISWTMD=<connectID>,<access_mode>:若是<access_mode>为0或1时,切换成功返回 OK,若是<access_mode>为2时,切换成功返回 CONNECT。若是发生错误返回 ERROR。
    • <connectID> :整数类型。套接字服务索引。范围是0-11。
    • <access_mode>:整数类型。链接的数据访问模式。 0 缓冲区访问模式、1 直推模式 、透明访问模式。

+ QPING Ping远程服务器 

  • AT + QPING =?测试命令
  • AT+QPING=<contextID>,<host>[,<timeout>[,<pingnum>]]:Ping远程服务器。

AT+QNTP 从NTP服务器同步本地时间

  • AT+QNTP=?:测试命令,若是在同步时,则返回 NTP 服务器地址。

AT+QIDNSCFG 配置DNS服务器

  • AT+QIDNSCFG=?:测试命令。
  • AT+QIDNSCFG=<contextID>:查询DNS服务器地址。
  • AT+QIDNSCFG=<contextID>,<pridnsaddr>[,<secdnsaddr>] :配置DNS服务器地址。

AT+QIDNSGIP 经过域名查询IP地址

  • AT+QIDNSGIP=? :测试命令。
  • AT+QIDNSGIP=<contextID>,<hostname>:查询域名对应的 IP 地址。

+ QICFG 配置可选参数

  • AT+QICFG=?:测试命令。
  • AT+QICFG="transpktsize"[,<transpktsize>]:发送数据包大小。默认1024。
  • AT+QICFG="transwaittm"[,<transwaittm>] :透明模式下若是发送数据未到数据包大小时,时间超过设定值时自动发送。默认值 2,单位:100毫秒。
  • AT+QICFG="dataformat"[,<send_data_format>,<recv_data_format>]:发送和接收的默认数据格式,0 文本、1 16进制。
  • AT+QICFG="viewmode"[,<view_mode>]:接收到的数据的输出格式,0=data header\r\ndata、1= data header,data。
  • AT+QICFG="tcp/retranscfg"[,<max_backoffs>,<max_rto>] :整数类型。TCP重传的最大数量。范围是 3-20,默认值为12。这个值没法保存到NV,将对于全部TCP套接字生效。
  • AT+QICFG="dns/cache"[,dns_cache] :0 禁用DNS缓存、1 启用 DNS 缓存。
  • AT+QICFG="qisend/timeout"[,time]:AT + QISEND的超时时间,默认 0 ,单位毫秒。
  • AT+QICFG="passiveclosed"[,closed] :0  关闭服务器时禁用TCP链接的被动关闭。1 关闭服务器时启用TCP链接的被动关闭。
  • AT+QICFG="udp/readmode"[,mode]:0 禁用阻止模式。1 启用流模式。 
  • AT+QICFG="udp/sendmode"[,mode] :0 禁用阻止模式。1 启用流模式。 
  • AT+QICFG="tcp/accept"[,state]:0 禁用自动接受来自客户端的TCP链接。1 启用自动接受来自客户端的TCP链接。

AT+QISDE 用于控制是否回显AT + QISEND的数据

  • AT + QISDE =?:测试命令。
  • AT+QISDE=<echo> :0 不回显数据,1 回显数据。

+ QIGETERROR 查询上一个错误代码

若是在执行TCP / IP命令后返回“ERROR”,则能够经过查询错误的详细信息  AT + QIGETERROR。请注意,AT + IGETERROR只返回最后一个TCP / IP AT命令的错误代码

  • AT + QIGETERROR =?:测试命令。
  • AT + QIGETERROR:查询错误详细信息。

2.二、URC 的描述

TCP / IP AT命令的URC将以“+ QIURC:” 开头的格式报告给主机。 它包含有关传入数据,链接已关闭和传入链接等的报告。实际上,在URC以前和以后都有“<CR> <LF>” ,但能够省略 “<CR> <LF>” 

  • 链接关闭:+QIURC: "closed",<connectID>。
  • 当有传入的数据:
    • +QIURC: "recv",<connectID>:缓冲区访问模式下的传入数据的URC。能够经过AT + QIRD接收数据。
    • +QIURC:"recv",<connectID>,<currentrecvlength><CR><LF><data>:直接访问模式下的URC。
    • +QIURC:"recv",<connectID>,<currentrecvlength>,<remoteIP>,<remote_port><CR><LF><data>:UDP SERVICE模式下的URC。
  • 传入链接已满:+QIURC: "incoming full"
  • 有新的链接:+QIURC:"incoming",<connectID>,<serverID>,<remoteIP>,<remote_port> 。
  • PDP停用:+QIURC: "pdpdeact",<contextID>。​​​​​​​

三、代码示例(略)

四、错误代码(略)

五、术语和缩写

  • APN:接入点名称
  • CHAP:挑战握手认证协议
  • CS:电路交换
  • DNS:域名系统
  • ID:互联网协议
  • IP:互联网协议
  • NTP:网络时间协议
  • NV:永久存储,不消失
  • PAP:密码验证协议
  • PDP:分组数据协议
  • PPP:点对点协议
  • PS:分组交换
  • QoS:网络通信服务质量
  • TCP:传输控制协议
  • UART:通用异步收发器
  • UDP:用户数据报协议
  • URC:未经请求的结果代码
  • USB:通用串行总线
  • (U)SIM:(通用)用户身份识别卡
  • UTC:世界标准时间

****************************结束********************************