39 байт голоса заняли 67% LoRa-эфира, а GPIO сбил RF-тракт MeshTRX
На столе лежит Heltec WiFi LoRa 32 V4: ESP32-S3 должен отправить 80 мс речи, а SX1262 удерживает эфир 53.4 мс. В этой сцене уже видна настоящая цена «рации без интернета»: канал почти всё время занят одним говорящим, а качество линка определяется ещё и тем, поднял ли микроконтроллер нужную линию управления внешним RF-трактом.
80 мс речи помещаются в один пакет
MeshTRX использует Codec2 со скоростью 3200 bit/s. За каждые 20 мс кодек выдаёт 8 байт; четыре таких фрейма дают 80 мс аудио и 32 байта полезной нагрузки. К ним добавлены 7 байт заголовка, поэтому эфир получает компактную packed-структуру LoRaAudioPacket длиной 39 байт. Это красивая упаковка голоса: один короткий радиопакет несёт четыре звуковых кадра, без IP-стека и без постоянного соединения.
Однако размер пакета здесь измеряется временем. Прошивка задаёт SF7, полосу 250 kHz, coding rate 4/7, преамбулу в 8 символов, явный заголовок и CRC. При этих параметрах символ длится 0.512 мс, преамбула с хвостом занимает 12.25 символа, payload — 92 символа. Итог составляет 53.376 мс. Пакет должен уходить раз в 80 мс, поэтому непрерывная речь съедает 66.72% airtime ещё до коллизий, ретрансляций, служебного трафика и переходов RX/TX.
Шифрование упирается в длину символов
Этот расчёт быстро превращает криптографию в физическое ограничение. Ещё 32 байта, например для публичного ключа, увеличивают пакет до 71 байта и time-on-air до 85.632 мс. Он уже длиннее самого интервала аудио. Кодек продолжает выдавать очередные 20-мс фреймы, пока радио ещё не освободило канал от предыдущей порции речи. Для голосовой mesh-сети это означает необходимость менять протокол обмена ключами, PHY-параметры, частоту пакетов или саму модель разговора.
У антенны есть собственная логика GPIO
У платы есть и второй, менее очевидный таймер — GPIO, включающий нужное состояние внешнего RF front-end. В актуальном коде для Heltec V4 поднимаются питание FEM на GPIO7 и enable на GPIO2, SX1262 отдаёт управление RF switch через DIO2, а отдельная линия выбирается по ревизии платы: GPIO46 для V4.2 с GC1109 и GPIO5 для V4.3. Официальная схема V4.2 действительно показывает, что между трансивером и антенной живёт отдельная логика с несколькими управляющими сетями, а не пассивная дорожка от SX1262 к разъёму.
Автор проекта сообщает, что после исправления неверного GPIO RSSI на близко расположенной второй станции изменился с −78 до −20 dBm: разница показаний составила 58 dB. Это сильный диагностический сигнал, но не измерение выходной мощности, усиления FEM или EIRP. RSSI зависит от геометрии стенда, антенн, AGC и возможного насыщения приёмника. Более того, комментарий в текущем исходнике фиксирует другой тест с разницей 16 dB; для двух наблюдений не сохранены одинаковые версии прошивки и условия измерения.
Один голосовой пакет — одна RF-схема
Именно поэтому MeshTRX интересен шире самодельной LoRa-рации. Здесь 39 байт уже требуют считать символы в эфире, а одна цифровая линия способна радикально изменить то, что видит приёмник. В радиоканале голос, формат пакета, временной бюджет и состояние FEM образуют одну схему. Отдельно оптимизированный Codec2 её не спасёт, как и отдельно проверенный вызов GPIO.