Innehållsförteckning:

Bare Metal Raspberry Pi 3: Blinkande LED: 8 steg
Bare Metal Raspberry Pi 3: Blinkande LED: 8 steg

Video: Bare Metal Raspberry Pi 3: Blinkande LED: 8 steg

Video: Bare Metal Raspberry Pi 3: Blinkande LED: 8 steg
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Juli
Anonim
Bare Metal Raspberry Pi 3: blinkande LED
Bare Metal Raspberry Pi 3: blinkande LED

Av moldypizzaFölj mer av författaren:

Raspberry Pi tryckknapp med lysdioder bar metall
Raspberry Pi tryckknapp med lysdioder bar metall
Raspberry Pi tryckknapp med lysdioder Bare Metal
Raspberry Pi tryckknapp med lysdioder Bare Metal
Lådor
Lådor
Lådor
Lådor
Hur man gör en relief carving för veterandagen
Hur man gör en relief carving för veterandagen
Hur man gör en relief carving för veterandagen
Hur man gör en relief carving för veterandagen

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

INSTÄLLNING AV Saker/STUFF UPP
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
KRETS
KRETS
KRETS
KRETS
KRETS

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

BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
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:

  1. Hitta bootcode.bin, start.elf, fixup.dat.
  2. Se till att ditt SD -kort är formaterat till fat32.
  3. 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

KONTROLLERA Mini SD
KONTROLLERA Mini SD
KONTROLLERA Mini SD
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:

  1. Den röda lysdioden ska lysa som indikerar strömmottagning
  2. 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:

  1. github.com/raspberrypi/documentation/files…
  2. 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

KOD2: Turn_Led_ON
KOD2: Turn_Led_ON
KOD2: Turn_Led_ON
KOD2: Turn_Led_ON
KOD2: Turn_Led_ON
KOD2: 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: