Dev & EngNOTÍCIA

ESP32-S31: novo microcontrolador da Espressif roda Linux com MMU real

O chip traz Ethernet gigabit, host USB, paginação Sv32 e já roda portas de Linux 6.18 e 7.1 feitas pela comunidade, encurtando a distância entre microcontrolador e SBC como o Raspberry Pi.

ESP32-S31: novo microcontrolador da Espressif roda Linux com MMU real
Imagem gerada por IA

A Espressif lançou o ESP32-S31, e a lista de periféricos do chip é estranha demais para um microcontrolador: MAC Ethernet gigabit, controlador host USB 2.0 High-Speed, duas interfaces SD e entrada de câmera. Segundo reportagem do XDA Developers publicada em 23 de setembro de 2026, o motivo é simples: pela primeira vez um ESP32 tem uma MMU de verdade, com suporte a modos de privilégio Machine, Supervisor e User, exatamente o que um kernel LinuxLinux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps precisa para rodar em modo supervisor com firmware embaixo em modo machine.

De MCU cheia de I/O a quase-SBC

O S31 traz duas interfaces SD (SDIO host), um conector USB Type-A completo capaz de fornecer 500 mA em modo host OTG, entrada de câmera DVP de 8 a 16 bits e um controlador de LCD paralelo com suporte a até 24 bits RGB (painéis I8080 e MOTO6800). Some a isso dois controladores I2S com sincronismo de áudio Bluetooth via hardware, quatorze canais de toque capacitivo, um controlador CAN FD e quatro unidades MCPWM. Na parte de CPU, são dois núcleos RISC-V de 32 bits a até 320 MHz, cada um com unidade de ponto flutuante própria, sendo que um deles ganha um data path SIMD de 128 bits; há ainda um núcleo de baixa potência separado, a 40 MHz. Cada núcleo tem 32 KB de cache L1 de instrução e os dois compartilham 64 KB de cache de dados.

Na memória, o S31 suporta até 64 MB de PSRAM por uma interface DDR de 8 bits a 250 MHz e até 256 MB de flash, com as duas interfaces separadas: no ESP32-S3 anterior, PSRAM e flash compartilhavam a mesma via, o que tornava tudo mais lento.

Sv32: a MMU que finalmente é uma MMU

A Espressif já usava o termo "MMU" em chips como o S3 e o P4, mas ali o bloco só mapeava flash e PSRAM externos para o espaço de endereçamento, sem nada parecido com isolamento de processo ou tabelas de página. No datasheet do S31, a empresa descreve algo diferente: tradução de endereço por tabela de páginas de dois níveis no esquema Sv32 do RISC-V, com os três modos de privilégio completos. É essa combinação que permite rodar um kernel de verdade em modo supervisor, com firmware abaixo em modo machine, do jeito que máquinas Linux baseadas em RISC-V funcionam.

A comunidade já colocou Linux para rodar

A própria Espressif publicou em agosto de 2026 um BSP (board support package) para Linux baseado em Buildroot e U-Boot, com kernel, device tree e sistema de arquivos raiz prontos, embora a empresa avise que ele "ainda não é recomendado para uso em produção". A comunidade não esperou: já existe uma porta rodando Linux 6.18 em modo supervisor com drivers funcionais para praticamente todo o hardware do chip, e outra, baseada em Linux 7.1, que sustenta um painel LCD de 800x480 conectado ao chip, exibindo um console de verdade. Ligar um monitor, usar Ethernet cabeada e conectar mouse e teclado num chip vendido como microcontrolador é um salto e tanto.

Onde o S31 ainda perde para um SBC

A memória é o ponto fraco. O chip carrega 512 KB de SRAM on-chip, com variantes de 16 MB ou 32 MB de PSRAM em pacote (o máximo teórico é 64 MB), e não existe controlador de DRAM. É por isso que as builds de Linux executam o kernel direto da flash, para economizar a PSRAM escassa. Também não há GPU nem NPU embarcados: o chip traz apenas um codec JPEG, um acelerador 2D de pixels e DMA 2D, o suficiente para tarefas simples, mas nada perto de sustentar um desktop Linux completo. Para efeito de comparação, o artigo do XDA cita o Milk-V Duo S, que tem 512 MB de RAM, oito vezes mais que o topo de linha do S31.

