Trabalhe com nRF51822 usando ST-Link e Clion + OpenOCD

Boa tarde, comunidade Habr!


Chegou a hora de estudantes de universidades técnicas. Então, é hora de realizar projetos domésticos e conquistar novos patamares de tecnologia microeletrônica. Hoje vou falar sobre minha pesquisa com placas baseadas no chip NRF51822, que é um módulo Bluetooth um pouco desatualizado da Nordic Semiconductor. Esta empresa é famosa por seus módulos de rádio de baixo consumo de corrente e o chip NRF51822 não é exceção. Mas não vamos nos distrair do tópico. Vamos falar de ferro.


Criando um suporte de depuração


Em outubro, as placas yj-14015-nrf51822 foram encomendadas para experimentos com Bluetoth. Foi uma má idéia comprar placas sem a fiação dos conectores dos pinos para os fios padrão para os amantes de eletrônicos.


yj-14015-nrf51822

yj-14015-nrf51822


A distância entre os contatos menores que 1 mm criou grandes dificuldades para mim, uma pessoa com uma experiência de solda extremamente modesta. As saídas na placa não foram projetadas para soldar fios e eram fáceis de separar. Esse destino aconteceu com o único VDD da fonte de alimentação. Mas com a ajuda dos esforços do vizinho, foi possível soldar o fio à saída do capacitor na placa. Juntos, as saídas GND, SWDIO, SWCLK e algumas outras GPIO foram soldadas. O resultado é algo semelhante em aparência a Frankenstein:


Placa soldada

Placa soldada


Iremos depurar e atualizar o dispositivo usando o ST-Link V2. O diagrama de conexão é extremamente simples e lógico:


ST-Link V2nrf51822
3.3VVdd
GNDGND
SWDIOSWDIO
SWDCLKSCLK

Ao contrário de Frankenstein, uma única descarga de corrente não foi suficiente para reviver este módulo. Primeiro de tudo, tentei ler a memória nrf51822 usando o utilitário STM32 ST-LINK . Com algumas ressalvas, isso funcionou com placas STM32, mas não com nrf. Sobre isso, meu trabalho com o conselho parou temporariamente. Um pouco mais tarde, encontrei o artigo 1 e o artigo 2 sobre como trabalhar com o nrf51822. Continha links para o SDK e uma descrição detalhada de como a memória nrf é organizada. O autor dos artigos usou o depurador JLink mais caro, diferente de nós. Soluções baratas são muito importantes se você é um estudante pobre :).


Learning SDK


Se você deseja usar a funcionalidade bluetooth, o que é bastante lógico para um chip bluetooth, você terá que colocar o chamado "dispositivo eletrônico" no início da memória programável nrf5. Ele vem na forma de firmware e contém a funcionalidade bluetooth. O restante da memória está gravado no seu firmware. A partir dele, você pode chamar os procedimentos do dispositivo virtual para configurar o bluetooth.


Existem vários dispositivos de software diferentes. Para o nrf51, você pode usar s110 (para aplicativos de servidor) e s130 (para aplicativos de servidor e cliente). Para entender a compatibilidade das versões do SDK e do dispositivo, existe uma matriz de compatibilidade . Pode-se observar que SDKs até a versão 12.3.0 são adequados para nossa placa. Mas vamos parar no SDK 10.0.0 desde Ele suporta s110 e s130.


Configurar o OpenOCD


Nos exemplos do SDK e nos artigos, o utilitário nrfjprog é usado para firmware via JLink, e precisamos piscar através do ST-Link V2. Em vez disso, usaremos o programa OpenOCD , baixado para Windows . Permite flash e depuração tuyevu hoo Um grande número de placas e microchips diferentes. Há uma configuração para o chip nrf51. Para forçar o OpenOCD a piscar em nossa placa, é necessário executar o comando do formato apresentado abaixo (após adicionar a pasta OpenOCD / bin ao Path). Você pode ler mais sobre os comandos do OpenOCD na documentação .


openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image <PATH_TO_HEX> <OFFSET>" ^ -c reset -c exit 

O diabo, como sempre, está nos detalhes:


  • "reset halt" envia um comando de redefinição de chip e para o dispositivo. Nesse estado, o firmware pode ser apagado / gravado
  • "nrf51 mass_erase 0" permite gravar na seção do carregador de inicialização e apaga toda a memória programável do microcircuito (ajudará a evitar, em alguns casos, um erro de download de firmware)
  • em vez de <PATH_TO_HEX>, você precisa substituir o caminho para o arquivo hexadecimal
  • <OFFSET> define o deslocamento do endereço de gravação do firmware. Este parâmetro é útil se você deseja atualizar seu firmware separadamente do dispositivo de software. Se você deseja gravar o firmware a partir do início da memória (do endereço 0x0), você pode descartar este parâmetro
  • reset redefine o chip para que ele funcione com o novo firmware

O SDK inclui arquivos hexadecimais para dispositivos flexíveis. Para preencher s130 no quadro, você pode usar a seguinte sequência de comandos:


 set file=<nRF5_SDK>/components/softdevice/s130/hex/s130_nrf51_1.0.0_softdevice.hex openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image %file%" -c reset -c exit 

Então você pode fazer o upload do nosso firmware. É importante que você remova o "nrf51 mass_erase 0" para que o dispositivo não apague. E também não se esqueça do deslocamento. Para s130, o deslocamento é 0x1c000 e para s110 é 0x18000. Esses valores podem ser encontrados nas especificações para s130 e s110 .


 set file=<PATH_TO_HEX> openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "flash write_image %file% 0x1c000" -c reset -c exit 

Agora, na memória do programa, o nrf51822 deve estar no firmware do dispositivo de software e no nosso. Para testes, usei um exemplo da pasta <nRF5_SDK> / examples / ble_peripheral / ble_app_beacon e um aplicativo Android chamado "nRF Connect". Depois de executar os comandos, comecei a ver um dispositivo chamado nRF. Isto é o que procuramos.


Configurando um Projeto CLion


O SDK nrf51 contém exemplos baseados em makefiles. Para trabalhar com o CLion, é necessário descrever a montagem do projeto usando arquivos CMake. A pesquisa no Google mostrou que o projeto CMake para o nrf51está no github. Foi gravado para uso com o SDK 12.XX. Por esse motivo, alguns caminhos de arquivo do SDK 10.0.0 acabaram incorretos. Além disso, o utilitário nrfjprog também é usado no projeto. Portanto, tive que mexer nas configurações do projeto e reescrever os destinos do firmware usando o OpenOCD. O resultado do meu trabalho pode ser encontrado no github . O leia-me descreve instruções para configurar um projeto e depurar no CLion.


PS


Muitos detalhes técnicos relacionados aos recursos do nrf51822 escaparam da minha narrativa. Espero que um dia preencha as lacunas adicionando um artigo ou escrevendo um novo.

Source: https://habr.com/ru/post/pt439148/


All Articles