DSPi: повністю функціональна прошивка DSP для аудіо на Raspberry Pi Pico (RP2040) та Pico 2 (RP2350)
https://ift.tt/GOoEWLh
DSPi перетворює Raspberry Pi Pico або інші платформи на базі RP2040 на дуже потужний та недорогий маленький цифровий аудіообробник. Він виступає як USB-аудіокарта з вбудованим DSP-двигуном, дозволяючи користуватися такими інструментами, як кімнатна корекція, активні кросовери, параметричне еквалювання, тимчасове вирівнювання, компенсація гучності та кросфід для навушників.
Сподіваюся, RP2040 та RP2350 здобудуть репутацію як «швейцарський ніж аудіо за цінності нижче чашки кави».
Приєднуйтесь до офіційного Discord-серверу для оновлень про розробку, обговорення або допомоги!
USB-Аудіоінтерфейс:
– Plug-and-play на macOS, Windows, Linux та iOS. Підтримує PCM вхід 16-біт і 24-біт при 44.1, 48 та 96 кГц.
24-біт S/PDIF або I2S Виходи:
– До чотирьох незалежних стерео вихідних слотів (8 каналів на RP2350, 4 канали на RP2040). Кожен слот може перемикатися під час виконання між S/PDIF та I2S, що дає можливість прямого підключення до будь-якого стандартного DAC. I2S слоти мають спільні BCK/LRCLK та за потреби можуть виробляти мастер-годині 128×/256×.
Персепансійний попередній підсилювач на кожному каналі:
– Незалежне керування підсиленням для кожного USB-вхідного каналу (L/R), застосовується як PASS 1 конвеєра DSP перед будь-якою іншою обробкою.
Matrix Mixer:
– Маршрутизація одного або обох USB-каналів на будь-який вихід з незалежним підсиленням та інверсією фази на кожному кроспойнті. 2×9 на RP2350, 2×5 на RP2040.
Параметричне еквалювання:
– До 10 PEQ-обручів на канал з 6 типами фільтрів. 110 обручів на RP2350, 70 на RP2040. RP2350 використовує гібридну SVF/бикуадну архітектуру для підвищеної точності низьких частот.
Volume Leveller:
– RMS-базований, стерео-ланкуваний, м’яко-когнітивний компресор з підвищенням, який підвищує тихий контент до цільового рівня, не підсилюючи гучні ділянки. Опціональна 10-мс lookahead, configurable швидкість та максимум гейн-, безпечний ліміт уповільнення на -6 dBFS.
Loudness Compensation:
– Відтворення гучності залежно від рівня, засноване на стандарті ISO 226:2003. Автоматично підсилює баси та високі частоти при низьких рівнях прослуховування для збереження відчутного tonal balance.
Headphone Crossfeed:
– BS2B-базований кросфід з міжвушною затримкою (ITD), що зменшує неприродній стерео-розділ для прослуховування через навушники. Три класики presets плюс повністю налаштовувані параметри.
Master Volume:
– Обмеження виходу на рівні пристрою (-128 до 0 дБ, з істинним мітинг-сигналом) застосовується наприкінці ланцюга сигналів, незалежно від обсягу USB-хоста та DSP обробки. Два режими збереження: незалежно збережений від preset (за замовчуванням — зберігається після перезавантаження, не залежить від перемикань preset) або збережені/відновлені як частина кожного preset.
Per-Output Gain & Mute:
– Незалежні регулювання підсилення та вимкнення для кожного виходу.
Time Alignment:
– Затримка на виході (до 85 мс) для вирівнювання гучномовця/субвуфера з автоматичним компенсуванням затримки між шляхами S/PDIF/I2S та PDM.
Subwoofer Output:
– Виділений моно-канал PDM з високопотужним Delta-Sigma модулятором 2-го порядку, що дозволяє безпосередньо підключати субвуфер без потреби другого DAC.
Dual-Core DSP:
– Обробка еквалайзера розділена між обох ядер на обох платформах для максимальної пропускної здатності, коли активні кілька виходів.
Configurable Output Pins:
– Всі вихідні GPIO піни (включаючи I2S BCK/MCK) можуть бути переназначені під час виконання, без перепрошивки.
10-Slot Preset System:
– Збереження, завантаження та керування до 10 повних DSP-конфігурацій з назвою користувача. Включає назви кожного каналу, стартовий слот та пакетну передачу параметрів для швидкої синхронізації стану.
Diagnostics:
– Метрикування піку/кліппінгу для кожного каналу, лічильники помилок USB PHY (CRC, біт-стаб, тайм-аути, переповнення, послідовність), статистика заповнення буфера, лічильники голодування DMA S/PDIF для кожного виходу та завантаження CPU по ядрі.
Firmware Update через USB:
– Команда виробника перезавантажує пристрій у UF2-загрузчик, дозволяючи передати нове ПЗ через хост-додаток без натискання фізичної кнопки BOOTSEL.
Таблиця характеристик
Характеристика | RP2040 (Pico) | RP2350 (Pico 2)
Системний такт | 307,2 МГц (overclock) | 307,2 МГц
Напруга ядра | 1,15 В | 1,15 В
Семпл-частоти | 44,1 / 48 / 96 кГц | 44,1 / 48 / 96 кГц
Обробка аудіо | Q28 фіксована точка | Одинарна точність з плаваючою точкою
ЕQ-обручі | 10 на канал (70 всього) | 10 на канал (110 всього)
Загалом каналів | 7 (2 мастер + 4 S/PDIF/I2S + 1 PDM) | 11 (2 мастер + 8 S/PDIF/I2S + 1 PDM)
Вихідні слоти | 2 stereo (кожен S/PDIF або I2S) | 4 stereo (кожен S/PDIF або I2S)
Вихідна бітова глибина | 24-біт | 24-біт
PDM Вихід | 1 (субвуфер) | 1 (субвуфер)
Макс. затримка | 85 мс на вихід | 85 мс на вихід
Математичний рушій | Ручна оптимізація ARM-асемблер | Аппаратний FPU (гібрид SVF/бикуад)
Двоядровий EQ | Так (Ядро 1 обробляє виходи 3-4) | Так (Ядро 1 обробляє виходи 3-8)
Користувальницькі пресети | 10 слотів | 10 слотів
Стан | Продукційний | Продукційний
Обидві платформи повністю протестовані та готові до виробництва. RP2040 досягає 307,2 МГц з невеликим підвищенням напруги; RP2350 досягає тієї ж частоти за тієї ж напруги. Тактова частота зафіксована (вимикаєтся залежність частоти від швидкості), а діелектори PIO є цілими на кожній підтримуваній частоті зразку. RP2350 забезпечує значно більший запас обчислювальних можливостей завдяки своєму апаратному FPU, що дозволяє більшій кількості виходів та гібридну SVF/бикуадну архітектуру для покращеної точності низьких частот.
DSPi обробляє аудіо в лінійному, низьколатентному конвеєрі:
RP2350 (11 каналів, 9 виходів):
– Вхід USB (16/24-бітний PCM стерео, 44.1 / 48 / 96 кГц)
– PASS 1: Пер-канальний попередній підсилювач (індивідуальне підсилення L/R) + USB- Volume
– PASS 2: Master EQ (10 фільтр-обручів на канал, лівий/правий)
– PASS 2.5: Volume Leveller (RMS-верхня компресія, опційно)
– PASS 3: Headphone Crossfeed (BS2B + ITD, опційно) + Master Peak Metering
– Loudness Compensation (гучність залежна від рівня)
– PASS 4: Matrix Mixer (2 входи x 9 виходів, кожна точка з підсиленням та фазовим інвертуванням)
– PASS 5: Per-Output EQ -> Gain/Mute -> Delay -> Output Gain × Master Volume
– Out 1-2 → S/PDIF або I2S слоти 0 (дані: GPIO 6 за замовчуванням)
– Out 3-4 → S/PDIF або I2S слоти 1 (дані: GPIO 7)
– Out 5-6 → S/PDIF або I2S слоти 2 (дані: GPIO 8)
– Out 7-8 → S/PDIF або I2S слоти 3 (дані: GPIO 9)
– Out 9 → PDM Sub (дані: GPIO 10)
– (I2S BCK/LRCLK спільні на GPIO 14/15 за замовчуванням; опціональний MCK на GPIO 13)
RP2040 (7 каналів, 5 виходів):
– USB Input (16/24-біт PCM стерео, 44.1 / 48 / 96 кГц)
– PASS 1: Пер-канальний попередній підсилювач + USB Volume
– PASS 2: Master EQ (10 bands per channel, Left/Right)
– PASS 2.5: Volume Leveller (RMS upward compression, optional)
– PASS 3: Headphone Crossfeed (BS2B + ITD) + Master Peak Metering
– Loudness Compensation
– PASS 4: Matrix Mixer (2 входи x 5 виходів)
– PASS 5: Per-Output EQ -> Gain/Mute -> Delay -> Output Gain × Master Volume
– Out 1-2 → S/PDIF або I2S слот 0
– Out 3-4 → S/PDIF або I2S слот 1
– Out 5 → PDM Sub
– I2S BCK/LRCLK спільні на GPIO 14/15; MCK на GPIO 13 за потреби
– USB
Вхід/Вихід:
– Вхід: 16-біт або 24-біт PCM стерео, 44.1 / 48 / 96 кГц. Глибина біта обирається через USB alt-setting; частота — через запит USB Audio Class rate-set.
– Пер-канальний попередній підсилювач (PASS 1): незалежне підсилення для каналу L/R в дБ; застосовується на початку DSP-пайплайну.
– Master EQ (PASS 2): до 10 діапазонів на канал; підтримує піків, низьку полку, високу полку, низьку та високу пропускання.
– Volume Leveller (PASS 2.5): опційний розроблений підсилювач RMS з м’яким порогом; швидкість, максимум підвищення, шумогейт; опційне lookahead 10 мс; ліміт -6 dBFS.
– Headphone Crossfeed (PASS 3): опційний BS2B з ITD; три пресети плюс налаштовувані частоти та рівень подачі; ITD можна увімкнути/вимкнути.
– Loudness Compensation: відповідна гучності із ISO 226:2003; підсилює баси та високу частоту на низьких рівнях.
– Matrix Mixer (PASS 4): направляє два USB-входи (L/R) до усіх виходів; кожна крапка має незалежне увімкнення, gain (-inf до +12 dB) та інвертований фазовий.
– Output EQ (PASS 5): незалежний 10-бітний EQ для кожного виходу; RP2350 використовує SVF для нижчих за Fs/7.5 Гц та бікуад для вищих частот.
– Пер-Output Gain & Mute: незалежний gain (-inf до +12 dB) та mute для кожного виходу.
– Time Alignment: затримка на виході до 85 мс для вирівнювання розташування динаміків, з автоматичною компенсацією затримки між шляхами S/PDIF/I2S та PDM.
– Master Volume: обмеження виходу пристрою, -128 до 0 дБ з сигнальним мітингом; інтегрований у множник на PASS 5, не навантажує CPU; незалежний від USB-об’єму — їх множення разом; не впливає на поведінку Loudness Compensation.
– Виходи: кожен слот може бути 24-біт S/PDIF або 24-біт I2S (лева вирівняна, MSB-перед). I2S слоти мають спільний набор BCK/LRCLK (LRCLK завжди BCK + 1 через обмеження PIO). Опціональний MCK на 128× або 256× Fs може бути направлений на окремий GPIO. PDM-субвуфер завжди на власному виході.
Нотатки:
– S/PDIF-вихід потребує або Toshiba TX179 оптичний передавач, або резисторний делитель. I2S-вихід — стандартний 24-бітний в 32-бітовий кадр ліво-узгоджений. PDM-вихід — однобітовий логічний сигнал, який потребує резистор та конденсатор для формування низькочастотного фільтра для перетворення на аналог.
– Всі стандартні призначення пінів вищезазначені й працюють «із коробки», але кожен вихідний пін — включно з I2S BCK та MCK — може бути переназначений під час виконання через DSPi Console. Перепрошивка не потрібна. Це корисно під час розробки власних ПЗУ або адаптації до плат із відмінними розташуваннями GPIO.
– Призначення пінів зберігаються у флеш-пам’яті та автоматично відновлюються при завантаженні. Деякі GPIO зарезервовані та недоступні як виходи: GPIO 12 (UART TX) та GPIO 23-25 (керування живленням та світлодіод). LRCLK завжди прив’язаний до BCK + 1 через обмеження PIO side-set.
Додатково: Pin-асайнмент зберігаються у кожному preset та можуть бути включені/виключені під час збереження/завантаження preset (за замовчуванням — включено).
Ілюстрації: карта зображень Toslink та конвертер SPDIF.
Матриця мікшера направляє стерео USB-вхід до всіх виходів. RP2350 має матрицю 2×9 (9 виходів), RP2040 — 2×5 (5 виходів). Кожна перехресна точка має:
– Увімкнення/Вимкнення: активний або неактивний маршрут.
– Gain: -inf до +12 dB на кожну кроспойнт.
– Фазовий інвертор: інвертування фази для керування драйвером.
Кожен вихід має:
– Увімкнення: вимкнені виходи пропускають обробку (EQ, затримку, конвертацію) для зменшення навантаження CPU.
– Gain: підсилення виходу (-inf до +12 dB).
– Mute: м’який мьют на виході.
– Delay: затримка на виході.
Доступність виходів:
– Ядро 1 використовується спільно між PDM-модулятором субвуфера та EQ-обробником, що обробляє вищі виходи S/PDIF. Режими PDM та EQ-обробника взаємовиключні:
RP2350:
– PDM увімкнено (Out 9 увімкнено): Out 1-2 (S/PDIF 1) + Out 9 (PDM)
– PDM вимкнено: Out 1-8 (S/PDIF 1-4)
RP2040:
– PDM увімкнено (Out 5 увімкнено): Out 1-2 (S/PDIF 1) + Out 5 (PDM)
– PDM вимкнено: Out 1-4 (S/PDIF 1-2)
Загальні конфігурації:
RP2350:
– Стерео + суб, 2-х канальний, 3-їватний тощо — з PDM увімкненим
RP2040:
– Стерео, 2-канальний з субвуфером — з PDM увімкненим або вимкненим.
Кожна фільтр-обруч має 6 типів:
– Flat: обхід (без обробки)
– Peaking: parametric bell
– Low Shelf: поличка низьких частот
– High Shelf: поличка високих частот
– Low Pass: нижня пропускання
– High Pass: верхня пропускання
На RP2040 всі фільтри використовують бікуад IIR (Transposed Direct Form II) з фіксованою точкою Q28. На RP2350 прошивка використовує гібрид SVF/бикуада: фільтри нижче Fs/7.5 (прибл. 6.4 кГц при 48 кГц) використовують Cytomic SVF (лінійне трапецієподібне нормалізоване) для кращої точності на низьких частотах; вищі частоти — традиційний TDF2 бикуад. Всі фільтри мають налаштовувані частота, Q та gain. Flat-фільтри автоматично обходяться без навантаження на CPU.
Розклад каналів:
RP2350 (11 каналів):
– Master Left: індекс 0, 10 EQ-обручів
– Master Right: індекс 1, 10 EQ-обручів
– Output 1-8 (S/PDIF): індекси 2-9, по 10 кожен
– Output 9 (PDM Sub): індекс 10, 10 обручів
RP2040 (7 каналів):
– Master Left: індекс 0, 10
– Master Right: індекс 1, 10
– Output 1-4 (S/PDIF): індекси 2-5, по 10
– Output 5 (PDM Sub): індекс 6, 10
Пам’ятайте: відповідно до ISO 226:2003 стандарту, компенсація гучності застосовується для підтримання сприйманого тембрального балансу при різних рівнях прослуховування. На низьких рівнях прослуховування знижена чутливість вух до басів та високих частот; компенсація підсилює ці ділянки. Ключові параметри: Reference SPL (40-100 dB), Intensity (0-200%), Реалізація: попередньо обчислені таблиці коефіцієнтів для всіх 91 кроку гучності, подвійний буфер для бездоганного оновлення.
BS2B Crossfeed:
– Комплементарна конструкція: прямий шлях = вхід – нижній потік (input після фільтрації). ITD — з перш-order онлайн-аллас-пас-фільтром додає ~220 µs затримки в кросфід-шляху.
– presets: Default, Chu Moy, Jan Meier та Custom.
Додатково, у DSPi є 10-слотна система пресетів, що зберігає повний стан DSP в флеш: попередній/завантаження/експорт стану, ім’я для кожного каналу, startup slot, пакетна передача параметрів для швидкої синхронізації стану з хост-додатками.
Runtime Pin Configuration:
– Вихідні GPIO-піни можуть бути переназначені під час виконання. REQ_SET_OUTPUT_PIN (0x7C) — IN-передача, повертає статус: PIN_CONFIG_SUCCESS, PIN_CONFIG_INVALID_PIN, PIN_CONFIG_PIN_IN_USE, PIN_CONFIG_INVALID_OUTPUT, PIN_CONFIG_OUTPUT_ACTIVE.
– REQ_GET_OUTPUT_PIN (0x7D) — IN-передача, повертає поточний піни для виходу.
Додатково: інструменти для розробників, керівництво збірки, протоколи та специфікації підхідних підпрограм зводяться до документації DSPi.
Збірка прошивки:
– Встановіть інструменти: CMake (3.13+), Arm GNU Toolchain (arm-none-eabi-gcc тощо), Python 3, Git.
– Клон: git clone –recursive https://ift.tt/byqv9QW
– Якщо раніше клонували без –recursive: git submodule update –init –recursive
– Можна збирати для RP2040 (Pico) або RP2350 (Pico 2). Відокремлені директорії збору!
Option A: RP2040 (Стандартний Pico)
– mkdir build-rp2040
– cd build-rp2040
– cmake -DPICO_BOARD=pico -DPICO_EXTRAS_PATH=../firmware/pico-extras ../firmware
– make
Output: DSPi/DSPi.uf2
Option B: RP2350 (Pico 2)
– mkdir build-rp2350
– cd build-rp2350
– cmake -DPICO_BOARD=pico2 -DPICO_EXTRAS_PATH=../firmware/pico-extras ../firmware
– make
Output: DSPi/DSPi.uf2
Установка:
– Утримайте кнопку BOOTSEL під час підключення до комп’ютера.
– Перетягніть згенерований .uf2 на диск RPI-RP2 (або RP2350).
– Встановлений DSPi з’явиться як аудіопристрій “Weeb Labs DSPi” через USB.
– Завантажте та запустіть DSPi Console для керування DSPi.
RP2350 (Pico 2) — до 8 вихідних пінів:
– Output Slot 0: GPIO 6, S/PDIF або I2S дані для головного L/R або мульти-виводу 1
– Output Slot 1: GPIO 7, для мульти-каналів 2
– Output Slot 2: GPIO 8, для мульти-каналів 3
– Output Slot 3: GPIO 9, для мульти-каналів 4
– Subwoofer Out: GPIO 10, активний субвуфер або PDM-фільтр
– I2S BCK: GPIO 14
– I2S LRCLK: GPIO 15
– I2S MCK: GPIO 13 (опційно)
– USB: Micro-USB
RP2040 (Pico) — до 6 вихідних пінів:
– Output Slot 0: GPIO 6
– Output Slot 1: GPIO 7
– Subwoofer Out: GPIO 10
– I2S BCK: GPIO 14
– I2S LRCLK: GPIO 15
– I2S MCK: GPIO 13 (опційно)
– USB: Micro-USB
Примітки:
– S/PDIF-вихід потребує TX179 або простий резисторний делитель. I2S — стандартний 24-біт-in-32-біт лівий-узгоджений кадр. PDM-вихід — 1-бітовий сигнал, який потребує резистор та конденсатор для форми низькочастотного фільтра.
– За замовчуванням дати підключення пінами працюють «із коробки», але їх можна переназначити під час виконання через DSPi Console.
– Призначення піни зберігаються у флеші та відновлюються під час завантаження. Деякі піни зарезервовані (GPIO 12, 23-25).
– LRCLK завжди прив’язаний до BCK + 1 через обмеження в PIO.
Посилання на зображення Toslink та SPDIF конвертера вставляються в матеріал.
Використання набору команд USB (зразки):
– Всі коди запитів мають назви як REQ_…
– Таблиці містять назву, напрям, розмір, та опис даних, які надсилаються/отримуються.
– REQ_ENTER_BOOTLOADER (0xF0) дозволяє перейти до UF2-загрузчика без натискання Bootsel.
– Додатково є таблиці стейту, параметрів, керування лімітерів, пресетів та ін.
Додаткова документація:
– Вся детальна специфікація підсистем зберігається тут: Documentation/Features/
– В ліцензії використано GNU General Public License v3.0.
Це переклад технічного опису DSPi з оригіналу англійською українською мовою. Якщо потрібно, можу адаптувати стиль або зробити скорочену версію для презентації або документації.
June 26, 2026 at 08:21AM

Залишити відповідь