M25和M26都支持FTP下载的功能,最近做了使用FTP远程给固件升级的程序,用到了FTP功能,特此记录。
1、初始化FTP;
AT+QFTPCLOSE //关闭已有的FTP链路
OK
+QFTPCLOSE:-1 //尚无链接就会报错
AT+QFDEL="RAM:*" //清空M26模块内部的RAM区,用来保存数据
+CME ERROR: 4013 //已经清空就会报错
AT+QFTPUSER="name001" //配置FTP用户名
OK
AT+QFTPPASS="123456" //配置FTP密码
OK
AT+QFTPCFG=4,"/RAM/" //配置FTP输出结果输出到RAM
OK
+QFTPCFG:0 //反馈配置成功
AT+QFTPPATH="/123450000000000UPL0000362/" //配置要访问的路径
OK
+QFTPPATH:0 //反馈配置成功
2、连接FTP
AT+QFTPOPEN="212.103.207.139",7020 //以这个IP和端口为例
+QFTPOPEN:0 //连接FTP服务器成功.
3、查询要访问的文件长度
AT+QFTPSIZE="5.15.1.2.5"
OK
+QFTPSIZE:88752 //返回的文件长度值
4、将FTP文件下载到M26的RAM中
AT+QFTPGET="5.15.1.2.5",88752
+QFTPGET:88752 //反馈下载成功,实际下载文件长度 88752
5、关闭FTP连接
AT+QFTPCLOSE
6、打开RAM中的文件,获得文件句柄
AT+QFOPEN="RAM:5.15.1.2.5“
+QFOPEN: 15466496 //返回值为文件句柄
7、移动文件指针到准备下载的位置
AT+QFSEEK=15466496,0,0 //参数:文件句柄,偏移量,从文件开头偏移
8、读取指定长度的数据
AT+QFREAD=15466496,900 //参数:文件句柄,长度
CONNECT 900 //返回的数据长度,后面换行后紧跟数据,最后以OK结尾
111112222233333444445555566666...............12345
OK
9、关闭文件
AT+QFCLOSE=15466496 //关闭文件 参数为 句柄
总结:
M25或M26需要先将大文件下载到内部RAM,然后再从分包RAM中读取数据;由于单包无法校验,因此,只要有1个字节错误,整个文件校验就会出错,这也是FTP下载的缺点;
如果是小文件,可以直接从FTP读取,串口直接输出。