Freedom Board K64F: Uma Placa ARM Para Projetos Avançados

79 views

Caro leitor, neste artigo apresento uma placa para desenvolvimento de aplicações do mundo real. A Freedom Board FRDM-K64F. O campo de aplicação dessa placa é bem vasto. Vou seguir com diversos tutoriais avançados para o usuário que quer fazer um projeto complexo no final de semana. Dentre os tutoriais vamos cobrir o uso de periféricos, programação em bare metal, e o uso de RTOS como FreeRTOS e Zephyr RTOS.

K64F Freedom Board? Parece um Arduino!

A NXP (antiga Freescale) desenvolveu essa família de placas de desenvolvimento para acomodar o ecossistema de shields já presentes no Arduino, para que os usuários possam migrar seu projeto com facilidade. Outro ponto importante sobre essa placa, é sua compatibilidade com a plataforma MBED, fornecida pela própria ARM, que compõe uma série de drivers, pilhas de comunicação e RTOS. Apesar de oferecer tantos recurso, esta placa é incrivelmente fácil de usar, chegando a ter a simplicidade do Arduino.

 

Placa Freedom Board K64F
Figura 1 – Placa Freedom Board K64F

 

A placa em si, é pequena no tamanho, mas não se engane, a CPU presente na placa é capaz de executar atividades complexas e além disso chama a atenção o conector Ethernet, permitindo que os usuários trabalhem com aplicações de comunicação cabeada com alto volume de dados. Para completar, essa placa dispõe de uma porta para debug de código baseada no OpenSDA, que pode receber o firmware de debuggers famosos como JLINK da Segger, ou mesmo DAPLink da própria ARM. Esqueça o debug da sua aplicação com Serial.Println(), aqui você vai executar seu código passo a passo examinando o que acontece em cada variável se for preciso.

 

A Freedom Board K64F conta com as seguintes caracteríticas:

  • MCU – MK64FN1M0VLL12 – ARM Cortex M4F, com clock máximo de 120MHz;
    • Contém 1Mb de memória de programa;
    • 256 Kb de memória de dados;
    • Cortex M4F, ou seja ponto flutuante nessa CPU é nativo;
    • Diversas portas de comunicação: SPI, UART (esse tem 6!), I2C, USB;
    • Controlador ENET nativo (Falaremos em outros artigos como usar a rede nessa placa);
    • Conversor A/D de 16bits;
    • Controlador de SDCARD por Hardware (Esqueça lentidão da SPI para acessa o cartão de memória).
  • Interface de Debug Baseada no OPEN-SDA (OpenSource);
  • Conector Ethernet com PHY integrada;
  • Acelerômetro integrado;
  • Slot para cartão SD;
  • 2 push-buttons de funções programáveis;
  • LED RGB;
  • Header para solda de rádios baseados na família NRF24.

 

Somente pela CPU e pela interface de Debug, essa placa já vale o investimento. O que a torna mais interessante é seu suporte nativo a diversos projetos desenvolvidos inicialmente para Arduino, os quais poderão incluir funções mais complexas após migrar para a Freedom Board K64F. Esse hardware tem todo suporte pelo MBED da ARM, incluindo seu RTOS para aplicações multitarefa.

 

Placa Freedom Board K64F em detalhe.
Figura 2 – Placa Freedom Board K64F em detalhe.

O Microcontrolador: Uma CPU ARM Para Ninguém Botar Defeito

Quando falamos de placas de desenvolvimento geralmente atreladas ao Arduino, somos direcionados para a conhecida arquitetura AVR e ATMEL. Embora seja um processador poderoso, seus 8 bits de dados e velocidade de barramento de 20 MHz máximos, podem apresentar lentidão para aplicações de processamento muitos de dados. Em alguns casos, o maior tempo com a CPU em funcionamento pode levar a um consumo de energia maior do que uma CPU como a CortexM4, de 32 bits. O set de instruções ARMv7M é poderoso e carrega diversas operações nativas bem como acesso de memória no K64F presente nessa placa. Isso é melhorado pela presença da unidade de ponto flutuante nativa, onde você tem instruções para uso de tipos de dado float.

