EC20模块升级网上参考资料比较少,自己也搞了好久,以前升级还是比较低的,现在稍微修正了下,成功率如果排除网络问题的话,能到99%。
现分享下做升级时候的经验和问题汇总:
[1]AT配置流程
[1-1]步骤1:配置FTP服务器初始化
1.配置FTP服务器
“AT+QFTPCFG=“contextid”,1\r\n”
Return: OK
2.配置账号密码
“AT+QFTPCFG=“account”,“anonymous”,“xxx.com.cn”\r\n”
Return: OK
3.配置文件传输的格式,我这边配置成二进制(.bin文件)
“AT+QFTPCFG=“filetype”,1\r\n”
Return: OK
4.将传输模式配置成被动模式
“AT+QFTPCFG=“transmode”,1\r\n”
Return: OK
5.超时时间配置
“AT+QFTPCFG=“rsptimeout”,500\r\n”
Return: OK
[1-2]读取FTP数据
1.打开FTP服务器网址
“AT+QFTPOPEN=“www.xxxxx.com.cn”,21\r\n”
Return: “+QFTPOPEN: 0,0”
以上就代表登录成功了
2.设置需要下载的文件所在的目录
“AT+QFTPCWD=”/wmc/VendingMachine/lyyproj/"\r\n"
Return:"+QFTPCWD: 0,0"
3.列出目录中的文件讯息
“AT+QFTPLIST=”/wmc/xxx/lyyproj/",“COM:”\r\n"
Return:返回的是文件讯息的字符串
4.清除4G模块里的数据 (这边看你是需要把下载的文件放到EC20中还是直接输出到外部地址中,我这边是放到外部flash中,所以其实不要也可以)
“AT+QFDEL=”*"\r\n"
Return: OK
== 这个时候可以对mcu内部flash也做一个clear操作==
5.获取1024个字节
这是个sprintf操作name和ADDR代表了文件名和 当前的文件字节地址(比如开始是0地址,第二帧开始地址就是1024地址开始),1024代表一次下载1024个字节
“AT+QFTPGET=”%s",“COM:”,%d,1024\r\n",name,ADDR
Return:对应的1024个字节
6.关闭FTP服务器
“AT+QFTPCLOSE\r\n”
Return: OK
[2]FTP升级失败问题总结:
[2-1]原因1:数据存储导致的升级中断
我们采用的是把数据直接输出到外部串口的,所以传来一帧,我们就要存储一帧。
但有时候我们发现,存储完后传输就,就升级结束了,等不到下一帧的发送了。
解决方法:尽可能缩减存储的时间,可以在下载前就把空间给擦除了,不要一遍擦一遍写。还有一种就是传一帧数据不要太多,1024个字节就可以了。
[2-2]原因2:校验没有通过(校验需要自己加)
校验没有通过的原因有很多,大部分是由于单片机端接受到的字节不全导致的,如果条件允许,可以传一帧就校验一下,通过了在让EC20发送下一帧,这种方法当然是最好的。但是这种方法在传输的较大文件的时候,效率就大大降低了,还需要事先得到每一帧的校验值才行。
最简单的方式就是传一个总的校验值就行了,但是这个方法也有弊端,就是当单帧出现错误时,整个升级就失败了,所以确保单帧竟可能传输正确,可以对单帧的字符数进行一个判断,这样虽然还是有概率校验不过,但基本上可以基本上杜绝校验失败。小编就用的这个方法,目前除了网络问题导致的升级失败,还没出现过升级失败的情况。