Introducción al proceso de difusión BLE Introducción a la realización de la difusión por Bluetooth Flujo de difusión por Bluetooth / publicidad BLE de baja energía ----- Pila de protocolo de baja energía de Bluetooth

Zero. Resumen

Introduzca principalmente el proceso de transmisión de Bluetooth de baja energía y el proceso de implementación de la pila de protocolos debajo de la pila de bluetooth (pila de bluetooth), flujo de publicidad BLE

btsnoop y el proceso en los datos ... \ STM32_UBUNTU_BLUETOOTH \ 2-Datos de Bluetooth \ Análisis del protocolo Bluetooth \ BLE broadcast.log

1. Declaración

Continuaremos actualizando esta columna de manera serializada. El contenido actualizado de esta columna está planificado de la siguiente manera:

El primer artículo: Introducción completa a Bluetooth, presenta principalmente algunos conceptos de Bluetooth, antecedentes, pista de desarrollo, introducción de Bluetooth en el mercado e introducción de la placa de desarrollo Bluetooth.

El segundo artículo: Introducción a la capa de transporte, presenta principalmente la pila de protocolos Bluetooth y el protocolo de transmisión de hardware antes del chip Bluetooth, como H4, H5, BCSP basado en UART, H2 basado en USB, etc.

El tercer capítulo: Introducción al controlador Bluetooth tradicional, presenta principalmente la introducción de chips Bluetooth tradicionales, incluida la capa de radiofrecuencia (RF), la capa de banda base (banda base), la capa de gestión de enlaces (LMP), etc.

El cuarto capítulo: Introducción al host Bluetooth tradicional, presenta principalmente la pila de protocolos Bluetooth tradicional, como HCI, L2CAP, SDP, RFCOMM, HFP, SPP, HID, AVDTP, AVCTP, A2DP, AVRCP, OBEX, PBAP, MAP, etc. Acuerdo.

Capítulo 5: Introducción al controlador Bluetooth de baja energía, principalmente presenta chips Bluetooth de baja energía, incluida la capa física (PHY), la capa de enlace (LL)

Capítulo 6: Introducción al host Bluetooth de bajo consumo, introducción a la pila de protocolos Bluetooth de bajo consumo, incluidos HCI, L2CAP, ATT, GATT, SM, etc.

Capítulo 7: Introducción a los chips Bluetooth, presenta principalmente el proceso de inicialización de algunos chips Bluetooth, basado en la extensión del comando del proveedor de HCI

El capítulo octavo: apéndice, presenta principalmente la introducción de los términos comunes anteriores y la introducción de algunos procesos especiales.

Además, la placa de desarrollo se muestra a continuación, que es el mejor par de manos para aquellos que quieren aprender la pila del protocolo Bluetooth. Para aprender mejor la pila de protocolos de Bluetooth, créanme, después de aprender este conjunto de videos, tendrá la capacidad de modificar cualquier pila de protocolos (como bluez en Linux, bluedroid en Android).

-------------------------------------------------- -------------------------------------------------- ---------------------

Enlace de la universidad CSDN (ingrese para elegir el curso que desea aprender): https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

Grupo de botones de intercambio de Bluetooth: 970324688

Código de Github: https://github.com/sj15712795029/bluetooth_stack

Obtenga la placa de desarrollo: https://item.taobao.com/item.htm?spm=a1z10.1-cs.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

Catálogo de aprendizaje de Bluetooth : https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900

-------------------------------------------------- -------------------------------------------------- ----------------------

2. Evento y comando de transmisión BLE

Todo el proceso es el siguiente (tenga en cuenta que se omiten pasos durante la inicialización, solo se enumeran los pasos clave de la inicialización)

Echemos un vistazo al proceso de ellisys (es básicamente lo mismo que la pantalla de Wireshark, principalmente porque ellisys viene con su propio análisis en el proceso, así que también lo publicaré)

