M0S SiPEED BL616: обзор модуля Печать
Добавил(а) microsin   

Sipeed M0S это маленький IOT-модуль на чипе BL616 of Bouffalo Lab, с очень низким потреблением энергии. Он поддерживает беспроводные протоколы, такие как Wifi6, BT 5.2 и zigbee, по умолчанию работает на частоте 320 МГц. Несколько сценариев пониженного энергопотребления (сна) поддерживают различные источники пробуждения и для восстановления нормального режима.

Примечание: здесь приведен перевод документации [1].

M0S module top

Основные функциональные возможности:

• Wireless: WiFi6 / BT 5.2 (Bluetooth 5.2 Dual-mode: BT+BLE) / Zigbee(1).
• RISC-V CPU: RV32GCP, высокая тактовая частота по умолчанию 320 МГц.
• Память: 480KB SRAM + 4MB Flash.
• Ultra-low Power Consumption: Wifi6 с функцией низкого потребления энергии.
• DSP Acceleration: ускорение цифровой обработки сигналов, поддерживается расширенный набор инструкций (RISC-V P Extended instruction set), вдвое ускоряет инференс-вывод(2) TinyMaix (reasoning frame).
• High speed USB: поддерживается USB2.0 HS OTG,до 480 Mbps.
• Богатый набор аппаратных периферийных устройств: поддерживаются RGB LCD,DVP Camera,Ethernet RMII и SDIO.
• Малый размер 10x11 мм, малогабаритная керамическая антенна, по краям модуля разведены все порты IO.

Примечания:

(1) BL616 также поддерживает режим профилей Bluetooth Classic (например SPP), однако Bouffalo Lab не делает на этом акцент, сосредотачиваясь на проектах IoT с профилями BLE [5, 6, 7], рассчитанными на переносные устройства с батарейным питанием и низким энергопотреблением.
(2) "инференс" — модель уже обучена, и теперь мы просто подаём ей новые данные и получаем ответ (предсказание, классификацию, распознавание и т.д.). TinyMaix — это лёгкая библиотека для запуска нейросетей на микроконтроллерах.

TinyMaix — это сверхлёгкая библиотека вывода нейросетей для микроконтроллеров, разработанная специально для сред с крайне ограниченными ресурсами. Её цель — позволить любому запустить лёгкую модель глубокого обучения на сколь угодно маломощном железе.

[Философия и назначение]

TinyMaix хорошо сочетается с BL616. Позиционирование TinyMaix очень чёткое: минимализм, портируемость, понятность. Это, по сути, "проект на выходные", основной код которого можно прочитать за 30 минут. Он отлично подходит для начинающих в TinyML, чтобы понять, что вообще происходит внутри фреймворка вывода.

Приоритеты при проектировании: удобство > портируемость > скорость.

[Ключевые особенности]

TinyMaix достигает низкого потребления ресурсов за счёт предельного упрощения:

• Крайняя лёгкость: основной код менее 400 строк (всего 3 ключевых файла), размер секции кода (.text) после компиляции — менее 3 килобайт.
• Минимальные требования к памяти: может работать даже на Arduino ATmega328 с 32 КБ Flash и 2 КБ RAM, распознавая рукописные цифры MNIST.
• Полностью статическая память: поддерживает полностью статическую конфигурацию памяти, без динамического выделения (malloc). Это очень практичная особенность для MCU — исключает фрагментацию памяти и риск ошибок выделения.
• Поддержка форматов моделей: поддерживает INT8-квантованные модели, FP32 и FP16, а также экспериментально FP8. Модели Keras (.h5) или TFLite можно конвертировать в формат .tmdl для TinyMaix.
• Ускорение на разных архитектурах: поддерживает оптимизацию под специализированные наборы инструкций различных чипов, включая ARM SIMD/NEON/MVEI, RISC-V RV32P (именно то расширение, что используется в BL616) и RV64V.

[Поддерживаемые операторы и модели]

