
BLE sob o microscópio (link 24-52)
A NORDIC vem produzindo novos cristais da série nRF52 há vários anos. No entanto, muitos ainda usam a família nRF24 mais antiga. Hoje vou mostrar como organizar a comunicação bidirecional entre eles nos canais de publicidade. Além disso, usando a capacidade do cristal nRF52 de medir o nível de RSSI, vamos representá-lo em um gráfico.
Opções de conexão
Lendo o fórum nórdico sobre as capacidades sem fio entre as famílias antigas e novas, vi que existem duas possibilidades. Este é o protocolo ESB (Enhanced Shock Burst) e um add-on sobre ele - o protocolo Gazell. Isso certamente é bom, mas há uma série de dificuldades. No lado do nRF24, é isso que as fontes estão em nRFgo_SDK_2.3.0 apenas para os módulos nrf24le1 e nrf24lu1 (pacote nRF24L01 + microcontrolador). No entanto, entre os rádios amadores, esse módulo sem controlador é mais comum.
Fig.1

Em primeiro lugar, algumas palavras sobre o sistema que iremos construir. Vamos receber e transmitir em canais de publicidade em formato de pacotes BLE. Isso permitirá o uso do celular e do programa NRF Connect ( android e iOS) veja nossos pacotes no ar. Isso nos ajudará muito e nos permitirá dividir a tarefa original em etapas. Teremos um Host com um canal de rádio em nRF24L01 e um Dispositivo em m / c nRF52832. Além disso, desde nRF24L01 é apenas um canal de rádio, precisará de um controlador. Vamos criar dois projetos ao mesmo tempo em m / c diferente da empresa ST. O host transmitirá um pacote de rádio várias vezes por segundo. O dispositivo irá recebê-lo, medir o nível de RSSI e enviar um pacote de resposta de volta, que conterá seu valor. Depois de receber uma mensagem de resposta, o Host emitirá um byte com o nível RSSI para a porta COM. A fim de rastrear visualmente a mudança no nível de recepção, escrevi um pequeno programa gráfico .
Host Nrf24L01 + Stm8L152
Então, vamos começar com o Host no link Nrf24L01 + Stm8L152. Para esta tarefa, peguei o módulo Nrf24L01, cuja foto foi dada acima, e STM8L-DISCOVERY, uma placa de depuração baseada em STM8L152C6T6. Abaixo está a pinagem do módulo nRF24L01.
Figura 2

Pinagem de STM8L-DISCOVERY
#define LED_PORT GPIOC
#define LED_PIN GPIO_Pin_7
#define IRQ_PORT GPIOE
#define IRQ_PIN GPIO_Pin_0
#define CE_PORT GPIOD
#define CE_PIN GPIO_Pin_1
#define SPI_CLK_PORT GPIOE
#define SPI_CLK_PIN GPIO_Pin_4
#define SPI_MISO_PORT GPIOE
#define SPI_MISO_PIN GPIO_Pin_2
#define SPI_MOSI_PORT GPIOE
#define SPI_MOSI_PIN GPIO_Pin_5
#define SPI_CSN_PORT GPIOD
#define SPI_CSN_PIN GPIO_Pin_0
#define LED_PIN GPIO_Pin_7
#define IRQ_PORT GPIOE
#define IRQ_PIN GPIO_Pin_0
#define CE_PORT GPIOD
#define CE_PIN GPIO_Pin_1
#define SPI_CLK_PORT GPIOE
#define SPI_CLK_PIN GPIO_Pin_4
#define SPI_MISO_PORT GPIOE
#define SPI_MISO_PIN GPIO_Pin_2
#define SPI_MOSI_PORT GPIOE
#define SPI_MOSI_PIN GPIO_Pin_5
#define SPI_CSN_PORT GPIOD
#define SPI_CSN_PIN GPIO_Pin_0
Fig. 3

Para enviar dados para a porta COM, um adaptador USB para m / s cp2102 foi usado conectado às pernas PC2 e PC3. Você pode obter o driver aqui. No final, foi isso que aconteceu.
Fig.4

