esp8266 OTA升級system_upgrade_start函式
其實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
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)
處理從伺服器收到的資料----升級引數設定
引數設定很關鍵。