If we are going to delve into the world of the ESP32, one of the first things we need to talk about is what a SoC, a SoM, and a development board are, and the differences between them.
This is because you often see a lot of people getting confused, saying they have a Wemos ESP32-S2, an ESP32-D0WD-V3, and that this other one has a “I don’t know what”.
Furthermore, considering that the designations of the Espressif families don’t help much either (ESP32-C2, ESP32-S2, ESP32-S3). Moreover, the marketing from sellers (especially from Chinese vendors) doesn’t help clarify things.
So let’s break it down and dedicate a post first to see what a CPU, a SoC, SoM, and a development board are.
What is a SoC and what is a SoM
Let’s start from the beginning. More or less we all know what a CPU (Central Processing Unit) is. It’s the part that performs calculations and, so to speak, the brain of a machine.
Now a System on Chip (SoC) is a single integrated circuit (a chip) that combines several essential components of an electronic system into a single integrated unit. This usually includes one or more CPUs, and adds other things like (optionally) memory, storage, GPU, I/O controllers, among others.
On the other hand, a SoM (System on Module) is an electronic board (a PCB) that also combines essential components. For example, it usually includes a SoC, and other optional things (storage, antennas, I/O devices, among others).
Finally, we have development boards, which is the final device that you buy. They generally add things like pins, power supply, antennas…
Here we can have boards that mount a SoC directly, or boards that mount a SoM.
In general, the order of aggregation is:
- CPU
- SoC
- SoM
- Development board
Let’s see it in the case of the ESP32
At this point, I imagine you are wondering what on earth this guy is telling me about SoC and SoM. Well, let’s see it with a concrete example, looking at how it all works when we talk about an ESP32 and its variants.
The ESP32, as we usually refer to it, is a SoC. I leave you a link with the list of available ESP32 models Chipsets | Espressif Systems. There aren’t too many, there are 5 models: ESP32, ESP32-S2, ESP32-S3, ESP32-C, ESP32-H, and that’s it.
Each of these SoCs has a different set of features. They have a different CPU (Risc-V, Dual Core, Single Core…) and support a different amount of memory. To complicate matters a bit more, within each SoC there are variants. But don’t get too scared, within each of the 5 SoCs the variants do not change the basic characteristics. Just size and little else.
Now, these SoCs are mounted on modules offered by the manufacturer. How many are there? Phew, quite a lot! Just the “normal” ESP32 (not the S2, S3) has more than 20 available modules. Here we have a list of the available SoM modules ESP32 Wi-Fi & Bluetooth Modules I Espressif.
Both SoC and SoM are industrial products. They are designed for you to buy them industrially (in thousands) and integrate them into your final product (for example, in a smart switch).
Finally, we have development boards that mount a SoM. They are used for prototyping, or for us to play at home 😉. There you have a list of the boards at Development Boards | Espressif Systems.
Logically, there are even more than SoC. Each one with different modules, we can choose a form factor, add a screen, a USB connector, or whatever.
Additionally, unlike SoCs and even SoMs, which have to be made by the manufacturer, in the case of development boards, any manufacturer can make their own. That is, you can find development board models on Amazon, named however the manufacturer wants.
Let’s see an example
We will make it easier with an example. Imagine you have a board, from whatever manufacturer, that mounts an ESP32-WROOM-32E module (a SoM). I will look at the modules to see what information I can extract from this module:
- SoM: ESP32-WROOM-32E tells me that it is compatible with 4/8/16MB Flash memory, and that it does not have PSRAM.
With the SoM, I can obtain some of the characteristics, including which SoC it mounts. In this case, it would be an ESP32-D0WD-V3, which is a variant of the ESP32 family. With the name of the SoC, I already have the rest of the characteristics, including the CPU and memory.
- SoC: ESP32-D0WD-V3 tells me that it has a dual-core Xtensa CPU, with 520KB SRAM, 448KB ROM, 16KB RTC SRAM.
- CPU: Xtensa single-/dual-core 32-bit LX6 microprocessor @240Mhz.
With all this, I would already have all the information and characteristics of my device. It is a SoM ESP32-WROOM-32E, which mounts a SoC ESP32-D0WD-V3, which is a variant of the ESP32 (original, from 2016).
On the other hand, with the information from the SoM, I can also find the official board that mounts this SoM. In this case, it would be an ESP32-DevKitC.
- Board: ESP32-DevKitC on that specific development board, they have put 4MB Flash.
But of course, the board you have may have other technical characteristics. For example, it could have a different pinout, another amount of Flash memory, or PSRAM.