Page 1 of 1

Unable to run ESP32_RF_TEST_BIN on PICO-D4

Posted: Thu Nov 07, 2019 6:48 pm
by rajtantajtan
Hi,

I have a design based around ESP32-PICO-D4 and going for certification soon. Now I want to run ESP32_RF_TEST_BIN_V1.5.0_20190812.bin on our hardware but I'm unable to get it to boot properly.

To be sure that there are no problems with the hardware I also tried on the ESP32-PICO-KIT and ESP32-WROOM-32.

ESP32-WROOM-32 runs the binary successfully but I'm unable to get it to start on ESP32-PICO-KIT.

I get same error message on ESP32-PICO-KIT and my custom hardware based around ESP32-PICO-D4.

How are you supposed to program this binary to the PICO-D4 to get it to run properly? I'm using espRFTool_2.0.exe available from https://www.espressif.com/en/support/download/overview

ESP-WROOM-32 output:
sync...
sync success
esp_mac:cc-50-e3-92-a9-6c
load start
open serial fail...
Hash of data verified.
load to flash success
load bin success
start rf test
SET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 0, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0x3ffc4000,len:2668

load:0x3ffc4a6c,len:28580

entry 0x40080058

bss start 0x3ffcba10 end 0x3ffd9af8

init bss 0

rtc v240 Jan 2 2019 16:22:15

xtal clk=40, CRYSTAL_SELECT=0

efuse_MAC: 0x4bcc50-e392a96c

phy_version: 4150, 99b5c0a, Aug 12 2019, 14:12:06, 0, 2

*RFTestBIN 150

wait:

ESP32-PICO-KIT log output:
sync...
sync success
esp_mac:d8-a0-1d-69-f6-74
load start
open serial fail...
Hash of data verified.
load to flash success
load bin success
start rf test
FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

ets Jun 8 2016 00:22:57



rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

configsip: 188777542, SPIWP:0x00

clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

mode:QIO, clock div:2

load:0x40080000,len:149712

1162 mmu set 00010000, pos 00010000

1162 mmu set 00020000, pos 00020000

load:0xffffffff,len:-1

Re: Unable to run ESP32_RF_TEST_BIN on PICO-D4

Posted: Wed Nov 13, 2019 6:27 pm
by yamosw
Hi rajtantajtan -

Looking at the log, it seems that it is rebooting without successfully communicating with FlashROM.

ESP32 looks at the Firmware header and sets the SPI for external FlashROM (PICO-D4 external FlashROM is in the chip package).

Looking at the header in ESP32_RF_TEST_BIN_V1.5.0_20190812.bin, spi_mode = ESP_IMAGE_SPI_MODE_QIO(0x00), spi_size = ESP_IMAGE_FLASH_SIZE_1MB(0x0), spi_speed = ESP_IMAGE_SPI_SPEED_40M(0x0).
ESP32_RF_TEST_BIN_V1.5.0_20190812.bin header.png
ESP32_RF_TEST_BIN_V1.5.0_20190812.bin header.png (6.91 KiB) Viewed 2980 times
Firmware headers are stored in the esp_image_header_t structure in order from the top.
That is, the first “0xE9” is magic, “0x03” is segment_count, and “0x00” is spi_mode. (Note: be careful to endian)

Change spi_mode, spi_size, and spi_speed as shown in the screenshot below.
spi_mode = ESP_IMAGE_SPI_MODE_DIO(0x02), spi_size = ESP_IMAGE_FLASH_SIZE_4MB(0x2), spi_speed = ESP_IMAGE_SPI_SPEED_80M(0xF).
ESP32_RF_TEST_BIN_V1.5.0_20190812.bin header modified.png
ESP32_RF_TEST_BIN_V1.5.0_20190812.bin header modified.png (7.04 KiB) Viewed 2980 times
Try writing it after modifying the binary.
When writing ESP32_RF_TEST_BIN_V1.5.0_20190812.bin by manually specifying the offset address, set offset to 0x1000.

I saw that PICO-D4 works now.

reference: "~\esp-idf\components\bootloader_support\include\esp_image_format.h"

Code: Untitled.c Select all

typedef enum {
    ESP_IMAGE_SPI_MODE_QIO,
    ESP_IMAGE_SPI_MODE_QOUT,
    ESP_IMAGE_SPI_MODE_DIO,
    ESP_IMAGE_SPI_MODE_DOUT,
    ESP_IMAGE_SPI_MODE_FAST_READ,
    ESP_IMAGE_SPI_MODE_SLOW_READ
} esp_image_spi_mode_t;
/* SPI flash clock frequency */
typedef enum {
    ESP_IMAGE_SPI_SPEED_40M,
    ESP_IMAGE_SPI_SPEED_26M,
    ESP_IMAGE_SPI_SPEED_20M,
    ESP_IMAGE_SPI_SPEED_80M = 0xF
} esp_image_spi_freq_t;
/* Supported SPI flash sizes */
typedef enum {
    ESP_IMAGE_FLASH_SIZE_1MB = 0,
    ESP_IMAGE_FLASH_SIZE_2MB,
    ESP_IMAGE_FLASH_SIZE_4MB,
    ESP_IMAGE_FLASH_SIZE_8MB,
    ESP_IMAGE_FLASH_SIZE_16MB,
    ESP_IMAGE_FLASH_SIZE_MAX
} esp_image_flash_size_t;
#define ESP_IMAGE_HEADER_MAGIC 0xE9
/* Main header of binary image */
typedef struct {
    uint8_t magic;
    uint8_t segment_count;
    /* flash read mode (esp_image_spi_mode_t as uint8_t) */
    uint8_t spi_mode;
    /* flash frequency (esp_image_spi_freq_t as uint8_t) */
    uint8_t spi_speed: 4;
    /* flash chip size (esp_image_flash_size_t as uint8_t) */
    uint8_t spi_size: 4;
    uint32_t entry_addr;
    /* WP pin when SPI pins set via efuse (read by ROM bootloader, the IDF bootloader uses software to configure the WP
     * pin and sets this field to 0xEE=disabled) */
    uint8_t wp_pin;
    /* Drive settings for the SPI flash pins (read by ROM bootloader) */
    uint8_t spi_pin_drv[3];
    /* Reserved bytes in ESP32 additional header space, currently unused */
    uint8_t reserved[11];
    /* If 1, a SHA256 digest "simple hash" (of the entire image) is appended after the checksum. Included in image length. This digest
     * is separate to secure boot and only used for detecting corruption. For secure boot signed images, the signature
     * is appended after this (and the simple hash is included in the signed data). */
    uint8_t hash_appended;
} __attribute__((packed))  esp_image_header_t;