ПОЛЕЗНАЯ НАГРУЗКА

@payloaduav · tech · Russian · active

Subscribers 13.8K Subscribers, last 30 days: 13.8K → 13.8K +0 24h
Reach per post (ERR) 26.1%3.6K avg views
Posting 5.3/day last 5 hours ago
Reactions per 1K views 2.1 ❤ 😁 🔥
edited

Роутер OpenWrt One переделали в SDR-приёмник с полосой 40 МГц На GitHub вышел проект openwrt-one-sdr. Из роутера OpenWrt One на MediaTek MT7981B с радиотрактом MT7976 сделали широкополосный SDR-приёмник: сырые I/Q по 14 бит, 40 млн отсчётов в секунду из диапазонов 2,4 и 5 ГГц. Двухъядерный Cortex-A53 гонит поток по 2,5 GbE на компьютер в формате VITA 49, там спектр и водопад в браузере. По данным репозитория: ⚙️ приём 2,4 и 5 ГГц, полоса канала 40 МГц, частота дискретизации 40 млн отсчётов/с, 14 бит на пару I/Q ⚙️ перестройка идёт по центрам блоков HE40, а не по основному каналу: 2422-2462 МГц с шагом 5 МГц на 2,4 ГГц и 5190 или 5230 МГц на 5 ГГц ⚙️ 5 ГГц ограничен U-NII-1, 5170-5260 МГц ⚙️ перестройка или смена диапазона занимает около 25 с, это перезагрузка радиомодуля Wi-Fi ⚙️ только приём: во время захвата MAC заблокирован на передачу, а при загрузке и после остановки штатный стек Wi-Fi передавать может Подход здесь другой, чем в w1700k-sdr. Там прошивку MediaTek выкинули и написали свою целиком, здесь её оставили штатной и управляют ей из Linux. Всё, что нужно, - производитель на ассемблере nds32 размером 1660 байт, впаянный в диспетчер команд прошивки Wi-Fi-модуля. Он идёт по указателю записи блока захвата ICAP и выкладывает отсчёты в кольцо DMA, дальше их забирает драйвер mt76. Кросс-компилятор не обязателен: в репозитории лежит собранный кусок, apply-producer.py вносит те же правки в стоковую прошивку с самой платы и проверяет контрольную сумму. Патч на закрытую прошивку MediaTek не тиражируют, каждый собирает под свою плату. Регистровую часть удалось унаследовать. MT7981 стоит на той же A-дие MT7976, что и MT7996, и блок захвата у них по одним и тем же адресам шины с теми же значениями сброса. Расшифровку радиотракта брали с MT7996. Формат 14 бит: I в битах 29:16, Q в 13:0, без знакового расширения. На 2,4 ГГц берётся каждый второй упакованный отсчёт, на 5 ГГц все, из-за чего шаг отсчёта разный, 8 байт против 4. С пропускной способностью вышло впритык. 40 млн отсчётов в секунду по 16 бит на I и на Q дают 1,28 ГБ/с, это чуть больше половины 2,5 GbE. Пакеты собирает ядро: Ethernet, IPv4 и UDP лепятся прямо в ядре и уходят мимо пользовательской программы, промежуточной пересылки нет. В каждом UDP-пакете 1448 байт, это 360 пар I/Q. Контекстный пакет VITA 49 с несущей, частотой дискретизации и форматом данных идёт раз на 128 пакетов с отсчётами, приёмник сначала ждёт его. Восемьдесят мегаотсчётов в секунду проверяли, но результат автор трактует осторожно. В 16 бит такое не влезает, нужно 2,56 ГБ/с. В 8 бит один ограниченный прогон отдал 819,2 млн слов отсчётов за 10,24 с, но внутри были повторы. То есть это не 80 МГц полосы и не 80 млн независимых отсчётов в секунду. Упаковка 14 бит в 28 бит на пару уменьшила бы поток ещё на 12 процентов, но пакет под это на плате так и не сделан. С драйвером пришлось повозиться. Периодический опрос статистики по MCU отваливается по таймауту, и штатная проверка состояния чипа после этого перезагружает прошивку и рвёт поток примерно на 4-й секунде. Обновление состояния точек доступа блокирует путь приёма событий от модуля, и без обхода буфер захвата переполняется раз в 150-200 с. В обоих случаях обход сделали в mt76: опрос отключается, а таймаут возвращает ошибку вместо перезагрузки. 🟢Подписаться на канал 🟢Подписаться в MAX

Views over time

02K4K19 Oct 23:4610 Nov 08:534.1K19 Oct 23:46: 0 views10 Nov 08:53: 4,070 views
Snapshots we took after posting.
WhenViews
19 Oct 2026, 23:460
10 Nov 2026, 08:534.1K

Who shared this post

Posts in other channels we index that link to this one. (Forwards with a hidden source can't be traced.)

Nobody yet.