Site icon Embarcados – Sua fonte de informações sobre Sistemas Embarcados

Hello World com o Zephyr para a placa NXP FRDM-K64F

Uma forma fácil de transferir arquivos de seu computador para a placa NXP FRDM-64F é utilizando o CMSIS-DAP da mbed. Basta apenas plugar a placa na USB de seu PC que ela é detectada como um Mass Storage Device (MSD) para transferência de arquivos e gravação de binário. Portanto, basta arrastar o binário desejado para dentro deste drive. Vamos utilizar esse sistema de bootloader rápido para transferir os arquivos gerados no computador para a placa e fazeremos um hello world com a UART do microcontrolador da NXP utilizando o Zephyr, RTOS da Linux Fundation e lançado a pouco.

Caso você tenha perdido os artigos sobre o Zephyr, Felipe Neves escreveu dois artigos sobre esse RTOS da Linux Foundation. No primeiro apresenta o novo RTOS da Linux Foundation, e no segundo ensina como instalar todos os pacotes para trabalhar no Ubuntu Linux. Para rodar esse tutorial é importante seguir todos os passos descritos no artigo anterior.

Artigo 1 – Zephyr, o RTOS para IoT desenvolvido pela Linux Foundation

Artigo 2 – Como instalar o Zephyr no Ubuntu 16.04

Primeiramente é interessante verificar se a placa possui o bootloader mais novo para usar o mbed. Para entrar no bootloader, seja no Windows ou Linux, basta seguir o procedimento a seguir (estamos usando o Ubuntu 16.04 para esse texto):

Faça o download da versão mais nova do bootloader neste link. Hoje a versão mais nova disponível é a 0226_k20dx128_k64f_0x5000.bin.

Copie esse arquivo que acabou de baixar de seu PC pra dentro da placa, montada no seu PC. O LED D2 vai começar a piscar após a transferência. Quando terminar de piscar, aparecerá um drive chamado MBED em seu PC.

Quando conecto minha placa, depois do update, aparece uma pasta /media/thiago/MBED com dois arquivos, DETAILS.TXT e MBED.HTM. No Arquivo DETAILS.TXT posso checar qual a versão mais nova do MBED. No meu caso verifiquei o conteúdo desse arquivo:

Version: 0226

Build:   Aug 24 2015 17:06:30

Git Commit SHA: 27a236b9fe39c674a703c5c89655fbd26b8e27e1

Git Local mods: Yes

Pronto. A placa está pronta para receber um binário com seu programinha feito pra FRDM-K64F.

Hello World usando a UART da FRDM-K64F e o Zephyr

Criei uma pasta chamada k64f_blink no meu diretório raiz e copiei todos os arquivos do hello world que rodamos no artigo anterior para essa placa. A ideia foi aproveitar toda a estrutura e não começar do zero.

mkdir ~/k64f_blink

cd ~/k64f_blink

