EC20模块升级网上参考资料比较少,自己也搞了好久,以前升级还是比较低的,现在稍微修正了下,成功率如果排除网络问题的话,能到99%。 现分享下做升级时候的经验和问题汇总:
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.打开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
我们采用的是把数据直接输出到外部串口的,所以传来一帧,我们就要存储一帧。 但有时候我们发现,存储完后传输就,就升级结束了,等不到下一帧的发送了。 解决方法:尽可能缩减存储的时间,可以在下载前就把空间给擦除了,不要一遍擦一遍写。还有一种就是传一帧数据不要太多,1024个字节就可以了。
校验没有通过的原因有很多,大部分是由于单片机端接受到的字节不全导致的,如果条件允许,可以传一帧就校验一下,通过了在让EC20发送下一帧,这种方法当然是最好的。但是这种方法在传输的较大文件的时候,效率就大大降低了,还需要事先得到每一帧的校验值才行。 最简单的方式就是传一个总的校验值就行了,但是这个方法也有弊端,就是当单帧出现错误时,整个升级就失败了,所以确保单帧竟可能传输正确,可以对单帧的字符数进行一个判断,这样虽然还是有概率校验不过,但基本上可以基本上杜绝校验失败。小编就用的这个方法,目前除了网络问题导致的升级失败,还没出现过升级失败的情况。
