http传输OTA文件

     最近做项目,采用公司自研WIFI芯片配置为网络接入点(access point,AP),用户进入指定网页,通过POST接口,传输指令,具体过程ESP32肯定比我讲的更详细,就不再多言了。主要难点在OTA(over the air)文件传输部分,需要读取文件,并采用TCP/IP通信机制,将文件传输给作为http server的WIFI芯片。

HTTP 服务器 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com)

XMLHttpRequest.send() - Web API 接口参考 | MDN (mozilla.org)

       OTA文件的传输我采用xmlhttprequest.send()与readAsArrayBuffer()方法结合,我没有采用formdata方法,是因为formdata发送时,会自动添加边界标识符(boundary),不利于http server还原OTA文件。http server接收时,原定是256字节读取一次,并对读到的数据组帧,再通过串口发给开发板上的另一块具有私有协议通信功能的芯片。但除最后一包数据外,均采用定长发送,即有效字节为256。但在实际通信过程中,发现私有协议芯片存在校验失败的现象,OTA更新自然也就受到了影响。通过不断的调试,最终发现TCP/IP传输过程与设想的不一致。发现http server读取socket缓冲区数据时,长度可能小于256字节。WIFI芯片直接将小于256字节的数据发出,私有协议芯片仍按照256字节进行校验,导致校验失败,OTA文件传输过程直接终止。

     实际的开发过程,需要首先确定取数据小于256字节时,OTA文件传输过程是否可以正常进行。作为无知小白的我,在这个过程甚至怀疑TCP/IP传输过程是否会丢包。通过实际测试,发现发现,可靠传输并不会丢包,只是会把数据放到下一包里发送,也不会因为这一包数据长度异常而停止传输(我之前OTA终止,是因为采用私有协议通信的芯片检测到传输的这一包数据存在问题)。为了证明不存在数据丢包现象,我将WIFI芯片收到的每包数据都打印出来,通过文本对比工具与正常传输的数据进行对比。下图仅仅是证明OTA文件传输不会因一包长度异常的数据而终止,WIFI芯片可以将接收到的数据进行重组,确定每包数据有效数据长度都是256字节。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值