(Tutorial in the making!)
You should have heard enough about the new Chip! From the specifications looks like, this is THE chip of the future, for anything connected that you want to build. Instead of using a microcontroller and add-on WiFi, Bluetooth modules for building connected things , this is the only chip you might want to use. Sounds great? But wait, this brings in a lot of programming complexity. So in this tutorial, I will run through the specifications of the chip from the perspective of practical usefulness. The things that you need to know before you start out and the features that really matter! FeaturesESP32.JPG
The block diagram above shows all that is in there! We will look at each of these blocks and see what they mean when using ESP32 in your project/product.

The Dual Core Processor

The predecessor of ESP32, the ESP8266 has a builtin processor. However due to multitasking involved in updating the WiFi stack, most of the applications use a separate micro-controller for data processing, interfacing sensors and digital Input Output. With the ESP32 you may not want to use an additional micro-controller. ESP32 has Xtensa® Dual-Core 32-bit LX6 microprocessors, which runs up to 600 DMIPS. The ESP32 will run on breakout boards and modules from 160Mhz upto 240MHz . That is very good speed for anything that requires a microcontroller with connectivity options.

The two cores are named Protocol CPU (PRO_CPU) and Application CPU (APP_CPU). That basically means the PRO_CPU processor handles the WiFi, Bluetooth and other internal peripherals like SPI, I2C, ADC etc. The APP_CPU is left out for the application code. This differentiation is done in the Espressif Internet Development Framework (ESP-IDF). ESP-IDF is the official software development framework for the chip. Arduino and other implementations for the development will be based on ESP-IDF.

ESP-IDF uses freeRTOS for switching between the processors and data exchange between them. We have done numerous tutorials on freeRTOS and with all the bare-metal programming tutorials for ESP32 we will try and cover this aspect in detail. Although the feature set is great at the price at which the chip is being sold, the complexity is enormous. For the chip to get widely adopted, it will require huge efforts from Espressif as well as the community.

Internal Memory

The processors have closely tied internal memory for the following usage:

  • 448 KBytes ROM for booting and core functions.
  • 520 KBytes on-chip SRAM for data and instruction.
  • 8 KBytes SRAM in RTC, which is called RTC SLOW Memory and can be accessed by the co-processor
  • during the Deep-sleep mode.
  • 8 KBytes SRAM in RTC, which is called RTC FAST Memory and can be used for data storage; it is accessed
  • by the main CPU during RTC Boot from the Deep-sleep mode.
  • 1 Kbit of EFUSE, of which 256 bits are used for the system (MAC address and chip configuration) and the remaining 768 bits are reserved for customer applications, including Flash-Encryption and Chip-ID

External Flash and SRAM

Most of the modules like ESP32 Wroom use external Flash (2M Bytes!) for storing the application code. The chip supports 4 x 16 MBytes of external QSPI flash and SRAM with hardware encryption based on AES.

ESP32 accesses the external QSPI flash and SRAM through high-speed caches.

  • Up to 16 MBytes of external flash are memory-mapped onto the CPU code space, supporting 8, 16 and 32-bit access. Code execution is supported.
  • Up to 8 MBytes of external SRAM are memory-mapped onto the CPU data space, supporting 8, 16 and 32-bit access. Data-read is supported on the flash and SRAM. Data-write is supported on the SRAM.


Since the processor architecture is 32 bit. The internal peripherals, the wifi, Bluetooth, External Memories etc are mapped to 2^32 (4GB) address space. Address map.JPG

Also one interesting thing to note is that the both processors are mapped symmetrically to this address space. It basically means, a register for example can be accessed from same address location from both the CPUs as shown in image below.

ESP32 processor map.JPG

So looking at these features form the project/product development perspective, you can do away with an external micro-controller/Arduino. However it brings complexity of switching between the processors and handling the application data. It will not be a one way street as with normal micro-controller development. We will be exploring this in the numerous tutorials that we plan to do.

The WiFi

Bluetooth Classic and Bluetooth Low Energy(BLE)

Dual Core Processors

General Purpose Input/Output

Internal Peripherals

Security Features