|
1 引言
Lierda NT26U系列模组支持FTP和FTPS文件传输协议(下文简称“FTP(S)”)。FTP(File Transfer Protocol,文件传输协议)是一种标准的网络协议,用于在计算机网络上的客户端和服务器之间传输计算机文件,具有很高的传输速率。
FTPS(FTP over SSL或FTP Secure)是一种对常用的文件传输协议(FTP)添加传输层安全(TLS)和安全套接层(SSL)加密协议支持的扩展协议。
本文档主要介绍如何通过AT命令应用利尔达模组的FTP(S)功能。
1.1 AT命令说明
1.1.1 定义
1.1.2 AT命令语句
前缀AT或at必须加在每个命令行的开头。输入<CR>将终止命令行。通常,命令后面跟随形式为<CR><LF><response><CR><LF>的响应。在本文档中表现命令和响应的表格中,省略了<CR><LF>,仅显示命令和响应。
表1-1 AT命令及响应类型
1.1 AT示例声明
本文中的示例仅为方便用户了解AT命令的使用方法,不构成利尔达对终端流程设计的建议或意见,也不代表模组应被设置成相应示例中的状态。某些AT命令存在多个示例,这些示例之间不存在承接关系或连续性。
1.2.1 特殊符号定义
1.2 FTP(S)命令使用流程
Lierda NT26U模组支持FTP(S)协议,因此FTP(S)服务器上的文件和目录可以通过FTP(S)相关的AT命令进行操作。FTP(S)相关的AT命令使用流程如下:
第一步:配置和激活PDP上下文。
(1)使用AT+QICSGP配置PDP上下文的<APN>、<username>、<password>和其他参数,详细信息可参考文档[1]。
(2)通过AT+QIACT激活PDP上下文,详细信息可参考文档[1]。
(3)通过AT+QFTPCFG="contextid",<contextID>配置FTP(S)的PDP上下文ID。需提前激活PDP上下文。
第二步:配置用户账号和FTP(S)服务器。
(1)通过AT+QFTPCFG="account",<username>,<password>配置账号信息。
(2)通过AT+QFTPCFG="filetype",<file_type>配置文件类型。在FTP(S)服务器和客户端间传输的文件类型可以是二进制数据或ASCII数据。
(3)通过AT+QFTPCFG="transmode",<transmode>配置传输模式,即在FTP(S)服务器端口或客户端端口监听数据连接。注意,FTPS当前不支持主动模式。AT+QFTPCFG="transmode",1后才能进行FTPS操作。
(4)通过AT+QFTPCFG="rsptimeout",<timeout>配置命令的最大响应时间。
(5)若模组作为FTPS客户端,需执行如下命令:
(6)执行AT+QFTPCFG="ssltype",1;
(7)执行AT+QFTPCFG="SSL_ctxID",<SSL_ctxID>设置SSL上下文ID;
(8)AT+QSSLCFG配置所指定的<SSL_ctxID>,详细信息可参考文档[3]。
第三步:登录FTP(S)服务器。
通过AT+QFTPOPEN=<hostname>,<port>登录FTP(S)服务器,命令执行后,若响应URC+QFTPOPEN:0,0,表示操作成功。注意FTPS和FTP端口不同。FTPS服务器的端口取决于FTPS服务器提供商,通常为990。
第四步:文件操作。
(1)通过AT+QFTPCWD设置当前目录;
(2)上传文件至FTP(S)服务器;
(3)通过AT+QFUPL可以将文件上传至UFS或SD卡,再通过AT+QFTPPUT将文件上传至FTP(S)服务器。文件上传成功后,可通过AT+QFDEL将其删除。详细信息可参考文档[4];
(4)在COM口通过AT+QFTPPUT将文件上传至FTP(S)服务器。执行+++可结束文件上传。
(5)通过AT+QFTPGET从FTP(S)服务器下载文件。文件将在COM口输出或被保存至UFS或SD卡。若COM口输出文件,模组将进入数据模式;
(6)通过AT+QFTPSIZE获取FTP(S)服务器文件大小;
(7)通过AT+QFTPLEN获取FTP(S)服务器和客户端之间传输的数据长度;
(8)通过AT+QFTPDEL删除FTP(S)服务器文件;
(9)通过AT+QFTPRENAME重命名FTP(S)服务器文件。
第五步:FTP(S)服务器目录操作。
(1)通过AT+QFTPCWD设置当前目录;
(2)通过AT+QFTPMKDIR创建文件夹;
(3)通过AT+QFTPLIST列出目录内容;
(4)通过AT+QFTPNLST列出目录文件名;
(5)通过AT+QFTPRENAME重命名文件或文件夹;
(6)通过AT+QFTPRMDIR删除文件夹;
(7)通过AT+QFTPMLSD列出标准文件和目录信息;
(8)通过AT+QFTPMDTM获取FTP(S)服务器文件修改时间。
第六步:关闭和FTP(S)服务器的连接。
通过AT+QFTPCLOSE关闭和FTP(S)服务器的连接,命令执行后,若响应URC+QFTPCLOSE:0,0,表明操作成功,即可重复上述第三步至第六步。
第七步:去激活PDP上下文。
通过AT+QIDEACT=<contextID>去激活PDP上下文,详细信息可参考文档[1]。
1.3 数据模式说明
Lierda NT26U模组的COM口有两种工作模式:一种是AT命令模式,另一种是数据模式。在AT命令模式下,通过COM口输入的数据被认为是AT命令;在数据模式下,则被认为是数据。
用户可以通过输入+++或拉高DTR(需先设置AT&D1)使COM口退出数据模式。为防止+++被误认为是数据,在使用COM口之前应遵循以下标准:
(1)+++输入前1秒内不能输入其它任何数据。
(2)必须在1秒内输入+++,并且不能输入其它任何数据。
(3)+++输入后1秒内不能输入其它任何数据。
在COM口执行AT+QFTPPUT、AT+QFTPGET、AT+QFTPLIST和AT+QFTPNLST时,若本地文件路径为"COM:",数据将从COM口接收和输出,COM口会进入数据模式。用户可使用+++或拉高DTR退出数据模式。
注:为方便阅读,本文AT示例省略了部分回车换行,实际返回值以《AT指令手册》或模组实测为准。
2 FTP(S)AT命令详解
2.1 AT+QFTPCFG 配置FTP(S)服务器参数
该命令用于配置FTP(S)服务器参数,包括用户账号、文件类型、传输模式和上下文ID等。设置命令省略可省参数时,将查询当前配置。
注:由于FTPS当前不支持主动模式,操作FTPS时,必须将<transmode>设置为1。
2.2 AT+QFTPOPEN 登录FTP(S)服务器
该命令用于登录FTP(S)服务器。执行该命令前,需先通过AT+QIACT激活PDP上下文。+QFTPOPEN:<err>,<protocol_error>表示AT+QFTPOPEN的操作结果,应在AT+QFTPCFG配置的<timeout>时间内输出。
注:注意FTPS和FTP端口不同,FTPS服务器的端口通常为990。
2.3 AT+QFTPCWD 配置FTP(S)服务器当前目录
该命令用于配置FTP(S)服务器当前目录。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPCWD:<err>,<protocol_error>。所有文件和目录均可在当前目录中进行操作。
2.4 AT+QFTPPWD 获取FTP(S)服务器当前目录
该命令用于获取FTP(S)服务器当前目录。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPCWD:<err>,<protocol_error>。
2.5 AT+QFTPPUT 上传文件至FTP(S)服务器
该命令用于上传文件至FTP(S)服务器。若通过COM口上传文件,模组将进入数据模式。使用+++可终止文件上传。本地文件,例如UFS或SD文件,可上传至FTP(S)服务器。通过AT+QFUPL可以将文件上传至UFS或SD卡,再通过AT+QFTPPUT将其上传至FTP(S)服务器。文件上传成功后,即可使用AT+QFDEL删除文件。详细信息可参考文档[4]。
<startpos>用于将文件从指定位置上传。若<local_name>为"COM:",应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPPUT:<err>,<protocol_error>。若<local_name>不为"COM:",执行该命令后,将先响应OK,数据传输完成后再响+QFTPPUT:0,<transferlen>。
若模组进入数据模式或<local_name>不为"COM:",AT+QFTPCFG配置的<timeout>则表示接收或发送两包数据之间的最大时间间隔。
注:若省略<uploadlen>和<beof>,将上传所有数据至FTP(S)服务器,此时数据发送时长不得超过90s,否则会失败。
2.6 AT+QFTPGET 从FTP(S)服务器下载文件
该命令用于从FTP(S)服务器下载文件。通过设置AT+QFTPGET="filename","COM:"文件可从COM口输出。模组从服务器接收数据时将进入数据模式。数据传输完成后,模组将自动退出数据模式并输出+QFTPGET:0,<transferlen>。通过AT+QFTPGET="filename","UFS:localname"或AT+QFTPGET="filename","SD:localname"可将文件保存至UFS或SD。文件传输成功后,模组将响应+QFTPGET:0,<transferlen>。
若<local_name>为"COM:",应在AT+QFTPCFG配置的<timeout>时间内响应CONNECT;若<local_name>不为"COM:",将先响应OK,数据传输完成后才会响应+QFTPGET:0,<transferlen>。
若模组进入数据模式或<local_name>不为"COM:",AT+QFTPCFG配置的<timeout>则表示接收或发送两包数据之间的最大时间间隔。
注:当<local_name>为"COM:"时,若省略<startpos>和<downloadlen>,将从FTP(S)服务器下载整个文件。
2.7 AT+QFTPSIZE 获取FTP(S)服务器文件大小
该命令用于获取FTP(S)服务器文件大小。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPSIZE:0,<file_size>或+QFTPSIZE:<err>,<protocol_error>,否则应断开FTP(S)连接,并去激活后重新激活网络。
2.8 AT+QFTPMKDIR 创建FTP(S)服务器文件夹
该命令用于在FTP(S)服务器创建文件夹。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPMKDIR:<err>,<protocol_error>,否则应断开FTP(S)连接,并去激活后重新激活网络。
2.9 AT+QFTPDEL 删除FTP(S)服务器文件
该命令用于删除指定FTP(S)服务器文件。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPDEL:<err>,<protocol_error>,否则应断开FTP(S)连接,并去激活后重新激活网络。
2.10 AT+QFTPRMDIR 删除FTP(S)服务器文件夹
该命令用于在FTP(S)服务器删除指定文件夹。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPRMDIR:<err>,<protocol_error>,否则应断开FTP(S)连接,并去激活后重新激活网络。
2.11 AT+QFTPLIST 获取FTP(S)服务器目录内容
该命令用于获取FTP(S)服务器目录内容。若<local_name>为"COM:",应在AT+QFTPCFG配置的<timeout>时间内响应CONNECT;若<local_name>不为"COM:",首先将响应OK,服务器目录内容传输完成后响应+QFTPLIST:0,<transfer_size>。
若模组进入数据模式或<local_name>不为"COM:",则在AT+QFTPCFG中配置的<timeout>表示接收或发送两包数据之间的最大时间间隔。
2.12 AT+QFTPNLST 获取FTP(S)服务器目录文件名
该命令用于获取FTP(S)服务器目录文件名。若<local_name>为"COM:",应在AT+QFTPCFG配置的<timeout>时间内响应CONNECT;若<local_name>不为"COM:",首先将响应OK,文件名称传输完成后响应+QFTPNLST:0,<transfer_size>。
若模组进入数据模式或<local_name>不为"COM:",则在AT+QFTPCFG中配置的<timeout>表示接收或发送两包数据之间的最大时间间隔。
2.13 AT+QFTPMLSD 获取标准化文件和目录信息
该命令用于获取标准化文件和目录信息。若<local_name>为"COM:",应在AT+QFTPCFG配置的<timeout>时间内响应CONNECT;若<local_name>不为"COM:",首先将响应OK,标准化文件和目录信息传输完成后响应+QFTPMLSD:0,<transfer_size>。
若模组进入数据模式或<local_name>不为"COM:",则在AT+QFTPCFG中配置的<timeout>表示接收或发送两包数据之间的最大时间间隔。
2.14 AT+QFTPMDTM 获取FTP(S)服务器文件修改时间
该命令用于获取FTP(S)服务器文件修改时间。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPMDTM:0,<modify_time>或+QFTPMDTM:<err>,<protocol_error>。否则应断开FTP(S)连接,并去激活后重新激活网络。
2.15 AT+QFTPRENAME 重命名FTP(S)服务器文件或文件夹
该命令用于重命名FTP(S)服务器文件或文件夹。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPRENAME:<err>,<protocol_error>。否则应断开FTP(S)连接,并去激活后重新激活网络。
2.16 AT+QFTPLEN 获取传输数据长度
该命令用于获取FTP(S)服务器传输数据长度。
2.17 AT+QFTPSTAT 获取FTP(S)服务器状态
该命令用于获取FTP(S)服务器状态。
2.18 AT+QFTPCLOSE 退出FTP(S)服务器
该命令用于退出FTP(S)服务器。执行该命令响应OK后,应在AT+QFTPCFG配置的<timeout>时间内响应+QFTPCLOSE:<err>,<protocol_error>。否则应断开FTP(S)连接,并去激活后重新激活网络。
3 AT示例
3.1 登录FTP服务器
第一步:配置和激活PDP上下文。设置PDP上下文为1,中国联通APN为"UNINET"
AT+QICSGP=1,1,"","","",1
OK
AT+QIACT=1 //激活PDP上下文1
OK //激活成功
AT+QIACT? //查询PDP上下文状态
+QIACT: 1,1,1,"10.7.157.1"
OK
AT+QFTPCFG="contextid",1 //设置PDP上下文为1。必须先激活PDP上下文ID
OK
第二步:配置用户账号和传输设置
AT+QFTPCFG="account","admin","admin" //设置用户名和密码
OK
AT+QFTPCFG="filetype",1 //设置文件类型为ASCII
OK
AT+QFTPCFG="transmode",1 //设置为被动传输方式
OK
AT+QFTPCFG="rsptimeout",90 //设置最大响应时间(默认为90秒)
OK
第三步:登录FTP服务器
AT+QFTPOPEN="111.21.195.10",21
OK
+QFTPOPEN: 0,0
3.2 登录FTPS服务器
第一步:设置PDP上下文为1,中国联通APN为"UNINET"
AT+QICSGP=1,1,"","","",1
OK
AT+QIACT=1 //激活PDP上下文1
OK //激活成功
AT+QIACT? //查询PDP上下文状态
+QIACT: 1,1,1,"10.7.157.1"
OK
AT+QFTPCFG="contextid",1 //设置PDP上下文为1。必须先激活PDP上下文ID
OK
第二步:配置用户账号和传输设置
AT+QFTPCFG="account","test","test" //设置用户名和密码
OK
AT+QFTPCFG="filetype",1 //设置文件类型为ASCII
OK
AT+QFTPCFG="transmode",1 //设置被动传输方式
OK
AT+QFTPCFG="rsptimeout",90 //设置最大响应时间(默认为90秒)
OK
第三步:配置FTPS
AT+QFTPCFG="ssltype",1 //设置SSL类型为1,模组作为FTPS客户端
OK
AT+QFTPCFG="SSL_ctxID",1 //设置SSL上下文为1
OK
AT+QSSLCFG="ciphersuite",1,0xffff //设置SSL加密套件类型为 0xffff,支持所有加密套件类型
OK
AT+QSSLCFG="seclevel",1,0 //设置SSL安全类型为0,即不需要SSL CA证书
OK
AT+QSSLCFG="sslversion",1,1 //设置SSL版本为1,表示TLS1.0
OK
第四步:登录FTPS服务器
AT+QFTPOPEN="111.21.195.10",21
OK
+QFTPOPEN: 0,0
3.3 文件夹操作
AT+QFTPCWD="/"
OK
+QFTPCWD: 0,0
AT+QFTPPWD
OK
+QFTPPWD: 0,/
AT+QFTPMKDIR="TEST" //在FTP(S)服务器创建名为TEST的文件夹
OK
+QFTPMKDIR: 0,0
AT+QFTPRENAME="TEST","TEST_NEW" //重命名文件夹为 TEST_NEW。
OK
+QFTPRENAME: 0,0
AT+QFTPRMDIR="TEST_NEW" //删除文件夹 TEST_NEW。
OK
+QFTPRMDIR: 0,0
3.4 文件操作
AT+QFTPCWD="/"
OK
+QFTPCWD: 0,0
AT+QFTPPWD
OK
+QFTPPWD: 0,"/"
AT+QFTPSIZE="test_my1.txt" //查询FTP(S)服务器 test_my1.txt 文件大小
OK
+QFTPSIZE:0, 1000
AT+QFTPRENAME="test_my1.txt","test_new.txt" //重命名文件为 test_new.txt
OK
+QFTPRENAME: 0,0
AT+QFTPMDTM="test_new.txt" //获取FTP(S)服务器上的 test_new.txt 文件修改时间
OK
+QFTPMDTM: 0,"20140708110039"
AT+QFTPDEL="test_new.txt" //删除FTP(S)服务器上的 test_new.txt 文件
OK
+QFTPDEL: 0,0
3.5 获取文件信息或文件名
AT+QFTPCWD="/"
OK
+QFTPCWD: 0,0
AT+QFTPLIST="." //获取当前目录的内容,并通过COM口输出数据
CONNECT
<输出内容数据>
OK
+QFTPLIST: 0,1000
AT+QFTPLIST="TEST_2","COM:" //获取TEST_2文件内容,并通过COM口输出数据
CONNECT
<输出内容数据>
OK
+QFTPLIST: 0,1000
AT+QFTPNLST="." //获取当前目录的文件名,并通过COM口输出数据。
CONNECT
<输出内容数据>
OK
+QFTPNLST: 0,1000
AT+QFTPNLST="TEST_2","COM:" //获取TEST_2文件名称,并通过COM口输出数据。
CONNECT
<输出内容数据>
OK
+QFTPNLST: 0,1000
AT+QFTPMLSD="." //获取当前目录的标准化文件和目录信息,并通过COM口输出数据
CONNECT
<输出内容数据>
OK
+QFTPMLSD:0,1000
AT+QFTPMLSD="TEST_2","COM:" //获取TEST_2的标准化文件和目录信息,并通过COM口输出数据
CONNECT
<输出内容数据>
OK
+QFTPMLSD:0,1000
3.6 上传文件至FTP(S)服务器
AT+QFTPCWD="/"
OK
+QFTPCWD: 0,0
AT+QFTPSTAT
+QFTPSTAT: 0,1
OK
AT+QFTPPUT="test_my1.txt","COM:",0 //通过COM口上传文件,所有数据在FTP(S)服务器上被保存为test_my1.txt
CONNECT
<输入文件数据> <+++>
OK
+QFTPPUT:0,1000
AT+QFTPLEN
OK
+QFTPLEN:0,1000
AT+QFTPSIZE="test_my1.txt"
OK
+QFTPSIZE:0,1000
AT+QFTPPUT="test_my1.txt","COM:",1000 //通过COM口上传文件,起始位置为1000,数据在服务器上被保存为test_my1.txt
CONNECT
<输入文件数据> <+++>
OK
+QFTPPUT:0,500
AT+QFTPSIZE="test_my1.txt"
OK
+QFTPSIZE:0,1500
方案1:通过COM口上传两次文件至FTP(S)服务器,每次上传1024字节数据。
AT+QFTPPUT="test_my1.txt","COM:",0,1024,0 //非test_my1.txt最后一包1024字节数据
CONNECT
<输入文件数据>
OK
+QFTPPUT:0,1024 //数据长度达到1024字节
AT+QFTPPUT="test_my1.txt","COM:",1024,1024,1 //test_my1.txt最后一包1024字节数据
CONNECT
<输入文件数据>
OK
+QFTPPUT:0,1024
方案2:从UFS上传文件至FTP(S)服务器
AT+QFUPL="UFS:test_ufs.txt",1000,300,1 //上传文件至UFS,文件被保存为test_ufs.txt。文件大小为1000字节。超时时间为300秒。设置为ACK模式。详细信息可参考文档[4]。
CONNECT
<输入1000字节数据>
+QFUPL:1000,707
OK
AT+QFLST="*"
+QFLST: "UFS:test_ufs.txt",1000
OK
AT+QFTPPUT="test_my1.txt","UFS:test_ufs.txt" //上传UFS:test_ufs.txt至FTP(S)服务器,并将其保存为test_my1.txt
OK
+QFTPPUT: 0,1000
方案3:从SD上传文件至FTP(S)服务器
AT+QFUPL="SD:test_sd.txt",1000,300,1 //上传文件至SD,文件保存为test_sd.txt。文件大小1000字节。超时时间300秒
CONNECT
<输入1000字节数据>
+QFUPL:1000,707
OK
AT+QFLST="SD:*"
+QFLST:"SD:test_sd.txt",1000
OK
AT+QFTPPUT="test_my1.txt","SD:test_sd.txt" //上传SD:test_sd.txt至FTP(S)服务器,并将其保存为test_my1.txt
OK
+QFTPPUT: 0,1000
AT+QFTPLEN
OK
+QFTPLEN:0,1000
AT+QFTPSIZE="test_my1.txt"
OK
+QFTPSIZE: 0,1000
3.7 从FTP(S)服务器下载文件
AT+QFTPCWD="/"
OK
+QFTPCWD: 0,0
方案1:直接通过 COM口输出下载数据
AT+QFTPGET="test_my.txt","COM:" //从FTP(S)服务器下载文件,并通过 COM 输出数据
CONNECT
<输出文件数据>
OK
+QFTPGET: 0,1000
AT+QFTPGET="test.txt","COM:",0,500 //下载test.txt文件大小为1000字节数据,通过COM口分两次输出数据,每次500字节。首次下载500字节
CONNECT
<输出文件数据>
OK
+QFTPGET: 0,500
AT+QFTPGET="test.txt","COM:",500,500 //下载剩余500字节
CONNECT
<输出文件数据>
OK
+QFTPGET: 0,500
方案 2:保存下载数据至UFS
AT+QFTPGET="test_my1.txt","UFS:test.txt" //从FTP(S)服务器下载文件并将其保存至UFS,命名为test.txt
OK
+QFTPGET: 0,1000
AT+QFLST="*"
+QFLST: UFS:test.txt,1000
OK
AT+QFTPGET="test_my1.txt","UFS:test1.txt",450 //从 FTP(S)服务器下载文件并将其保存至UFS,命名为 test.txt,起始位置为450
OK
+QFTPGET: 0,550
方案3:保存下载数据至SD卡
AT+QFTPGET="test_my1.txt","SD:test.txt" //从FTP(S)服务器下载文件并将其保存至SD卡,命名为test.txt
OK
+QFTPGET:0,1000
AT+QFLST="SD:*"
+QFLST:SD:test.txt,1000
OK
AT+QFTPGET="test_my1.txt","SD:test1.txt",450 //从FTP(S)服务器下载文件并将其保存至SD卡,命名为test.txt,起始位置为450
OK
+QFTPGET:0,550
AT+QFTPLEN
OK
+QFTPLEN:0,550
AT+QFLST="SD:*"
+QFLST: SD:test.txt,1000 +QFLST:SD:test1.txt,550
OK
3.8 退出FTP(S)服务器
AT+QFTPCLOSE //退出FTP(S)服务器。
OK
+QFTPCLOSE: 0,0
AT+QIDEACT=1 //去激活为FTP(S)激活的PDP上下文。
OK
4 错误码
<err>表示与移动设备或网络有关的错误码。相关详细信息参见下表。
表4-1 错误码列表
5 FTP(S)协议错误码
协议错误码<protocol_error>表示FTP(S)服务器响应的错误码。详细信息可参考RFC959。下表描述了部分常见错误码。
表5-1 FTP(S)协议错误码列表
6 相关文档及术语缩写
表6-1 相关文档 表6-2 术语缩写
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|