Come utilizzare i microcontroller basati su RISC-V

Di Jacob Beningo

Contributo di Editori nordamericani di DigiKey

Ai progettisti viene chiesto con insistenza di innovare, mantenendo però segreta la loro proprietà intellettuale (IP) e riducendo al tempo stesso il consumo energetico e i costi. Di conseguenza, per coloro che progettano processori per applicazioni mobili, l'insieme di istruzioni (ISA) su hardware open-source RISC-V presenta motivi di interesse. Ora che RISC-V è un'opzione per i microcontroller, i progettisti di sistemi embedded e di dispositivi consumer devono affrettarsi a creare progetti basati su RISC-V.

La scheda di sviluppo LoFive-R1 FE310 di GroupGets LLC è di grande aiuto in questo senso. Prima di introdurre LoFive-R1, questo articolo illustrerà RISC-V e spiegherà perché lo sviluppatore dovrebbe prenderlo in considerazione. Descriverà poi LoFive-R1, mostrerà come iniziare a sviluppare applicazioni e darà alcuni consigli.

Cos'è RISC-V?

RISC-V è un'architettura per un insieme di istruzioni (ISA) su hardware open-source avviato dalla California University di Berkeley nel 2010. La decisione di creare l'architettura RISC-V è stata motivata da diverse ragioni, tra cui:

  • Rispondere all'esigenza di un insieme di istruzioni (ISA) open-source che potesse essere utilizzato a livello accademico nei progetti universitari e anche dagli studenti
  • Disporre di un mezzo per condividere le esperienze nello sviluppo di ISA
  • Evitare di pagare royalty alle aziende di chip presenti sul mercato e quindi risparmiare sui costi
  • Proteggere i dettagli progettuali di un'architettura (la proprietà intellettuale di un'azienda) per rimanere commercialmente vitali

Dal punto di vista del progettista, RISC-V è un'architettura semplificata, studiata per un funzionamento veloce e a basso consumo. In virtù di queste caratteristiche i chip basati su RISC-V sono idonei non solo per il mondo accademico ma anche per applicazioni commerciali. La RISC-V Foundation ha suscitato quindi un crescente interesse, tanto da poter contare ora su circa 325 membri, tra cui aziende come Si-Five, Google, Microchip Technology, NVIDIA e Qualcomm.

Sono molte le aziende che contribuiscono allo sviluppo di RISC-V, ma per lo sviluppatore medio il modo migliore per mettervi le mani è trovare una scheda di sviluppo basata su un processore RISC-V.

La scheda di sviluppo LoFive FE310

Una di queste schede di sviluppo è la LoFive-R1 di GroupGets LLC (Figura 1).

Immagine della scheda di sviluppo LoFive-R1 di GroupGetsFigura 1: La scheda di sviluppo LoFive-R1 comprende un processore RISC-V e tutti i circuiti di supporto necessari per farne un modulo processore saldabile direttamente su una scheda portante. (Immagine per gentile concessione di GroupGets LLC)

In primo luogo, LoFive R1 include un processore RISC-V in grado di funzionare fino a 320 MHz. Il processore comprende 8 kB di memoria programmabile una sola volta (OTP), 8 kB di Mask ROM, 16 kB di cache di istruzioni e 16 kB di SRAM. Il processore ha anche tre controller PWM (a modulazione di larghezza di impulso) indipendenti, SPI, I2C, UART e anche un'interfaccia flash QSPI.

In secondo luogo, la scheda di sviluppo può avere basette saldate oppure, visti i bordi con fori parziali, può essere saldata direttamente su una scheda portante e utilizzata come modulo processore. Può essere quindi estremamente facile per uno sviluppatore progettare hardware personalizzato senza doversi occupare della logistica di approvvigionamento del processore.

Infine, la scheda di sviluppo è dotata di una flash QSPI integrata che viene fornita attraverso un modulo flash IS25LP128 di Integrated Silicon Solution, Inc. (ISSI). IS25LP128 è un modulo flash da 128 Mbit, 16 MB che può funzionare a velocità di bus SPI fino a 133 MHz quando viene utilizzato in modalità quad input/output (Figura 2). Il modulo flash SPI può essere utilizzato a fini di archiviazione per garantire all'applicazione uno spazio abbondante, o per memorizzare dati di runtime come i registri dell'applicazione.

