Kom igång med RISC-V-baserade microcontrollers

Av Jacob Beningo

Bidraget med av DigiKeys nordamerikanska redaktörer

Konstruktörer arbetar under konstant press att komma med nya innovationer. Detta är inte lätt när man samtidigt måste hålla sina immateriella rättigheter hemliga och ändå klara av att minska strömförbrukningen och hålla nere kostnaderna. Detta har gjort att RISC-V instruktionsuppsättningsarkitektur (ISA) för maskinvara med öppen källkod är intressant för alla som konstruerar processorer för mobila tillämpningar. Nu när RISC-V finns som alternativ för microcontrollers behöver konstruktörer av inbäddade system och kundenheter lite hjälp för att komma igång med sin egen RISC-V-design.

En intressant produkt kan då vara utvecklingskortet FE310 LoFive-R1 från GroupGets LLC. Innan vi beskriver LoFive-R1 tittar vi i denna artikel närmar på RISC-V och varför det är något som kan vara intressant för utvecklare. Därefter tar vi alltså en titt på LoFive-R1 och ser hur du kan komma igång med att utveckla tillämpningar – vi går även igenom några bra tips.

Vad är då RISC-V?

RISC-V är en instruktionsuppsättningsarkitektur för maskinvara med öppen källkod som såg dagens ljus första gången som projekt på University of California, Berkeley 2010. Det fanns många anledningar att ta fram RISC-V-arkitekturen, bland annat följande:

  • Tillgodose behovet av en instruktionsuppsättningsarkitektur (ISA) med öppen källkod som kunde användas i universitetsprojekt och av studenter
  • Man ville hitta ett sätt att dela erfarenheter rörande konstruktion vid utveckling av ISA
  • Man ville hitta ett sätt att undvika att behöva betala upphovsrättslig ersättning till etablerade chipföretag och på så sätt sänka kostnaderna
  • Man ville skydda konstruktionsdetaljer i en arkitektur (ett företags immateriella rättigheter) av marknadsmässiga skäl

Ur en konstruktörs synvinkel är RISC-V en förenklad arkitektur utformad att vara snabb och strömsnål. Det gör RISC-V-baserade chip lämpliga för kommersiella tillämpningar, inte bara för universitetsvärlden. RISC-V Foundation har faktiskt lyckats intressera cirka 325 medlemmar, inklusive företag som Si-Five, Google, Microchip Technology, NVIDIA och Qualcomm.

Samtidigt som det finns många företag som bidrar till utvecklingen av RISC-V är det bästa sättet för den genomsnittlige utvecklaren som vill komma igång med RISC-V att hitta ett utvecklingskort baserat på en RISC-V-processor.

Utvecklingskortet LoFive FE310

Ett sådant utvecklingskort är LoFive-R1 från GroupGets LLC (figur 1).

Bild på GroupGets utvecklingskort LoFive-R1Figur 1: Utvecklingskortet LoFive-R1 har en RISC-V-processor och alla stödkretsar som behövs för att göra utvecklingskortet till en processormodul som kan direktlödas på ett bärarkort. (Bildkälla: GroupGets LLC)

För det första har LoFive R1 en RISC-V-processor som kan köras vid upp till 320 MHz. Processorn har ett engångs-PROM-minne (OTP) (8 kB), Mask ROM (8 kB), instruktionscache (16 kB) och SRAM (16 kB). Processorn har också tre oberoende pulsbreddsmodulerade styrenheter, SPI, I2C, UART och även ett flashgränssnitt QSPI.

För det andra kan utvecklingskortet ha stiftlisterna antingen fastlödda eller så kan utvecklingskortet (tack vare att det har tandade kanter) direktlödas på ett bärarkort och användas som processormodul. Detta kan underlätta mycket för utvecklare, då de kan konstruera anpassad maskinvara utan att behöva gå igenom allt arbete med att anskaffa processorn.

För det tredje har utvecklingskortet ett QSPI-flash (on-board) som tillhandahålls via en flashmodul IS25LP128 från Integrated Silicon Solution Inc. (ISSI). IS25LP128 är en flashmodul (128 Mb, 16 MB) som kan användas vid SPI-busshastigheter upp till 133 MHz i fyrfaldigt ingångs/utgångs-läge (figur 2). SPI-flashmodulen kan användas för lagring, för att säkerställa att det finns gott om applikationsutrymme eller för att lagra körtidsdata som programloggar.

Diagram över ISSI SPI-flashmodul (128 Mb)Figur 2: Utvecklingskort LoFive-R1 har en ISSI SPI-flashmodul (128 Mb) som används för programlagring. (Bildkälla: ISSI)

För det fjärde kan utvecklingskortet också köras på 5 V som konverteras till 3,3 V med en linjär regulator SPX3819M5 från MaxLinear. Regulatorn levereras i ett SOT23-5-paket som levererar upp till 500 mA. Utvecklingskortet drar inte mycket ström, så det kan stödja extra sensorer och enheter utan behov av extra strömkretsar.

Diagram över MaxLinear SPX3819 linjär regulator (3,3 V)Figur 3: SPX3819 linjär regulator (3,3 V) på utvecklingskortet LoFive-R1 levererar upp till 500 mA. Detta är tillräckligt för både kretsarna på kortet och externa enheter, exempelvis sensorer. (Bildkälla: MaxLinear)

Slutligen finns alla konstruktionsdetaljer för utvecklingskortet (som till exempel kopplingsscheman och materiallista) på GitHub. Denna information underlättar för utvecklare att förstå hur kortet fungerar och kan också användas som konstruktionsguide för anpassade utvecklingsprojekt.

Konfigurera RISC-V-programmeringskedjan och programmera utvecklingskortet

