Closed allison-n-h closed 2 years ago
Can you try using master? We recently merged #169 which should fix this issue.
I seem to get a different failure when using the latest from master:
Connecting...
Chip type: ESP32-S3
Crystal frequency: 40MHz
Flash size: 8MB
Features: WiFi, BLE
MAC address: 7c:df:a1:e0:31:3c
Error: espflash::timeout
× Communication error while flashing device
╰─▶ Timeout while running WriteReg command
I've unfortunately never seen this error in practice, so I'm a little stumped as to what the issue is. I run macOS as well and have never run into issues flashing the ESP32-S3, although I haven't used it much.
Just out of curiosity, which version of macOS are you running? Also if you're able to share your project (either a repo or a zip file, or whatever is easiest) that would be helpful so I could at least try to reproduce this.
We were seeing this on macOS Monterey 12.1, and trying to flash the app from this esp-idf example: https://github.com/espressif/esp-idf/tree/v4.4/examples/wifi/getting_started/station
I can't seem to reproduce this.
espflash --bootloader build/bootloader/bootloader.bin build/wifi_station.elf
Serial port: /dev/tty.usbserial-1110
Connecting...
Warning: could not detect flash size (FlashID=0x3980C2, SizeID=0x39), defaulting to 4MB
Chip type: ESP32-S3 Crystal frequency: 40MHz Flash size: 4MB Features: WiFi, BLE MAC address: 84:f7:03:80:09:64 [00:00:01] ######################################## 13/13 segment 0x0 [00:00:00] ######################################## 1/1 segment 0x8000 [00:00:37] ######################################## 363/363 segment 0x10000
Flashing has completed!
Perhaps this is a hardware issue?
I was also unable to reproduce the problem on my M1 running Monterey, unfortunately.
We tested on two different Intel Macs (one is a MBP 2019, the other is a MBP 2017), and encounter this issue.
I wasn't able to reproduce this issue on my ESP32-S3-DevKitC-1-N8R2, so I picked up an ESP32-S3-DevKitC-1-N8 (the same devkit that @allison-n-h is using), and I'm able to reproduce the issue there on my M1 Mac with espflash 1.4.1:
Serial port: /dev/tty.usbmodem1101
Connecting...
Unable to connect, retrying with extra delay...
Unable to connect, retrying with default delay...
Chip type: ESP32-S3
Crystal frequency: 40MHz
Flash size: 8MB
Features: WiFi, BLE
MAC address: f4:12:fa:40:67:14
[00:00:00] ######################################## 13/13 segment 0x0
[00:00:00] ######################################## 1/1 segment 0x8000
Error: espflash::serial_error
× Communication error while flashing device
├─▶ IO error while using serial port: Broken pipe
╰─▶ Broken pipe
I can't reproduce it on espflash 1.5.1 or the current tip of the master branch (d5583ef1e67d025cd515913c0136e5e0f356637f), but that's only because I get a different error there (which is again the same one that @allison-n-h sees on those versions of espflash):
Serial port: /dev/tty.usbmodem1101
Connecting...
Chip type: ESP32-S3
Crystal frequency: 40MHz
Flash size: 8MB
Features: WiFi, BLE
MAC address: f4:12:fa:40:67:14
Error: espflash::timeout
× Communication error while flashing device
╰─▶ Timeout while running WriteReg command
Thank you for the additional information! This at least highlights some hardware differences which may be causing these issues. I only have the ESP32-S3-DevKitC-1-N32R8V
presently, which may be why I'm unable to reproduce.
Board | Flash | PSRAM | SPI Voltage | Status |
---|---|---|---|---|
ESP32-S3-DevKitC-1-N8 | 8MB Quad | — | 3.3V | ❌ |
ESP32-S3-DevKitC-1-N8R2 | 8MB Quad | 2MB Quad | 3.3V | ✅ |
ESP32-S3-DevKitC-1-N32R8V | 32MB Octal | 8MB Octal | 1.8V | ✅ |
Based on the above data it seems possible that somehow the lack of PSRAM is causing this. I will see if I can get some more hardware to verify this, though I'm not sure when I will receive it.
@mykmelez @allison-n-h If you could read the eFuse values from your devkit which exhibits the issue (ESP32-S3-DevKitC-1-N8) and post them here, it would be very helpful.
This can be done using espefuse.py --port /dev/tty.usbmodemNNN summary
. espefuse
tool is available if you have an ESP-IDF environment set up. It can also be installed from https://github.com/espressif/esptool or PyPI.
× Communication error while flashing device
╰─▶ Timeout while running WriteReg command
@jessebraham Perhaps we could add some more debugging information to see which of the WriteReg commands fails?
@mykmelez @allison-n-h If you could read the eFuse values from your devkit which exhibits the issue (ESP32-S3-DevKitC-1-N8) and post them here, it would be very helpful.
Here's the output for my ESP32-S3-DevKitC-1-N8:
> espefuse.py --port /dev/tty.usbmodem11301 summary
Connecting...
Detecting chip type... ESP32-S3
espefuse.py v3.3-dev
=== Run "summary" command ===
EFUSE_NAME (Block) Description = [Meaningful Value] [Readable/Writeable] (Hex Value)
----------------------------------------------------------------------------------------
Config fuses:
DIS_ICACHE (BLOCK0) Disables ICache = False R/W (0b0)
DIS_DCACHE (BLOCK0) Disables DCache = False R/W (0b0)
DIS_DOWNLOAD_ICACHE (BLOCK0) Disables Icache when SoC is in Download mode = False R/W (0b0)
DIS_DOWNLOAD_DCACHE (BLOCK0) Disables Dcache when SoC is in Download mode = False R/W (0b0)
DIS_FORCE_DOWNLOAD (BLOCK0) Disables forcing chip into Download mode = False R/W (0b0)
DIS_CAN (BLOCK0) Disables the TWAI Controller hardware = False R/W (0b0)
DIS_APP_CPU (BLOCK0) Disables APP CPU = False R/W (0b0)
FLASH_TPUW (BLOCK0) Configures flash startup delay after SoC power-up, = 0 R/W (0x0)
unit is (ms/2). When the value is 15, delay is 7.
5 ms
DIS_LEGACY_SPI_BOOT (BLOCK0) Disables Legacy SPI boot mode = False R/W (0b0)
UART_PRINT_CHANNEL (BLOCK0) Selects the default UART for printing boot msg = UART0 R/W (0b0)
FLASH_ECC_MODE (BLOCK0) Configures the ECC mode for SPI flash
= 16-byte to 18-byte mode R/W (0b0)
DIS_USB_DOWNLOAD_MODE (BLOCK0) Disables USB OTG download feature in UART download = False R/W (0b0)
boot mode
UART_PRINT_CONTROL (BLOCK0) Sets the default UART boot message output mode = Enabled R/W (0b00)
FLASH_TYPE (BLOCK0) Selects SPI flash type = 4 data lines R/W (0b0)
FLASH_PAGE_SIZE (BLOCK0) Sets the size of flash page = 0 R/W (0b00)
FLASH_ECC_EN (BLOCK0) Enables ECC in Flash boot mode = False R/W (0b0)
FORCE_SEND_RESUME (BLOCK0) Forces ROM code to send an SPI flash resume comman = False R/W (0b0)
d during SPI boot
BLOCK_USR_DATA (BLOCK3) User data
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
Efuse fuses:
WR_DIS (BLOCK0) Disables programming of individual eFuses = 0 R/W (0x00000000)
RD_DIS (BLOCK0) Disables software reading from BLOCK4-10 = 0 R/W (0b0000000)
Identity fuses:
SECURE_VERSION (BLOCK0) Secure version (used by ESP-IDF anti-rollback feat = 0 R/W (0x0000)
ure)
MAC (BLOCK1) Factory MAC Address
= f4:12:fa:40:67:14 (OK) R/W
WAFER_VERSION (BLOCK1) WAFER version = 1 R/W (0b001)
PKG_VERSION (BLOCK1) ??? Package version = ESP32-S3 R/W (0x0)
BLOCK1_VERSION (BLOCK1) ??? BLOCK1 efuse version = 1 R/W (0b001)
OPTIONAL_UNIQUE_ID (BLOCK2) ??? Optional unique 128-bit ID
= 27 ee 7e 67 b8 78 92 73 f8 60 d5 1e c5 c4 83 f7 R/W
BLOCK2_VERSION (BLOCK2) ??? Version of BLOCK2 = 7 R/W (0b111)
CUSTOM_MAC (BLOCK3) Custom MAC Address
= 00:00:00:00:00:00 (OK) R/W
Security fuses:
SOFT_DIS_JTAG (BLOCK0) Software disables JTAG by programming odd number o = 0 R/W (0b000)
f 1 bit(s). JTAG can be re-enabled via HMAC periph
eral
HARD_DIS_JTAG (BLOCK0) Hardware disables JTAG permanently = False R/W (0b0)
DIS_DOWNLOAD_MANUAL_ENCRYPT (BLOCK0) Disables flash encryption when in download boot mo = False R/W (0b0)
des
SPI_BOOT_CRYPT_CNT (BLOCK0) Enables encryption and decryption, when an SPI boo = Disable R/W (0b000)
t mode is set. Enabled when 1 or 3 bits are set,di
sabled otherwise
SECURE_BOOT_KEY_REVOKE0 (BLOCK0) Revokes use of secure boot key digest 0 = False R/W (0b0)
SECURE_BOOT_KEY_REVOKE1 (BLOCK0) Revokes use of secure boot key digest 1 = False R/W (0b0)
SECURE_BOOT_KEY_REVOKE2 (BLOCK0) Revokes use of secure boot key digest 2 = False R/W (0b0)
KEY_PURPOSE_0 (BLOCK0) KEY0 purpose = USER R/W (0x0)
KEY_PURPOSE_1 (BLOCK0) KEY1 purpose = USER R/W (0x0)
KEY_PURPOSE_2 (BLOCK0) KEY2 purpose = USER R/W (0x0)
KEY_PURPOSE_3 (BLOCK0) KEY3 purpose = USER R/W (0x0)
KEY_PURPOSE_4 (BLOCK0) KEY4 purpose = USER R/W (0x0)
KEY_PURPOSE_5 (BLOCK0) KEY5 purpose = USER R/W (0x0)
SECURE_BOOT_EN (BLOCK0) Enables secure boot = False R/W (0b0)
SECURE_BOOT_AGGRESSIVE_REVOKE (BLOCK0) Enables aggressive secure boot key revocation mode = False R/W (0b0)
STRAP_JTAG_SEL (BLOCK0) Enable selection between usb_to_jtagor pad_to_jtag = False R/W (0b0)
through GPIO3
DIS_DOWNLOAD_MODE (BLOCK0) Disables all Download boot modes = False R/W (0b0)
ENABLE_SECURITY_DOWNLOAD (BLOCK0) Enables secure UART download mode (read/write flas = False R/W (0b0)
h only)
BLOCK_KEY0 (BLOCK4)
Purpose: USER
Encryption key0 or user data
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
BLOCK_KEY1 (BLOCK5)
Purpose: USER
Encryption key1 or user data
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
BLOCK_KEY2 (BLOCK6)
Purpose: USER
Encryption key2 or user data
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
BLOCK_KEY3 (BLOCK7)
Purpose: USER
Encryption key3 or user data
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
BLOCK_KEY4 (BLOCK8)
Purpose: USER
Encryption key4 or user data
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
BLOCK_KEY5 (BLOCK9)
Purpose: USER
Encryption key5 or user data
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
BLOCK_SYS_DATA2 (BLOCK10) System data (part 2)
= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 R/W
Spi_Pad_Config fuses:
SPI_PAD_CONFIG_CLK (BLOCK1) SPI CLK pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_Q (BLOCK1) SPI Q (D1) pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_D (BLOCK1) SPI D (D0) pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_CS (BLOCK1) SPI CS pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_HD (BLOCK1) SPI HD (D3) pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_WP (BLOCK1) SPI WP (D2) pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_DQS (BLOCK1) SPI DQS pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_D4 (BLOCK1) SPI D4 pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_D5 (BLOCK1) SPI D5 pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_D6 (BLOCK1) SPI D6 pad = 0 R/W (0b000000)
SPI_PAD_CONFIG_D7 (BLOCK1) SPI D7 pad = 0 R/W (0b000000)
Usb Config fuses:
DIS_USB (BLOCK0) Disables the USB OTG hardware = False R/W (0b0)
USB_EXCHG_PINS (BLOCK0) Exchanges USB D+ and D- pins = False R/W (0b0)
EXT_PHY_ENABLE (BLOCK0) Enables external USB PHY = False R/W (0b0)
BTLC_GPIO_ENABLE (BLOCK0) Enables BTLC GPIO = 0 R/W (0b00)
DIS_USB_JTAG (BLOCK0) Disable usb_serial_jtag-to-jtag function = False R/W (0b0)
DIS_USB_SERIAL_JTAG (BLOCK0) Disable usb_serial_jtag module = False R/W (0b0)
USB_PHY_SEL (BLOCK0) Select internal/external PHY for USB OTGand usb_se = False R/W (0b0)
rial_jtag
Vdd_Spi Config fuses:
VDD_SPI_XPD (BLOCK0) The VDD_SPI regulator is powered on = False R/W (0b0)
VDD_SPI_TIEH (BLOCK0) The VDD_SPI power supply voltage at reset = Connect to 1.8V LDO R/W (0b0)
VDD_SPI_FORCE (BLOCK0) Force using VDD_SPI_XPD and VDD_SPI_TIEH to config = False R/W (0b0)
ure VDD_SPI LDO
PIN_POWER_SELECTION (BLOCK0) Sets default power supply for GPIO33..37 = VDD3P3_CPU R/W (0b0)
Wdt Config fuses:
WDT_DELAY_SEL (BLOCK0) Selects RTC WDT timeout threshold at startup = 0 R/W (0b00)
Flash voltage (VDD_SPI) determined by GPIO45 on reset (GPIO45=High: VDD_SPI pin is powered from internal 1.8V LDO
GPIO45=Low or NC: VDD_SPI pin is powered directly from VDD3P3_RTC_IO via resistor Rspi. Typically this voltage is 3.3 V).
I think I found the bug (it was my bad!), could you try out https://github.com/esp-rs/espflash/pull/190 and see if it works?
@MabezDev that fix seemed to work for me!
Serial port: /dev/tty.usbmodem14101
Connecting...
Chip type: ESP32-S3
Crystal frequency: 40MHz
Flash size: 8MB
Features: WiFi, BLE
MAC address: 84:f7:03:70:05:b0
[00:00:00] ######################################## 13/13 segment 0x0
[00:00:00] ######################################## 1/1 segment 0x8000
[00:00:04] ######################################## 362/362 segment 0x10000
Flashing has completed!
Trying to test flashing an image using the USB port on an ESP32S3 DevKit-C-1-N8. For larger images (like the wifi station example from the idf), flashing fails about ~75% through the image:
This seems to only be an issue with espflash on macOS and using the USB port on the devkit. Using the UART port works as expected, and using the native
idf.py flash
works as expected. It also seems to occur only 'larger' images - for example, flashing the hello_world example from the IDF completes successfully. Testing this on a Windows 11 machine, we don't see this issue either, so it does seem to be macOS specific.We did verify we are using the 1.4.1 version of espflash.