Tenga en cuenta que solo interceptamos dos comandos y eventos cuando se inicializó la captura de pantalla. Uno es establecer una máscara de evento que es diferente del Bluetooth tradicional, el otro es compatible con el host de escritura y el otro puede referirse a la inicialización del Bluetooth tradicional. Los pasos son los siguientes:

Paso 1) Envíe el comando (establecer máscara de evento) para establecer la máscara de evento y recibir el evento de comando completo

Paso 2) Envíe el comando (escriba el soporte de host de archivo) para configurar el soporte BLE y reciba el evento de comando completo

Paso 3) Envíe el comando BLE (LE Set Advertising Parameters) para configurar los parámetros de transmisión

Paso 4) Envíe el comando (LE Set Advertising Data) de los datos de difusión de configuración BLE

Paso 5) Envíe el comando (LE Set Advertising Enable) para habilitar la transmisión BLE

Paso 6) Reciba el comando completo del paso 4) 5) 6)

Paso 7) Envíe el comando de transmisión de cierre de BLE (LE Set Advertising Enable) y reciba el evento de comando completo

Hablemos de cada paso en detalle a continuación.

Paso 1) Envíe el comando (establecer máscara de evento) para establecer la máscara de evento y recibir el evento de comando completo

Esta parte se introdujo en la sección anterior cuando buscaba una transmisión, por lo que no la repetiré.

Paso 2) Envíe el comando (escriba el soporte de host de archivo) para configurar el soporte BLE y reciba el evento de comando completo

Esta parte se introdujo en la sección anterior cuando buscaba una transmisión, por lo que no la repetiré.

Paso 3) Envíe el comando BLE (LE Set Advertising Parameters) para configurar los parámetros de transmisión

Veamos el formato de este comando:

Echemos un vistazo directamente a btsnoop

El código correspondiente es el siguiente:

err_t hci_le_set_adv_param(uint16_t adv_int_min, uint16_t adv_int_max, uint8_t adv_type,
    uint8_t own_address_typ, uint8_t peer_address_type,struct bd_addr_t *peer_address, uint8_t channel_map, uint8_t filter_policy)
{
	struct bt_pbuf_t *p;
    uint8_t offset = 0;
    if((p = bt_pbuf_alloc(BT_TRANSPORT_TYPE, HCI_SET_LE_ADV_PARAM_PLEN, BT_PBUF_RAM)) == NULL)
    {
        BT_HCI_TRACE_ERROR("ERROR:file[%s],function[%s],line[%d] bt_pbuf_alloc fail\n",__FILE__,__FUNCTION__,__LINE__);
        return BT_ERR_MEM;
    }
    /* Assembling command packet */
    p = hci_cmd_ass(p, HCI_LE_SET_ADV_PARAM, HCI_LE, HCI_SET_LE_ADV_PARAM_PLEN);
    offset += 3;
    bt_le_store_16((uint8_t *)p->payload,offset,adv_int_min);
    offset += 2;
    bt_le_store_16((uint8_t *)p->payload,offset,adv_int_max);
    offset += 2;
    ((uint8_t *)p->payload)[offset] = adv_type;
    offset += 1;
	((uint8_t *)p->payload)[offset] = own_address_typ;
    offset += 1;
	((uint8_t *)p->payload)[offset] = peer_address_type;
    offset += 1;
	memcpy(((uint8_t *)p->payload)+offset, peer_address->addr, BD_ADDR_LEN);
	offset += BD_ADDR_LEN;
	((uint8_t *)p->payload)[offset] = channel_map;
    offset += 1;
    ((uint8_t *)p->payload)[offset] = filter_policy;
    phybusif_output(p, p->tot_len,PHYBUSIF_PACKET_TYPE_CMD);
    bt_pbuf_free(p);

    return BT_ERR_OK;
}

Paso 4) Envíe el comando (LE Set Advertising Data) de los datos de difusión de configuración BLE

