ДОМО насИнформация об отрасли Практическое руководство по созданию цифровых раци...

Практическое руководство по созданию цифровых раций на базе ESP32 (часть 3): разбор протокола последовательного управления

11

Sep . 2025

Автор: SDGA:

Ключом к эффективному взаимодействию с модулем является правильная реализация протокола последовательного управления. Этот протокол использует двоичный формат кадров, и все запросы конфигурации параметров и состояния выполняются путём отправки и получения определённых кадров данных.

Анализ структуры кадра

Структура кадра последовательного протокола

Пример структуры кадра последовательного протокола

Каждый фрейм данных имеет фиксированную структуру, состоящую из заголовка, команды, данных и хвоста, а также других частей.

Таблица 3: Структура кадра последовательного протокола

Смещение (байты)

Поле

Длина (байты)

Описание

0

Голова

1

Заголовок кадра, фиксированный 0x68.

1

КМД

1

Командное слово определяет функцию фрейма, например, установку частоты, отправку SMS и т. д.

2

Ч/З

1

Флаг чтения/записи. 0x00=Чтение, 0x01=Запись, 0x02=Отчет, инициированный модулем.

3

С/Р

1

Флаг установки/ответа. При отправке хостом это запрос на установку; при ответе модуля это статус ответа.

4-5

CKSUM

2

16-битная контрольная сумма. Охватывает все байты от CMD до конца DATA.

6-7

ЛЕН

2

Длина данных поля DATA (в байтах).

8...

ДАННЫЕ

n (определяется LEN)

Полезная нагрузка данных. Конкретное содержимое определяется CMD.

8+н

ХВОСТ

1

Хвостовая часть кадра, фиксированная на 0x10.

Метод расчета контрольной суммы

Согласно протоколу, контрольная сумма вычисляется следующим образом: каждая пара байтов проверяемых данных преобразуется в 16-битное число и затем последовательно суммируется. Если длина кадра данных нечётная, к последнему байту добавляется 0x00. Переходящая часть (сверх 16 бит) от процесса накопления суммируется с младшими 16 битами результата до тех пор, пока сумма не станет меньше или равна 0xFFFF. Наконец, полученное 16-битное число складывается с 0xFFFF по операции XOR для получения итоговой контрольной суммы.

Справочный код C, приведенный в документе протокола, выглядит следующим образом:

uint16_t PcCheckSum(uint8_t *buf, int16_t len) {
    uint32_t сумма = 0;
    while (len > 1) {
        сумма += 0xFFFF & ((*buf << 8) | *(buf + 1));
        buf += 2;
        len -= 2;
    }
    if (len) {
        сумма += (0xFF & *buf) << 8;
    }
    while (sum >> 16) {
        сумма = (sum & 0xFFFF) + (sum >> 16);
    }
    return ((uint16_t)sum ^ 0xFFFF);
}


Пример расчета контрольной суммы

Примечательной инженерной деталью является то, что в документации протокола упоминается, что если пользователь не хочет вычислять контрольную сумму, поле CKSUM можно отправить как 0x0000, и модуль проигнорирует процесс вычисления контрольной суммы. Это может быть очень полезно на начальном этапе отладки, но для обеспечения надёжности связи корректная контрольная сумма должна быть реализована и использоваться в конечном продукте.

Полный справочник по набору команд

В следующей таблице классифицированы и организованы все команды, поддерживаемые модулем, что обеспечивает более структурированную справку, чем исходная документация.

Таблица 4: Полная справочная информация по коду команды DMR858M (CMD)

CMD (шестнадцатеричный)

Описание функции

Поддержка чтения/записи

Объем

Настойчивый

Примечания

Команды конфигурации (сохраняются при выключении питания)






0x01

Сменить канал

Писать

Текущий

Да

Переключиться на указанный канал.

0x02

Установить громкость приема

Писать

Все

Да

Установите уровень громкости аудиовыхода.

0x0B

Установить усиление микрофона

Писать

Все

Да

Отрегулируйте чувствительность микрофона.

0x0C

Установить режим энергосбережения

Писать

Все

Да

Включить или отключить режим пониженного энергопотребления.

0x0D

Установить частоту TX/RX

Чтение/запись

Текущий

Да

Установите частоты приема и передачи для текущего канала.

0x12

Установить уровень шумоподавления (SQ)

Чтение/запись

Текущий

Да

Установите порог шумоподавления для аналогового режима.

0x13

Установить режим CTCSS/CDCSS

Чтение/запись

Текущий

Да

Установите режим субаудио (например, только прием, только передача, оба).

0x14

Установить значение CTCSS/CDCSS

Чтение/запись

Текущий

Да

Установите определенный суб-аудиокод.

0x17

Установить высокую/низкую мощность

Чтение/запись

Текущий

Да

Переключить мощность передачи для текущего канала.

Оперативные команды (вступают в силу немедленно)






0x03

Сканировать

Писать

Текущий

Нет

Запустить или остановить сканирование каналов.

0x06

Инициировать вызов

Писать

Текущий

Нет

Инициируйте групповой или частный звонок.

0x07

Отправить СМС

Писать

Текущий

Нет

Отправьте текстовое сообщение DMR.

0x09

Аварийная сигнализация

Писать

Текущий

Нет

Активируйте функцию аварийной сигнализации.

0x15

Переключатель монитора

Писать

Текущий

Нет

Принудительно откройте шумоподавитель, чтобы контролировать активность канала.

Команды запроса статуса






0x04

Проверить статус TX/RX

Читать

Текущий

Нет

Запросить, находится ли модуль в состоянии приема, передачи или ожидания.

0x05

Сила сигнала чтения

Читать

Текущий

Нет

Получите значение RSSI текущего принятого сигнала.

0x24

Считать идентификатор

Читать

Все

Нет

Считайте идентификатор DMR модуля.

0x25

Прочитать версию прошивки

Читать

Все

Нет

Прочтите номер версии прошивки модуля.

0x28

Проверить статус шифрования

Читать

Текущий

Нет

Запросить, включено ли шифрование на текущем канале.



Практическое руководство по созданию серий цифровых раций ESP32


Часть 1: Углубленный анализ модуля DMR858M

Часть 2: Интеграция оборудования и эталонный дизайн

Часть 3: Разбор последовательного протокола управления

Часть 4: Разработка прошивки и проектирование драйверов

Часть 5: Изучение расширенных функций и заключение


Связаться с нами

 +86-755-23080616

 sales@nicerf.com

Сайт: https://www.nicerf.com/ .

Адрес: 309-314, 3/F, корпус A, деловое здание Хунду, зона 43, район Баоань, Шэньчжэнь, Китай

Связаться с нами
политика конфиденциальности

политика конфиденциальности

· Политика конфиденциальности

В настоящее время нет доступного контента


           

Электронная почта: sales@nicerf.com

Тел:+86-755-23080616

Адрес: 309-314, 3/F, корпус A, деловое здание Хунду, зона 43, район Баоань, Шэньчжэнь, Китай


×