Introdução
O Simplicity Studio é o ambiente de desenvolvimento para dispositivos e tecnologias da Silicon Labs. Neste artigo veremos como criar instalar e configurar o Simplicity Studio e como utilizar algumas de suas principais ferramentas.
Para isso, utilizaremos a placa BRD4002A Rev A06 com o microcontrolador EFR32MG22 para criar um projeto simples de um pisca-led PWM.
Instalação
Após concluir o download, extraia os arquivos e execute o setup. Em seguida, siga as instruções passo a passo para concluir a instalação.
Quando a instalação for finalizada, o Simplicity Studio será iniciado automaticamente, exibindo uma tela com os termos de licença. Aceite os termos e clique em "Done".
Após a instalação, será exibida uma tela sugerindo que você faça login. No entanto, é possível fazer login mais tarde clicando em "Skip for now".
Em alguns sistemas operacionais, o Simplicity Studio fará o download dos drivers necessários para o funcionamento das ferramentas.
Por fim, aparecerá a tela do Installation Manager. Nesta etapa, você pode fazer o download de Software Development Kits (SDKs), Toolchains e outras ferramentas de interesse.
Se você já tiver o dispositivo conectado à sua máquina, é possível clicar em "Install by connecting device(s)". No entanto, faremos a instalação clicando em "Install by technology type (wireless, Xpress, MCU, sensors)".
Optarei por não instalar todas as ferramentas neste momento, mas é possível fazer o download delas futuramente, caso surja a necessidade.
Em "Select Technology Type", selecione a primeira opção (32-bit and Wireless MCUs).
Em "Package Installation Options", temos duas opções: Auto e Advanced. Na opção Advanced, é possível escolher quais pacotes serão instalados. No entanto, deixarei selecionada a opção Auto, que seleciona automaticamente os pacotes para instalação.
Caso seja necessário instalar uma versão específica de uma ferramenta, toolchain ou SDK, selecione a opção Advanced.
Em seguida, clique em "Next", aceite os termos e aguarde a conclusão da instalação.
Se ocorrer algum erro durante o download, recomendo reiniciar a sua máquina e abrir o Installation Manager novamente para baixar os pacotes necessários.
O Installation Manager pode ser acessado a qualquer momento através do menu "Install", localizado na barra superior esquerda da tela.
Criando um projeto
Para criar um projeto primeiramente conecte a placa à máquina. Ao fazer isso o software já deverá reconhecer a placa e exibi-la na ambiente do Launcher.
Clique em "Start" para iniciar a configuração do projeto. Na tela seguinte, você verá as informações principais da placa e do target utilizados.
Além disso, você terá acesso à documentação, exemplos e ferramentas compatíveis com a placa.
Ainda nessa tela, em General Information, devemos escolher a versão de SDK. Para o projeto estaremos utilizando a Gecko SDK Suite v4.4.3.
Após a configuração, clique em "Create New Project" no canto superior direito da tela.
Em "Examples", selecione o projeto que será utilizado como base. Para este projeto, utilizaremos "Platform - Blink PWM". Selecione este exemplo e clique em "Next".
Na tela seguinte, dê um nome ao projeto, selecione o diretório onde ele será salvo e clique em "FINISH". O Simplicity Studio te levará a um novo ambiente: Simplicity IDE.
É possível voltar ao ambiente anterior clicando em “Launcher", no canto superior direito.
Ambiente de desenvolvimento
Nesse novo ambiente o Simplicity Studio é organizado de maneira semelhante a outras IDEs baseadas em Eclipse. Aqui estarei destacando os seus principais espaços.
Project Explorer
O Project Explorer é onde podemos ver o diretório do projeto, bem como seus arquivos e diretórios.
Debug Adapters
Área Compartilhada
Janela Inferior
Estrutura do projeto
A estrutura de um projeto Simplicity Studio é muito simples e facilita o seu entendimento.
Rotina principal
A função "main()" é estruturada de maneira simples e pode ser usada como padrão para a maioria dos projetos baremetal com MCUs da Silicon Labs. Esta estrutura básica pode ser expandida para incluir a inicialização de tasks, se estiver utilizando um RTOS, e também pode incorporar processamento de baixo consumo, caso esteja desenvolvendo aplicações de baixo consumo de energia.
Observando o código em C é fácil identificar essa estrutura.
```C
int main(void)
{
// Initialize Silicon Labs device, system, service(s) and protocol stack(s).
// Note that if the kernel is present, processing task(s) will be created by
// this call.
sl_system_init();
// Initialize the application. For example, create periodic timer(s) or
// task(s) if the kernel is present.
app_init();
#if defined(SL_CATALOG_KERNEL_PRESENT)
// Start the kernel. Task(s) created in app_init() will start running.
sl_system_kernel_start();
#else // SL_CATALOG_KERNEL_PRESENT
while (1) {
// Do not remove this call: Silicon Labs components process action routine
// must be called from the super loop.
sl_system_process_action();
// Application process.
app_process_action();
#if defined(SL_CATALOG_POWER_MANAGER_PRESENT)
// Let the CPU go to sleep if the system allows it.
sl_power_manager_sleep();
#endif
}
#endif // SL_CATALOG_KERNEL_PRESENT
}
```
As funções sl_system_init()
e sl_system_process_action()
são responsáveis pela inicialização das stacks e periféricos. Ambas são geradas automaticamente e só devem ser editadas manualmente se for estritamente necessário.
As funções app_init()
e app_process_action()
constituem a aplicação principal do seu projeto e podem (e na maioria das vezes devem) ser ajustadas para garantir o bom funcionamento do projeto.
Neste projeto, a aplicação é bastante simples e se concentra apenas no controle do LED. No app_init()
, a função para inicializar o blink_pwm
é chamada, e no app_process_action()
, o processamento do blink_pwm
é realizado, como ilustrado abaixo.
```C
/***************************************************************************//**
* Initialize application.
******************************************************************************/
void app_init(void)
{
blink_pwm_init();
}
/***************************************************************************//**
* App ticking function.
******************************************************************************/
void app_process_action(void)
{
blink_pwm_process_action();
}
```
Arquivo .slcp
O arquivo com a extensão .slcp
é um arquivo de configuração do projeto, oferecendo uma interface gráfica que facilita a adição de componentes de software, a alteração de ferramentas, e a configuração de clocks e periféricos, entre outras funcionalidades. Em comparação com outros fabricantes, pode ser comparado ao arquivo .ioc
da STM32CubeIDE da STMicroelectronics ou ao menuconfig
do ESP-IDF da Espressif.
A tela inicial desse arquivo apresenta um resumo das principais ferramentas e configurações que podem ser editadas, conforme observado abaixo.
Software Components
A segunda aba do arquivo .slcp
, chamada SOFTWARE COMPONENTS, exibe os componentes de software que podem ser adicionados e/ou modificados no projeto.
É através desta aba que você pode incluir componentes como comunicação serial, Bluetooth, configuração de rádio, RTOS, Wi-Fi, entre outros. Vale a pena explorar essa aba antes de começar a desenvolver qualquer aplicação ou middleware manualmente.
Aqui, por exemplo, você pode visualizar o componente do driver do LED (led0
) utilizado no projeto. Nesta seção, é possível consultar um resumo da documentação relacionada a este componente.
Nesta janela, ao clicar em "Configure" (no canto superior direito), será aberta uma janela de configuração para o componente.
Todas as configurações feitas no arquivo .slcp
são automaticamente refletidas em um arquivo .h
, localizado na pasta "config". Por exemplo, ao modificar as configurações do led0
, o arquivo sl_pwm_init_led0_config.h
também será atualizado.
Ao contrário de outras IDEs, no Simplicity Studio, se você alterar manualmente algum parâmetro na pasta "config", essas alterações também serão refletidas no arquivo .slcp
. No entanto, vale ressaltar que essa prática não é recomendada.
Configuration Tools
Ao clicar em "Open", o arquivo blink_pwm_baremetal_2.pintool
é aberto. Nesta visualização, você pode observar o footprint do microcontrolador, bem como a função atribuída a cada pino, o que é útil ao trabalhar com projetos de hardware personalizados.
Na tabela lateral, além das funções e componentes de software atribuídos a cada pino, você também pode definir um Custom Name. Isso pode facilitar a identificação e gerenciamento, especialmente quando se lida com um grande número de pinos.
Build
Para compilar um projeto, você pode clicar no ícone de martelo na barra superior ou clicar com o botão direito do mouse na pasta do projeto e selecionar "Build Project".
Um resumo do processo de compilação será exibido na tela do console.
Após o build é criada uma pasta no diretório do projeto com o nome da Toolchain utilizada. É nessa pasta que ficam armazenados os binários do projeto.
Flash
Ao fazer o upload de qualquer binário para o microcontrolador, é importante verificar se o microcontrolador já possui um bootloader carregado. Sem um bootloader apropriado, o firmware da aplicação pode não funcionar corretamente. Se você encontrar problemas ao executar a aplicação após o flash, consulte o próximo tópico para obter instruções sobre como criar e carregar um projeto básico de bootloader.
Para realizar o flash, você tem algumas opções: Run, Flash Programmer e Debug.
Run
Clicando com o botão direito no diretório do projeto, vá até a opção Run As→1 Silicon Labs ARM Program.
Esta opção faz o upload do binário da aplicação para o microcontrolador.
Flash Programmer
Entre as ferramentas disponíveis no Simplicity Studio está o Flash Programmer. Com ele, você pode fazer upload não apenas do programa que acabou de desenvolver, mas também de outros binários de forma isolada.
Para acessar o Flash Programmer, clique em Tools na barra superior e, em seguida, selecione Flash Programmer.
Dentro do Flash Programmer, clique em Browse para selecionar o arquivo binário que você deseja carregar. Em seguida, clique em Program para iniciar o upload do binário para o microcontrolador.
Debug
Primeiramente vá na barra superior em File→New→Silicon Labs Project Wizard...
Na tela inicial, certifique-se que o Target Device seja o mesmo que o utilizado para a aplicação principal e então clique em NEXT.
Pesquise por "bootloader" e selecione o exemplo "Bootloader - SoC Internal Storage (single image on 512kB device)". Este é um bootloader simples. Para aplicações mais complexas, você pode precisar usar um projeto padrão diferente ou modificar o projeto de bootloader conforme necessário.
Então clique em NEXT novamente, escolha um nome para o projeto e clique em FINISH.
Após criado o projeto, execute o build conforme explicado anteriormente, e então clique com o botão direito do mouse na pasta do projeto, vá em “Run As → 1 Silicon labs ARM Program”, para fazer flash do binário do Bootloader.
Clique em NEXT novamente, escolha um nome para o projeto e clique em FINISH.
Após criar o projeto, execute o build conforme explicado anteriormente. Em seguida, clique com o botão direito do mouse na pasta do projeto e selecione Run As → 1 Silicon Labs ARM Program para fazer o flash do binário do bootloader.
Após realizar o flash, sua aplicação deve funcionar corretamente. No entanto, se você quiser explorar mais o projeto, recomendo revisar os arquivos com as extensões .slcp
e .slpb
. Bons estudos e bom projeto!