A Ethernet gigabit também merece ceticismo em cenários reais. A 320 MHz, o chip tem cerca de 3.900 ciclos de CPU por frame Ethernet de tamanho máximo e apenas 215 ciclos por frame de tamanho mínimo. Com um limite teórico de 500 MB/s na PSRAM, é possível chegar perto da taxa gigabit em transferências grandes e contínuas, mas a saturação do link com muitos pacotes pequenos é outra história.

Em compensação, o pacote de rádios é generoso para o preço: Wi-Fi 6 em 2,4 GHz, Bluetooth 5.4 com LE e Classic BR/EDR, e um rádio 802.15.4 para Thread e Zigbee, junto com o MAC gigabit. Isso cobre Matter (que roda sobre Wi-Fi e Thread) e ainda permite conectar periféricos de áudio Bluetooth Classic mais antigos. O consumo segue perfil de microcontrolador: recepção Wi-Fi entre 110 mA e 117 mA, transmissão com pico de 265 mA em 802.11b a 15 dBm, e os dois núcleos em modem-sleep a 320 MHz consumindo 91 mA com os clocks de periféricos desligados ou 147 mA com eles ligados.

O nome é confuso, e a documentação também

Chamar o chip de "S31" sugere uma revisão do S3, mas os dois têm pouco em comum: o S3 usa núcleos Xtensa LX7, e o S31 usa RISC-V, como o P4. Jeroen Domburg, gerente de marketing técnico da Espressif, comentou em uma discussão no Hackaday (citada pelo XDA) que "nunca pretendemos que a arquitetura de CPU fizesse parte do nome", e afirmou que o núcleo deriva do P4, com quase o dobro da velocidade do S3. O datasheet, aliás, ainda está na versão 0.5 com marca de "PRELIMINARY" na capa, e traz uma inconsistência clara: lista a PSRAM com clock máximo de 80 MHz, quando a própria Espressif já divulgou 250 MHz em outros materiais.

O que isso destrava pra quem constrói IoT e edge

Para quem desenvolve hoje em ESP-IDF ou FreeRTOS, a promessa prática do S31 não é rodar um desktop, é reduzir a distância entre prototipar em Linux (com SSH, toolchain padrão, drivers de kernel) e depois portar para um ambiente de MCU mais restrito, ou vice-versa. Times que hoje usam um Raspberry Pi Zero como ponte entre sensores e a nuvem, só porque precisam de um shell Linux completo, ganham uma opção com custo, consumo e footprint de microcontrolador, com rádios embutidos (Wi-Fi, BLE, Thread/Zigbee) que a maioria dos SBCs concorrentes nessa faixa de preço não traz de fábrica. Isso importa para projetos de automação industrial, gateways Matter/Zigbee e dispositivos de borda que hoje pagam o preço de energia e espaço físico de um SBC só para ter uma pilha de rede completa.

A ressalva que o próprio material técnico da Espressif faz é importante: o BSP Linux é experimental, sem recomendação de produção, e a memória disponível (no máximo 64 MB de PSRAM, sem DRAM dedicada) trava qualquer ambição de rodar runtimes pesados como Node.jsNode.js45 conteúdosComo criar aplicações console em Node.jsDev (Back & Front) · fev 2025Entendendo o ciclo de publicação do Node.jsDev (Back & Front) · fev 2020Nodejs por baixo dos panosDev (Back & Front) · jul 2019Ver tudo em Dev (Back & Front) ou uma stack Python completa dentro do Linux embarcado. Na prática, o caminho mais realista por enquanto é usar o Linux do S31 para depuração, prototipagem rápida de drivers e testes de hardware, mantendo a aplicação final em C sobre ESP-IDF ou bare metal RISC-V, do jeito que já se faz hoje com o resto da família ESP32. O salto de arquitetura, porém, é real, e abre a porta para que a próxima geração desses chips feche de vez essa distância.

Fonte: Hacker News

Este artigo foi escrito por Redação iMasters. Conteúdo produzido por agente de IA da redação iMasters, sob revisão editorial humana. Saiba como produzimos no expediente.

O editor-chefe da redação de agentes. Sem persona pública própria: assina como Redação iMasters. Monta a pauta do dia, distribui o mix entre verticais, revisa tudo que os especialistas escrevem, escreve notícias e compilados de opinião, e sugere taxonomia para revisão humana.

Mais de Redação iMasters
Ver perfil
Leia também
Otimização e undefined behavior

Type punning em C e C++ falha silenciosamente no -O2

Um pointer cast que sempre funcionou na prática pode ser undefined behavior e sumir do binário assim que o compilador liga otimizações agressivas. Entenda por que isso é ainda mais traiçoeiro em C++.

Redação iMasters··1 min