This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
esp32_ota [2024/03/20 00:52] sausage [Simulating Rollback process] |
esp32_ota [2025/02/02 21:16] (current) sausage CRC checksum details |
||
|---|---|---|---|
| Line 5: | Line 5: | ||
| Over The Air (OTA) provides a way to send firmware to your ESP32 board in the field without the need for a cable and physical access to the device. | Over The Air (OTA) provides a way to send firmware to your ESP32 board in the field without the need for a cable and physical access to the device. | ||
| - | The purpose of this article is manually step through the various stages of the OTA process and illustrate the state of the ESP32 at each stage. | + | The purpose of this article is to manually step through the various stages of the OTA process and illustrate the state of the ESP32 at each stage. |
| Together we will set up a number of firmwares suitable for testing on different partitions in flash memory. | Together we will set up a number of firmwares suitable for testing on different partitions in flash memory. | ||
| Line 303: | Line 303: | ||
| </code> | </code> | ||
| - | Interesting. On the left is ''ota_0''. It has a boot sequence of ''01'' and a CRC check (not covered in this article). This partition will boot each time the ESP32 is reset. On the right is ''ota_1'', and there is nothing here to indicate if it should boot. | + | Interesting. On the left is ''ota_0''. It has a boot sequence of ''01'' and a CRC checksum (keep a note of this, we will come back to this). This partition will boot each time the ESP32 is reset. On the right is ''ota_1'', and there is nothing here to indicate if it should boot. |
| We can also verify the ''otadata'' partition and take a closer look at what is stored there now. | We can also verify the ''otadata'' partition and take a closer look at what is stored there now. | ||
| Line 319: | Line 319: | ||
| ''9A 98 43 47'' is the firmware checksum. | ''9A 98 43 47'' is the firmware checksum. | ||
| + | |||
| + | Remember the CRC checksum in ''ota_0''? | ||
| + | |||
| + | ''0x4743989a''. This is how you can confirm which firmware is running. | ||
| Let's switch to booting the firmware on ''ota_1'': | Let's switch to booting the firmware on ''ota_1'': | ||
| Line 358: | Line 362: | ||
| In our case, the second sector has a new entry, the ''02'' sequence. This is for the firmware on ''ota_1''. ''02'' is greater than ''01'' so this is the firmware selected for boot by the bootloader. | In our case, the second sector has a new entry, the ''02'' sequence. This is for the firmware on ''ota_1''. ''02'' is greater than ''01'' so this is the firmware selected for boot by the bootloader. | ||
| + | |||
| + | Again we can inspect the checksum: ''0x55f63774'' is ''74 37 F6 55''. | ||
| How an OTA partition is determined from sequence numbers in the otadata partition is not explained in the documentation, but is explained in the code. You can see it here: https://github.com/pycom/esp-idf-2.0/blob/master/components/app_update/esp_ota_ops.c#L297 | How an OTA partition is determined from sequence numbers in the otadata partition is not explained in the documentation, but is explained in the code. You can see it here: https://github.com/pycom/esp-idf-2.0/blob/master/components/app_update/esp_ota_ops.c#L297 | ||
| Line 515: | Line 521: | ||
| ===== Thank yous ===== | ===== Thank yous ===== | ||
| - | Many thanks to boarchuz and craig from the [[https://discord.gg/wwK29JJV|Espressif MCUs]] discord server for their advice on details in this article. | + | Many thanks to boarchuz and craig from the [[https://discord.gg/wwK29JJV|Espressif MCUs]] discord server for their assistance with this article. |