Как эффективно использовать функцию RollBack ESP32? - PullRequest
1 голос
/ 12 апреля 2019

Поскольку я понимаю, что функция отката должна быть реализована, и приложение должно войти в режим диагностики, как только я включу функцию APP_ROLLBACK_ENABLE, но мое приложение не переходит в состояние диагностики. Состояние указано в коде:

Как видно, мое состояние предположительно не ESP_VERIFY

esp_partition_get_sha256(esp_ota_get_running_partition(), sha_256);
print_sha256(sha_256, "SHA-256 for current firmware: ");

const esp_partition_t *running = esp_ota_get_running_partition();
esp_ota_img_states_t ota_state;
if (esp_ota_get_state_partition(running, &ota_state) == ESP_OK) {
    ESP_LOGI(TAG, "Get State Partition was Successfull");
        if (ota_state == ESP_OTA_IMG_PENDING_VERIFY) {
        // run diagnostic function ...
        bool diagnostic_is_ok = true;
        if (diagnostic_is_ok) {
            ESP_LOGI(TAG, "Diagnostics completed successfully! Continuing execution ...");
            esp_ota_mark_app_valid_cancel_rollback();
        } else {
            ESP_LOGE(TAG, "Diagnostics failed! Start rollback to the previous version ...");
            esp_ota_mark_app_invalid_rollback_and_reboot();
        }
    }
}

ОЖИДАЕТСЯ: должна появиться диагностика приложения ACTUAL: код диагностики приложения не получает состояние: ESP_OTA_IMG_PENDING_VERIFY

1 Ответ

1 голос
/ 30 апреля 2019

При первой загрузке прошивки OTADATA будет удалена. В загрузчике он устанавливается в правильное состояние ota_seq и ESP_OTA_IMG_VALID. Это означает, что в приложении ваш код не будет проверяться диагностическим кодом, поскольку у вас есть только одно загрузочное приложение, и откат невозможен.

После OTA ваше приложение находится в состоянии ESP_OTA_IMG_PENDING_VERIFY и только при первой загрузке должна выполняться эта часть кода. Это состояние будет изменено esp_ota_mark_app_valid_cancel_rollback() функция на ESP_OTA_IMG_VALID.

...