I recently bought two ESP32-S2 development boards,
nanoESP32-S2. ESP32-S2 is a recent addition to ESP32-family, a scaled-down version of ESP32 with new peripherals and features. I have several ESP32 (and tons of ESP8266) for developments, but not many ESP32-S2. While waiting for the latest products — ESP32-C3 — from espressif, I would like to test the libraries and projects I maintain with ESP32-S2. Here is my review.
The official development board from espressif, or maybe a copy of it (the seller claims it is genuine). espressif has, as always, a great documentation about the board.
The board uses 9 columns on a regular breadboard. Only a single column can be used. You need to remove headers and solder long female strip connectors if you would like to use a column on each side (or a hack similar to my Mini breadboard holder).
nanoESP32-S2 is another ESP32-S2 development board I found while looking for ESP32-S2 at AliExpress. Interestingly, it has two USB Type C receptacles. I was curious about it as the major new feature in ESP32-S2 chip is its USB stack. Fortunately, the designer released the schematic and the firmware on GitHub, which is a great plus.
nanoESP32-S2 is a pin-to-pin compatible development board designed by muselab (the official store at AliExpress). The most noticeable difference is its two USB Type C receptacles, one for the onboard USB-to-serial chip to download the firmware and serial communication over USB, the other for ESP32 as USB device. To use USB stack on ESP32-S2, it is a matter of routing two GPIOs, GPIO 20 for
DATA+, GPIO 19 for
DATA-, but the Type C receptacle is a convenient addition for quick experiments.
nanoESP32-S2 has pre-installed firmware (the source code is in a GitHub repository), which blinks the onboard
WS2812, and acts as a USB mass storage device. On my FreeBSD, the device is detected, but the file system is not (it should work with Windows, I guess).
kernel: ugen0.6: <TinyUSB TinyUSB Device> at usbus0 kernel: umodem0 on uhub0 kernel: umodem0: <TinyUSB CDC> on usbus0 kernel: umodem0: data interface 1, has no CM over data, has no break kernel: umass1 on uhub0 kernel: umass1: <TinyUSB MSC> on usbus0 kernel: umass1: SCSI over Bulk-Only; quirks = 0x0000 kernel: umass1:1:1: Attached to scbus1 kernel: da1 at umass-sim1 bus 1 scbus1 target 0 lun 0 kernel: da1: <TinyUSB Mass Storage 1.0> Removable Direct Access SCSI-2 device kernel: da1: Serial Number 123456 kernel: da1: 1.000MB/s transfers kernel: da1: 0MB (16 512 byte sectors) kernel: da1: quirks=0x2<NO_6_BYTE>
Here is the log of serial port.
ESP-ROM:esp32s2-rc4-20191025 Build:Oct 25 2019 rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT) SPIWP:0xee mode:DIO, clock div:2 load:0x3ffe8100,len:0x4 load:0x3ffe8104,len:0x17f0 load:0x40050000,len:0x14b0 load:0x40054000,len:0x210c entry 0x400502d8 I (48) boot: ESP-IDF v4.2-dev-1415-ga2263571b 2nd stage bootloader I (48) boot: compile time 13:25:39 I (48) boot: chip revision: 0 I (51) boot.esp32s2: SPI Speed : 40MHz I (56) boot.esp32s2: SPI Mode : DIO I (61) boot.esp32s2: SPI Flash Size : 2MB I (66) boot: Enabling RNG early entropy source... I (71) boot: Partition Table: I (75) boot: ## Label Usage Type ST Offset Length I (82) boot: 0 nvs WiFi data 01 02 00009000 00006000 I (89) boot: 1 phy_init RF data 01 01 0000f000 00001000 I (97) boot: 2 factory factory app 00 00 00010000 00100000 I (104) boot: End of partition table I (109) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f000020 size=0x05a24 ( 23076) map I (124) esp_image: segment 1: paddr=0x00015a4c vaddr=0x3ffbe3d0 size=0x03f28 ( 16168) load I (131) esp_image: segment 2: paddr=0x0001997c vaddr=0x40024000 size=0x00404 ( 1028) load I (136) esp_image: segment 3: paddr=0x00019d88 vaddr=0x40024404 size=0x06290 ( 25232) load I (153) esp_image: segment 4: paddr=0x00020020 vaddr=0x40080020 size=0x19868 (104552) map I (182) esp_image: segment 5: paddr=0x00039890 vaddr=0x4002a694 size=0x03d30 ( 15664) load I (194) boot: Loaded app from partition at offset 0x10000 I (194) boot: Disabling RNG early entropy source... I (194) cache: Instruction cache : size 8KB, 4Ways, cache line size 32Byte I (202) cpu_start: Pro cpu up. I (206) cpu_start: Application information: I (210) cpu_start: Project name: cdc_msc_freertos I (216) cpu_start: App version: 6109c3e I (221) cpu_start: Compile time: Jul 8 2020 13:25:56 I (227) cpu_start: ELF file SHA256: 0341bd08bb34f761... I (233) cpu_start: ESP-IDF: v4.2-dev-1415-ga2263571b I (240) cpu_start: Single core mode I (244) heap_init: Initializing. RAM available for dynamic allocation: I (251) heap_init: At 3FFC3B70 len 00038490 (225 KiB): DRAM I (257) heap_init: At 3FFFC000 len 00003A10 (14 KiB): DRAM I (263) cpu_start: Pro cpu start user code I (323) spi_flash: detected chip: generic I (323) spi_flash: flash io: dio W (324) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header. I (334) cpu_start: Starting scheduler on PRO CPU.
Although it claims pin-to-pin compatibility, there are some differences. From the schematic in the GitHub repository and my observation of the two, I picked them up for comparison.
| || |
| || || |
|Size of ||3.5 mm x 3.3 mm||3.2 mm x 2.5 mm|
|USB receptacle||USB Micro-B * 1||USB Type C * 2|
|Buttons||2.8 mm x 2.0 mm (oval) * 2||1.5 mm (circle) * 2|
|USB to serial|| || |
|Pin headers||soldered||not soldered|
|Price (as of 2021-02)||USD 14.80||USD 13|
nanoESP32-S2 consists of cheaper components. The silkscreen is very readable on both boards. The clearance from the pin header to the silkscreen is bit too short on
nanoESP32; this might become an issue when you solder long female pin headers. Most of, if not all,
Saola-1 sold in AliExpress has the header pins soldered (I could not find any
Saola-1 copies without pin headers soldered).
ESP32-S2-SAOLA-1 has many thermal and stitching vias, while
nanoESP32-S2 has none, which might work in most cases, but may cause stability issues. The smaller buttons on
nanoESP32-S2 are bit difficult to push, but I am fine with it.
ESP32-S2-SAOLA-1 has more passive components not only for
CP2102, but also for protection, such as clamping diodes and current limiting resistors.
nanoESP32-S2 only has a fuse for protection.
Note that, while my
ESP32-S2-WROVER module, you can choose
ESP32-S2-WROOM if you like. IPEX antenna connector versions are also available.
The major issue in
nanoESP32-S2 to me is: the LDO.
AMS1117 is the de-facto LDO on many ESP32 and ESP8266 boards, but the LDO tends to cause stability issues. On the other hand,
SGM2212 looks like a LDO produced by a Chinese manufacturer. Quick search gave me some incomplete product pages by a Chinese distributor, which show part of the data sheet. They claims
SGM2212 is a drop-in replacement of
AMS1117. Here is the summary:
| || ||Unit|
| ||2.7 - 20||3 - 20||V|
| ||420 (at 800 mA)||1300 (at 800 mA)||mV|
SLVA079 Understanding the Terms and Definitions of LDO Voltage Regulators by TI explains line regulation:
Line regulation is a measure of the circuit’s ability to maintain the specified output voltage with varying input voltage.
and load regulation:
Load regulation is a measure of the circuit’s ability to maintain the specified output voltage under varying load conditions.
Vout less than
AMS1117 under high
Vin and heavy load. The lower quiescent current means the chip runs better with a battery than
AMS1117, which is notorious in its transient response and high power consumption. IMO,
AMS1117 should not be used with ESP32 (and ESP8266) and other high-current applications.
ESP32-S2-SAOLA-1 is your first ESP32-S2 development board. It is well-designed by the chip vendor, and has a (possibly) better LDO, which avoids hard-to-debug issues caused by power stability.
nanoESP32-S2 is better alternative if you are hard-supporter of USB Type C, or those who want to explore USB stack on ESP32-S2 quickly and easily.
The other day, I wrote a post about another ESP32-S2 development board by LilyGo. It is cheap (USD 5) and, thus, a good board for projects that need many ESP32-S2, but
nanoESP32-S2 will be my primary development boards for ESP32-S2.