1 概述
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。模块ftp默认是被动模式,不支持主动模式,无法设置主动模式,公网下要想模块正常连接服务器,服务器肯定不能设置为主动模式,否则哪家模块都不能用。
2 相关AT指令介绍
2.1 设置 FTP 控制端口:AT+FTPPORT
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPPORT= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPPORT? | +FTPPORT: OK | |
测试命令 | AT+FTPPORT=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 控制端口号 | 1~65535 | 缺省值为 21 |
2.2 设置 FTP 主动或被动模式:AT+FTPMODE
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPMODE= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPMODE? | +FTPMODE: OK | |
测试命令 | AT+FTPMODE=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 主动被动模式 | 0 | 主动模式(暂不支持) | |
1 | 被动模式 |
2.3 设置 FTP 数据传输类型:AT+FTPTYPE
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPTYPE= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPTYPE? | +FTPTYPE: OK | |
测试命令 | AT+FTPTYPE=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 数据传输类型 | “A” | FTP ASCII 字符集 | |
“I” | FTP Binary 字符集 |
2.4 设置 FTP 输入类型:AT+FTPPUTOPT
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPPUTOPT= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPPUTOPT? | +FTPPUTOPT: OK | |
测试命令 | AT+FTPPUTOPT=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 数据传输类型 | “APPE” | 添加文件 | |
“STOU” | 存储唯一的文件 | ||
“STOR” | 存储文件 |
2.5 设置 FTP 承载标识:AT+FTPCID
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPCID= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPCID? | +FTPCID: OK | |
测试命令 | AT+FTPCID=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 承载标识 | 1~3 | 同+SAPBR 中定义。缺省值为 0。 |
2.6 设置 FTP 下载续传:AT+FTPREST
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPREST= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPREST? | +FTPREST: OK | |
测试命令 | AT+FTPREST=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
要续传的断点 |
2.7 设置 FTP 服务器地址:AT+FTPSERV
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPSERV= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPSERV? | +FTPSERV: OK | |
测试命令 | AT+FTPSERV=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 服务器地址, IP 或域名 | 32-bit 十 进 制 数 , 用 . 分 开 , 形 式 如 : xxx.xxx.xxx.xxx。 如果是 DNS,则为长度不超过 49 的 ASCII 字符串。 |
2.8 设置 FTP 用户名称:AT+FTPUN
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPUN= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPUN? | +FTPUN: OK | |
测试命令 | AT+FTPUN=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 用户名 | 为长度不超过 49 的 ASCII 字符串。 |
2.9 设置 FTP 密码:AT+FTPPW
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPPW= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPPW? | +FTPPW: OK | |
测试命令 | AT+FTPPW=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 密码 | 为长度不超过 49 的 ASCII 字符串。 |
2.10 设置 FTP 下载文件名称:AT+FTPGETNAME
设置服务器端目标文件的名称。
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPGETNAME= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPGETNAME? | +FTPGETNAME: OK | |
测试命令 | AT+FTPGETNAME=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 下载文件名称 | 为长度不超过 99 的 ASCII 字符串。 |
2.11 设置 FTP 下载文件路径:AT+FTPGETPATH
本命令是设置目标文件在服务器端的路径。
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPGETPATH= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPGETPATH? | +FTPGETPATH: OK | |
测试命令 | AT+FTPGETPATH=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 下载文件路径 | 长度不超过 255 的 ASCII 字符串。 |
2.12 设置 FTP 上传文件名称:AT+FTPPUTNAME
设置将文件上传到服务器后的保存名称。
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPPUTNAME= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPPUTNAME? | +FTPPUTNAME: OK | |
测试命令 | AT+FTPPUTNAME=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 上传文件名称 | 长度不超过 99 的 ASCII 字符串。 |
2.13 设置 FTP 上传文件路径:AT+FTPPUTPATH
设置将文件上传到服务器后的保存目录。
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPPUTPATH= | OK | 正常返回 |
ERROR | 输入格式有误 | ||
查询命令 | AT+FTPPUTPATH? | +FTPPUTPATH: OK | |
测试命令 | AT+FTPPUTPATH=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 上传文件路径 | 长度不超过 99 的 ASCII 字符串。 |
2.14 远程服务器上创建文件目录:AT+FTPMKD
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
执行命令 | AT+FTPMKD | OK +FTPMKD: 1,0 | 创建成功 |
OK +FTPMKD: 1, | 创建失败 | ||
+CME ERROR: | 如果是命令错误 | ||
测试命令 | AT+FTPMKD=? | OK | |
注意事项 | 执行命令创建的文件目录由命令AT+FTPGETPATH定义 |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
错误码 | 与 AT+FTPGET 命令的定义相同 |
2.15 远程服务器上删除文件目录:AT+FTPRMD
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
执行命令 | AT+FTPRMD | OK +FTPRMD: 1,0 | 删除成功 |
OK +FTPRMD: 1, | 删除失败 | ||
+CME ERROR: | 如果是命令错误 | ||
测试命令 | AT+FTPRMD=? | OK | |
注意事项 | 执行命令删除的文件目录由命令AT+FTPGETPATH定义 |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
错误码 | 与 AT+FTPGET 命令的定义相同 |
2.16 下载文件:AT+FTPGET
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPGET=[,] | OK | 输入AT+FTPGET=1 的返回 |
+FTPGET:2, ………数据………… OK | 输入: AT+FTPGET=2, 的返回 | ||
URC 上报 | +FTPGET:1,1 | 输入AT+FTPGET=1后,有此上报,表示有数据了,第一个参数 1表示为1 | |
+FTPGET:1, | 输入AT+FTPGET=1后,有此上报,表示FTP下载失败,第一个参数1表示为1 | ||
+FTPGET:1,0 | 表示数据传输结束,第一个参数1表示为1 | ||
测试命令 | AT+FTPGET=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
工作模式 | 1 | 打开 FTP 会话 | |
2 | 读入 FTP 下载数据 | ||
请求读入的数据长度 | 1~1460 | ||
确认读入的数据长度 | 1~1460 | 可能小于。0 表示没有数据可以读入。 | |
错误码 | 61 | 网络错误 net error | |
62 | DNS 错误 DNS error | ||
63 | 连接错误 connect error | ||
64 | 超时 timeout | ||
65 | 服务器错误 server error | ||
66 | 操作禁止operation not allowed | ||
70 | 应答错误 reply error | ||
71 | 用户错误 user error | ||
72 | 口令错误 password error | ||
73 | 类型错误type error | ||
74 | 保持错误 rest error | ||
75 | 被动错误 passive error | ||
76 | 主动错误active error | ||
77 | 操作错误 operate error | ||
78 | 上传错误 upload error | ||
79 | 下载错误 download error | ||
80~84 | FTP SSL 连接错误 | ||
85 | 文件错误 | ||
86 | 主动退出 |
2.17 上传文件:AT+FTPPUT
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPPUT=[,] | OK | 输入AT+FTPPUT=1的返回 |
+FTPPUT:2, ……… //input data here OK | 输入: AT+FTPPUT=2, 的返回 | ||
OK +FTPPUT: 1,0 | 输入: AT+FTPPUT=2,0 的返回 | ||
URC 上报 | +FTPPUT:1,1, | 输入AT+FTPPUT=1后,有此上报,表示可以上传数据了此时通过输入AT+FTPPUT=2,上传数据第一个参数1表示为1 | |
+FTPPUT:1,0 | 表示数据传输会话结束。第一个参数1表示为1 | ||
+FTPPUT:1, | 如果=1,而且FTP会话失败。错误码定义请参考AT+FTPGET 错误码定义 | ||
测试命令 | AT+FTPPUT=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
FTP 上传工作模式 | 1 | 打开 FTP 会话 | |
2 | 写 FTP 上传数据 | ||
请求上传的数据长度 | 0- | ||
确认可以上传的数据长度 | |||
单次可以上传的最大的长度,取决于网络状态 |
2.18 下载文件(扩展):AT+FTPEXTGET
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPEXTGET= | OK | 当=0或1 |
AT+FTPEXTGET=, | +FTPEXTGET:2, OK | 当=2 | |
AT+FTPEXTGET=,, | +FTPEXTGET:3, …… //这里是输出到串口的数据 OK | 当=3 | |
查询命令 | AT+FTPEXTGET? | +FTPEXTGET: [,] OK | |
测试命令 | AT+FTPEXTGET=? | OK | |
URC上报 | +FTPEXTGET:1,0 | =1且FTPEXTGET结束,会有如此上报 | |
+FTPEXTGET:1, | =1且FTPEXTGET出错,会有如此上报。错误码定义请参考AT+FTPGET 错误码定义 | ||
+FTPEXTGET:2, | =2 | ||
+FTPEXTGET:3, | =3 | ||
注意事项 | 1) 当FTPEXTPUT =1时,不可使用本命令 2) 如果文件大小()<300KB,可以使用这个命令;如果文件大小()>=300KB,请使用缺省的FTPGET method (AT+FTPEXTGET=0) 3) 本命令的使用方法请参考本章最后一部分:使用方法举例 |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
工作模式 | 0 | 使用缺省的FTPGET方法 | |
1 | 使用扩展的FTPGET方法 | ||
2 | 保存下载的数据到文件中 | ||
3 | 输出下载的数据到串口 | ||
文件名 | 字符串型,最长64个字符 | ||
保存到文件的所有数据长度,用于mode 2 | <302512 | 单位:字节 | |
输出到串口的数据长度,用于mode 3 | <302512 | 单位:字节 | |
读取文件数据的起始位置,用于mode 3 | |||
读取长度,用于mode 3 | 单位:字节 | ||
FTPEXTGET的状态 | 0 | 不在FTPEXTGET过程中 | |
1 | 处于FTPEXTGET过程 | ||
错误码 | 与AT+FTPGET命令的定义相同 |
2.19 上传文件(扩展):AT+FTPEXTPUT
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPEXTPUT=[,,,] | OK | 当=0或1 |
+FTPEXTPUT: , …… //这里从串口输入数据 OK | 当=2 | ||
测试命令 | AT+FTPEXTPUT=? | OK | |
注意事项 | 本命令的使用方法请参考本章最后一部分:使用方法举例 |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
工作模式 | 0 | 使用缺省的FTPPUT方法 | |
1 | 使用扩展的FTPPUT方法 | ||
2 | 将数据PUT到RAM | ||
每次PUT的起始位置 | 0-300K | 单位:byte | |
每次PUT的数据长度 | 0-300K | 单位:byte | |
串口数据传输的超时时间 | 1000-1000000 | 单位:ms |
2.20 下载文件并保存到文件系统中:AT+FTPGETTOFS
语法规则:
命令类型 | 语法 | 返回 | |
---|---|---|---|
设置命令 | AT+FTPGETTOFS=,[,, | OK | 成功 |
ERROR | 失败 | ||
查询命令 | AT+FTPGETTOFS? | +FTPGETTOFS: [,,] OK | |
URC上报 | +FTPGETTOFS:0, | 如果下载成功 | |
+FTPGETTOFS: | 如果下载失败 | ||
测试命令 | AT+FTPGETTOFS=? | OK | |
注意事项 | 重连以后会断点续传 如果两次下载都用同一个文件名,上次下载的内容会被覆盖 |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
工作模式 | 0 | 不在FTPGETTOFS过程 | |
1 | 处于FTPGETTOFS过程 | ||
文件保存的位置,是ROM还是SD卡。Disk1或Disk2可被AT+FSDRIVE获取 | 0 | 保存于ROM,文件夹为"Disk1:\user\ftp" | |
1 | 保存于SD卡,文件夹为"Disk2:\ftp" | ||
文件名 | 字符串型,最长64个字符 | ||
自动重连次数 | 0-255 | 缺省值:3 | |
等多少秒开始自动重连 | 0-60 | 单位:秒,缺省值:5 | |
当前从FTP服务器GET多少数据 | |||
当前保存到文件系统多少数据 | |||
总共保存到文件系统多少数据 | |||
错误码 | 与AT+FTPGET命令的定义相同 |
2.21 从文件系统上传文件到服务器:AT+FTPPUTFRMFS
语法规则:
命令类型 | 语法 | 返回 |
---|---|---|
执行命令 | AT+FTPPUTFRMFS=[,, | OK |
查询命令 | AT+FTPPUTFRMFS? | +FTPPUTFRMFS: [,] OK |
测试命令 | AT+FTPPUTFRMFS=? | OK |
URC上报 | +FTPPUTFRMFS:0, | 当上传结束,有此上报 |
+FTPPUTFRMFS: | 当上传出错,有此上报。 定义请参考AT+FTPGET命令的定义 | |
注意事项 | 自动重连后从断点开始续传 |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
文件名 | 字符串型,由数字和字母组成,最长128字节 | ||
自动重连次数 | 0-255 | 缺省值:3 | |
等多少秒开始自动重连 | 0-60 | 单位:秒,缺省值:5 | |
FTP上传状态 | 0 | 不在上传状态 | |
1 | 处于上传状态 | ||
当前从文件系统上传了多少数据 | 单位:字节 | ||
从文件系统共上传了多少数据 | 单位:字节 |
2.22 从文件系统加载到RAM中并用FTPPUT上传:AT+FTPFILEPUT
语法规则:
命令类型 | 语法 | 返回 |
---|---|---|
设置命令 | AT+FTPFILEPUT=[,] | OK |
测试命令 | AT+FTPFILEPUT=? | OK |
注意事项 | 当FTPEXTPUT命令=1时,本命令不可用 |
2.23 获取远程服务器上文件目录:AT+FTPLIST
语法规则:
命令类型 | 语法 | 返回 |
---|---|---|
执行命令 | AT+FTPLIST=[,] | 如果=1,则命令格式为: AT+FTPLIST=1 返回值为: OK或 +CME ERROR: |
如果=2,则命令格式为: AT+FTPLIST=2, 返回值为: +FTPLIST:2, ….数据… OK | ||
测试命令 | AT+FTPLIST=? | OK |
URC上报 | 输入AT+FTPLIST=1后, 如果是一个成功的FTP会话,后续会有如下的URC上报: +FTPLIST:1,1 如果是FTP数据传输结束,后续会有如下的URC上报: +FTPLIST:1,0 如果FTP会话失败,后续会有如下的URC上报: +FTPLIST:1, |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
工作模式 | 1 | 打开FTP 获取文件目录会话 | |
2 | 读取FTP 获取文件目录的数据 | ||
请求的数据的长度 | 1~1460 | ||
实际的数据长度 | 1~1460 | ||
同+FTPGET中定义 |
2.24 获取远程服务器上文件大小:AT+FTPSIZE
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
执行命令 | AT+FTPSIZE | OK +FTPSIZE: 1,0, | 获取文件大小成功 |
OK +FTPSIZE: 1,,0 | 获取文件大小失败 | ||
+CME ERROR: | 如果是命令错误 | ||
测试命令 | AT+FTPSIZE=? | OK | |
注意事项 | 文件由命令AT+FTPGETNAME和AT+FTPGETPATH指定 |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
文件大小 | 单位:字节 | ||
错误码 | 与AT+FTPGET命令的定义相同 |
2.25 获取FTP状态:AT+FTPSTATE
语法规则:
命令类型 | 语法 | 返回 |
---|---|---|
执行命令 | AT+FTPSTATE | +FTPSTATE: OK |
测试命令 | AT+FTPSTATE=? | OK |
参数定义:
参数 | 定义 | 取值 | 对取值的说明 |
---|---|---|---|
工作状态 | 0 | Idle | |
1 | FTP会话进行中,包括FTPGET、FTPPUT、FTPDELE |
2.26 保存FTP应用上下文:AT+FTPSCONT
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
查询命令 | AT+FTPSCONT? | +FTPSCONT: +FTPSERV: +FTPPORT: +FTPUN: +FTPPW: +FTPCID: +FTPMODE: +FTPTYPE: +FTPPUTOPT: +FTPREST: +FTPGETNAME: +FTPGETPATH: +FTPPUTNAME: +FTPPUTPATH: +FTPTIMEOUT: OK | |
执行命令 | AT+FTPSCONT | OK | 将FTP上下文保存,等模块重启后,将自动载入上下文参数并生效 |
2.27 删除服务器上指定的文件:AT+FTPDELE
语法规则:
命令类型 | 语法 | 返回 |
---|---|---|
执行命令 | AT+FTPDELE | OK |
测试命令 | AT+FTPDELE=? | OK |
URC上报 | +FTPDELE:1,0 | 表示删除成功。第一个参数1表示FTP会话打开 |
+FTPDELE:1, | 表示FTP文件删除失败。错误码定义请参考AT+FTPGET 错误码定义 | |
注意事项 | 文件由命令AT+FTPGETNAME和AT+FTPGETPATH指定 |
2.28 退出当前FTP会话:AT+FTPQUIT
语法规则:
命令类型 | 语法 | 返回 | 说明 |
---|---|---|---|
设置命令 | AT+FTPQUIT | OK | 成功 |
ERROR | 失败 | ||
测试命令 | AT+FTPQUIT=? | OK |
3 AT指令示例
http://doc.openluat.com/article/740/0
4 相关资料以及购买链接
相关开发板购买链接
Air724UG开发板
Air724 开发板使用说明
5 常见问题
服务器搭建教程
可参考
http://doc.openluat.com/article/470/0