zoukankan      html  css  js  c++  java
  • esp32 串口,蓝牙等其他方式OTA

    原创文章,转发请注明链接和作者。(而且作者很懒,没有检查错别字)

    序言

    esp32的官方例程中提供了通过通过wifi连接网络的OTA例程。例程虽然方便未必适用于所有情况,有时我们希望通过蓝牙,串口,或者别的方式进行OTA操作。下面会对OTA相关的函数进行解析,是的开发者可以通过不同的方式继续OTA。

    OTA原理

    简单的来说:OTA的基本过程如下:

    1、接收程序

    2、写入Flash

    3、修改引导,使得下次开机的时候从新写入的程序启动。

    esp32的具体实现中会一般有2个区域用来写入程序。下图是一个,OTA功能下程序在flash中的烧录情况。详细参见:https://blog.csdn.net/qq_24550925/article/details/85857351

    图1

    综上,从原理上来看只要能接收到数据,就可以进行OTA升级。而具体的数据来源可以是多种多样的。

    需要的相关配置

    1、ota功能需要对分区表进行适当的划分,可以自行划分也可以使用官方已经提供好的典型划分方式。使用官方分区表的具体设置如下:

    输入make menuconfig 中:Partition Table -> Partition Table 选择 Factory app, two OTA definitions。

    2、需要确保flash空间充足并且被正确配置,根据自己的芯片情况进行选择。官方典型的芯片为4M,以下是典型的配置方法:

    输入make menuconfig 中:Serial flasher config -> Flash size 选择4 MB

    OTA相关函数及程序流程

    一下剖析的函数wifi升级中使用的OTA相关函数,具体的来说就是在esp-idf/components/esp_https_ota/src/esp_https_ota.c文件中,esp_https_ota(const esp_http_client_config_t *config)函数所使用的OTA函数。具体流程如下。其中可以通过接收完成后收尾工作中的2个函数返回值可以判断升级是否成功。

    #include "esp_ota_ops.h"
    
    //准备工作
    esp_err_t err = ESP_OK;
    esp_ota_handle_t update_handle = 0;
    const esp_partition_t *update_partition = NULL;
    update_partition = esp_ota_get_next_update_partition(NULL);
    err = esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &update_handle);
    
    
    //数据接收
    while(接收数据中)
    {
        err  = esp_ota_write( update_handle, (const void *)data, len);
    }
    
    
    //接收完成后收尾工作
    err = esp_ota_end(update_handle);
    err = esp_ota_set_boot_partition(update_partition);
    
    //软件复位
    esp_restart();
  • 相关阅读:
    大话GridView—(1) 编辑、删除、查看详情、分页
    『协议』XMLRPC 协议规格说明
    『ExtJS』01 009. ExtJS 4 方法重载
    [SQL2005触发器学习]3、Instead Of触发器
    [SQL2005触发器学习]1、初识触发器
    禁止.NET程序多开
    面试遇到的面试题分析
    关于Page,Master,UserControl的初始化及加载顺序
    ASP.NET 下关于ACCESS连接字符串的配置
    [SQL2005触发器学习]2、After触发器
  • 原文地址:https://www.cnblogs.com/zornlink/p/11412232.html
Copyright © 2011-2022 走看看