2017-02-16 20:43:55 -05:00
|
|
|
Over The Air Updates (OTA)
|
|
|
|
==========================
|
|
|
|
|
|
|
|
OTA Process Overview
|
2017-05-02 04:36:01 -04:00
|
|
|
--------------------
|
2017-02-16 20:43:55 -05:00
|
|
|
|
|
|
|
The OTA update mechanism allows a device to update itself based on data received while the normal firmware is running
|
|
|
|
(for example, over WiFi or Bluetooth.)
|
|
|
|
|
2017-03-26 18:01:52 -04:00
|
|
|
OTA requires configuring the :doc:`Partition Table <../../api-guides/partition-tables>` of the device with at least two "OTA app slot"
|
2017-02-16 20:43:55 -05:00
|
|
|
partitions (ie `ota_0` and `ota_1`) and an "OTA Data Partition".
|
|
|
|
|
|
|
|
The OTA operation functions write a new app firmware image to whichever OTA app slot is not currently being used for
|
|
|
|
booting. Once the image is verified, the OTA Data partition is updated to specify that this image should be used for the
|
|
|
|
next boot.
|
|
|
|
|
|
|
|
.. _ota_data_partition:
|
|
|
|
|
|
|
|
OTA Data Partition
|
2017-05-02 04:36:01 -04:00
|
|
|
------------------
|
2017-02-16 20:43:55 -05:00
|
|
|
|
2017-03-26 18:01:52 -04:00
|
|
|
An OTA data partition (type ``data``, subtype ``ota``) must be included in the :doc:`Partition Table <../../api-guides/partition-tables>`
|
2017-02-16 20:43:55 -05:00
|
|
|
of any project which uses the OTA functions.
|
|
|
|
|
|
|
|
For factory boot settings, the OTA data partition should contain no data (all bytes erased to 0xFF). In this case the
|
|
|
|
esp-idf software bootloader will boot the factory app if it is present in the the partition table. If no factory app is
|
|
|
|
included in the partition table, the first available OTA slot (usually ``ota_0``) is booted.
|
|
|
|
|
|
|
|
After the first OTA update, the OTA data partition is updated to specify which OTA app slot partition should be booted next.
|
|
|
|
|
|
|
|
The OTA data partition is two flash sectors (0x2000 bytes) in size, to prevent problems if there is a power failure
|
|
|
|
while it is being written. Sectors are independently erased and written with matching data, and if they disagree a
|
|
|
|
counter field is used to determine which sector was written more recently.
|
|
|
|
|
2018-08-14 09:25:11 -04:00
|
|
|
.. _secure-ota-updates:
|
|
|
|
|
|
|
|
Secure OTA Updates Without Secure boot
|
|
|
|
--------------------------------------
|
|
|
|
|
|
|
|
The verification of signed OTA updates can be performed even without enabling hardware secure boot. For doing so, refer :ref:`signed-app-verify`
|
|
|
|
|
2017-02-16 20:43:55 -05:00
|
|
|
See also
|
|
|
|
--------
|
|
|
|
|
2017-03-26 18:01:52 -04:00
|
|
|
* :doc:`Partition Table documentation <../../api-guides/partition-tables>`
|
|
|
|
* :doc:`Lower-Level SPI Flash/Partition API <../storage/spi_flash>`
|
2018-07-12 08:15:44 -04:00
|
|
|
* :doc:`ESP HTTPS OTA <esp_https_ota>`
|
2016-11-28 00:53:03 -05:00
|
|
|
|
2017-01-17 13:12:48 -05:00
|
|
|
Application Example
|
|
|
|
-------------------
|
2017-02-16 20:43:55 -05:00
|
|
|
|
|
|
|
End-to-end example of OTA firmware update workflow: :example:`system/ota`.
|
2017-01-17 13:12:48 -05:00
|
|
|
|
2016-11-28 00:53:03 -05:00
|
|
|
API Reference
|
|
|
|
-------------
|
|
|
|
|
2017-05-02 04:36:01 -04:00
|
|
|
.. include:: /_build/inc/esp_ota_ops.inc
|
2016-11-28 00:53:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
|