TinyMaix не стремится объять необъятное — он покрывает только самые основные операторы, чтобы адаптироваться к наиболее эффективным сетевым структурам на MCU:

• Основные операторы: Conv2d, dwConv2d (depthwise separable convolution), FC (полносвязный), Relu/Relu6/Softmax, GAP (global average pooling), Reshape, ADD (для ResNet/MobileNetV2, экспериментально).
• Типичные поддерживаемые сети: MobileNet V1 и RepVGG. В официальных примерах есть демо MobileNet V1 0.25 (вход 128x128x3), для которого уже требуется минимум 128 КБ SRAM и 512 КБ Flash — это своего рода верхняя граница возможностей TinyMaix.

[Структура кода и API]

Код TinyMaix очень нагляден и состоит из нескольких частей:

src/: основные исходники, включая tm_layers.c (реализация операторов), tm_model.c (загрузка модели) и т.д.
include/: заголовочные файлы, определяющие интерфейс для портирования.
examples/: официальные примеры, такие как MNIST, MobileNet.
tools/: вспомогательные инструменты, например преобразование изображения в C-массив.

API тоже следует принципу «проще некуда» — основных функций всего две:

tm_load: загрузка модели. Нужно передать бинарные данные модели, буфер для промежуточного вывода (можно NULL, тогда он выделится автоматически) и опциональную функцию обратного вызова для слоёв.

tm_run: запуск модели. Подаёте предварительно обработанные данные — получаете выход.

Итог: TinyMaix — это библиотека вывода TinyML, созданная для обучения и простых применений. Она не гонится за максимальной производительностью, но предлагает понятный код, лёгкость портирования и крайне низкое потребление ресурсов. Для RISC-V MCU вроде BL616, который вы изучаете, поддержка оптимизации под RV32P придётся как нельзя кстати — теоретически это даст неплохое ускорение за счёт DSP-расширения.

[MNIST]

MNIST (от англ. Modified National Institute of Standards and Technology database) — это классический набор данных для обучения и тестирования систем машинного обучения, особенно в области распознавания рукописных цифр.

Что содержит:

- 70 000 изображений рукописных цифр от 0 до 9.
  - 60 000 — обучающая выборка (training set)
  - 10 000 — тестовая выборка (test set)
- Каждое изображение:
  - размер 28×28 пикселей
  - оттенки серого (grayscale, 0–255)
  - в центре — одна цифра

Зачем это нужно. MNIST — это «Hello, World!» в мире машинного обучения. На нём:

- проверяют новые алгоритмы и архитектуры нейросетей;
- отлаживают фреймворки (TensorFlow, PyTorch и т.д.);
- тестируют inference-библиотеки вроде TinyMaix на микроконтроллерах.

Почему именно MNIST? Потому что:

- данные маленькие и простые;
- задача понятна (классификация на 10 классов);
- хорошая модель быстро достигает точности 99%+, а плохая — сразу видна.

Пример: на вход подаётся картинка 28×28 с рукописной «7». Модель должна выдать ответ: «это цифра 7» (или вероятности по всем 10 классам).

Оригинальный NIST-набор создан в США в 1980-х. В 1998 году Yann LeCun и соавторы модифицировали его (отсюда M в названии), переформатировав для удобства машинного обучения. До сих пор MNIST остаётся стандартным бенчмарком, хотя современные модели решают его почти идеально, и для серьёзных исследований его уже считают "слишком простым".

В контексте TinyMaix: в официальных примерах TinyMaix есть демо на MNIST — оно показывает, что даже крошечная модель может распознавать цифры на MCU с 2 КБ RAM. Это самый простой способ проверить, что библиотека корректно портирована на вашу платформу (например, BL616).

[MobileNet]

MobileNet — это семейство лёгких свёрточных нейронных сетей (CNN), созданных специально для работы на мобильных и встраиваемых устройствах с ограниченными ресурсами.