Schema del modulo flash SPI a 128 Mbit di ISSIFigura 2: La scheda di sviluppo LoFive-R1 include un modulo flash SPI da 128 Mbit di ISSI che viene utilizzato per l'archiviazione delle applicazioni. (Immagine per gentile concessione di ISSI)

La scheda di sviluppo funzionerà anche a 5 V, che vengono convertiti in 3,3 V da un regolatore lineare SPX3819M5 di MaxLinear. Il regolatore alloggiato in un contenitore SOT23-5 fornisce fino a 500 mA. La scheda di sviluppo non assorbirà molta corrente, quindi può supportare sensori e dispositivi supplementari senza che si renda necessario aggiungere ulteriori circuiti di alimentazione.

Schema del regolatore lineare SPX3819 da 3,3 V di MaxLinearFigura 3: Il regolatore lineare SPX3819 da 3,3 V sulla scheda di sviluppo LoFive-R1 fornisce fino a 500 mA. Questa capacità è sufficiente sia per i circuiti di bordo che per alcuni dispositivi esterni, come i sensori. (Immagine per gentile concessione di MaxLinear)

Infine, tutti i dettagli di progettazione per la scheda di sviluppo, come gli schemi e la distinta base, si trovano su GitHub. Grazie a queste informazioni, per uno sviluppatore è più facile capire come funziona la scheda. Inoltre le può utilizzare anche come guida alla progettazione per soluzioni personalizzate.

Impostazione della toolchain RISC-V e programmazione della scheda di sviluppo

Uno sviluppatore scoprirà che per RISC-V sono disponibili più toolchain, a seconda della scheda di sviluppo scelta. È importante sapere che l'SDK per RISC-V è disponibile per Windows, MacOS e Linux. Questo articolo mostrerà come configurare la scheda di sviluppo per Linux.

Per prima cosa, in un terminale, scaricare l'SDK LoFive Freedom-E da GitHub utilizzando il seguente comando:

git clone --recursive https://github.com/mwelling/freedom-e-sdk.git

Quindi, portarsi sulla directory creata dall'SDK utilizzando:

cd freedom-e-sdk

Per la scheda di sviluppo sono disponibili due diversi SDK. Il primo è chiamato "SDK legacy", perché è una versione più vecchia. Usare l'SDK più recente. Questo SDK ha una toolchain pre-costruita e include OpenOCD per il debug. L'SDK può essere scaricato con i seguenti comandi:

git checkout lofive-r1

git submodule sync

git submodule update –init –recursive

La scheda di sviluppo può essere programmata in diversi modi. In primo luogo, sul processore vi sono dei segnali JTAG standard che sono disponibili attraverso i connettori di espansione LoFive-R1. Uno sviluppatore può utilizzare qualsiasi programmatore che supporti JTAG, ad esempio un J-Link SEGGER. In mancanza di un programmatore, può usare un convertitore USB-seriale a basso costo come FT2232H-56Q Mini MDL di FTDI (Figura 4). FT2232H-56Q Mini MDL è un modulo che ospita tutte le connessioni e i breakout necessari per interfacciarsi con la scheda di sviluppo LoFive-R1. L'SDK utilizza gli I/O per uso generale disponibili su FT2232H-56Q per creare le connessioni JTAG necessarie per programmare il microcontroller.

Immagine del modulo seriale FT2232H-56Q MINI MDL di FTDIFigura 4: FT2232H-56Q MINI MDL è un modulo seriale a basso costo che può essere interfacciato direttamente con un computer tramite USB e poi alla UART sulla scheda di sviluppo LoFive-R1. (Immagine per gentile concessione di FTDI)

Tra la scheda di sviluppo LoFive-R1 e il modulo FT2232H-56Q occorre stabilire nove diverse connessioni (Tabella 1).

