Introdução ao processo de transmissão BLE Introdução à realização do fluxo de publicidade BLE Broadcasting Bluetooth Broadcasting / BLE ----- Bluetooth Low Energy Protocol Stack

Zero. Visão geral

Apresentar principalmente o processo de transmissão de baixa energia do Bluetooth e o processo de implementação da pilha de protocolo sob a pilha bluetooth (pilha bluetooth), fluxo de publicidade BLE

btsnoop e o processo nos dados ... \ STM32_UBUNTU_BLUETOOTH \ 2-Bluetooth data \ Bluetooth protocol analysis \ BLE broadcast.log

1. Declaração

Continuaremos atualizando esta coluna de maneira serializada. O conteúdo atualizado desta coluna é planejado da seguinte maneira:

O primeiro artigo: introdução abrangente ao Bluetooth, apresenta principalmente alguns conceitos de Bluetooth, histórico, trilha de desenvolvimento, introdução do Bluetooth no mercado e introdução da placa de desenvolvimento Bluetooth.

Parte 2: Introdução à camada de Transporte, apresenta principalmente a pilha de protocolos Bluetooth e o protocolo de transmissão de hardware antes do chip Bluetooth, como H4, H5, BCSP baseado em UART, H2 baseado em USB, etc.

O terceiro capítulo: Introdução ao controlador Bluetooth tradicional, apresenta principalmente a introdução de chips Bluetooth tradicionais, incluindo camada de radiofrequência (RF), camada de banda base (banda base), camada de gerenciamento de link (LMP), etc.

Capítulo 4: Introdução ao host Bluetooth tradicional, apresenta principalmente a pilha de protocolos do Bluetooth tradicional, como HCI, L2CAP, SDP, RFCOMM, HFP, SPP, HID, AVDTP, AVCTP, A2DP, AVRCP, OBEX, PBAP, MAP, etc. Faça um acordo.

Capítulo 5: Introdução ao controlador de baixa energia Bluetooth, apresenta principalmente chips Bluetooth de baixa energia, incluindo camada física (PHY), camada de link (LL)

Capítulo 6: Introdução ao host Bluetooth de baixa potência, introdução à pilha de protocolos Bluetooth de baixa potência, incluindo HCI, L2CAP, ATT, GATT, SM, etc.

Capítulo 7: Introdução aos chips Bluetooth, apresenta principalmente o processo de inicialização de alguns chips Bluetooth, com base na extensão do comando do fornecedor HCI

O oitavo capítulo: apêndice, apresenta principalmente a introdução dos termos comuns acima e a introdução de alguns processos especiais.

Além disso, a placa de desenvolvimento é mostrada abaixo, que é o melhor conjunto de mãos para quem deseja aprender a pilha de protocolos Bluetooth. Para aprender melhor a pilha de protocolos Bluetooth, acredite em mim, depois de aprender este conjunto de vídeos, você terá a capacidade de modificar qualquer pilha de protocolos (como bluez no Linux, bluedroid no Android).

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

Link da faculdade CSDN (entre para escolher o curso que deseja aprender): https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

Grupo de botões de troca de Bluetooth: 970324688

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

Obtenha a placa de desenvolvimento: https://item.taobao.com/item.htm?spm=a1z10.1-cs.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

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

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

2. Comando de transmissão BLE e evento

Todo o processo é o seguinte (observe que há etapas omitidas durante a inicialização, apenas as etapas principais da inicialização são listadas)

Vamos dar uma olhada no processo ellisys (é basicamente o mesmo que a tela do Wireshark, principalmente porque ellisys vem com sua própria análise no processo, então eu também vou postá-la)

Observe que apenas interceptamos dois comandos e eventos ao inicializar a captura de tela. Um é a máscara de evento definida, que é diferente do Bluetooth tradicional, o outro é compatível com o host de gravação e o outro pode se referir à inicialização do Bluetooth tradicional. As etapas são as seguintes:

Etapa 1) Envie o comando (definir máscara de evento) para definir a máscara de evento e receber o evento commnd complete

Etapa 2) Envie o comando (write le host support) para definir o suporte BLE e receber o comando complete event

Etapa 3) Envie o comando BLE (LE Set Advertising Parameters) para definir os parâmetros de transmissão

Etapa 4) Envie o comando (LE Set Advertising Data) de dados de transmissão de configuração de BLE

Etapa 5) Envie o comando (LE Set Advertising Enable) para habilitar a transmissão BLE

Etapa 6) Receba o comando completo da etapa 4) 5) 6)

Etapa 7) Enviar comando de transmissão de fechamento de BLE (habilitar publicidade para definir LE) e receber evento de conclusão de envio

Vamos falar sobre cada etapa em detalhes abaixo

Etapa 1) Envie o comando (definir máscara de evento) para definir a máscara de evento e receber o evento commnd complete

Esta parte foi introduzida na seção anterior durante a busca por transmissão, então não vou repeti-la

Etapa 2) Envie o comando (write le host support) para definir o suporte BLE e receber o comando complete event

Esta parte foi introduzida na seção anterior durante a busca por transmissão, então não vou repeti-la

Etapa 3) Envie o comando BLE (LE Set Advertising Parameters) para definir os parâmetros de transmissão

Vejamos o formato deste comando:

Vamos dar uma olhada diretamente no btsnoop

O código correspondente é o seguinte:

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;
}

Etapa 4) Envie o comando (LE Set Advertising Data) de dados de transmissão de configuração de BLE

Vejamos o formato do comando HCI:

Este comando é para definir os dados de transmissão. O formato dos dados de transmissão foi mencionado na seção anterior. Ao pesquisar a transmissão, não iremos repeti-la. Vamos dar uma olhada no código que definimos e btsnoop.

Para tornar o teste simples, eu também transmito um nome de Bluetooth, e os dados de transmissão são os seguintes:

A chamada de transmissão é a seguinte:

A implementação é a seguinte:

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;
}

O que deve ser observado nesta parte é que não importa quais sejam seus dados de transmissão, eles devem ser preenchidos com 31 bytes. O primeiro parâmetro de dados de transmissão é a duração real de sua transmissão

Finalmente, olhe para btsnoop:

Etapa 5) Envie o comando (LE Set Advertising Enable) para habilitar a transmissão BLE

Vejamos o formato do comando:

Os parâmetros são muito simples, ou seja, basta ligar e desligar

Vejamos a implementação do 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, olhamos para btsnoop:

Etapa 6) Receba o comando completo da etapa 4) 5) 6)

Já introduzimos este comando no Bluetooth HCI tradicional, eu posto diretamente estes 3 eventos completos de comando

Etapa 7) Enviar comando de transmissão de fechamento de BLE (habilitar publicidade para definir LE) e receber evento de conclusão de envio

Isso foi introduzido na etapa 5), ​​vamos tirar uma captura de tela do btsnoop diretamente

Acho que você gosta

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