Innehållsförteckning:
- Steg 1: INSTÄLLNING AV SAKER/STUFF UPP
- Steg 2: CIRCUIT
- Steg 3: BOOTABLE Mini SD
- Steg 4: KONTROLLERA Mini SD
- Steg 5: KOD1
- Steg 6: CODE2: Turn_Led_ON
Video: Bare Metal Raspberry Pi 3: Blinkande LED: 8 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Av moldypizzaFölj mer av författaren:
Om:.oO0Oo. Mer om moldypizza »
Välkommen till BARE METAL pi 3 blinkande LED -handledning!
I denna handledning kommer vi att gå igenom stegen, från början till slut, för att få en LED att blinka med en Raspberry PI 3, en brödbräda, ett motstånd, en LED och ett tomt SD -kort.
Så vad är BARE METAL? BARE METAL är programmering utan krusiduller. Bare metal betyder att vi har full kontroll över vad datorn ska göra. Så det betyder i grunden att koden kommer att vara helt skriven i montering med hjälp av Arm -instruktionssetet. I slutet kommer vi att ha skapat ett program som blinkar en lysdiod genom att komma åt den fysiska adressen till en av Raspberry Pi: s GPIO -stift och konfigurera den för att mata ut och sedan slå på och av den. Att försöka detta projekt är ett bra sätt att komma igång med inbäddad programmering och förhoppningsvis ge en bättre förståelse för hur en dator fungerar.
Vad behöver du?
Hårdvara
- Hallon PI 3
- SD-kort förinstallerat med en startbar bild
- Bakbord
- Manliga kvinnliga bygelkablar
- Manliga hantrådar
- LED
- 220 ohm motstånd (behöver inte vara exakt 220 ohm, de flesta motstånd fungerar)
- mini sd -kort
- mini sd -kort förinstallerat med hallon pi -operativsystem (ingår vanligtvis med pi)
programvara
- GCC -kompilator
- GNU inbäddad verktygskedja
- textredigerare
- sd -kortformaterare
Okej, låt oss komma igång!
Steg 1: INSTÄLLNING AV SAKER/STUFF UPP
Okej så … det första steget är att skaffa sig hårdvara. Du kan köpa delarna separat eller så finns det ett kit som innehåller mer än tillräckligt med delar. LÄNK
Detta kit innehåller allt som behövs för att installera hallon pi 3 och mer! det enda som inte ingår i detta kit är ett extra mini -sd -kort. Vänta! Köp inte en till ännu. Om du inte planerar att använda linux -installationen förinstallerad på kortet, kopierar du bara innehållet på det medföljande mini -sd -kortet för senare och formaterar om kortet (mer om det senare). VIKTIGT OBS! Se till att du behåller filerna på det medföljande kortet du behöver dem för senare!
Därefter är det dags att installera programvaran. Denna handledning innehåller inte detaljerade instruktioner om hur du installerar programvaran. Det finns många resurser och handledning online om hur du installerar dessa:
WINDOWS ANVÄNDARE:
Ladda ner och installera gcc
Ladda sedan ner och installera GNU ARM inbäddade verktygskedjan
LINUX/MAC
- Linux-distributioner levereras med förinstallerad gcc
- Ladda ner och installera GNU ARM inbäddad verktygskedja.
Okej, så om allt går bra borde du kunna öppna terminalen (linux/mac) eller cmd line (windows) och försöka skriva
arm-none-eabi-gcc
Utmatningen ska se ut som den första bilden. Detta är bara för att verifiera att det är korrekt installerat.
Okej nu när förutsättningarna är ur vägen, är det dags att komma igång med de roliga grejerna.
Steg 2: CIRCUIT
Krets tid! Kretsen för detta är enkel. Vi ansluter en LED till GPIO 21 (pin 40) på pi (se bild 2 och 3). Ett motstånd är också anslutet i serie för att förhindra att lysdioden skadas. Motståndet kommer att anslutas till den negativa kolumnen på brödbrädan som kommer att anslutas till GND (stift 39) på pi. När du ansluter lysdioden, se till att ansluta den korta änden till den negativa sidan. Se sista bilden
Steg 3: BOOTABLE Mini SD
Det finns tre steg för att få din pi 3 att känna igen ditt tomma mini -sd -kort. Vi måste hitta och kopiera bootcode.bin, start.elf och fixup.dat. Du kan få dessa filer på det medföljande mini sd -kortet om du köpte canakit eller gör ett startbart sd -kort för pi 3 med en Linux -distribution. Hur som helst är dessa filer nödvändiga för att pi ska kunna känna igen sd -kortet som en startbar enhet. Formatera sedan mini sd till fat32 (de flesta mini sd -korten är formaterade i fat32. Jag använde ett billigt mini sd -kort från sandisk), flytta bootcode.bin, start.elf, fixup.dat till sd -kortet. Och du är klar! Okej en gång till och i ordning på bilderna är stegen:
- Hitta bootcode.bin, start.elf, fixup.dat.
- Se till att ditt SD -kort är formaterat till fat32.
- Flytta bootcode.bin, start.elf och fixup.dat till det formaterade SD -kortet.
Så här kom jag på det här, länk.
Steg 4: KONTROLLERA Mini SD
Okej, vi har ett startbart mini -sd -kort, och förhoppningsvis har du en pi 3 vid denna tidpunkt. Så nu borde vi testa det för att se till att pi 3 känner igen mini sd -kortet som startbart.
På pi, nära mini -usb -porten finns det två små lysdioder. En är röd. Detta är strömindikatorn. När pi får ström bör denna lampa lysa. Så om du ansluter din pi just nu utan mini -sd -kort ska det lysa rött. Okej nu koppla ur din pi och sätt i ditt startbara mini -sd -kort som skapades i föregående steg och sätt i kontakten. Ser du ett annat ljus? Det ska vara ett grönt ljus, bredvid det röda, som indikerar att det läser sd -kortet. Denna led kallas ACT -led. Den tänds när ett livskraftigt SD -kort är isatt. Det kommer att blinka när det kommer åt ditt mini -sd -kort.
Okej så två saker borde ha hänt efter att du satt i det startbara mini -sd -kortet och kopplade in pi:
- Den röda lysdioden ska lysa som indikerar strömmottagning
- Den gröna lysdioden ska lysa för att indikera att den har startat in i mini -sd -kortet
Om något gick fel försök upprepa föregående steg eller klicka på länken nedan för mer information.
Länken här är en bra referens.
Steg 5: KOD1
Detta projekt är skrivet på ARM -monteringsspråk. En grundläggande förståelse för ARM -montering förutsätts i denna handledning, men här är några saker du bör veta:
.equ: tilldelar ett värde till en symbol, dvs abc.equ 5 abc representerar nu fem
- ldr: laddas ur minnet
- str: skriver till minnet
- cmp: jämför två värden genom att utföra en subtraktion. Ställer in flaggor.
- b: gren till etikett
- lägg till: utför aritmetik
Om du inte har någon erfarenhet av armmontering, se den här videon. Det kommer att ge dig en god förståelse för armens språk.
Okej så just nu har vi en krets som är ansluten till vår hallon pi 3 och vi har ett sd -kort som pi känner igen, så vår nästa uppgift är att ta reda på hur man interagerar med kretsen genom att ladda pi med ett körbart program. I allmänhet är det vi behöver göra att berätta för pi: n att mata ut en spänning från GPIO 21 (stift anslutet till den röda ledningen). Då behöver vi ett sätt att växla ledet för att få det att blinka. För att göra detta behöver vi mer information. För närvarande har vi ingen aning om hur vi ska berätta GPIO 21 att mata ut, varför vi måste läsa databladet. De flesta mikrokontroller har datablad som anger exakt hur allt fungerar. Tyvärr har pi 3 ingen officiell dokumentation! Det finns dock ett inofficiellt datablad. Här är två länkar till den:
- github.com/raspberrypi/documentation/files…
- web.stanford.edu/class/cs140e/docs/BCM2837…
Okej, nu bör du ta några minuter innan du går vidare till nästa steg för att titta igenom databladet och se vilken information du kan hitta.
Steg 6: CODE2: Turn_Led_ON
Raspberry pi 3 53 registrerar för att styra utgångs-/ingångsstiften (kringutrustning). Stiften grupperas ihop och varje grupp tilldelas ett register. För GPIO måste vi kunna komma åt SELECT -registret, SET -registret och CLEAR -registren. För att komma åt dessa register behöver vi de fysiska adresserna till dessa register. När du läser databladet vill du bara notera förskjutningen av adressen (lo byte) och lägga till den i basadressen. Du måste göra detta eftersom databladet listar den virtuella Linux -adressen som i grunden är värden som operativsystemen tilldelar. Vi använder inte ett operativsystem så vi måste komma åt dessa register direkt med hjälp av den fysiska adressen. För detta behöver du följande information:
- Basadress för kringutrustning: 0x3f200000. I pdf -filen (sidan 6) står det att basadressen är 0x3f000000, men den här adressen fungerar inte. Använd 0x3f200000
- Förskjutning av FSEL2 (SELECT) inte hela registerets adress. I pdf -filen anges FSEL2 vid 0x7E20008 men den här adressen hänvisar till den virtuella linuxadressen. Förskjutningen kommer att vara densamma så det är det vi vill notera. 0x08
- Förskjutning av GPSET0 (SET): 0x1c
- Förskjutning av GPCLR0 (CLEAR): 0x28
Så du har säkert märkt att databladet innehåller 4 SELECT-register, 2 SET-register och 2 CLEAR-register, så varför valde jag de jag gjorde? Detta beror på att vi vill använda GPIO 21 och FSEL2 kontroller GPIO 20-29, SET0 och CLR0 kontroller GPIO 0-31. FSEL -registren tilldelar tre bitar för varje GPIO -stift. Eftersom vi använder FSEL2 betyder det att bitarna 0-2 styr GPIO 20 och bitarna 3-5 styr GPIO 21 och så vidare. Set- och CLR -registren tilldelar en bit till varje stift. Till exempel kontrollerar bit 0 i SET0 och CLR0 GPIO 1. För att styra GPIO 21 skulle du ställa in bit 21 i SET0 och CLR0.
Okej, så vi har pratat om hur man får tillgång till dessa register, men vad betyder det hela?
- FSEL2 -registret kommer att användas för att ställa in GPIO 21 på utmatning. För att ställa in en stift för utmatning måste du ställa in lo ordningsbiten för de tre bitarna till 1. Så om bitarna 3-5 styr GPIO 21 betyder det att vi måste ställa in den första biten, bit 3 till 1. Detta kommer att berätta för pi att vi vill använda GPIO 21 som utgång. Så om vi skulle titta på de tre bitarna för GPIO 21 borde de se ut så här efter att vi ställt in den till utgång, b001.
- GPSET0 säger till pi att slå på stiftet (mata ut en spänning). För att göra detta växlar vi bara den bit som motsvarar GPIO -stiftet vi vill ha. I vårt fall bit 21.
- GPCLR0 säger till pi att stänga av stiftet (ingen spänning). För att stänga av stiftet, ställ in biten på motsvarande GPIO -stift. I vårt fall bit 21
Innan vi kommer till en blinkande lysdiod, låt oss först göra ett enkelt program som helt enkelt kommer att slå på lysdioden.
För att börja måste vi lägga till två direktiv högst upp i vår källkod.
- .sektion.init berättar för pi var koden ska läggas
- .global _start
Därefter måste vi lägga upp alla adresser vi kommer att använda. Använd.equ för att tilldela värdena läsbara symboler.
- .equ GPFSEL2, 0x08
- .equ GPSET0, 0x1c
- .equ GPCLR0, 0x28
- .equ BASE, 0x3f200000
Nu ska vi skapa masker för att ställa in de bitar som vi behöver ställa in.
- .equ SET_BIT3, 0x08 Detta ställer in bit tre 0000_1000
- .equ SET_BIT21, 0x200000
Då måste vi lägga till vår _start -etikett
_Start:
Ladda basadressen i registret
ldr r0, = BASE
Nu måste vi ställa in bit3 av GPFSEL2
- ldr r1, SET_BIT3
- str r1, [r0, #GPFSEL2] Denna instruktion säger att skriva tillbaka biten 0x08 till adressen för GPFSEL2
Slutligen måste vi sätta på GPIO 21 genom att ställa in bit 21 i GPSET0 -registret
- ldr r1, = SET_BIT21
- str r1, [r0, #GPSET0]
Den slutliga produkten ska se ut ungefär som koden på bilden.
Nästa steg är att sammanställa koden och skapa en.img -fil som pi kan köra.
- Ladda ner den bifogade makefilen och kernel.ld och om du vill ha turn_led_on.s källkod.
- Lägg alla filer i samma mapp.
- Om du använder din egen källkod, redigera makefilen och ersätt koden = turn_led_on.s med code =.s
- Spara makefilen.
- Använd terminalen (linux) eller cmd -fönstret (windows) för att navigera till din mapp som innehåller filerna och skriv make och tryck enter
- Make -filen ska generera en fil som heter kernel.img
- Kopiera kernel.img till ditt mini sd -kort. Ditt kortinnehåll ska vara som på bilden (bild 3): bootcode.bin, start.elf, fixup.dat och kernel.img.
- Mata ut mini sd -kortet och sätt in det i pi: n
- Anslut pi till strömkällan
- LED ska lysa !!!
LÄTT VIKTIGT OBS! Tydligen hade instruktörer problem med att makefilen inte hade ett tillägg, så jag laddade upp det igen med ett.txt-tillägg. Ta bort tillägget när du laddar ner det för att det ska fungera korrekt.
Rekommenderad:
Sångföljande Led-blinkande Hack-O-Lantern !: 6 steg
Sångföljande Led-blinkande Hack-O-Lantern !: Gör en jack-o-lykta som spelar och blinkar flerfärgade lysdioder till allas favorit Halloween-låt
Liten LED -blinkande figur: 6 steg
Liten LED -blinkande figur: Du kan enkelt blinka lysdioden med arduino eller 555 -timer. Men du kan göra en blinkande krets utan sådana IC: er. Detta är en enkel blinkande figur gjord av diskreta delar
Kontroll -LED blinkande pulser med en potentiometer: 6 steg
Kontrollera LED -blinkande pulser med en potentiometer: I denna handledning lär vi oss hur man kontrollerar LED -blinkande pulser med en potentiometer. Se en demonstrationsvideo
Raspberry Pi tryckknapp med lysdioder Bare Metal: 8 steg
Raspberry Pi tryckknapp med lysdioder Bare Metal: Detta är min andra handledning om programmering av hallon pi 3 bar metall! Kolla in min första här. Förra gången visade jag dig hur du skapar en operativsystembild för hallon pi 3 som blinkade en enda lysdiod, i den här självstudien visar jag dig
Grön LED -lampa (kontrollerad med en blinkande LED): 9 steg
Grön LED -lampa (kontrollerad med en blinkande LED): För några år sedan läste jag en artikel om belysning i utvecklingsländer, den berättade att 1,6 miljarder människor inte har tillgång till el och en pålitlig belysningskälla är ett STORT problem för dem. Ett kanadensiskt företag tillverkar och distribuerar lightinâ €