MMDVM.ini по полочкам: разбор ключевых параметров
Файл MMDVM.ini — это паспорт вашего хотспота. В нём прошито всё: позывной, DMR ID, на какой плате вы работаете, как инвертированы сигналы модема, к какому серверу подключаться и с какими поправками частоты. Когда что-то «не взлетает» — рация не выходит в сеть, BER ползёт вверх, сервер отбивает подключение — ответ почти всегда лежит в этом текстовом файле. Разберём ключевые секции и параметры по полочкам: что они делают, какие значения безопасны, а где одна неверная цифра превращает рабочий хотспот в кирпич.
Зачем вообще лезть в MMDVM.ini
Классический MMDVMHost (демон от G4KLX, который связывает модем MMDVM с цифровыми сетями) читает свою конфигурацию именно из этого ini-файла при старте. В мире Pi-Star и WPSD за вас его обычно генерирует веб-морда, и руками туда лазить не приходится. Но понимать структуру всё равно нужно: когда панель чего-то «не умеет», когда вы диагностируете чужой хотспот по логам, или когда нестандартная плата требует ручных правок инверсий и оффсетов.
В сети DMRhub ситуация ещё проще: агент на хотспоте генерирует MMDVM.ini автоматически из данных вашего аккаунта и поддерживает его в актуальном состоянии по OTA. Адрес сервера, порт, пароль, ваш DMR ID — всё подставляется само. Править файл руками в норме не нужно вообще; этот разбор — чтобы вы понимали, что именно агент туда пишет и почему.
Секция [General]: личность хотспота
Это «кто я и как себя веду». Здесь четыре параметра, которые трогают чаще всего.
- Callsign — ваш позывной. Уходит в сеть и в эфир, должен совпадать с лицензией. Регистр не критичен, но пробелов и лишних символов быть не должно.
- Id — ваш DMR ID (7-значный для абонента). Именно по нему сеть вас идентифицирует и маршрутизирует приватные вызовы. Чужой или выдуманный ID — гарантированный конфликт и блокировка. Получить настоящий ID можно при регистрации в системе.
- Duplex — 0 для симплексного хотспота (одна частота на приём и передачу — это 99% самодельных MMDVM на одной плате) и 1 для дуплексного повторителя. Поставите 1 на симплекс-плату — приём и передача начнут конфликтовать, и связи не будет.
- Timeout — максимальная длительность одной передачи в секундах (TOT). По умолчанию обычно 240. Защищает от «зажатого тангента».
Секция [Modem]: сердце железа
Самая опасная секция. Здесь описана сама плата MMDVM и её радиочастотная подгонка. Ошибка тут не даёт явной ошибки в логе — просто хотспот «вроде работает», а рация ничего не слышит.
Порт и тип платы
- Port (в новых версиях UARTPort) — устройство модема. Для HAT-плат на GPIO это обычно /dev/ttyAMA0 или /dev/serial0; для USB-донглов вроде /dev/ttyACM0. Неверный порт = модем не найден, в логе «opening serial port failed».
- Тип платы и тактовый генератор задаются параметрами вроде TXInvert/RXInvert и блоком частоты TCXO. Многие платы используют генератор 14.7456 MHz, но дешёвые клоны бывают на других кварцах — отсюда уход частоты.
Инверсии TXInvert / RXInvert
TXInvert и RXInvert (значения 0/1) переворачивают полярность сигнала. Разные платы и разные радиочипы требуют разной инверсии. Симптом неверной инверсии классический: хотспот передаёт, рация его слышит, но не принимает ответ от рации (или наоборот). Если у вас в одну сторону всё идёт, а в другую — глухо, первым делом меняйте соответствующий Invert на противоположный.
Оффсеты RXOffset / TXOffset
Это поправки частоты в герцах, компенсирующие неточность кварца модема. Цель — чтобы реальная частота приёма и передачи совпадала с заявленной с точностью до сотен герц. Подбираются они не на глаз, а по результатам калибровки. Подробно процесс описан в материалах про калибровку частоты и MMDVMCal по шагам.
Уровни RXLevel / TXLevel
Это глубина модуляции на приём и передачу (в процентах, 0–100). Слишком низкий TXLevel — слабая девиация, рация еле декодирует. Слишком высокий — перемодуляция и рост ошибок. Эти два параметра напрямую связаны со здоровьем эфира: их крутят, добиваясь минимального BER. Глубже — в разборе TXLevel и RXLevel, а про целевые цифры BER — в материале какая норма BER.
Секция [DMR]: режим, которым вы пользуетесь
- Enable — 1, иначе DMR на хотспоте выключен. Банально, но забытый Enable=0 после правки соседнего режима — частая причина «всё пропало».
- ColorCode — цветовой код (0–15), аналог субтона в аналоге. Должен совпадать в хотспоте и в канале рации. Не совпал — рация молчит, хотя сигнал есть. Это вообще одна из самых частых причин «не работает»; см. отдельный разбор про Color Code.
- Слоты TS1/TS2 — на симплексном хотспоте реально используется один временной слот; в дуплексе работают оба. Большинство сетей по умолчанию маршрутизирует трафик хотспота во второй слот (TS2).
- EmbeddedLCOnly и связанные параметры управляют тем, как передаётся служебная информация (Link Control) внутри потока. Для одиночного хотспота их трогать почти никогда не нужно — оставляйте дефолт.
Секция [DMR Network]: связь с сервером
Здесь хотспот узнаёт, куда подключаться. Параметры:
- Address — адрес или хост вашего мастера/сервера сети.
- Port — UDP-порт сервера (для DMR-мастеров традиционно 62031, но у конкретной сети может отличаться).
- Password — пароль подключения к мастеру. Неверный пароль = сервер молча не пускает, в логе «login retry» по кругу.
- Jitter — размер буфера джиттера в миллисекундах (часто 360). Сглаживает неравномерность доставки пакетов. Поднимать его осмысленно только на плохом, рваном интернете; на нормальном канале лишний джиттер просто добавляет задержку.
В DMRhub все три верхних параметра агент проставляет сам из вашего профиля — это главная причина, по которой ручная правка обычно не нужна и даже вредна: при следующем OTA-обновлении ваши изменения будут перезаписаны корректными.
Дисплей: [OLED] и [Nextion]
Чисто косметические секции, на радиочасть не влияют.
- [OLED]: Type задаёт модель экранчика SSD1306/SH1106 (обычно 3 или 6 в зависимости от стекла), плюс Brightness и Flip (перевернуть картинку, если экран смонтирован вверх ногами).
- [Nextion]: для сенсорных дисплеев Nextion указывается свой Port и скорость. Если экран не там, где модем — порты не должны конфликтовать.
Ошибка в этих секциях максимум гасит экран — связь продолжит работать.
Типовые ошибки
- Duplex не тот. Duplex=1 на одноплатном симплекс-хотспоте — связи нет вообще.
- Несовпадение ColorCode между ini и каналом рации — самый частый «тихий» сбой.
- Скопированные чужие оффсеты. RXOffset/TXOffset уникальны для каждой платы; чужие значения уводят частоту.
- Перепутанные инверсии. Связь идёт только в одну сторону — крутите TXInvert/RXInvert.
- Неверный порт модема. На Pi не освобождён UART (занят консолью/Bluetooth) — модем не открывается.
- Чужой или нулевой Id. Сеть не пустит или заблокирует; нужен настоящий зарегистрированный DMR ID.
Мини-шпаргалка: опасные параметры
- [General] Duplex — неверно → нет связи. Симплекс = 0.
- [General] Id — чужой → бан. Только свой DMR ID.
- [Modem] RXOffset / TXOffset — чужие → уход частоты, рост BER, тишина в приёме.
- [Modem] TXInvert / RXInvert — неверно → связь в одну сторону.
- [Modem] RXLevel / TXLevel — крайности → перемодуляция или глухота, плохой BER.
- [DMR] ColorCode — не совпал с рацией → рация молчит.
- [DMR Network] Password — неверен → бесконечный login retry.
Если из всего файла запомнить только одно правило, пусть будет такое: радиочастотные параметры из [Modem] (оффсеты, уровни, инверсии) подбираются измерением на вашем конкретном экземпляре, а не копированием. Подробности измерения — в гайдах по MMDVMCal и уровням.
Не хотите править ini руками?
В сети DMRhub агент сам генерирует MMDVM.ini под ваш аккаунт и обновляет его по OTA — адрес, порт, пароль и DMR ID подставляются автоматически.
Источники
- G4KLX, репозиторий MMDVMHost и пример конфигурации MMDVM.ini — github.com/g4klx/MMDVMHost
- G4KLX, MMDVMCal — утилита калибровки модема — github.com/g4klx/MMDVMCal
- Документация и форум Pi-Star по настройке модема и параметрам конфигурации — pi-star.eu
- Сообществ. руководства по освобождению UART на Raspberry Pi для HAT-плат MMDVM