Преглед изворни кода

fix: doc and code structure fixes for load_ram feature

wuzhenghui пре 2 година
родитељ
комит
76e0239df7

+ 1 - 1
README.md

@@ -2,7 +2,7 @@
 
 
 ## Overview
 ## Overview
 
 
-Serial flasher component provides portable library for flashing Espressif SoCs from other host microcontroller. Espressif SoCs are normally programmed via serial interface (UART). Port layer for given host microcontroller has to be implemented, if not available. Details can be found in section below.
+Serial flasher component provides portable library for flashing or loading ram loadble app to Espressif SoCs from other host microcontroller. Espressif SoCs are normally programmed via serial interface (UART). Port layer for given host microcontroller has to be implemented, if not available. Details can be found in section below.
 
 
 Supported **host** microcontrollers:
 Supported **host** microcontrollers:
 
 

+ 2 - 2
examples/common/example_common.c

@@ -214,8 +214,8 @@ esp_loader_error_t load_ram_binary(const uint8_t *bin)
 {
 {
     printf("Start loading\n");
     printf("Start loading\n");
     esp_loader_error_t err;
     esp_loader_error_t err;
-    esp_loader_bin_header_t *header = (esp_loader_bin_header_t *)bin;
-    esp_loader_bin_segment_t segments[header->segments];
+    example_bin_header_t *header = (example_bin_header_t *)bin;
+    example_bin_segment_t segments[header->segments];
 
 
     // Parse segments
     // Parse segments
     uint32_t seg;
     uint32_t seg;

+ 21 - 0
examples/common/example_common.h

@@ -35,6 +35,27 @@ typedef struct {
     partition_attr_t ram_app;
     partition_attr_t ram_app;
 } example_ram_app_binary_t;
 } example_ram_app_binary_t;
 
 
+/**
+ * @brief esptool portable bin header format
+ */
+typedef struct example_bin_header {
+    uint8_t magic;
+    uint8_t segments;
+    uint8_t flash_mode;
+    uint8_t flash_size_freq;
+    uint32_t entrypoint;
+} example_bin_header_t;
+
+/**
+ * @brief esptool portable bin segment format
+ */
+typedef struct example_bin_segment {
+    uint32_t addr;
+    uint32_t size;
+    uint8_t *data;
+} example_bin_segment_t;
+
+
 void get_example_binaries(target_chip_t target, example_binaries_t *binaries);
 void get_example_binaries(target_chip_t target, example_binaries_t *binaries);
 void get_example_ram_app_binary(target_chip_t target, example_ram_app_binary_t *bin);
 void get_example_ram_app_binary(target_chip_t target, example_ram_app_binary_t *bin);
 esp_loader_error_t connect_to_target(uint32_t higrer_baudrate);
 esp_loader_error_t connect_to_target(uint32_t higrer_baudrate);

+ 7 - 5
examples/esp32_example/main/main.c

@@ -17,6 +17,8 @@
 #include "esp_loader.h"
 #include "esp_loader.h"
 #include "example_common.h"
 #include "example_common.h"
 
 
+static const char *TAG = "serial_flasher";
+
 #define HIGHER_BAUDRATE 230400
 #define HIGHER_BAUDRATE 230400
 
 
 void app_main(void)
 void app_main(void)
@@ -33,7 +35,7 @@ void app_main(void)
     };
     };
 
 
     if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) {
     if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) {
-        ESP_LOGE("example", "serial initialization failed.");
+        ESP_LOGE(TAG, "serial initialization failed.");
         return;
         return;
     }
     }
 
 
@@ -41,12 +43,12 @@ void app_main(void)
 
 
         get_example_binaries(esp_loader_get_target(), &bin);
         get_example_binaries(esp_loader_get_target(), &bin);
 
 
-        printf("\e[1;32mLoading bootloader...\n\e[0m");
+        ESP_LOGI(TAG, "Loading bootloader...");
         flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr);
         flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr);
-        printf("\e[1;32mLoading partition table...\n\e[0m");
+        ESP_LOGI(TAG, "Loading partition table...");
         flash_binary(bin.part.data, bin.part.size, bin.part.addr);
         flash_binary(bin.part.data, bin.part.size, bin.part.addr);
-        printf("\e[1;32mLoading app...\n\e[0m");
+        ESP_LOGI(TAG, "Loading app...");
         flash_binary(bin.app.data,  bin.app.size,  bin.app.addr);
         flash_binary(bin.app.data,  bin.app.size,  bin.app.addr);
