From a6e647d929ec2cb5d43f64b206aee5a686703a9e Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 6 Nov 2023 12:50:55 +0100 Subject: [PATCH] esptool v3.4.0 --- esptool.py | 1371 ++++++++++++++++++++++++++++------------------------ 1 file changed, 729 insertions(+), 642 deletions(-) diff --git a/esptool.py b/esptool.py index 769350d59..afd7c790d 100755 --- a/esptool.py +++ b/esptool.py @@ -57,7 +57,7 @@ raise -__version__ = "3.3.4-dev" +__version__ = "3.4.0" MAX_UINT32 = 0xffffffff MAX_UINT24 = 0xffffff @@ -75,7 +75,7 @@ DEFAULT_CONNECT_ATTEMPTS = 7 # default number of times to try connection WRITE_BLOCK_ATTEMPTS = 3 # number of times to try writing a data block -SUPPORTED_CHIPS = ['esp8266', 'esp32', 'esp32s2', 'esp32s3beta2', 'esp32s3', 'esp32c3', 'esp32c6beta', 'esp32h2beta1', 'esp32h2beta2', 'esp32c2'] +SUPPORTED_CHIPS = ['esp8266', 'esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32c2'] def timeout_per_mb(seconds_per_mb, size_bytes): @@ -91,12 +91,10 @@ def _chip_to_rom_loader(chip): 'esp8266': ESP8266ROM, 'esp32': ESP32ROM, 'esp32s2': ESP32S2ROM, - 'esp32s3beta2': ESP32S3BETA2ROM, 'esp32s3': ESP32S3ROM, 'esp32c3': ESP32C3ROM, - 'esp32c6beta': ESP32C6BETAROM, - 'esp32h2beta1': ESP32H2BETA1ROM, - 'esp32h2beta2': ESP32H2BETA2ROM, + 'esp32c6': ESP32C6ROM, + 'esp32h2': ESP32H2ROM, 'esp32c2': ESP32C2ROM, }[chip] @@ -395,7 +393,7 @@ def detect_chip(port=DEFAULT_PORT, baud=ESP_ROM_BAUD, connect_mode='default_rese res = struct.unpack("> 21) & 0x0F + def get_flash_cap(self): + return self.get_flash_version() + def get_psram_version(self): num_word = 3 return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 28) & 0x0F + def get_psram_cap(self): + return self.get_psram_version() + def get_block2_version(self): # BLK_VERSION_MINOR num_word = 4 @@ -1939,11 +1953,13 @@ def get_chip_description(self): 2: "ESP32-S2FH4", 102: "ESP32-S2FNR2", 100: "ESP32-S2R2", - }.get(self.get_flash_version() + self.get_psram_version() * 100, "unknown ESP32-S2") - + }.get( + self.get_flash_cap() + self.get_psram_cap() * 100, + "unknown ESP32-S2", + ) major_rev = self.get_major_chip_version() minor_rev = self.get_minor_chip_version() - return "%s (revision v%d.%d)" % (chip_name, major_rev, minor_rev) + return f"{chip_name} (revision v{major_rev}.{minor_rev})" def get_chip_features(self): features = ["WiFi"] @@ -1955,14 +1971,14 @@ def get_chip_features(self): 0: "No Embedded Flash", 1: "Embedded Flash 2MB", 2: "Embedded Flash 4MB", - }.get(self.get_flash_version(), "Unknown Embedded Flash") + }.get(self.get_flash_cap(), "Unknown Embedded Flash") features += [flash_version] psram_version = { 0: "No Embedded PSRAM", 1: "Embedded PSRAM 2MB", 2: "Embedded PSRAM 4MB", - }.get(self.get_psram_version(), "Unknown Embedded PSRAM") + }.get(self.get_psram_cap(), "Unknown Embedded PSRAM") features += [psram_version] block2_version = { @@ -1979,30 +1995,48 @@ def get_crystal_freq(self): return 40 def override_vddsdio(self, new_voltage): - raise NotImplementedInROMError("VDD_SDIO overrides are not supported for ESP32-S2") + raise NotImplementedInROMError( + "VDD_SDIO overrides are not supported for ESP32-S2" + ) - def read_mac(self): + def read_mac(self, mac_type="BASE_MAC"): + """Read MAC from EFUSE region""" + if mac_type != "BASE_MAC": + return None mac0 = self.read_reg(self.MAC_EFUSE_REG) mac1 = self.read_reg(self.MAC_EFUSE_REG + 4) # only bottom 16 bits are MAC bitstring = struct.pack(">II", mac1, mac0)[2:] - try: - return tuple(ord(b) for b in bitstring) - except TypeError: # Python 3, bitstring elements are already bytes - return tuple(bitstring) + return tuple(bitstring) + + def flash_type(self): + return ( + 1 + if self.read_reg(self.EFUSE_RD_REPEAT_DATA3_REG) + & self.EFUSE_RD_REPEAT_DATA3_REG_FLASH_TYPE_MASK + else 0 + ) def get_flash_crypt_config(self): return None # doesn't exist on ESP32-S2 + def get_secure_boot_enabled(self): + return ( + self.read_reg(self.EFUSE_SECURE_BOOT_EN_REG) + & self.EFUSE_SECURE_BOOT_EN_MASK + ) + def get_key_block_purpose(self, key_block): if key_block < 0 or key_block > 5: raise FatalError("Valid key block numbers must be in range 0-5") - reg, shift = [(self.EFUSE_PURPOSE_KEY0_REG, self.EFUSE_PURPOSE_KEY0_SHIFT), - (self.EFUSE_PURPOSE_KEY1_REG, self.EFUSE_PURPOSE_KEY1_SHIFT), - (self.EFUSE_PURPOSE_KEY2_REG, self.EFUSE_PURPOSE_KEY2_SHIFT), - (self.EFUSE_PURPOSE_KEY3_REG, self.EFUSE_PURPOSE_KEY3_SHIFT), - (self.EFUSE_PURPOSE_KEY4_REG, self.EFUSE_PURPOSE_KEY4_SHIFT), - (self.EFUSE_PURPOSE_KEY5_REG, self.EFUSE_PURPOSE_KEY5_SHIFT)][key_block] + reg, shift = [ + (self.EFUSE_PURPOSE_KEY0_REG, self.EFUSE_PURPOSE_KEY0_SHIFT), + (self.EFUSE_PURPOSE_KEY1_REG, self.EFUSE_PURPOSE_KEY1_SHIFT), + (self.EFUSE_PURPOSE_KEY2_REG, self.EFUSE_PURPOSE_KEY2_SHIFT), + (self.EFUSE_PURPOSE_KEY3_REG, self.EFUSE_PURPOSE_KEY3_SHIFT), + (self.EFUSE_PURPOSE_KEY4_REG, self.EFUSE_PURPOSE_KEY4_SHIFT), + (self.EFUSE_PURPOSE_KEY5_REG, self.EFUSE_PURPOSE_KEY5_SHIFT), + ][key_block] return (self.read_reg(reg) >> shift) & 0xF def is_flash_encryption_key_valid(self): @@ -2012,8 +2046,9 @@ def is_flash_encryption_key_valid(self): if any(p == self.PURPOSE_VAL_XTS_AES128_KEY for p in purposes): return True - return any(p == self.PURPOSE_VAL_XTS_AES256_KEY_1 for p in purposes) \ - and any(p == self.PURPOSE_VAL_XTS_AES256_KEY_2 for p in purposes) + return any(p == self.PURPOSE_VAL_XTS_AES256_KEY_1 for p in purposes) and any( + p == self.PURPOSE_VAL_XTS_AES256_KEY_2 for p in purposes + ) def uses_usb(self, _cache=[]): if self.secure_download_mode: @@ -2033,15 +2068,23 @@ def _check_if_can_reset(self): """ if os.getenv("ESPTOOL_TESTING") is not None: print("ESPTOOL_TESTING is set, ignoring strapping mode check") - # Esptool tests over USB CDC run with GPIO0 strapped low, don't complain in this case. + # Esptool tests over USB-OTG run with GPIO0 strapped low, + # don't complain in this case. return strap_reg = self.read_reg(self.GPIO_STRAP_REG) force_dl_reg = self.read_reg(self.RTC_CNTL_OPTION1_REG) - if strap_reg & self.GPIO_STRAP_SPI_BOOT_MASK == 0 and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0: - print("WARNING: {} chip was placed into download mode using GPIO0.\n" - "esptool.py can not exit the download mode over USB. " - "To run the app, reset the chip manually.\n" - "To suppress this note, set --after option to 'no_reset'.".format(self.get_chip_description())) + if ( + strap_reg & self.GPIO_STRAP_SPI_BOOT_MASK == 0 + and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0 + ): + print( + "WARNING: {} chip was placed into download mode using GPIO0.\n" + "esptool.py can not exit the download mode over USB. " + "To run the app, reset the chip manually.\n" + "To suppress this note, set --after option to 'no_reset'.".format( + self.get_chip_description() + ) + ) raise SystemExit(1) def hard_reset(self): @@ -2281,20 +2324,6 @@ def hard_reset(self): self._setRTS(False) -class ESP32S3BETA2ROM(ESP32S3ROM): - CHIP_NAME = "ESP32-S3(beta2)" - IMAGE_CHIP_ID = 4 - - CHIP_DETECT_MAGIC_VALUE = [0xeb004136] - - EFUSE_BASE = 0x6001A000 # BLOCK0 read base address - - def get_chip_description(self): - major_rev = self.get_major_chip_version() - minor_rev = self.get_minor_chip_version() - return "%s (revision v%d.%d)" % (self.CHIP_NAME, major_rev, minor_rev) - - class ESP32C3ROM(ESP32ROM): CHIP_NAME = "ESP32-C3" IMAGE_CHIP_ID = 5 @@ -2429,32 +2458,35 @@ def is_flash_encryption_key_valid(self): return any(p == self.PURPOSE_VAL_XTS_AES128_KEY for p in purposes) -class ESP32H2BETA1ROM(ESP32ROM): - CHIP_NAME = "ESP32-H2(beta1)" - IMAGE_CHIP_ID = 10 +class ESP32C6ROM(ESP32C3ROM): + CHIP_NAME = "ESP32-C6" + IMAGE_CHIP_ID = 13 + + FPGA_SLOW_BOOT = False IROM_MAP_START = 0x42000000 - IROM_MAP_END = 0x42800000 - DROM_MAP_START = 0x3c000000 - DROM_MAP_END = 0x3c800000 + IROM_MAP_END = 0x42800000 + DROM_MAP_START = 0x42800000 + DROM_MAP_END = 0x43000000 - SPI_REG_BASE = 0x60002000 - SPI_USR_OFFS = 0x18 - SPI_USR1_OFFS = 0x1C - SPI_USR2_OFFS = 0x20 + BOOTLOADER_FLASH_OFFSET = 0x0 + + # Magic value for ESP32C6 + CHIP_DETECT_MAGIC_VALUE = [0x2CE0806F] + + SPI_REG_BASE = 0x60003000 + SPI_USR_OFFS = 0x18 + SPI_USR1_OFFS = 0x1C + SPI_USR2_OFFS = 0x20 SPI_MOSI_DLEN_OFFS = 0x24 SPI_MISO_DLEN_OFFS = 0x28 SPI_W0_OFFS = 0x58 - BOOTLOADER_FLASH_OFFSET = 0x0 - - CHIP_DETECT_MAGIC_VALUE = [0xca26cc22] - - UART_DATE_REG_ADDR = 0x60000000 + 0x7c + UART_DATE_REG_ADDR = 0x60000000 + 0x7C - EFUSE_BASE = 0x6001A000 + EFUSE_BASE = 0x600B0800 EFUSE_BLOCK1_ADDR = EFUSE_BASE + 0x044 - MAC_EFUSE_REG = EFUSE_BASE + 0x044 + MAC_EFUSE_REG = EFUSE_BASE + 0x044 EFUSE_RD_REG_BASE = EFUSE_BASE + 0x030 # BLOCK0 read base address @@ -2474,76 +2506,123 @@ class ESP32H2BETA1ROM(ESP32ROM): EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = EFUSE_RD_REG_BASE EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 20 + EFUSE_SPI_BOOT_CRYPT_CNT_REG = EFUSE_BASE + 0x034 + EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18 + + EFUSE_SECURE_BOOT_EN_REG = EFUSE_BASE + 0x038 + EFUSE_SECURE_BOOT_EN_MASK = 1 << 20 + PURPOSE_VAL_XTS_AES128_KEY = 4 - GPIO_STRAP_REG = 0x3f404038 + SUPPORTS_ENCRYPTED_FLASH = True FLASH_ENCRYPTED_WRITE_ALIGN = 16 - MEMORY_MAP = [] + UARTDEV_BUF_NO = 0x4087F580 # Variable in ROM .bss which indicates the port in use + UARTDEV_BUF_NO_USB_JTAG_SERIAL = 3 # The above var when USB-JTAG/Serial is used + + DR_REG_LP_WDT_BASE = 0x600B1C00 + RTC_CNTL_WDTCONFIG0_REG = DR_REG_LP_WDT_BASE + 0x0 # LP_WDT_RWDT_CONFIG0_REG + RTC_CNTL_WDTWPROTECT_REG = DR_REG_LP_WDT_BASE + 0x0018 # LP_WDT_RWDT_WPROTECT_REG + + RTC_CNTL_SWD_CONF_REG = DR_REG_LP_WDT_BASE + 0x001C # LP_WDT_SWD_CONFIG_REG + RTC_CNTL_SWD_AUTO_FEED_EN = 1 << 18 + RTC_CNTL_SWD_WPROTECT_REG = DR_REG_LP_WDT_BASE + 0x0020 # LP_WDT_SWD_WPROTECT_REG + RTC_CNTL_SWD_WKEY = 0x50D83AA1 # LP_WDT_SWD_WKEY, same as WDT key in this case FLASH_FREQUENCY = { - '48m': 0xf, - '24m': 0x0, - '16m': 0x1, - '12m': 0x2, + "80m": 0x0, # workaround for wrong mspi HS div value in ROM + "40m": 0x0, + "20m": 0x2, } - # Returns old version format (ECO number). Use the new format get_chip_full_revision(). - def get_chip_revision(self): - return 0 + MEMORY_MAP = [ + [0x00000000, 0x00010000, "PADDING"], + [0x42800000, 0x43000000, "DROM"], + [0x40800000, 0x40880000, "DRAM"], + [0x40800000, 0x40880000, "BYTE_ACCESSIBLE"], + [0x4004AC00, 0x40050000, "DROM_MASK"], + [0x40000000, 0x4004AC00, "IROM_MASK"], + [0x42000000, 0x42800000, "IROM"], + [0x40800000, 0x40880000, "IRAM"], + [0x50000000, 0x50004000, "RTC_IRAM"], + [0x50000000, 0x50004000, "RTC_DRAM"], + [0x600FE000, 0x60100000, "MEM_INTERNAL2"], + ] + + UF2_FAMILY_ID = 0x540DDF62 def get_pkg_version(self): - num_word = 4 - return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 0) & 0x07 + num_word = 3 + return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 24) & 0x07 def get_minor_chip_version(self): num_word = 3 - return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 18) & 0x07 + return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 18) & 0x0F def get_major_chip_version(self): num_word = 3 - return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 21) & 0x03 + return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 22) & 0x03 def get_chip_description(self): chip_name = { - 0: "ESP32-H2", - }.get(self.get_pkg_version(), "unknown ESP32-H2") + 0: "ESP32-C6 (QFN40)", + 1: "ESP32-C6FH4 (QFN32)", + }.get(self.get_pkg_version(), "unknown ESP32-C6") major_rev = self.get_major_chip_version() minor_rev = self.get_minor_chip_version() - return "%s (revision v%d.%d)" % (chip_name, major_rev, minor_rev) + return f"{chip_name} (revision v{major_rev}.{minor_rev})" def get_chip_features(self): - return ["BLE/802.15.4"] + return ["WiFi 6", "BT 5", "IEEE802.15.4"] def get_crystal_freq(self): - return 32 + # ESP32C6 XTAL is fixed to 40MHz + return 40 def override_vddsdio(self, new_voltage): - raise NotImplementedInROMError("VDD_SDIO overrides are not supported for ESP32-H2") + raise NotImplementedInROMError( + "VDD_SDIO overrides are not supported for ESP32-C6" + ) - def read_mac(self): + def read_mac(self, mac_type="BASE_MAC"): + """Read MAC from EFUSE region""" mac0 = self.read_reg(self.MAC_EFUSE_REG) mac1 = self.read_reg(self.MAC_EFUSE_REG + 4) # only bottom 16 bits are MAC - bitstring = struct.pack(">II", mac1, mac0)[2:] - try: - return tuple(ord(b) for b in bitstring) - except TypeError: # Python 3, bitstring elements are already bytes - return tuple(bitstring) + base_mac = struct.pack(">II", mac1, mac0)[2:] + ext_mac = struct.pack(">H", (mac1 >> 16) & 0xFFFF) + eui64 = base_mac[0:3] + ext_mac + base_mac[3:6] + # BASE MAC: 60:55:f9:f7:2c:a2 + # EUI64 MAC: 60:55:f9:ff:fe:f7:2c:a2 + # EXT_MAC: ff:fe + macs = { + "BASE_MAC": tuple(base_mac), + "EUI64": tuple(eui64), + "MAC_EXT": tuple(ext_mac), + } + return macs.get(mac_type, None) def get_flash_crypt_config(self): - return None # doesn't exist on ESP32-H2 + return None # doesn't exist on ESP32-C6 + + def get_secure_boot_enabled(self): + return ( + self.read_reg(self.EFUSE_SECURE_BOOT_EN_REG) + & self.EFUSE_SECURE_BOOT_EN_MASK + ) def get_key_block_purpose(self, key_block): if key_block < 0 or key_block > 5: raise FatalError("Valid key block numbers must be in range 0-5") - reg, shift = [(self.EFUSE_PURPOSE_KEY0_REG, self.EFUSE_PURPOSE_KEY0_SHIFT), - (self.EFUSE_PURPOSE_KEY1_REG, self.EFUSE_PURPOSE_KEY1_SHIFT), - (self.EFUSE_PURPOSE_KEY2_REG, self.EFUSE_PURPOSE_KEY2_SHIFT), - (self.EFUSE_PURPOSE_KEY3_REG, self.EFUSE_PURPOSE_KEY3_SHIFT), - (self.EFUSE_PURPOSE_KEY4_REG, self.EFUSE_PURPOSE_KEY4_SHIFT), - (self.EFUSE_PURPOSE_KEY5_REG, self.EFUSE_PURPOSE_KEY5_SHIFT)][key_block] + reg, shift = [ + (self.EFUSE_PURPOSE_KEY0_REG, self.EFUSE_PURPOSE_KEY0_SHIFT), + (self.EFUSE_PURPOSE_KEY1_REG, self.EFUSE_PURPOSE_KEY1_SHIFT), + (self.EFUSE_PURPOSE_KEY2_REG, self.EFUSE_PURPOSE_KEY2_SHIFT), + (self.EFUSE_PURPOSE_KEY3_REG, self.EFUSE_PURPOSE_KEY3_SHIFT), + (self.EFUSE_PURPOSE_KEY4_REG, self.EFUSE_PURPOSE_KEY4_SHIFT), + (self.EFUSE_PURPOSE_KEY5_REG, self.EFUSE_PURPOSE_KEY5_SHIFT), + ][key_block] return (self.read_reg(reg) >> shift) & 0xF def is_flash_encryption_key_valid(self): @@ -2553,14 +2632,59 @@ def is_flash_encryption_key_valid(self): return any(p == self.PURPOSE_VAL_XTS_AES128_KEY for p in purposes) -class ESP32H2BETA2ROM(ESP32H2BETA1ROM): - CHIP_NAME = "ESP32-H2(beta2)" - IMAGE_CHIP_ID = 14 + +class ESP32H2ROM(ESP32C6ROM): + CHIP_NAME = "ESP32-H2" + IMAGE_CHIP_ID = 16 + + # Magic value for ESP32H2 + CHIP_DETECT_MAGIC_VALUE = [0xD7B73E80] + + DR_REG_LP_WDT_BASE = 0x600B1C00 + RTC_CNTL_WDTCONFIG0_REG = DR_REG_LP_WDT_BASE + 0x0 # LP_WDT_RWDT_CONFIG0_REG + RTC_CNTL_WDTWPROTECT_REG = DR_REG_LP_WDT_BASE + 0x001C # LP_WDT_RWDT_WPROTECT_REG + + RTC_CNTL_SWD_CONF_REG = DR_REG_LP_WDT_BASE + 0x0020 # LP_WDT_SWD_CONFIG_REG + RTC_CNTL_SWD_AUTO_FEED_EN = 1 << 18 + RTC_CNTL_SWD_WPROTECT_REG = DR_REG_LP_WDT_BASE + 0x0024 # LP_WDT_SWD_WPROTECT_REG + RTC_CNTL_SWD_WKEY = 0x50D83AA1 # LP_WDT_SWD_WKEY, same as WDT key in this case + + FLASH_FREQUENCY = { + "48m": 0xF, + "24m": 0x0, + "16m": 0x1, + "12m": 0x2, + } + + UF2_FAMILY_ID = 0x332726F6 + + def get_pkg_version(self): + num_word = 4 + return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 0) & 0x07 + + def get_minor_chip_version(self): + num_word = 3 + return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 18) & 0x07 + + def get_major_chip_version(self): + num_word = 3 + return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 21) & 0x03 def get_chip_description(self): + chip_name = { + 0: "ESP32-H2", + }.get(self.get_pkg_version(), "unknown ESP32-H2") major_rev = self.get_major_chip_version() minor_rev = self.get_minor_chip_version() - return "%s (revision v%d.%d)" % (self.CHIP_NAME, major_rev, minor_rev) + return f"{chip_name} (revision v{major_rev}.{minor_rev})" + + def get_chip_features(self): + return ["BLE", "IEEE802.15.4"] + + def get_crystal_freq(self): + # ESP32H2 XTAL is fixed to 32MHz + return 32 + class ESP32C2ROM(ESP32C3ROM): @@ -2568,27 +2692,53 @@ class ESP32C2ROM(ESP32C3ROM): IMAGE_CHIP_ID = 12 IROM_MAP_START = 0x42000000 - IROM_MAP_END = 0x42400000 - DROM_MAP_START = 0x3c000000 - DROM_MAP_END = 0x3c400000 + IROM_MAP_END = 0x42400000 + DROM_MAP_START = 0x3C000000 + DROM_MAP_END = 0x3C400000 # Magic value for ESP32C2 ECO0 and ECO1 respectively - CHIP_DETECT_MAGIC_VALUE = [0x6F51306F, 0x7c41a06f] + CHIP_DETECT_MAGIC_VALUE = [0x6F51306F, 0x7C41A06F] EFUSE_BASE = 0x60008800 EFUSE_BLOCK2_ADDR = EFUSE_BASE + 0x040 - MAC_EFUSE_REG = EFUSE_BASE + 0x040 + MAC_EFUSE_REG = EFUSE_BASE + 0x040 + + EFUSE_SECURE_BOOT_EN_REG = EFUSE_BASE + 0x30 + EFUSE_SECURE_BOOT_EN_MASK = 1 << 21 + + EFUSE_SPI_BOOT_CRYPT_CNT_REG = EFUSE_BASE + 0x30 + EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18 + + EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = EFUSE_BASE + 0x30 + EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 6 + + EFUSE_XTS_KEY_LENGTH_256_REG = EFUSE_BASE + 0x30 + EFUSE_XTS_KEY_LENGTH_256 = 1 << 10 + + EFUSE_BLOCK_KEY0_REG = EFUSE_BASE + 0x60 + + EFUSE_RD_DIS_REG = EFUSE_BASE + 0x30 + EFUSE_RD_DIS = 3 FLASH_FREQUENCY = { - '60m': 0xf, - '30m': 0x0, - '20m': 0x1, - '15m': 0x2, + "60m": 0xF, + "30m": 0x0, + "20m": 0x1, + "15m": 0x2, } - # Returns old version format (ECO number). Use the new format get_chip_full_revision(). - def get_chip_revision(self): - return self.get_major_chip_version() + MEMORY_MAP = [ + [0x00000000, 0x00010000, "PADDING"], + [0x3C000000, 0x3C400000, "DROM"], + [0x3FCA0000, 0x3FCE0000, "DRAM"], + [0x3FC88000, 0x3FD00000, "BYTE_ACCESSIBLE"], + [0x3FF00000, 0x3FF50000, "DROM_MASK"], + [0x40000000, 0x40090000, "IROM_MASK"], + [0x42000000, 0x42400000, "IROM"], + [0x4037C000, 0x403C0000, "IRAM"], + ] + + UF2_FAMILY_ID = 0x2B88D29C def get_pkg_version(self): num_word = 1 @@ -2601,7 +2751,7 @@ def get_chip_description(self): }.get(self.get_pkg_version(), "unknown ESP32-C2") major_rev = self.get_major_chip_version() minor_rev = self.get_minor_chip_version() - return "%s (revision v%d.%d)" % (chip_name, major_rev, minor_rev) + return f"{chip_name} (revision v{major_rev}.{minor_rev})" def get_minor_chip_version(self): num_word = 1 @@ -2611,44 +2761,66 @@ def get_major_chip_version(self): num_word = 1 return (self.read_reg(self.EFUSE_BLOCK2_ADDR + (4 * num_word)) >> 20) & 0x3 + def get_crystal_freq(self): + # The crystal detection algorithm of ESP32/ESP8266 works for ESP32-C2 as well. + return ESPLoader.get_crystal_freq(self) + + def change_baud(self, baud): + rom_with_26M_XTAL = not self.IS_STUB and self.get_crystal_freq() == 26 + if rom_with_26M_XTAL: + # The code is copied over from ESPLoader.change_baud(). + # Probably this is just a temporary solution until the next chip revision. + + # The ROM code thinks it uses a 40 MHz XTAL. Recompute the baud rate + # in order to trick the ROM code to set the correct baud rate for + # a 26 MHz XTAL. + false_rom_baud = baud * 40 // 26 + + print(f"Changing baud rate to {baud}") + self.command( + self.ESP_CHANGE_BAUDRATE, struct.pack("> 29) & 0x07 + def is_flash_encryption_key_valid(self): + key_len_256 = ( + self.read_reg(self.EFUSE_XTS_KEY_LENGTH_256_REG) + & self.EFUSE_XTS_KEY_LENGTH_256 + ) - def get_minor_chip_version(self): - num_word = 3 - return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 18) & 0x0F + word0 = self.read_reg(self.EFUSE_RD_DIS_REG) & self.EFUSE_RD_DIS + rd_disable = word0 == 3 if key_len_256 else word0 == 1 - def get_major_chip_version(self): - num_word = 3 - return (self.read_reg(self.EFUSE_BLOCK1_ADDR + (4 * num_word)) >> 22) & 0x03 + # reading of BLOCK3 is NOT ALLOWED so we assume valid key is programmed + if rd_disable: + return True + else: + # reading of BLOCK3 is ALLOWED so we will read and verify for non-zero. + # When chip has not generated AES/encryption key in BLOCK3, + # the contents will be readable and 0. + # If the flash encryption is enabled it is expected to have a valid + # non-zero key. We break out on first occurance of non-zero value + key_word = [0] * 7 if key_len_256 else [0] * 3 + for i in range(len(key_word)): + key_word[i] = self.read_reg(self.EFUSE_BLOCK_KEY0_REG + i * 4) + # key is non-zero so break & return + if key_word[i] != 0: + return True + return False - def get_chip_description(self): - chip_name = { - 0: "ESP32-C6", - }.get(self.get_pkg_version(), "unknown ESP32-C6") - major_rev = self.get_major_chip_version() - minor_rev = self.get_minor_chip_version() - return "%s (revision v%d.%d)" % (chip_name, major_rev, minor_rev) class ESP32StubLoader(ESP32ROM): @@ -2692,26 +2864,6 @@ def __init__(self, rom_loader): ESP32S2ROM.STUB_CLASS = ESP32S2StubLoader -class ESP32S3BETA2StubLoader(ESP32S3BETA2ROM): - """ Access class for ESP32S3 stub loader, runs on top of ROM. - - (Basically the same as ESP32StubLoader, but different base class. - Can possibly be made into a mixin.) - """ - FLASH_WRITE_SIZE = 0x4000 # matches MAX_WRITE_BLOCK in stub_loader.c - STATUS_BYTES_LENGTH = 2 # same as ESP8266, different to ESP32 ROM - IS_STUB = True - - def __init__(self, rom_loader): - self.secure_download_mode = rom_loader.secure_download_mode - self._port = rom_loader._port - self._trace_enabled = rom_loader._trace_enabled - self.flush_input() # resets _slip_reader - - -ESP32S3BETA2ROM.STUB_CLASS = ESP32S3BETA2StubLoader - - class ESP32S3StubLoader(ESP32S3ROM): """ Access class for ESP32S3 stub loader, runs on top of ROM. @@ -2756,12 +2908,13 @@ def __init__(self, rom_loader): ESP32C3ROM.STUB_CLASS = ESP32C3StubLoader -class ESP32H2BETA1StubLoader(ESP32H2BETA1ROM): - """ Access class for ESP32H2BETA1 stub loader, runs on top of ROM. +class ESP32C6StubLoader(ESP32C6ROM): + """Access class for ESP32C6 stub loader, runs on top of ROM. (Basically the same as ESP32StubLoader, but different base class. Can possibly be made into a mixin.) """ + FLASH_WRITE_SIZE = 0x4000 # matches MAX_WRITE_BLOCK in stub_loader.c STATUS_BYTES_LENGTH = 2 # same as ESP8266, different to ESP32 ROM IS_STUB = True @@ -2773,15 +2926,16 @@ def __init__(self, rom_loader): self.flush_input() # resets _slip_reader -ESP32H2BETA1ROM.STUB_CLASS = ESP32H2BETA1StubLoader +ESP32C6ROM.STUB_CLASS = ESP32C6StubLoader -class ESP32H2BETA2StubLoader(ESP32H2BETA2ROM): - """ Access class for ESP32H2BETA2 stub loader, runs on top of ROM. +class ESP32H2StubLoader(ESP32H2ROM): + """Access class for ESP32H2 stub loader, runs on top of ROM. (Basically the same as ESP32StubLoader, but different base class. Can possibly be made into a mixin.) """ + FLASH_WRITE_SIZE = 0x4000 # matches MAX_WRITE_BLOCK in stub_loader.c STATUS_BYTES_LENGTH = 2 # same as ESP8266, different to ESP32 ROM IS_STUB = True @@ -2793,15 +2947,16 @@ def __init__(self, rom_loader): self.flush_input() # resets _slip_reader -ESP32H2BETA2ROM.STUB_CLASS = ESP32H2BETA2StubLoader +ESP32H2ROM.STUB_CLASS = ESP32H2StubLoader class ESP32C2StubLoader(ESP32C2ROM): - """ Access class for ESP32C2 stub loader, runs on top of ROM. + """Access class for ESP32C2 stub loader, runs on top of ROM. (Basically the same as ESP32StubLoader, but different base class. Can possibly be made into a mixin.) """ + FLASH_WRITE_SIZE = 0x4000 # matches MAX_WRITE_BLOCK in stub_loader.c STATUS_BYTES_LENGTH = 2 # same as ESP8266, different to ESP32 ROM IS_STUB = True @@ -2840,18 +2995,14 @@ def LoadFirmwareImage(chip, filename): return ESP32FirmwareImage(f) elif chip == "esp32s2": return ESP32S2FirmwareImage(f) - elif chip == "esp32s3beta2": - return ESP32S3BETA2FirmwareImage(f) elif chip == "esp32s3": return ESP32S3FirmwareImage(f) elif chip == 'esp32c3': return ESP32C3FirmwareImage(f) - elif chip == 'esp32c6beta': - return ESP32C6BETAFirmwareImage(f) - elif chip == 'esp32h2beta1': - return ESP32H2BETA1FirmwareImage(f) - elif chip == 'esp32h2beta2': - return ESP32H2BETA2FirmwareImage(f) + elif chip == 'esp32c6': + return ESP32C6FirmwareImage(f) + elif chip == 'esp32h2': + return ESP32H2FirmwareImage(f) elif chip == 'esp32c2': return ESP32C2FirmwareImage(f) else: # Otherwise, ESP8266 so look at magic to determine the image type @@ -3582,20 +3733,29 @@ class ESP32S2FirmwareImage(ESP32FirmwareImage): ESP32S2ROM.BOOTLOADER_IMAGE = ESP32S2FirmwareImage -class ESP32S3BETA2FirmwareImage(ESP32FirmwareImage): +class ESP32S3FirmwareImage(ESP32FirmwareImage): """ ESP32S3 Firmware Image almost exactly the same as ESP32FirmwareImage """ - ROM_LOADER = ESP32S3BETA2ROM + ROM_LOADER = ESP32S3ROM -ESP32S3BETA2ROM.BOOTLOADER_IMAGE = ESP32S3BETA2FirmwareImage +ESP32S3ROM.BOOTLOADER_IMAGE = ESP32S3FirmwareImage -class ESP32S3FirmwareImage(ESP32FirmwareImage): - """ ESP32S3 Firmware Image almost exactly the same as ESP32FirmwareImage """ - ROM_LOADER = ESP32S3ROM +class ESP32C2FirmwareImage(ESP32FirmwareImage): + """ESP32C2 Firmware Image almost exactly the same as ESP32FirmwareImage""" + ROM_LOADER = ESP32C2ROM + + def set_mmu_page_size(self, size): + if size not in [16384, 32768, 65536]: + raise FatalError( + "{} bytes is not a valid ESP32-C2 page size, " + "select from 64KB, 32KB, 16KB.".format(size) + ) + self.IROM_ALIGN = size -ESP32S3ROM.BOOTLOADER_IMAGE = ESP32S3FirmwareImage + +ESP32C2ROM.BOOTLOADER_IMAGE = ESP32C2FirmwareImage class ESP32C3FirmwareImage(ESP32FirmwareImage): @@ -3606,28 +3766,30 @@ class ESP32C3FirmwareImage(ESP32FirmwareImage): ESP32C3ROM.BOOTLOADER_IMAGE = ESP32C3FirmwareImage -class ESP32C6BETAFirmwareImage(ESP32FirmwareImage): - """ ESP32C6 Firmware Image almost exactly the same as ESP32FirmwareImage """ - ROM_LOADER = ESP32C6BETAROM +class ESP32C6FirmwareImage(ESP32FirmwareImage): + """ESP32C6 Firmware Image almost exactly the same as ESP32FirmwareImage""" + ROM_LOADER = ESP32C6ROM -ESP32C6BETAROM.BOOTLOADER_IMAGE = ESP32C6BETAFirmwareImage - + def set_mmu_page_size(self, size): + if size not in [8192, 16384, 32768, 65536]: + raise FatalError( + "{} bytes is not a valid ESP32-C6 page size, " + "select from 64KB, 32KB, 16KB, 8KB.".format(size) + ) + self.IROM_ALIGN = size -class ESP32H2BETA1FirmwareImage(ESP32FirmwareImage): - """ ESP32H2 Firmware Image almost exactly the same as ESP32FirmwareImage """ - ROM_LOADER = ESP32H2BETA1ROM +ESP32C6ROM.BOOTLOADER_IMAGE = ESP32C6FirmwareImage -ESP32H2BETA1ROM.BOOTLOADER_IMAGE = ESP32H2BETA1FirmwareImage +class ESP32H2FirmwareImage(ESP32C6FirmwareImage): + """ESP32H2 Firmware Image almost exactly the same as ESP32FirmwareImage""" -class ESP32H2BETA2FirmwareImage(ESP32FirmwareImage): - """ ESP32H2 Firmware Image almost exactly the same as ESP32FirmwareImage """ - ROM_LOADER = ESP32H2BETA2ROM + ROM_LOADER = ESP32H2ROM -ESP32H2BETA2ROM.BOOTLOADER_IMAGE = ESP32H2BETA2FirmwareImage +ESP32H2ROM.BOOTLOADER_IMAGE = ESP32H2FirmwareImage class ESP32C2FirmwareImage(ESP32FirmwareImage): @@ -4369,10 +4531,6 @@ def elf2image(args): image = ESP32S2FirmwareImage() if args.secure_pad_v2: image.secure_pad = '2' - elif args.chip == 'esp32s3beta2': - image = ESP32S3BETA2FirmwareImage() - if args.secure_pad_v2: - image.secure_pad = '2' elif args.chip == 'esp32s3': image = ESP32S3FirmwareImage() if args.secure_pad_v2: @@ -4381,16 +4539,12 @@ def elf2image(args): image = ESP32C3FirmwareImage() if args.secure_pad_v2: image.secure_pad = '2' - elif args.chip == 'esp32c6beta': - image = ESP32C6BETAFirmwareImage() + elif args.chip == 'esp32c6': + image = ESP32C6FirmwareImage() if args.secure_pad_v2: image.secure_pad = '2' - elif args.chip == 'esp32h2beta1': - image = ESP32H2BETA1FirmwareImage() - if args.secure_pad_v2: - image.secure_pad = '2' - elif args.chip == 'esp32h2beta2': - image = ESP32H2BETA2FirmwareImage() + elif args.chip == 'esp32h2': + image = ESP32H2FirmwareImage() if args.secure_pad_v2: image.secure_pad = '2' elif args.chip == 'esp32c2': @@ -5239,407 +5393,340 @@ def __call__(self, parser, namespace, values, option_string=None): # Binary stub code (see flasher_stub dir for source & details) ESP8266ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ -5dwuzr3/OyU1/H+n+L8kk1ilxnz4f3giyVw=\ +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\ """))) ESP32ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """))) ESP32S2ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ -+rqe/Hebvj3Y4S8jQkWaGpP//j8geRE3\ -"""))) -ESP32S3BETA2ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """))) ESP32S3ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """))) ESP32C3ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ -2JPh/i7GZklhkqv/AdnBtYo=\ -"""))) -ESP32C6BETAROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """))) -ESP32H2BETA1ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ +ESP32C6ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" +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\ +OdSODoxyMzCDxb8B397NZQ==\ """))) -ESP32H2BETA2ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ +ESP32H2ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" +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\ +XMbtthxqTwfGKsnTbPVvMfzUqA==\ """))) ESP32C2ROM.STUB_CODE = eval(zlib.decompress(base64.b64decode(b""" -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\ """)))