Периферия — новый стандарт для ESP32
Возможностей больше, чем у обычного микроконтроллера
Espressif представила новый ESP32-S31, который ломает все представления о том, что может быть на микроконтроллере. Помимо привычных для SBC интерфейсов — гигабитного Ethernet MAC на 1000 Мбит/с (это почти в десять раз больше, чем на ESP32-P4 с его 100 Мбит/с), появились USB 2.0 High-Speed OTG хост-контроллер, два слота SDIO, DVP видеовход и поддержка LCD дисплеев.
На плате разработки Ethernet подключен через внешний PHY и RJ45 разъём по интерфейсу RGMII, который и обеспечивает гигабитные скорости. Вместо стандартного RMII пришлось использовать именно RGMII.
Кроме того, S31 предлагает USB Type-A сокет, способный давать 500 мА в режиме хоста OTG. В комплект входят два I2S контроллера с аппаратной синхронизацией Bluetooth-аудио, 14 ёмкостных сенсорных каналов, CAN FD контроллер и четыре MCPWM модуля.
По спецификации — это совсем не то, что раньше ассоциировалось с микроконтроллером. Это скорее набор интерфейсов от SBC, но всё ещё не всё.
На стороне CPU два 32-битных RISC-V ядра работают на частоте до 320 МГц, каждое с плавающей точкой и 128-битным SIMD, плюс отдельное низкопотребляющее ядро на 40 МГц. L1 кэш инструкций — по 32 КБ на каждом ядре, общий кэш данных — 64 КБ. Оперативная память становится более интересной: поддерживается до 64 МБ PSRAM через 250 МГц 8-битный DDR интерфейс и до 256 МБ флэш-памяти. На ESP32-S3 интерфейс PSRAM делился с флэшом, здесь же они полностью разделены.
В S31 появилась настоящая MMU
Совсем не то же самое, что раньше
Espressif давно использует термин «MMU» применительно к ESP32-S3 и ESP32-P4, однако там это был всего лишь блок, отображающий флэш и PSRAM в адресное пространство. Это не имело никакого отношения к сложности современной MMU, которая может обеспечивать изоляцию процессов и работать со страницами памяти. Когда Espressif объявили о поддержке MMU в S31, казалось, что это просто то же самое.
Но на этот раз всё иначе. В техническом описании S31 сказано, что ядра поддерживают «Sv32 двухуровневую трансляцию адресов через таблицы страниц» и реализуют «машинный, супервизорный и пользовательский режимы привилегий». Sv32 — это настоящая схема подкачки страниц RISC-V, а наличие всех трёх режимов привилегий позволяет запускать обычное ядро Linux в супервизорном режиме с микрокодом ниже в машинном режиме. Именно так работают RISC-V-based Linux машины.
В отличие от предыдущих попыток запустить Linux на старых микроконтроллерах ESP32, S31 имеет гораздо больше встроенной поддержки из коробки. Во-первых, Espressif уже опубликовала Linux BSP ещё в августе, построенную на Buildroot и U-Boot, с ядром, device tree и корневой файловой системой. Разработчик говорит, что она «пока не рекомендуется для боевого применения», но главное — это работает.
Сообщество не стоит на месте. Один из портов запускает Linux 6.18 в супервизорном режиме с полной поддержкой драйверов практически для всего железа. Есть другой вариант на основе Linux 7.1, поддерживающий 800×480 LCD панель. Возможность подключить дисплей, использовать проводной Ethernet и мышь с клавиатурой — это уже звучит как SBC, а не микроконтроллер.
Память — главный недостаток
Намного меньше, чем у конкурентов на рынке SBC
S31 начинает отставать, когда дело доходит до оперативной памяти: 512 КБ встроенного SRAM и два варианта с 16 МБ или 32 МБ встроенного PSRAM. Максимум, что можно получить — 64 МБ, и никакого контроллера DRAM нет. По сравнению с Milk-V Duo S, у которого 512 МБ ОЗУ, S31 очень наглядно напоминает о себе как о микроконтроллере.
Вот почему Linux-сборки выполняют ядро из флэша, чтобы не тратить драгоценный PSRAM впустую. К тому же на плате нет GPU или NPU. В то время как ESP32-P4 имеет кодеки видео и интерфейсы MIPI, на S31 это заменено на дополнительные радио-модули. Остаётся JPEG кодек, 2D пиксельный ускоритель и 2D DMA, но этого явно недостаточно для полноценного Linux десктопа.
Тактовая частота 320 МГц также вызывает вопросы относительно гигабитного Ethernet NIC. На один пакет максимального размера приходится примерно 3900 циклов CPU, на минимальный — около 215. При теоретическом максимуме PSRAM в 500 МБ/с можно приблизиться к гигабитным скоростям на массивных передачах, но я бы скептически относился к попыткам насытить канал большим количеством мелких пакетов.
Радио-модули — дело серьёзное, поскольку сопоставимые SBC в аналогичной ценовой категории часто обходятся без встроенного беспроводного стека. На S31 есть Wi-Fi 6 на 2.4 ГГц, Bluetooth 5.4 с поддержкой LE и Classic BR/EDR, а также радиомодуль 802.15.4 для Thread и Zigbee, наряду с гигабитным MAC. Matter работает через Wi-Fi и Thread, а Bluetooth Classic на ESP32 — это вообще редкость. Но это означает, что старое аудиооборудование будет работать идеально.
Потребление энергии остаётся привлекательным даже со всеми этими радио. Wi-Fi приём потребляет от 110 до 117 мА в зависимости от режима, передача пикует на 265 мА для 802.11b при 15 дBm, оба ядра в режиме modem-sleep на 320 МГц потребляют 91 мА с отключением периферийных часов или 147 мА с ними включенными. Это профиль потребления микроконтроллера при наборе интерфейсов SBC.
Название «S31» — немного запутанное
Но в целом всё остальное хорошо
То, что это называется «S31», звучит странновато: «S31» подразумевает ревизию S3, хотя по сути это совершенно отличается от обычного S3. Espressif определяет серию S как «высокопроизводительные многофункциональные SoC», что не имеет никакого отношения к наборам команд. Но одно большое отличие между линейками было в том, что серия C использует RISC-V ядра, а серия S — ядра Xtensa LX7.
В комментариях на Hackaday Jeroen Domburg, технический маркетолог Espressif, написал, что «мы никогда не предполагали, что архитектура CPU будет частью имени». Он также отметил, что ядро происходит от P4 и ставит S31 почти вдвое быстрее, чем S3.
К сожалению, техническое описание S31 всё ещё устаревает. Версия 0.5 и крупный водяной знак «PRELIMINARY» на первой странице. В целом оно подробное и в основном согласованное, но один пример его предварительного статуса — PSRAM указан с максимальной тактовой частотой 80 МГц, что прямо противоречит опубликованным Espressif 250 МГц. Честно говоря, немного беспорядочная документация — не редкость для Espressif, но это свидетельство того, насколько рано мы находимся в жизненном цикле ESP32-S31. На линукс-стороне это по сути просто игрушка для экспериментов, и такой она будет ещё долго.
S31 — это не SBC, но это первый ESP32, где множество его возможностей — от периферии, полосы пропускания и модели привилегий CPU — всё это приближается к современному SBC. Разрыв между микроконтроллером с хорошим вводом-выводом и SBC сокращался в течение последних пары лет, и хотя на 16 МБ PSRAM запустить полноценный десктоп всё ещё не получится, поднять терминал Linux на нём вполне реально без особых сложностей. А это первый шаг, который может привести в долгосрочной перспективе (и при появлении будущего чипа) к позиционированию ESP32 как жизнеспособной альтернативы Raspberry Pi.