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.
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:
Iremos depurar e atualizar o dispositivo usando o ST-Link V2. O diagrama de conexão é extremamente simples e lógico:
ST-Link V2 | nrf51822 |
---|
3.3V | Vdd |
GND | GND |
SWDIO | SWDIO |
SWDCLK | SCLK |
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 nrf51 já está 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.