Espruino: JavaScript no microcontrolador RISC-V

Espruino

JavaScript rodando diretamente em um microcontrolador com arquitetura RISC-V? Isso mesmo! Estou entusiasmado em apresentar o meu porte do Espruino para o HiFive1 da SiFive. Os links dos sources no GitHub e binário do firmware estão nas conclusões deste artigo.

 

Espruino

 

O Espruino é um interpretador JavaScript para microcontroladores. Foi criado por Gordon Williams em 2012, escrito em C e inicialmente chamado por ele de TinyJS. O objetivo do Espruino é facilitar o aprendizado e desenvolvimento de sistemas embarcados utilizando JavaScript. Você pode verificar as motivações da criação do Espruino nesse artigo do Gordon.

 

HiFive1

 

O HiFive1 é a primeira placa de desenvolvimento compatível com Arduino com um microcontrolador RISC-V. O Freedom E310, também, é o primeiro chip RISC-V a ser produzido em massa. A fabricante é a SiFive, empresa pioneira no setor que disponibiliza os arquivos do projeto do core em seu Github. Você também pode saber mais sobre a placa aqui.

 

 

Espruino no HiFive1

 

Nas últimas semanas estive trabalhando no porte do Espruino para o HiFive1. Gordon fez um ótimo trabalho na divisão de escopo do projeto, o que facilitou bastante o desenvolvimento. Um agradecimento especial ao Gordon, pelo belo trabalho.

 

O projeto está bem dividido nestes blocos:

 

 

Desenvolvimento

 

Tive que trabalhar primeiramente na toolchain, onde acrescentei as configurações e regras dos makefiles para compilação e construção do binário. Me baseei nos exemplos do SDK da SiFive e nas compilações geradas no PlatformIO para o HiFive1. Com uma toolchain funcionando parti para o desenvolvimento dos drivers e abstração do hardware.

 

Nos drivers eu trabalhei na conexão Serial UART, interrupções de máquina, acesso à GPIO: pin mux, configuração, leitura dos níveis.

 

Na abstração de Hardware que ficam as chamadas que o interpretador do JavaScript conhece. Aqui eu implementei algumas funções fazendo o bind das funcionalidades dos drivers. Acrescentei também as funcionalidades de timers, que o interpretador usa para a geração de datas, intervalos, time outs e etc.

 

Geralmente em sistemas embarcados o primeiro periférico em que trabalhamos é a UART Serial. Deixo aqui um agradecimento ao David Grubb que escreveu uma biblioteca bacana para UART do FE310, que usei como base e acrescentei funções de interrupções.

 

Você também pode acompanhar as etapas do desenvolvimento do port pelos commits aqui.

 

Estado da Arte

 

No momento temos um Espruino rodando no HiFive1 com as funcionalidades básicas, runtime JavaScript e acesso à GPIO. Podemos por exemplo usar os LEDs RGB onboard da placa para escrever um blink sortido.

 

 

 

Podemos utilizar a extensão Espruino IDE do Chrome para realizar o upload de arquivos JavaScript para a placa:

 

 

Ou programar JavaScript diretamente pela conexão serial:

 

 

JavaScript para microcontroladores no seu HiFive1 simples assim!

 

Conclusão

 

Mais uma vez, tenho que deixar aqui que o Gordon Williams fez um belo trabalho escrevendo o Espruino, a API e o interpretador realmente deixam os acessos e utilização de sistemas embarcados muito mais fáceis.

 

Ainda há bastante trabalho a ser feito nesse porte, escrever o driver para implementar o "save()" da programação no flash SPI é a próxima etapa, mas já é um começo.

 

Espero que a comunidade que já utiliza o FE310 em seus projetos, ou que vai começar a utilizar, façam bom proveito desse trabalho.

 

Seguem os sources e o binário firmware.

Confira o vídeo sobre o port do Espruino para o HiFive1 no canal MicroHobby:

 

 

Saiba mais

 

FE310G: Um microcontrolador open source - Estrutura básica do RISC-V

Conheça a LoFive - Placa open hardware com o FE310G da SiFive

SiFive lança o primeiro SoC RISC-V compatível com Linux

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Matheus Castello
Cientista da Computação atuando desde 2013 nas áreas de sistemas embarcados, Android e Linux. Trabalhou diretamente com o Kernel Linux embarcado em modelos de smartphones e tablets Samsung comercializados na America Latina. Colaborou no upstream para o Kernel Linux, árvore git do Linus Torvalds, para o controlador de GPIO da família de processadores utilizados nos Raspberry Pi. Palestrante FISL 2018 e Linux Developer Conference Brazil 2018.

Deixe um comentário

avatar
 
  Notificações  
Notificar