Зачем это нужно. Обычные нейросети вроде VGG или ResNet требуют огромного количества вычислений и памяти, что делает их непригодными для смартфонов или микроконтроллеров. MobileNet решает эту проблему, используя эффективную архитектуру, которая даёт приемлемую точность при драматично меньших затратах.

Ключевая идея: Depthwise Separable Convolution. Главное нововведение MobileNet — замена стандартной свёртки на depthwise separable convolution (глубинно-разделимая свёртка). Она разбивает одну операцию на две:

Depthwise convolution: фильтры применяются к каждому входному каналу отдельно (не смешивая их).
Pointwise convolution (1×1): объединяет результаты по каналам.

Это позволяет резко сократить количество параметров и вычислений (multiply-adds) при небольшой потере точности. По сути, сеть "фильтрует" и "комбинирует" признаки по отдельности, а не одновременно, как в стандартной свёртке.

Версии MobileNet:

- MobileNet V1 (2017): первая версия, предложенная Howard et al. Использует depthwise separable convolutions и имеет 4.2M параметров.
- MobileNet V2 (2018): улучшение за счёт inverted residual blocks и linear bottlenecks. Точность выше (Top-1 ~72.0%), параметров меньше (3.4M).
- MobileNet V3 (2019): комбинирует архитектурный поиск (NAS) и оптимизации для мобильных устройств, ещё эффективнее.

Гибкость настройки. MobileNet V1 предоставляет два гиперпараметра для управления компромиссом между точностью и скоростью:

- Width Multiplier (α): уменьшает/увеличивает количество фильтров в каждом слое. Например, α=0.25 даёт очень маленькую модель (~0.5M параметров), но с точностью ~50.6% на ImageNet.
- Resolution Multiplier (ρ): изменяет размер входного изображения (от 128×128 до 224×224).

В контексте TinyMaix: в официальных примерах TinyMaix есть демо на MobileNet V1 0.25 (вход 128×128×3). Это как раз тот случай, когда используются оба множителя для получения модели, которая влезает в память микроконтроллера (например, BL616). Это уже не игрушечная задача вроде MNIST, а полноценная классификация изображений на 1000 классов — и всё это на MCU.

Цоколевка выводов:

M0S module pin map

Сравнение с модулем ESP32-S3 N4:

Модель Модуль M0S Модуль ESP32-S3 N4
Чип BL616 (RV32GCP) ESP32-S3 (LX7)
Частота тактов 320 МГц 240 МГц
SRAM 480 KB 520 KB
Flash 4 MByte 4 MByte
Wifi WiFi6 WiFi4
Bluetooth BT5.2 BT5
USB USB2.0 HS OTG 480 Mbps USB2.0 FS OTG 12 Mbps
IIC, UART, SPI Есть Есть
DVP Camera Есть Есть
Размер 10 мм x 11 мм 18 мм x 25.5 мм
Платформа модели TinyMaix + MaixHub -

M0S Dock: на плате расположены 3 светодиода (power LED и два пользовательских), порт USB TypeC и коннектор с шагом 2.54 мм, на который выведены порты ввода/вывода, земля и питание.

M0S dock top M0S dock bottom

Программное обеспечение:

OS FreeRTOS
Средства разработки C SDK [4], MaixHAL C, PikaPython
Программирование Flash USB uart, USB
AI Framework TinyMaix
AI model MaixHub
Примеры См. [3]

[Ссылки]

1. M0S module site:wiki.sipeed.com.
2. Официальная документация по чипам Bouffalo lab.
3. Примеры кода M0S_BL616_example.
4. Bouffalo SDK.
5. Службы BLE, руководство для начинающих.
6. Оповещения BLE, руководство для начинающих.
7. Bluetooth Low Energy GATT.
8. 261015M0S-SiPEED-BL616-module-doc.zip - документация, схема, даташиты.
9. Bluetooth SPP: обзор вариантов реализации.
10. Обзор модулей Bluetooth.