Page 1 of 1

Support DFU for main chip

Posted: Tue Dec 25, 2018 3:17 am
by hoainguyen265
In my production, I have to support DFU for main chip over I2C communication by ESP32.
But I don't want to do it in ESP32 main app. I want main app just downloading firmware from server and save to flash. After that, ESP32 reboot, boot loader will read firmware from flash and connect to main chip to do DFU.

But i found in document that boot loader can not use the drivers and functions from other components and boot loader size is also limited.

So anyone here have experience in customize boot loader can give me some advice? Thanks so much.

Re: Support DFU for main chip

Posted: Tue Dec 25, 2018 9:27 am
by ESP_igrr
Instead of modifying the bootloader to use the drivers, you may create a separate small application which will handle the DFU, and place it into one of the app partitions. Then in the main app, use esp_ota_set_boot_partition function to boot the DFU application, and call "esp_restart". Bootloader will boot the DFU application. In the DFU application, do the work you need and switch back to the main app using esp_ota_set_boot_partition.

Re: Support DFU for main chip

Posted: Tue Dec 25, 2018 10:30 am
by hoainguyen265
ESP_igrr wrote:
Tue Dec 25, 2018 9:27 am
Instead of modifying the bootloader to use the drivers, you may create a separate small application which will handle the DFU, and place it into one of the app partitions. Then in the main app, use esp_ota_set_boot_partition function to boot the DFU application, and call "esp_restart". Bootloader will boot the DFU application. In the DFU application, do the work you need and switch back to the main app using esp_ota_set_boot_partition.
Thanks for your response ESP_igrr,
With your response i have more question that if i use

Code: Select all

esp_ota_set_boot_partition
, my DFU partition subtype is ota_x right?
And if my DFU partition subtype is ota_x, my DFU app may be erased for ota process?

Re: Support DFU for main chip

Posted: Tue Dec 25, 2018 11:08 am
by ESP_igrr
You probably need to use another subtype, such as 'test'. I think the partition table generator will also accept other integer values which are not used by defined subtypes.

Re: Support DFU for main chip

Posted: Wed Dec 26, 2018 8:49 am
by hoainguyen265
ESP_igrr wrote:
Tue Dec 25, 2018 11:08 am
You probably need to use another subtype, such as 'test'. I think the partition table generator will also accept other integer values which are not used by defined subtypes.
I tried with subtype 'test' and 0xFF and failed.
This is my partition table
https://drive.google.com/file/d/1Tx98pW ... sp=sharing
I flash the same .bin file to ota_1 and dfu_app
When i'm in ota_0 i try to use esp_ota_set_boot_partition with dfu_app and failed, but with ota_1 is ok.

Re: Support DFU for main chip

Posted: Wed Dec 26, 2018 9:05 am
by hoainguyen265
So think that i will set the subtype of dfu_app to ota_2.
And the i will custom ota process.
I don't use

Code: Select all

esp_ota_get_next_update_partition
I will use:

Code: Select all

esp_partition_find
esp_partition_find_first
to get the ota partition i want to update.
It's mean when i'm in ota_0, i update to ota_1, when i'm in ota_1 i update to ota_0,
and when i want to do dfu, i will use

Code: Select all

 esp_ota_set_boot_partition
to boot to dfu_app (ota_2)