Além disso, o Cortex-M4 traz junto consigo um set de instruções para processamento de sinais e paralelizador de operações SIMD, onde o vetor de inteiros de 16bits serão processados sem a CPU fazer o menor esforço. Por ser uma CPU mais complexa, seu hardware consequentemente é mais complexo.

NXP 2
Figura 3: Esquemático do MCU do Freedom Board K64F. (Disponível em: https://www.nxp.com/downloads/en/schematics/FRDM-K64F_SCH.pdf – Página 2)

 

Observem que a quantidade de sinais é comparativamente maior em relação a um Arduino Uno ou mesmo quando comparado a placa ROMEO V2.2 que já discutimos aqui no Blog. O MCU é composto de diversos PORTS, variando de A a E, mas nem todos os sinais estão disponíveis. Entretanto, a grande maioria bem como os com funções chave (SPI, I2C, A/D , PWM entre outros) estão disponíveis para acesso usando os headers localizados nas bordas das placas. Em suma, apesar deste sistema ser mais complexo do que o Arduino, o mesmo é mais flexivel pelo fato das funções dos pinos poderem ser remapeadas. Note que em termos de clock externo, existem duas opções:

  • O cristal de relógio tempo real (RTC) é utilizado para o MCU rodar em modos de baixo consumo;
  • O clock da PHY Ethernet de 50MHz pode servir de base para o MCU usar quando estiver rodando a aplicação de usuário.

Mas o segredo está mesmo no sistema de clock interno do MCU, que se bem configurado, pode converter o clock externo (ou mesmo interno) em uma velocidade de barramento impressionante, ultrapassando 120 MHz. (Já imaginou aquele seu projeto de impressora 3D rodando num micro desses? Pois bem, é melhor começar a pensar nisso…)

 

OpenSDA: Chega de Debugar Código Pelo Serial Monitor

Uma característica marcante, das placas da família Freedom, é sem dúvida a interface de debug que vem em todas elas, o OpenSDA. O nome vem de Open Source Debug Adapter, e possui toda a infraestrutura aberta para que o usuário reproduza o seu, vamos dar uma olhada no seu hardware:

 

NXP
Figura 4: Esquemático da interface OpenSDA. (Disponível em: https://www.nxp.com/downloads/en/schematics/FRDM-K64F_SCH.pdf – Página 3)

 

A placa Freedom Board K64F possui grande facilidade de comunicação com computadores, pelo fato de possui portas do tipo USB para transmissão de dados de programação. O OpenSDA da Freedom Board K64F é formado por um MCU extra (Kinetis K20), que roda o firmware de base combinado com o firmware do debug probe. Um dos debuggers mais poderosos do mundo dos embarcados – o Segger JLINK – pode ser gravado nesse MCU e você terá praticamente as mesmas funcionalidades de um JLINK na sua placa.

Além da possibilidade de usar o debugger de código, explorar recursos avançados como o Tracer de memória e o Serial console pela porta de debug, a velocidade de comunicação é de pelo menos 40 vezes mais rápida que uma porta serial comum a 115200 bps. O OpenSDA também pode ser usado apenas como gravador do MCU da placa, mas o que torna tudo mais interessante, é que ele é reconhecido pelo computador como um Mass Storage Device (unidade de memória semelhante a um pendrive). Logo basta arrastar o binário do firmware para ele, que o OpenSDA vai programar e acionar o reset do MCU automaticamente para você. Opcionalmente, notem no esquemático acima um conector de 10 vias, seu uso é para programar um MCU externo a placa. Caso o hardware personalizado já esteja pronto, a Freedom Board K64F ainda servirá como debugger para ajudar no desenvolvimento de seu projeto.

 

Periféricos: Para Todos os Gostos

Algo que todo desenvolvedor espera ao comprar uma placa de desenvolvimento é que ela venha com periféricos para testar as capacidades da CPU ou mesmo escrever aplicações completas em um hardware já testado. A Freedom Board K64F não decepciona, o primeiro periférico que se nota ao tirar a placa da caixa é o mostrado no esquemático abaixo.

Esquematico
Figura 5: Esquemático do RMII. (Disponível em: https://www.nxp.com/downloads/en/schematics/FRDM-K64F_SCH.pdf – Página 6)

 

O completo sistema de rede integrado à placa K64F é um dos principais recursos para uso. A NXP não colocou apenas um conector de rede, mas combinou com uma PHY RMII, de forma que as únicas configurações necessárias sejam apenas configurar o firmware a PHY e entregar o controle para o library de rede escolhida pelo usuário. Em termos de usabilidade, basta conectar a placa em uma rede ou switch e ativar seu projeto. Notem que essa placa K64F não fornece opção de PoE, usuário deverá prover alimentação para que a placa possa utilizada na rede.

 

Elementos de Funções Periféricas Integrados a Placa

Circuito
Figura 6: Esquemático dos sensores inerciais I2C (Acelerômetro e Magnetômetro). (Disponível em: https://www.nxp.com/downloads/en/schematics/FRDM-K64F_SCH.pdf – Página 4)

 

Sim, isso é um acelerômetro com magnetômetro, ideal para começar fazer experimentos com fusão de sensores, cálculos de orientação espacial, e detectores de atividade e movimentos específicos. Esse componente também é perfeito para testar as capacidades do set de processamento de sinais presentes no Cortex M4F. Já pensou que coisa legal extrair do acelerômetro dados de acelerações fazendo apenas as continhas de mecânica clássica sem precisar recorrer a shifts ou se preocupando com estouro de variáveis? Sobre o hardware, vale lembrar que a comunicação ocorre por I2C, mais precisamente a I2C0 do processador. Uma experiência interessante e com feedback imediato é configurar a intensidade e cor de um led RGB baseado na inclinação da placa.

LED FEATURE
Figura 7: Interface do LED RGB. (Disponível em: https://www.nxp.com/docs/en/user-guide/FRDMK64FUG.pdf – Página 14)

 

O led está justamente alí para esse tipo de experimento, a melhor parte é que a NXP já dotou o circuito dos resistores necessários e conectou os três terminais do LED em I/Os com capacidades de PWM, permitindo que o usuário crie as mais diversas cores. Sabemos que leds e botões fazem parte do set de periféricos que ajudam o desenvolvedor iniciante a sair do zero. Observem abaixo o esquemático dos botões da placa:

 

Interrupts
Figura 8: Esquemático dos botões tipo push button configuráveis. (Disponível em: https://www.nxp.com/downloads/en/schematics/FRDM-K64F_SCH.pdf – Página 4)

 

A placa possui dois botões do tipo push-buttons com pull-ups, ou seja teremos nível lógico alto quanto não estiverem sendo pressionados. Mas o que chama muito a atenção é que especificamente os pinos usados pelos botões são dotados de interrupção, ou seja, o usuário poderá colocar o MCU em modo de espera e só reativá-la quando o botão for apertado. Diferente da abordagem usual que é checar periodicamente o estado e tomar uma ação quando detectar um pressionamento, no método por interrupção a checagem é feita por hardware e o MCU apenas é requisitado em caso de pressionamento.

É fato que a Freedom Board K64F conquista pelos opcionais que facilitam a vida do desenvolvedor, um deles são os conectores dedicados:

SD Card Section
Figura 9: Interfaces dos módulos do cartão SD, ISM 2.4 GHz (RF / WiFi) e Bluetooth. (Disponível em: https://www.nxp.com/docs/en/user-guide/FRDMK64FUG.pdf – Páginas 11, 15 e 16.)

 

Temos três slots bem interessantes, em formatos para escolher o módulo e soldar. Um deles já bem popular que é o de cartão SD e está pronto pra uso, inclusive mapeado para o controlador SDHC presente no MCU da placa. O módulo de conexão Bluetooth é compatível com uma série de módulos disponíveis, inclusive o Módulo Bluetooth BLE V4.0 HM-10 Keyes que também pode ser encontrado na loja.

E fechando as conexões especiais, temos uma exclusiva para módulos de WiFI ou rádios como os NORDIC NRF24. Mas porque ambos? A resposta reside no fato de que ambos os casos esses módulos utilizam uma porta SPI para trabalhar com dados em altas velocidades, assim basta configurar a pilha de comunicação WiFi / RF e utilizar a tecnologia de comunicação sem fio em seus projetos.

Agora se seu projeto envolve aquele hardware personalizado, encerramos esse review assim:

Arduino Compatible Headers
Figura 10: Esquemático das conexões compatíveis com os soquetes do Arduino. (Disponível em: https://www.nxp.com/downloads/en/schematics/FRDM-K64F_SCH.pdf – Página 4)

 

Temos as conexões header nas bordas dessa placa. Um ponto que merece destaque aqui, é que Freedom Board K64F é compatível com 2 padrões: o padrão dos shields para Arduino e o padrão de I/O MBED da ARM, aumentando muito a gama de acessórios compatíveis e deixando à escolha do usuário configurar e utilizar o recurso de sua preferência.

 

Desenvolvendo Fora da Plataforma Arduino

Sair para um hardware com mais recursos envolve a necessidade de um estudo mais profundo de seus componentes e do processo de desenvolvimento. Muitas vezes as variáveis e fundamentos de desenvolvimento estão de acordo com as capacidades do Arduino, porém com a troca para o Freedom Board K64F as vantagens são evidentes, como o fato de poder controlar a CPU ao seu modo, além do ganho de flexibilidade. Existem passos para tornar a transição do Arduino para o Freedom Board K64F mais fácil e o primeiro deles é utlizar o ARM mbed.

http://cdn01.androidauthority.net/wp-content/uploads/2015/04/mbed-OS-the-end-to-end-software-ecosystem-for-IoT.jpg
Figura 11: Splashscreen do software ARM mbed.

 

O ARM mbed é um conjunto de desenvolvimento completo para dispositivos embarcados. Possui foco em IoT, mas pode ser estendido para outras aplicações. Composto por uma API poderosa em C++, muito similar e simples de usar como o Arduino IDE, suporta o Freedom Board K64F com device drivers, abstração de hardware, sensores, atuadores, RTOS e conectividade. O usuário iniciante pode tirar vantagem do ambiente de desenvolvimento online, o mbed Compiler:

 

https://www.uelectronics.info/backup/sites/uelectronics.info/files/images/mbed%20Compiler%20-%20_test_main_cpp%27%20-%20mbed_org_compiler.png
Figura 12: janela de interface da plataforma online mbed Compiler.

 

Basicamente o usuário faz o login, desenvolve, compila e recebe o arquivo binário pronto para uso. Basta arrastar e soltar dentro do OpenSDA que já falamos aqui, sendo uma experiência ainda mais rica que o uso da IDE Arduino. Você quer aproveitar tudo que o processador oferece, inclusive tirar todo o potencial do MBED e dos módulos de software opcionais do K64F? Então considere o uso do ambiente (gratuito!) de desenvolvimento oferecido pela NXP, o MCUXpresso:

 

Logo do MCUXpresso IDE.
Figura 13: Logo do MCUXpresso IDE.

 

Esse ambiente é offline e baseado em Eclipse, fornecendo todas as ferramentas para criar o projeto, compilar, transferir a programação para a placa e mais que isso, permite o debug de código com o OpenSDA. Lembra quando falamos sobre abolir o Serial.println()? É aqui onde você vai encontrar isso, observem o aspecto da IDE:

https://mcuoneclipse.files.wordpress.com/2017/03/debugging-with-mcuxpresso.png?w=584&h=408
Figura 14: Janela do software MCUXpresso IDE com código em debug.

 

 

A tela acima apresenta um código em Debug. Reparem na quantidade de informações que podem ser testadas em tempo real. Será muito mais fácil achar aquele problema durante o desenvolvimento. Mas como já dito, aqui a dor da migração pode ser maior. Uma vez acostumado com o MBED, você poderá importar o projeto no formato do MCUX e usar o ambiente offline. Assim, poderá continuar seu desenvolvimento e explorar as opções avançadas aos poucos. Portanto, não tenha medo, venha ver o que existe além do Arduino.

 

Fiquem ligados, vem bastante novidade por ai. Até a próxima!

 

Referências

(Visited 50 times, 1 visits today)