No módulo nRF24L01 você pode ver um capacitor eletrolítico soldado entre os pinos de alimentação. Recomenda-se configurá-lo para operação estável do módulo. O projeto completo e o firmware podem ser encontrados aqui e aqui... Você pode abri-lo usando o ambiente de desenvolvimento IAR for Stm8. Nós piscamos o m / ce o lançamos. O LED azul na placa STM8L-DISCOVERY piscará 2 vezes por segundo, indicando o envio de pacotes. Agora é a hora de iniciar o programa NRF Connect e ver algo como a imagem mostrada na Fig.5a. Se você tiver sucesso, parabéns, a primeira metade das tarefas está concluída.
Fig. 5a ________________________________ Fig. 5b _______________________________ Fig. 5c ______________________________

Host Nrf24L01 + stm32F103
Para não nos afastarmos muito do trabalho do Host, repetiremos o mesmo para o stm32F103 m / c. Para fazer isso, tomei uma "pílula azul" com um conector USB instalado. Isso tornou possível não usar um adaptador, mas sim enviar dados diretamente para a porta USB usando esses drivers . Montei um projeto para stm32F103 em STM32CubeMx.
Pinagem do lado da pílula azul
#define SPI_CE_PORT GPIOB
#define SPI_CE_PIN GPIO_PIN_4
#define SPI_IRQ_PORT GPIOB
#define SPI_IRQ_PIN GPIO_PIN_5
#define SPI_MISO_PORT GPIOB
#define SPI_MISO_PIN GPIO_PIN_6
#define SPI_CLK_PORT GPIOB
#define SPI_CLK_PIN GPIO_PIN_7
#define SPI_MOSI_PORT GPIOB
#define SPI_MOSI_PIN GPIO_PIN_8
#define SPI_CSN_PORT GPIOB
#define SPI_CSN_PIN GPIO_PIN_9
#define SPI_CE_PIN GPIO_PIN_4
#define SPI_IRQ_PORT GPIOB
#define SPI_IRQ_PIN GPIO_PIN_5
#define SPI_MISO_PORT GPIOB
#define SPI_MISO_PIN GPIO_PIN_6
#define SPI_CLK_PORT GPIOB
#define SPI_CLK_PIN GPIO_PIN_7
#define SPI_MOSI_PORT GPIOB
#define SPI_MOSI_PIN GPIO_PIN_8
#define SPI_CSN_PORT GPIOB
#define SPI_CSN_PIN GPIO_PIN_9
Fig. 6

O projeto em si e o firmware podem ser acessados aqui e aqui . Você pode abri-lo usando o ambiente de desenvolvimento IAR for Stm32. Qualquer programador pode ser usado para programar o STM32F103. Eu usei este.
Fig. 7 Ligamos

a fonte de alimentação e tentamos ver os pacotes nos canais de publicidade. A imagem será a mesma da Fig5a. Nada pisca nesta placa, ambos os LEDs estão continuamente acesos. Não consegui reativar o LED verde na perna do PC13. A frequência de envio é mais alta do que na placa com stm8L152 e é de 10 Hz. Todos esses parâmetros podem ser facilmente alterados dentro dos projetos.
Dispositivo Nrf52832
Portanto, vamos assumir que a primeira parte do sistema com o Host está funcionando para nós. Agora vamos lançar o Device. Isso pode ser feito em um KIT adequado da NORDIC PCA10040
Fig.8

Você também pode usar qualquer placa com m / k nRF52832. Vou usar uma placa de um design antigo. Mas no kit PCA10040, eu verifiquei, também inicia. O projeto e o firmware estão aqui e aqui . É construído no ambiente Keil uVision4 usando o antigo SDK12.3.0, que pode ser obtido aqui... Para que o projeto seja construído sem problemas, sua pasta deve ser colocada no diretório nrf52832_workspace_SDK12 \ examples \ipher \. O fato é que qualquer projeto da NORDIC contém um grande número de links relacionados, portanto, não será coletado em um lugar arbitrário. Para atualizar o nRF52832, você pode usar o programa nRFgoStudio ou nRF Connect for Desktop .
Ao iniciar um projeto de dispositivo, eu recomendaria fazer isso primeiro. Porque O dispositivo funciona no modo de escuta de transmissão, ele não envia pacotes de rádio no ar. Isso acontecerá apenas como uma resposta, após receber um pacote do Host. Portanto, você deve primeiro verificar se o dispositivo está ativo. Para fazer isso, você precisa comentar a função BleListen () no projeto e, ao contrário, descomente a função BleRadioTransaction (). Como mostrado abaixo.

