HOGARSOBRE NOSOTROSINFORMACIóN DE LA INDUSTRIA GUíA PRáCTICA PARA WALKIE-TALKIES DIGITALES ESP32 ...

Guía práctica para walkie-talkies digitales ESP32 personalizados (Parte 3): Desconstrucción del protocolo de control en serie

11

Sep . 2025

Por sdga:

La clave para una comunicación eficaz con el módulo reside en la correcta implementación de su protocolo de control serial. Este protocolo utiliza un formato de trama binaria, y todas las configuraciones de parámetros y consultas de estado se realizan mediante el envío y la recepción de tramas de datos específicas.

Análisis de la estructura del marco

Estructura del marco del protocolo serial

Ejemplo de estructura de trama de protocolo en serie

Cada marco de datos sigue una estructura fija, que consta de un encabezado, un comando, datos y una cola, entre otras partes.

Tabla 3: Estructura del marco del protocolo serial

Desplazamiento (bytes)

Campo

Longitud (bytes)

Descripción

0

Cabeza

1

Encabezado de marco, fijado en 0x68.

1

CMD

1

Palabra de comando, define la función del marco, como establecer frecuencia, enviar SMS, etc.

2

R/W

1

Bandera de lectura/escritura. 0x00=Lectura, 0x01=Escritura, 0x02=Informe iniciado por el módulo.

3

S/R

1

Bandera de configuración/respuesta. Cuando la envía el host, se trata de una solicitud de configuración; cuando la responde el módulo, se trata de un estado de respuesta.

4-5

CKSUM

2

Suma de comprobación de 16 bits. Cubre todos los bytes desde CMD hasta el final de DATA.

6-7

LEN

2

Longitud de los datos del campo DATOS (en bytes).

8...

DATOS

n (determinado por LEN)

Carga útil de datos. El contenido específico lo define el CMD.

8+n

COLA

1

Cola del marco, fijada en 0x10.

Método de cálculo de suma de comprobación

Según el documento del protocolo, la suma de comprobación se calcula de la siguiente manera: cada par de bytes de los datos a comprobar se transforma en un número de 16 bits y se suma secuencialmente. Si la trama de datos tiene una longitud impar, se añade 0x00 al último byte. La parte sobrante (que excede los 16 bits) del proceso de acumulación se suma a los 16 bits inferiores del resultado hasta que la suma sea menor o igual a 0xFFFF. Finalmente, el número de 16 bits resultante se combina con 0xFFFF para obtener la suma de comprobación final.

El código de referencia C proporcionado en el documento de protocolo es el siguiente:

uint16_t PcCheckSum(uint8_t *buf, int16_t len) {
    uint32_t suma = 0;
    mientras (len > 1) {
        suma += 0xFFFF y ((*buf << 8) | *(buf + 1));
        buf += 2;
        len -= 2;
    }
    si (len) {
        suma += (0xFF y *buf) << 8;
    }
    mientras (suma >> 16) {
        suma = (suma y 0xFFFF) + (suma >> 16);
    }
    devolver ((uint16_t)suma ^ 0xFFFF);
}


Ejemplo de flujo de cálculo de suma de comprobación

Un detalle de ingeniería destacable es que el documento del protocolo menciona que si el usuario no desea calcular la suma de comprobación, el campo CKSUM puede enviarse como 0x0000 y el módulo ignorará el proceso de suma de comprobación. Esto puede ser muy útil durante la fase inicial de depuración, pero para garantizar la fiabilidad de la comunicación, se debe implementar y utilizar la suma de comprobación correcta en el producto final.

Referencia completa del conjunto de comandos

La siguiente tabla categoriza y organiza todos los comandos soportados por el módulo, proporcionando una referencia más estructurada que la documentación original.

Tabla 4: Referencia completa del código de comando (CMD) del DMR858M

CMD (hexadecimal)

Descripción de la función

Soporte de lectura y escritura

Alcance

Persistente

Notas

Comandos de configuración (guardados al apagar)






0x01

Cambiar canal

Escribir

Actual

Cambiar al canal especificado.

0x02

Establecer el volumen de recepción

Escribir

Todo

Establezca el nivel de volumen de salida de audio.

0x0B

Establecer la ganancia del micrófono

Escribir

Todo

Ajustar la sensibilidad del micrófono.

0x0C

Establecer el modo de ahorro de energía

Escribir

Todo

Habilitar o deshabilitar el modo de bajo consumo.

0x0D

Establecer frecuencia TX/RX

Leer/Escribir

Actual

Establezca las frecuencias de recepción y transmisión para el canal actual.

0x12

Establecer el nivel de silenciamiento (SQ)

Leer/Escribir

Actual

Establezca el umbral de silenciamiento para el modo analógico.

0x13

Establecer el modo CTCSS/CDCSS

Leer/Escribir

Actual

Establezca el modo de subaudio (por ejemplo, solo recibir, solo transmitir, ambos).

0x14

Establecer valor CTCSS/CDCSS

Leer/Escribir

Actual

Establezca el código de subaudio específico.

0x17

Establecer potencia alta/baja

Leer/Escribir

Actual

Cambia la potencia de transmisión para el canal actual.

Órdenes operativas (vigentes de inmediato)






0x03

Escanear

Escribir

Actual

No

Iniciar o detener la exploración de canales.

0x06

Iniciar llamada

Escribir

Actual

No

Iniciar una llamada grupal o privada.

0x07

Enviar SMS

Escribir

Actual

No

Enviar un mensaje de texto DMR.

0x09

Alarma de emergencia

Escribir

Actual

No

Activar la función de alarma de emergencia.

0x15

Interruptor de monitor

Escribir

Actual

No

Fuerce la apertura del silenciador para monitorear la actividad del canal.

Comandos de consulta de estado






0x04

Comprobar el estado de TX/RX

Leer

Actual

No

Consulta si el módulo está en estado de recepción, transmisión o inactivo.

0x05

Leer la intensidad de la señal

Leer

Actual

No

Obtenga el valor RSSI de la señal recibida actual.

0x24

Leer ID

Leer

Todo

No

Lea el ID DMR del módulo.

0x25

Leer la versión del firmware

Leer

Todo

No

Lea el número de versión de firmware del módulo.

0x28

Comprobar el estado del cifrado

Leer

Actual

No

Consulta si el cifrado está habilitado en el canal actual.



Guía práctica para la serie de walkie-talkies digitales ESP32 personalizados


Parte 1: Análisis en profundidad del módulo DMR858M

Parte 2: Integración de hardware y diseño de referencia

Parte 3: Desconstrucción del protocolo de control en serie

Parte 4: Desarrollo de firmware y diseño de controladores

Parte 5: Exploración de funciones avanzadas y conclusión


Contáctenos

 +86-755-23080616

 ventas@nicerf.com

Sitio web: https://www.nicerf.com/

Dirección: 309-314, 3/F, Bldg A, edificio comercial Hongdu, Zona 43, Baoan Dist, Shenzhen, China

Contáctenos
política de privacidad

política de privacidad

· Política de privacidad

Actualmente no hay contenido disponible


           

Correo electrónico:sales@nicerf.com

Teléfono:+86-755-23080616

Dirección: 309-314, 3/F, Bldg A, edificio comercial Hongdu, Zona 43, Baoan Dist, Shenzhen, China


×