-        printf("\e[1;32mDone!\n\e[0m");
+        ESP_LOGI(TAG, "Done!");
     }
     }
 }
 }

+ 1 - 1
examples/esp32_load_ram_example/CMakeLists.txt

@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.5)
 
 
 set(EXTRA_COMPONENT_DIRS ../../)
 set(EXTRA_COMPONENT_DIRS ../../)
 include($ENV{IDF_PATH}/tools/cmake/project.cmake)
 include($ENV{IDF_PATH}/tools/cmake/project.cmake)
-project(esp-serial-flasher)
+project(esp32-serial-ram-loader)

+ 13 - 10
examples/esp32_load_ram_example/main/main.c

@@ -1,4 +1,4 @@
-/* Flash multiple partitions example
+/* Example of loading the program into RAM
 
 
    This example code is in the Public Domain (or CC0 licensed, at your option.)
    This example code is in the Public Domain (or CC0 licensed, at your option.)
 
 
@@ -19,8 +19,10 @@
 #include "example_common.h"
 #include "example_common.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/FreeRTOS.h"
 
 
+static const char *TAG = "serial_ram_loader";
+
 // This can be set to a higher baud rate, but because it takes some time to
 // This can be set to a higher baud rate, but because it takes some time to
-// switch the uart baud rate in SlaveMonitor task, the log at slave starup
+// switch the uart baud rate in slave_monitor task, the log at slave starup
 // time will be lost or garbled.
 // time will be lost or garbled.
 #define HIGHER_BAUDRATE 115200
 #define HIGHER_BAUDRATE 115200
 
 
@@ -28,7 +30,8 @@
 #define BUF_LEN 128
 #define BUF_LEN 128
 static char buf[BUF_LEN] = {0};
 static char buf[BUF_LEN] = {0};
 
 
-void SlaveMonitor(){
+void slave_monitor(void *arg)
+{
 #if (HIGHER_BAUDRATE != 115200)
 #if (HIGHER_BAUDRATE != 115200)
     uart_flush_input(UART_NUM_1);
     uart_flush_input(UART_NUM_1);
     uart_flush(UART_NUM_1);
     uart_flush(UART_NUM_1);
@@ -55,22 +58,22 @@ void app_main(void)
     };
     };
 
 
     if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) {
     if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) {
-        ESP_LOGE("example", "serial initialization failed.");
+        ESP_LOGE(TAG, "serial initialization failed.");
         abort();
         abort();
     }
     }
 
 
     if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) {
     if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) {
         get_example_ram_app_binary(esp_loader_get_target(), &bin);
         get_example_ram_app_binary(esp_loader_get_target(), &bin);
-        printf("\e[1;32mLoading app to RAM ...\n\e[0m");
+        ESP_LOGI(TAG, "Loading app to RAM ...");
         esp_loader_error_t err = load_ram_binary(bin.ram_app.data);
         esp_loader_error_t err = load_ram_binary(bin.ram_app.data);
         if (err == ESP_LOADER_SUCCESS) {
         if (err == ESP_LOADER_SUCCESS) {
             // Forward slave's serial output
             // Forward slave's serial output
-            printf("\e[1;33m********************************************\n\e[0m");
-            printf("\e[1;33m*** Logs below are print from slave .... ***\n\e[0m");
-            printf("\e[1;33m********************************************\n\e[0m");
-            xTaskCreate(SlaveMonitor, "SlaveMonitor", 2048, NULL, configMAX_PRIORITIES, NULL);
+            ESP_LOGI(TAG, "********************************************");
+            ESP_LOGI(TAG, "*** Logs below are print from slave .... ***");
+            ESP_LOGI(TAG, "********************************************");
+            xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES, NULL);
         } else {
         } else {
-            printf("\e[1;31mLoading to ram failed ...\e[0m\n");
+            ESP_LOGE(TAG, "Loading to ram failed ...");
         }
         }
     }
     }
     vTaskDelete(NULL);
     vTaskDelete(NULL);

+ 2 - 2
idf_component.yml

@@ -1,3 +1,3 @@
-version: "0.0.6"
-description: Serial flasher component provides portable library for flashing Espressif SoCs from other host microcontroller
+version: "0.0.7"
+description: Serial flasher component provides portable library for flashing or loading ram loadble app to Espressif SoCs from other host microcontroller
 url: https://github.com/espressif/esp-serial-flasher
 url: https://github.com/espressif/esp-serial-flasher

+ 5 - 25
include/esp_loader.h

@@ -64,27 +64,6 @@ typedef enum {
     ESP_UNKNOWN_CHIP = 7
     ESP_UNKNOWN_CHIP = 7
 } target_chip_t;
 } target_chip_t;
 
 
-/**
- * @brief esptool portable bin header format
- */
-typedef struct esp_loader_bin_header {
-  uint8_t magic;
-  uint8_t segments;
-  uint8_t flash_mode;
-  uint8_t flash_size_freq;
-  uint32_t entrypoint;
-} esp_loader_bin_header_t;
-
-/**
- * @brief esptool portable bin segment format
- */
-typedef struct esp_loader_bin_segment {
-  uint32_t addr;
-  uint32_t size;
-  uint8_t *data;
-} esp_loader_bin_segment_t;
-
-
 /**
 /**
  * @brief SPI pin configuration arguments
  * @brief SPI pin configuration arguments
  */
  */