Pin della scheda di sviluppo LoFive-R1 Pin del modulo FT2232H-56Q
+5 VIN VBS
Terra GND
TRSTN AD5
TCK AD0
TDO AD2
TMS AD3
TDI AD1
UART0.TX BD1
UART0.RX BD0

Tabella 1: Una tabella semplice che può essere utilizzata per stabilire le connessioni tra la scheda di sviluppo LoFive-R1 e il modulo FT2232H-56Q. (Tabella per gentile concessione di DigiKey)

Queste connessioni possono essere riassunte come:

  • Alimentazione e terra
  • Segnali JTAG
  • Segnali UART

Le connessioni possono essere effettuate direttamente, oppure utilizzando una basetta sperimentale come PB-83M di Global Specialties (Figura 5). Per semplificare la prototipazione, queste basette sperimentali hanno spine a banana per due sorgenti di tensione e terra.

Immagine della basetta sperimentale PB-83M di Global Specialties con connettori a banana

Figura 5: Per semplificare la prototipazione, PB-83M mette a disposizione dei connettori a banana per due sorgenti di alimentazione e terra. (Immagine per gentile concessione di Global Specialties)

Quando si usa LoFive-R1 per la prima volta, è consigliabile installare un bootloader su scheda. Il bootloader viene installato una sola volta e può essere utilizzato per facilitare ulteriori aggiornamenti. Può essere effettuato dall'SDK eseguendo il seguente comando:

make PROGRAM=lofive-boot TARGET=lofive-r1-bootloader upload

Quindi si può caricare sulla scheda di sviluppo l'applicazione "hello world" utilizzando il seguente comando:

make PROGRAM=sifive-welcome TARGET=lofive-r1 upload

A questo punto, uno sviluppatore avrà programmato la sua prima applicazione RISC-V e da qui avrà infinite possibilità.

Consigli per lavorare con RISC-V

Utilizzare i processori RISC-V è un po' diverso dagli ecosistemi dei microcontroller standard. Ecco alcuni consigli:

  • Dopo aver scaricato l'SDK LoFive-R1, leggere il file README.md nella directory principale. Contiene informazioni utili su dove trovare la documentazione SDK, i BSP (Board Support Package) e altre informazioni interessanti.
  • Se è disponibile una sonda di debug professionale come J-Link SEGGER, usarla per programmare le applicazioni nel processore RISC-V. J-Link supporta RISC-V dal 2017.
  • Gli sviluppatori che preferiscono usare un IDE anziché gli strumenti dalla riga di comando, possono servirsi dell'IDE basato su Eclipse Freedom Studio per lo sviluppo di RISC-V.

Seguendo questi consigli, gli sviluppatori che lavorano con RISC-V per la prima volta risparmieranno parecchio tempo ed eviteranno grattacapi.

Conclusione

RISC-V è un'architettura interessante che può essere adatta per gli sviluppatori alla ricerca di un'architettura hardware open-source. Al momento esistono schede di sviluppo per i processori RISC-V e, come è stato spiegato in questo articolo, la configurazione delle toolchain non è molto più difficile di qualsiasi altro microcontroller standard.

Non dimenticare però che, per quanto intrigante, RISC-V non dispone del ricco ecosistema di cui godono molte delle esistenti piattaforme di microcontroller, per cui gli sviluppatori potrebbero scoprire di avere un numero minore di scelte e risorse da sfruttare lungo il loro percorso. A seconda dell'applicazione finale e delle preferenze e risorse dello sviluppatore, potrebbe comunque valere la pena accettare questo compromesso.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo è un consulente software embedded e attualmente lavora con clienti in più di una decina di paesi per trasformare radicalmente le loro attività migliorando la qualità dei prodotti, i costi e il time-to-market. Ha pubblicato più di 200 articoli sulle tecniche di sviluppo di software embedded, è un relatore e un istruttore tecnico e ha conseguito tre lauree, tra cui un master in ingegneria presso University of Michigan. Risponde all'indirizzo jacob@beningo.com, ha un sito web personale www.beningo.com e produce una Newsletter mensile Embedded Bytes cui è possibile iscriversi.

Informazioni su questo editore

Editori nordamericani di DigiKey