Quellcode durchsuchen

Add ESP32-H2 target support

Jiacheng Guo vor 4 Jahren
Ursprung
Commit
1e4feca73d
3 geänderte Dateien mit 28 neuen und 5 gelöschten Zeilen
  1. 4 3
      include/esp_loader.h
  2. 16 1
      src/esp_targets.c
  3. 8 1
      test/test.cpp

+ 4 - 3
include/esp_loader.h

@@ -59,8 +59,9 @@ typedef enum {
     ESP32C3_CHIP = 3,
     ESP32S3_CHIP = 4,
     ESP32C2_CHIP = 5,
-    ESP_MAX_CHIP = 6,
-    ESP_UNKNOWN_CHIP = 6
+    ESP32H2_CHIP = 6,
+    ESP_MAX_CHIP = 7,
+    ESP_UNKNOWN_CHIP = 7
 } target_chip_t;
 
 /**
@@ -231,4 +232,4 @@ void esp_loader_reset_target(void);
 
 #ifdef __cplusplus
 }
-#endif
+#endif

+ 16 - 1
src/esp_targets.c

@@ -136,6 +136,21 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = {
         .chip_magic_value = { 0x6f51306f, 0 },
         .read_spi_config = spi_config_esp32xx,
     },
+    // ESP32H2
+    {
+        .regs = {
+            .cmd  = ESP32xx_SPI_REG_BASE + 0x00,
+            .usr  = ESP32xx_SPI_REG_BASE + 0x18,
+            .usr1 = ESP32xx_SPI_REG_BASE + 0x1c,
+            .usr2 = ESP32xx_SPI_REG_BASE + 0x20,
+            .w0   = ESP32xx_SPI_REG_BASE + 0x58,
+            .mosi_dlen = ESP32xx_SPI_REG_BASE + 0x24,
+            .miso_dlen = ESP32xx_SPI_REG_BASE + 0x28,
+        },
+        .efuse_base = 0x6001A000,
+        .chip_magic_value = { 0xca26cc22, 0 }, // ESP32H2-BETA1
+        .read_spi_config = spi_config_esp32xx,
+    },
 };
 
 const target_registers_t *get_esp_target_data(target_chip_t chip)
@@ -230,4 +245,4 @@ static esp_loader_error_t spi_config_esp32xx(uint32_t efuse_base, uint32_t *spi_
 bool encryption_in_begin_flash_cmd(target_chip_t target)
 {
     return target == ESP32_CHIP || target == ESP8266_CHIP;
-}
+}

+ 8 - 1
test/test.cpp

@@ -118,6 +118,7 @@ map<target_chip_t, uint32_t> chip_magic_value = {
     {ESP32C2_CHIP,  0x6f51306f},
     {ESP32C3_CHIP,  0x6921506f},
     {ESP32S3_CHIP,  0x00000009},
+    {ESP32H2_CHIP,  0xca26cc22},
 };
 
 void queue_connect_response(target_chip_t target = ESP32_CHIP, uint32_t magic_value = 0)
@@ -201,6 +202,12 @@ TEST_CASE( "Can detect attached target" )
         REQUIRE( esp_loader_get_target() == ESP32C2_CHIP );
     }
 
+    SECTION( "Can detect ESP32H2" ) {
+        queue_connect_response(ESP32H2_CHIP);
+        REQUIRE_SUCCESS( esp_loader_connect(&connect_config) );
+        REQUIRE( esp_loader_get_target() == ESP32H2_CHIP );
+    }
+
     SECTION( "Can detect ESP32C3" ) {
         queue_connect_response(ESP32C3_CHIP);
         REQUIRE_SUCCESS( esp_loader_connect(&connect_config) );
@@ -381,4 +388,4 @@ TEST_CASE( "Serial read works correctly" )
 
         REQUIRE( memcmp(expected, encoded, sizeof(expected)) == 0 );
     }
-}
+}