@@ -169,7 +148,7 @@ esp_loader_error_t esp_loader_flash_start(uint32_t offset, uint32_t image_size,
   *     - ESP_LOADER_ERROR_TIMEOUT Timeout
   *     - ESP_LOADER_ERROR_TIMEOUT Timeout
   *     - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error
   *     - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error
   */
   */
-esp_loader_error_t esp_loader_flash_write(void *payload, uint32_t size);
+esp_loader_error_t esp_loader_flash_write(const void *payload, uint32_t size);
 
 
 /**
 /**
   * @brief Ends flash operation.
   * @brief Ends flash operation.
@@ -185,7 +164,7 @@ esp_loader_error_t esp_loader_flash_finish(bool reboot);
 
 
 
 
 /**
 /**
-  * @brief Initiates mem operation
+  * @brief Initiates mem operation, initiates loading for program into target RAM
   *
   *
   * @param offset[in]       Address from which mem operation will be performed.
   * @param offset[in]       Address from which mem operation will be performed.
   * @param size[in]         Size of the whole binary to be loaded into mem.
   * @param size[in]         Size of the whole binary to be loaded into mem.
@@ -217,11 +196,12 @@ esp_loader_error_t esp_loader_mem_start(uint32_t offset, uint32_t size, uint32_t
   *     - ESP_LOADER_ERROR_TIMEOUT Timeout
   *     - ESP_LOADER_ERROR_TIMEOUT Timeout
   *     - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error
   *     - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error
   */
   */
-esp_loader_error_t esp_loader_mem_write(void *payload, uint32_t size);
+esp_loader_error_t esp_loader_mem_write(const void *payload, uint32_t size);
 
 
 
 
 /**
 /**
-  * @brief Ends mem operation.
+  * @brief Ends mem operation, finish loading for program into target RAM
+  *        and send the entrypoint of ram_loadable app
   *
   *
   * @param entrypoint[in]       entrypoint of ram program.
   * @param entrypoint[in]       entrypoint of ram program.
   *
   *

+ 2 - 2
src/esp_loader.c

@@ -261,7 +261,7 @@ esp_loader_error_t esp_loader_flash_start(uint32_t offset, uint32_t image_size,
 }
 }
 
 
 
 
-esp_loader_error_t esp_loader_flash_write(void *payload, uint32_t size)
+esp_loader_error_t esp_loader_flash_write(const void *payload, uint32_t size)
 {
 {
     uint32_t padding_bytes = s_flash_write_size - size;
     uint32_t padding_bytes = s_flash_write_size - size;
     uint8_t *data = (uint8_t *)payload;
     uint8_t *data = (uint8_t *)payload;
@@ -295,7 +295,7 @@ esp_loader_error_t esp_loader_mem_start(uint32_t offset, uint32_t size, uint32_t
 }
 }
 
 
 
 
-esp_loader_error_t esp_loader_mem_write(void *payload, uint32_t size)
+esp_loader_error_t esp_loader_mem_write(const void *payload, uint32_t size)
 {
 {
     uint8_t *data = (uint8_t *)payload;
     uint8_t *data = (uint8_t *)payload;
     loader_port_start_timer(timeout_per_mb(size, LOAD_RAM_TIMEOUT_PER_MB));
     loader_port_start_timer(timeout_per_mb(size, LOAD_RAM_TIMEOUT_PER_MB));