cp -R ~/zephyr-project/samples/hello_world/microkernel/* .
 

Os seguintes arquivos e pastas vão ser copiados para esta pasta:

Edite o arquivo main.c da pasta para que ele imprima a palavra Hello World diversas vezes no terminal, pela uart do microcontrolador. Coloque também uma tarefa de sleep, para que o sistema operacional de tempo real não fique processsando essa tarefa sem parar e para que possamos ver os caracteres sendo impressos no terminal com uma cadência adequada. Edite o arquivo:

gedit src/main.c  
void main(void)
{
       while (1) {
               PRINT("Hello World \r\n");

               task_sleep(100);
       }
}

Salve o arquivo. Verifique se a libncurses esta instalada em seu PC:

sudo apt-get install libncurses

Rode o comando de menuconfig:

make menuconfig

Voce deverá ver uma tela mais ou menos como esta:

Escolha e marque as seguintes opções:

Architecture

   ARM Architecture

ARM SoC Selection

   Kinetis K6x Series MCU

Board Selection

   Freescale FRDM-K64F

Kernel Type

   Micro Kernel

Device Drivers

   Console Drivers

        Serial Drivers

            K20 serial driver

        GPIO Drivers

            Freescale K64-based GPIO driver

                Freescale K64-based GPIO Port A (GPIO_0)

                Freescale K64-based GPIO Port B (GPIO_1)

                Freescale K64-based GPIO Port C (GPIO_2)

                Freescale K64-based GPIO Port D (GPIO_3)

                Freescale K64-based GPIO Port E (GPIO_4)

Para as opções a seguir, deixe todas como a default, não altere nenhuma configuração inicial.

ARM Options

General Kernel Options

Nanokernel Options

Power Management

Networking

Cryptography

Compile and Link Features

Debugging options

Logging Options

System Monitoring Options

Boot Options

Saia e Salve as configurações.

Para compilar utilize os comandos:

make clean

make O=out-arm BOARD=frdm_k64f

Voce deverá ver:

thiago@Paris:~/k64f_blink$ make clean

make[1]: Entering directory '/home/thiago/zephyr-project'

make[2]: Entering directory '/home/thiago/k64f_blink/outdir'

make[2]: Leaving directory '/home/thiago/k64f_blink/outdir'

make[1]: Leaving directory '/home/thiago/zephyr-project'
thiago@Paris:~/k64f_blink$ make O=out-arm BOARD=frdm_k64f

make[1]: Entering directory '/home/thiago/zephyr-project'

make[2]: Entering directory '/home/thiago/k64f_blink/out-arm'

 Using /home/thiago/zephyr-project as source for kernel

 GEN     ./Makefile

 CHK     include/generated/version.h

 CHK     misc/generated/configs.c

 CHK     include/generated/offsets.h

 CHK     misc/generated/sysgen/prj.mdef

make[2]: Leaving directory '/home/thiago/k64f_blink/out-arm'

make[1]: Leaving directory '/home/thiago/zephyr-project'

Na pasta ~/k64f_blink/out-arm foi criado um arquivo zephyr.bin. Conecte a placa FRDM-K64F a uma USB do computador.

No meu PC, abriu uma janela com o endereço /media/thiago/MBED1.

Arraste o arquivo zephyr.bin para essa pasta. Após alguns segundos, o led D2 vai começar a piscar. Desconecte a placa da USB e a conecte novamente.

Rode o comando:

dmesg | grep tty

No meu PC obtive a seguinte mensagem:

[   11.381819] systemd[1]: Created slice system-getty.slice.

[ 2939.483804] cdc_acm 1-1:1.1: ttyACM0: USB ACM device

[ 3019.208579] cdc_acm 1-1:1.1: ttyACM0: USB ACM device

[ 5193.427492] cdc_acm 1-1:1.1: ttyACM0: USB ACM device

A placa foi montada no endereco /dev/ttyACM0.

Use algum monitor serial para ver se deu certo o print na serial utilizando a placa NXP. Para isso, uma das opções é utilizar o minicom ou o putty. Eu usei o putty. Caso não tenha o putty em sua máquina, o instale com:

sudo apt-get install putty

Para rodar, é necessário ser root.

sudo putty

Selecione a opção Serial.

Do lado esquerdo, selecione a opção Serial.

Em Serial line, coloque o nome de sua porta USB. Veja acima que no meu PC apareceu a porta serial como ttyACM0. Então coloquei:

Volte no começo, em Session, e em saved sessions, escolha um nome, por exemplo, mbed e salve a sessão.

E então clique em open.

Você deverá conseguir ver o terminal serial sendo impresso a palavra Hello World.

Parabéns, funcionou!

Para as próximas vezes que utilizar o Putty, essa sessão já está salva e basta clicar na palavra que utilizou com o nome da sessão (no meu caso, mbed), clicar em load e clicar em open.

Agradecimentos

Gostaria de agradecer imensamente ao suporte de Felipe Neves para a construção deste post. Agradeço também a Eduardo Scherer pelo seu texto sobre a NXP FRDM-K64F que me ajudou e todas as dicas que ele me deu.

Referências

As principais referências foram mesmo o código do projeto Zephyr, o site do projeto Zephyr, o site da mbed e a lista de emails do Zephyr.