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):
- Desconecte a placa NXP FRDM-K64F de todos os cabos;
- Pressione o botão de RESET;
- Com o botão pressionado, conecte o cabo USB;
- No Ubuntu deverá aparecer uma janela mostrando a seguinte pasta que acabou de ser montada: /media/<seu usuario>/BOOTLOADER;
- Pode, então, liberar o botão de Reset.
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:
- Makefile
- prj.conf
- prj.mdef
- README.txt
- outdir/
- src/
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:
- Serial line to connect to /dev/ttyACM0
- Speed = 115200.
- Data bits 8
- Stop bits 1
- Parity None
- Flow Control None
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.








