esp8266 OTA升级system_upgrade_start函数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhejfl/article/details/79767690

其实WiFi模块自主升级和插件升级,都是用 OTA(Over The Air)技术,基本上是相通的。

Esp8266 的SDK给出了bool system_upgrade_start (struct upgrade_server_info *server)
这个接口来实现OTA升级。基本上就是设置该函数的参数server。

这个参数的基本结构从源码可知:

struct upgrade_server_info {
    uint8 ip[4];
    uint16 port;


    uint8 upgrade_flag;


    uint8 pre_version[16];
    uint8 upgrade_version[16];


    uint32 check_times;
    uint8 *url;


    upgrade_states_check_callback check_cb;
    struct espconn *pespconn;
};

必须要填的有:

1、一个服务器的端口和IP地址 ip port

2、固件下载完成的回调函数check_cb

3、url http请求报文,包含起始行和首部

4、pespconn 结构体。

返回值: true:开始升级  false:已经在升级中,无法再开始升级

笔者用的是1.5.4SDK    ESP8266已搞成库了。只能从串口输出抓到一些信息。

参见更老的SDK,弄清升级的流程。

第一步:建立TCP连接--->发出HEAD请求--->获得bin文件的头信息

--->断开TCP连接--->建立TCP新连接--->发出GET 分段获取--->存储-->检查信息(即检索下载的bin文件是否是所要求的)---->设置启动标志位--->重新启动。


分段获取----->好奇的很??


在老的SDK中的处理接收到的TCP报文,调用

user_esp_platform_data_process(&client_param,pusrdata,ret);

user_esp_platform_data_process(struct client_conn_param *pclient_param, char *pusrdata, unsigned shortlength)

中pclient_param  指向socketID相关的结构体

pusrdata 是接收到的数据,如果是NULL,则连接将断开

length 是接收到数据的长度

解析JSON数据包,其中对于系统升级指令 调用

user_esp_platform_upgrade_begin(pclient_param, server); 且包括server结构体参数的设置。

LOCAL void  
user_esp_platform_upgrade_begin(struct client_conn_param *pclient_param, struct upgrade_server_info *server) 

处理从服务器收到的数据----升级参数设置

参数设置很关键。






展开阅读全文

没有更多推荐了,返回首页