Veamos el formato de comando HCI:

Este comando es para configurar los datos de transmisión. El formato de los datos de transmisión se mencionó en la sección anterior. Cuando busquemos la transmisión, no la repetiremos. Echemos un vistazo al código que configuramos y btsnoop.

Para simplificar la prueba, también transmito un nombre de Bluetooth y los datos de transmisión son los siguientes:

La llamada de difusión es la siguiente:

La implementación es la siguiente:

err_t hci_le_set_adv_data(uint8_t adv_len,uint8_t *adv_data)
{
	struct bt_pbuf_t *p;
    uint8_t offset = 0;
    if((p = bt_pbuf_alloc(BT_TRANSPORT_TYPE, HCI_SET_LE_ADV_DATA_PLEN, BT_PBUF_RAM)) == NULL)
    {
        BT_HCI_TRACE_ERROR("ERROR:file[%s],function[%s],line[%d] bt_pbuf_alloc fail\n",__FILE__,__FUNCTION__,__LINE__);
        return BT_ERR_MEM;
    }
    /* Assembling command packet */
    p = hci_cmd_ass(p, HCI_LE_SET_ADV_DATA, HCI_LE, HCI_SET_LE_ADV_DATA_PLEN);
    offset += 3;
	((uint8_t *)p->payload)[offset] = adv_len;
    offset += 1;

	memset(((uint8_t *)p->payload) + offset,0,HCI_SET_LE_ADV_DATA_PLEN-offset);
	memcpy(((uint8_t *)p->payload)+offset, adv_data, adv_len);

    phybusif_output(p, p->tot_len,PHYBUSIF_PACKET_TYPE_CMD);
    bt_pbuf_free(p);

    return BT_ERR_OK;
}

Lo que debe tenerse en cuenta en esta parte es que no importa cuáles sean sus datos de transmisión, deben estar llenos de 31 Bytes. El primer parámetro de datos de transmisión es su longitud de transmisión real

Finalmente, mira btsnoop:

Paso 5) Envíe el comando (LE Set Advertising Enable) para habilitar la transmisión BLE

Veamos el formato del comando:

Los parámetros son muy simples, es decir, simplemente se encienden y se apagan

Veamos la implementación del código:

err_t hci_le_set_adv_enable(uint8_t enable)
{
	struct bt_pbuf_t *p;
    uint8_t offset = 0;
    if((p = bt_pbuf_alloc(BT_TRANSPORT_TYPE, HCI_SET_LE_ADV_ENABLE_PLEN, BT_PBUF_RAM)) == NULL)
    {
        BT_HCI_TRACE_ERROR("ERROR:file[%s],function[%s],line[%d] bt_pbuf_alloc fail\n",__FILE__,__FUNCTION__,__LINE__);
        return BT_ERR_MEM;
    }
    /* Assembling command packet */
    p = hci_cmd_ass(p, HCI_LE_SET_ADV_ENABLE, HCI_LE, HCI_SET_LE_ADV_ENABLE_PLEN);
    offset += 3;
	((uint8_t *)p->payload)[offset] = enable;

    phybusif_output(p, p->tot_len,PHYBUSIF_PACKET_TYPE_CMD);
    bt_pbuf_free(p);

    return BT_ERR_OK;
}

Finalmente, miramos btsnoop:

Paso 6) Reciba el comando completo del paso 4) 5) 6)

Ya hemos introducido este comando en la HCI Bluetooth tradicional, publico directamente estos 3 eventos de comando completo

Paso 7) Envíe el comando de transmisión de cierre de BLE (LE Set Advertising Enable) y reciba el evento de comando completo

Esto se introdujo en el paso 5), tomemos una captura de pantalla de btsnoop directamente

Supongo que te gusta

Origin blog.csdn.net/XiaoXiaoPengBo/article/details/109327581
Recomendado
Clasificación