Sfoglia il codice sorgente

Merge branch 'feature/esp32c6_support' into 'master'

feature: Add ESP32-C6 support

Closes ESF-57

See merge request espressif/esp-serial-flasher!71
Roland Dobai 2 anni fa
parent
commit
ee93e2aa90

+ 1 - 0
README.md

@@ -21,6 +21,7 @@ Supported **target** microcontrollers:
 - ESP32-C3
 - ESP32-C2
 - ESP32-H2
+- ESP32-C6
 
 Supported hardware interfaces:
 - UART

BIN
examples/binaries/Hello-world/ESP32_C6/bootloader.bin


BIN
examples/binaries/Hello-world/ESP32_C6/hello_world.bin


BIN
examples/binaries/Hello-world/ESP32_C6/partition-table.bin


BIN
examples/binaries/RAM_APP/ESP32_C6/app.bin


+ 26 - 1
examples/common/example_common.c

@@ -67,6 +67,13 @@ extern const uint32_t ESP32_H2_hello_world_bin_size;
 extern const uint8_t  ESP32_H2_partition_table_bin[];
 extern const uint32_t ESP32_H2_partition_table_bin_size;
 
+extern const uint8_t  ESP32_C6_bootloader_bin[];
+extern const uint32_t ESP32_C6_bootloader_bin_size;
+extern const uint8_t  ESP32_C6_hello_world_bin[];
+extern const uint32_t ESP32_C6_hello_world_bin_size;
+extern const uint8_t  ESP32_C6_partition_table_bin[];
+extern const uint32_t ESP32_C6_partition_table_bin_size;
+
 void get_example_binaries(target_chip_t target, example_binaries_t *bins)
 {
     if (target == ESP8266_CHIP) {
@@ -119,7 +126,17 @@ void get_example_binaries(target_chip_t target, example_binaries_t *bins)
         bins->app.data  = ESP32_H2_hello_world_bin;
         bins->app.size  = ESP32_H2_hello_world_bin_size;
         bins->app.addr  = APPLICATION_ADDRESS;
-    }else {
+    } else if (target == ESP32C6_CHIP){
+        bins->boot.data = ESP32_C6_bootloader_bin;
+        bins->boot.size = ESP32_C6_bootloader_bin_size;
+        bins->boot.addr = BOOTLOADER_ADDRESS_V1;
+        bins->part.data = ESP32_C6_partition_table_bin;
+        bins->part.size = ESP32_C6_partition_table_bin_size;
+        bins->part.addr = PARTITION_ADDRESS;
+        bins->app.data  = ESP32_C6_hello_world_bin;
+        bins->app.size  = ESP32_C6_hello_world_bin_size;
+        bins->app.addr  = APPLICATION_ADDRESS;
+    } else {
         abort();
     }
 }
@@ -137,6 +154,9 @@ extern const uint8_t  ESP32_H4_app_bin[];
 extern const uint32_t ESP32_H4_app_bin_size;
 extern const uint8_t  ESP32_S3_app_bin[];
 extern const uint32_t ESP32_S3_app_bin_size;
+extern const uint8_t  ESP32_C6_app_bin[];
+extern const uint32_t ESP32_C6_app_bin_size;
+
 void get_example_ram_app_binary(target_chip_t target, example_ram_app_binary_t *bin)
 {
     switch (target) {
@@ -170,6 +190,11 @@ void get_example_ram_app_binary(target_chip_t target, example_ram_app_binary_t *
             bin->ram_app.size = ESP32_S3_app_bin_size;
             break;
         }
+        case ESP32C6_CHIP: {
+            bin->ram_app.data = ESP32_C6_app_bin;
+            bin->ram_app.size = ESP32_C6_app_bin_size;
+            break;
+        }
         default: {
             abort();
         }

+ 1 - 1
idf_component.yml

@@ -1,3 +1,3 @@
-version: "0.2.1"
+version: "0.3.0"
 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

+ 3 - 2
include/esp_loader.h

@@ -64,8 +64,9 @@ typedef enum {
     ESP32C2_CHIP = 5,
     ESP32H4_CHIP = 6,
     ESP32H2_CHIP = 7,
-    ESP_MAX_CHIP = 8,
-    ESP_UNKNOWN_CHIP = 8
+    ESP32C6_CHIP = 8,
+    ESP_MAX_CHIP = 9,
+    ESP_UNKNOWN_CHIP = 9
 } target_chip_t;
 
 /**

+ 17 - 0
src/esp_targets.c

@@ -33,6 +33,7 @@ typedef struct {
 
 #define ESP8266_SPI_REG_BASE 0x60000200
 #define ESP32S2_SPI_REG_BASE 0x3f402000
+#define ESP32C6_SPI_REG_BASE 0x60003000
 #define ESP32xx_SPI_REG_BASE 0x60002000
 #define ESP32_SPI_REG_BASE   0x3ff42000
 
@@ -174,6 +175,22 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = {
         .read_spi_config = spi_config_esp32xx,
         .encryption_in_begin_flash_cmd = true,
     },
+    // ESP32C6
+    {
+        .regs = {
+            .cmd  = ESP32C6_SPI_REG_BASE + 0x00,
+            .usr  = ESP32C6_SPI_REG_BASE + 0x18,
+            .usr1 = ESP32C6_SPI_REG_BASE + 0x1c,
+            .usr2 = ESP32C6_SPI_REG_BASE + 0x20,
+            .w0   = ESP32C6_SPI_REG_BASE + 0x58,
+            .mosi_dlen = ESP32C6_SPI_REG_BASE + 0x24,
+            .miso_dlen = ESP32C6_SPI_REG_BASE + 0x28,
+        },
+        .efuse_base = 0x600B0800,
+        .chip_magic_value = { 0x2CE0806F, 0 },
+        .read_spi_config = spi_config_esp32xx,
+        .encryption_in_begin_flash_cmd = true,
+    },
 };
 
 const target_registers_t *get_esp_target_data(target_chip_t chip)

+ 1 - 0
test/test.cpp

@@ -119,6 +119,7 @@ map<target_chip_t, uint32_t> chip_magic_value = {
     {ESP32S3_CHIP,  0x00000009},
     {ESP32H4_CHIP,  0xca26cc22},
     {ESP32H2_CHIP,  0xd7b73e80},
+    {ESP32C6_CHIP,  0x2ce0806f},
 };
 
 void queue_connect_response(target_chip_t target = ESP32_CHIP, uint32_t magic_value = 0)