Utvecklare kommer att se att det finns många verktygskedjor som kan användas för RISC-V, beroende på vilket utvecklingskort som har valts. SDK för RISC-V finns för Windows, macOS och Linux. I denna artikel visas hur ett utvecklingskort för Linux installeras.

Börja med att i en terminal checka ut LoFive Freedom-E SDK från Git med hjälp av följande kommando:

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

Flytta den därefter till biblioteket som skapats av SDK med hjälp av:

cd freedom-e-sdk

Det finns två olika SDK tillgängliga för utvecklingskortet. Den första kallas ”legacy SDK” eftersom den är av en äldre version. Använd den nyaste SDK-versionen. Den har ett färdigt programmeringsverktyg och OpenOCD för felsökning. SDK kan checkas ut med följande kommandon:

git checkout lofive-r1

git submodule sync

git submodule update –init –recursive

Programmering av utvecklingskortet kan utföras på flera olika sätt. För det första finns det standard JTAG-signaler på processorn, vilka är tillgängliga genom LoFive-R1-expansionskontakter. Utvecklare kan använda alla programmeringsverktyg som stöder JTAG, som till exempel SEGGER J-Link. Om programmeringsverktyg inte finns tillgängligt kan utvecklare också använda billiga omvandlare (USB till seriell) som FT2232H-56Q Mini MDL från FTDI (figur 4). FT2232H-56Q Mini MDL är en modul med alla anslutningar och breakout-kort som behövs för anslutning till utvecklingskortet LoFive-R1. SDK använder universalingångar/-utgångar på FT2232H-56Q för att upprätta nödvändiga JTAG-anslutningar till microcontrollern.

Bild på seriell modul FTDI FT2232H-56Q MINI MDLFigur 4: FT2232H-56Q MINI MDL är en billig seriell modul som kan direktanslutas till en dator via USB och därefter till UART (on-board) på utvecklingskort LoFive-R1. (Bildkälla: FTDI)

Det finns nio olika anslutningar som måste upprättas mellan utvecklingskort LoFive-R1 och modulen FT2232H-56Q (tabell 1).

Stift på utvecklingskort LoFive-R1 Stift på FT2232H-56Q-modul
+5 VIN VBS
Jord GND
TRSTN AD5
TCK AD0
TDO AD2
TMS AD3
TDI AD1
UART0.TX BD1
UART0.RX BD0

Tabell 1: Ett enkelt kort som kan användas för att brygga anslutningarna mellan utvecklingskortet LoFive-R1 och FT2232H-56Q-modulen. (Tabellkälla: DigiKey)

Sammanfattning av anslutningar:

  • Strömförsörjning och jord
  • JTAG-signaler
  • UART-signaler

Anslutningarna ska utföras som direktanslutningar eller med kopplingsdäck som till exempel PB-83M från Global Specialties (figur 5). Dessa kopplingsdäck har banankontakter för två spänningskällor och jord, vilket underlättar prototypkonstruktion.

Bild på Global Specialties PB-83M kopplingsdäck med bananuttag

Figur 5: PB-83M har bananuttag för två spänningskällor och jord, vilket underlättar prototypkonstruktion. (Bildkälla: Global Specialties)

Vid första användningen av LoFive-R1 rekommenderar vi att en bootloader installeras på kortet. När bootloadern är installerad kan den användas för att underlätta framtida uppgraderingar. Bootloadern kan genereras från SDK med hjälp av följande kommando:

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

Därefter kan Hello World-applikationen läsas in till utvecklingskortet med hjälp av följande kommando:

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

Nu har utvecklaren programmerat sin första RISC-V-applikation – och möjligheterna att gå vidare är oändliga.

Tips vid användning av RISC-V

Att komma igång med RISC-V-processorer skiljer sig lite från vanliga ekosystem för microcontrollers. Här ger vi några användbara tips:

  • När du har checkat ut LoFive-R1 SDK rekommenderar vi att du granskar filen README.md i huvudkatalogen. I den finns information om var du hittar SDK-dokumentation, kortsupportpaket och annan användbar information.
  • Om det finns en professionell felsökningsprob, som SEGGER J-Link, kan du använd denna för att programmera applikationer till RISC-V-processorn. Sedan 2017 stöder J-Link RISC-V.
  • För utvecklare som föredrar att använda en IDE istället för kommandoradsverktyg kan vi rekommendera Freedom Studio för RISC-V-utveckling, vilket är en Eclipse-baserad IDE.

Utvecklare som följer dessa tips kommer att upptäcka att de kan spara en hel del tid och slippa onödiga problem vid första användningen av RISC-V.

Slutsats

RISC-V har en intressant arkitektur som kan vara praktisk för utvecklare som letar efter en maskinvaruarkitektur med öppen källkod. Det finns idag utvecklingskort för RISC-V-processorer, och som vi har sett i denna artikel är det inte mycket svårare att konfigurera verktygskedjor än att driftsätta någon annan microcontroller av standardversion.

Visst är RISC-V intressant, men kom ihåg att det inte har det omfattande ekosystem som många befintliga microcontrollerplattformar har. Det betyder att utvecklare som väljer att använda RISC-V kan upptäcka att de har färre valmöjligheter och resurser till förfogande i sitt arbete. Om man är beredd att göra denna kompromiss beror på slutapplikationen, vad utvecklaren föredrar eller vilka resurser som finns tillgängliga.

DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

Om skribenten

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo är konsult inom inbäddad programvara. Han har publicerat över 200 artiklar om utveckling av inbäddad programvara, och är en eftertraktad talare och teknisk utbildare med tre examina, däribland en master i teknik från University of Michigan.

Om utgivaren

DigiKeys nordamerikanska redaktörer