Nesse caso, o próprio dispositivo começará a transmitir pacotes de rádio. Eles podem ser vistos no telefone. Uma imagem de exemplo é mostrada na Fig.5b. Se tudo estiver bem, voltamos tudo de volta e ligamos os dispositivos do host e do dispositivo. No telefone, devemos ver os dois, como na Fig.5c. Isso significa que o dispositivo viu a mensagem do host e enviou a sua própria em resposta. Se o Host, por sua vez, recebeu uma mensagem de resposta com o nível RSSI, ele configura esse valor para a porta COM. Agora, se executarmos o programa LevelRssi no Windows e selecionarmos a porta correta, veremos como o nível RSSI muda com uma posição relativa diferente dos dispositivos.
Conclusão
Eu estava quase terminando de preparar o artigo quando tive outro pensamento. Decidi usar um dispositivo mais comum como dispositivo, ou seja, o dongle pca10059 , baseado no nRF52840 m / c. Aqui está a foto dele.
Fig. 9

Felizmente, eu tinha duas dessas placas. Tendo reconstruído o projeto, tive o problema de fazer upload do firmware nele. Eu sabia que precisava fazer isso usando nRF Connect for Desktop, mas não descobriu imediatamente como inserir o dongle no modo DFU (atualização de firmware). Veja como fazer. Entramos no modo DFU imediatamente após a reinicialização. Você deve primeiro conectar o dongle ao conector USB e, em seguida, pressionar o botão de reinicialização (o mais distante do processador), com um botão de pressão horizontal. O LED vermelho no dongle começa a piscar. Abra o programa nRF Connect e pressione o botão "Instalar" na seção Programador. Quando o software necessário for baixado, clique no botão "Abrir".
Fig. 10 A

janela do programador será aberta na sua frente.
Fig. 11

No canto superior esquerdo, selecione a porta COM desejada. Você verá algo como a imagem a seguir.
Fig. 12

No lado esquerdo veremos o que está na memória do controlador. Ao clicar no botão "Adicionar arquivo HEX", você pode adicionar um arquivo para preenchimento do lado direito. Também houve alguns problemas aqui. Os botões "Apagar tudo" e "Apagar e escrever" não estão disponíveis para nós. O fato é que o dongle não tem programador, então o programa é carregado usando o bootloader. E abordamos isso na seção MBR. Se apagarmos essas seções, o firmware via modo DFU será impossível. Em teoria, você só precisa adicionar o firmware à metade direita da tela e pressionar o botão "Escrever". Tudo parece estar correto, mas não funcionará. Nosso programa começa no endereço zero na memória FLASH, e este endereço já está ocupado pela partição MBR. Como lidar com isso pode ser lido neste tutorial.... Se você leu por muito tempo ou não, explicarei em fotos usando o exemplo de Keil. Aqui está uma foto de um projeto com alocação de memória do microcontrolador para projetos não empilhados.
Fig. 13

É necessário mover o ponteiro FLASH-a para 0x1000 e a RAM para 0x20000008 e recompilar o projeto.
Fig.14

Depois disso, você já pode usar o programa nRF Connect for Desktop. Provavelmente é tudo. Você pode ver o que fiz no vídeo abaixo.
yadi.sk/i/BGQQnga1HeN50A
yadi.sk/i/d8A9pU82kBcTMw
yadi.sk/i/XGac8xwpksVX7g
Funcionário do Grupo Caesar Satellite de empresas
Vladimir Pecherskikh