Indholdsfortegnelse:

Bare Metal Raspberry Pi 3: Blinkende LED: 8 trin
Bare Metal Raspberry Pi 3: Blinkende LED: 8 trin

Video: Bare Metal Raspberry Pi 3: Blinkende LED: 8 trin

Video: Bare Metal Raspberry Pi 3: Blinkende LED: 8 trin
Video: ESP32 Tutorial 3 - Resistor, LED, Bredboard and First Project: Hello LED -ESP32 IoT Learnig kit 2024, November
Anonim
Bare Metal Raspberry Pi 3: Blinkende LED
Bare Metal Raspberry Pi 3: Blinkende LED

Af moldypizzaFølg mere af forfatteren:

Hindbær Pi trykknap med lysdioder Bare metal
Hindbær Pi trykknap med lysdioder Bare metal
Hindbær Pi trykknap med lysdioder Bare metal
Hindbær Pi trykknap med lysdioder Bare metal
Kasser
Kasser
Kasser
Kasser
Sådan laver du en relief udskæring til Veterans Day
Sådan laver du en relief udskæring til Veterans Day
Sådan laver du en relief udskæring til Veterans Day
Sådan laver du en relief udskæring til Veterans Day

Om:.oO0Oo. Mere om moldypizza »

Velkommen til BARE METAL pi 3 Blinkende LED -tutorial!

I denne vejledning går vi gennem trinene, fra start til slut, for at få en LED til at blinke ved hjælp af en Raspberry PI 3, et brødbræt, en modstand, en LED og et tomt SD -kort.

Så hvad er BARE METAL? BARE METAL er programmering uden dikkedarer. Bare metal betyder, at vi har fuld kontrol over, hvad computeren vil gøre op til bit. Så det betyder dybest set, at koden vil blive skrevet fuldstændigt i samlingen ved hjælp af Arm -instruktionssættet. I slutningen vil vi have oprettet et program, der blinker en LED ved at få adgang til den fysiske adresse på en af Raspberry Pi's GPIO -ben og konfigurere den til at sende og derefter tænde og slukke den. At prøve dette projekt er en god måde at komme i gang med integreret programmering og forhåbentlig give en bedre forståelse af, hvordan en computer fungerer.

Hvad har du brug for?

Hardware

  • Hindbær PI 3
  • SD-kort forudindlæst med et bootbart billede
  • Brødbræt
  • Mandlige huntrøjer
  • Mandlige hantrøjer
  • LED
  • 220 ohm modstand (behøver ikke at være præcis 220 ohm, de fleste modstande fungerer)
  • mini sd -kort
  • mini sd -kort forudindlæst med hindbær pi -operativsystem (normalt inkluderet i pi)

Software

  • GCC -kompilator
  • GNU integreret værktøjskæde
  • teksteditor
  • sd -kortformatering

Okay lad os komme i gang!

Trin 1: OPSÆTNING AF TINGE/STUFF UP

INDSTILLING AF TINGE/STUFF UP
INDSTILLING AF TINGE/STUFF UP

Okay så … det første trin er at skaffe sig hardware. Du kan købe delene separat, eller der er et sæt, der indeholder mere end nok dele. LINK

Dette kit leveres med alt hvad der er nødvendigt for at konfigurere hindbær pi 3 og mere! det eneste, der ikke er inkluderet i dette kit, er et ekstra mini -sd -kort. Vente! Køb ikke endnu en endnu. Hvis du ikke planlægger at bruge linux -installationen forudindlæst på kortet, skal du bare kopiere indholdet af det medfølgende mini -sd -kort til senere og formatere kortet igen (mere om det senere). VIGTIG BEMÆRK: Sørg for at gemme filerne på det medfølgende kort, du skal bruge dem til senere!

Dernæst er det tid til at konfigurere softwaren. Denne vejledning indeholder ikke detaljerede instruktioner om, hvordan du installerer softwaren. Der er mange ressourcer og selvstudier online om, hvordan du installerer disse:

WINDOWS BRUGERE:

Download og installer gcc

Dernæst skal du downloade og installere GNU ARM -integrerede værktøjskæde

LINUX/MAC

  • Linux-distributioner leveres med gcc forudinstalleret
  • Download og installer GNU ARM integreret værktøjskæde.

Okay, så hvis alt går godt, skal du kunne åbne terminalen (linux/mac) eller cmd -linjen (windows) og prøve at skrive

arm-none-eabi-gcc

Outputtet skal ligne det første billede. Dette er bare for at kontrollere, at det er installeret korrekt.

Okay nu, hvor forudsætningerne er ude af vejen, er det tid til at komme i gang med det sjove.

Trin 2: CIRCUIT

KREDSLØB
KREDSLØB
KREDSLØB
KREDSLØB
KREDSLØB
KREDSLØB

Kredsløbstid! Kredsløbet for dette er enkelt. Vi tilslutter en LED til GPIO 21 (pin 40) på pi (se billede 2 og 3). En modstand er også forbundet i serie for at forhindre, at LED'en beskadiges. Modstanden vil blive forbundet til den negative kolonne på brødbrættet, som vil blive forbundet til GND (pin 39) på pi. Når du tilslutter LED'en, skal du sørge for at tilslutte den korte ende til den negative side. Se det sidste billede

Trin 3: BOOTABLE Mini SD

BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD

Der er tre trin for at få din pi 3 til at genkende dit tomme mini sd -kort. Vi skal finde og kopiere bootcode.bin, start.elf og fixup.dat. Du kan få disse filer på det medfølgende mini sd -kort, hvis du købte canakit eller laver et bootbart sd -kort til pi 3 med en Linux -distribution. Uanset hvad er disse filer nødvendige for at tillade pi'en at genkende sd -kortet som en bootbar enhed. Formater derefter mini sd til fat32 (de fleste mini sd -kort kommer formateret i fat32. Jeg brugte et billigt mini sd -kort fra sandisk), flyt bootcode.bin, start.elf, fixup.dat på sd -kortet. Og du er færdig! Okay endnu en gang, og i rækkefølgen af billederne er trinene:

  1. Find bootcode.bin, start.elf, fixup.dat.
  2. Sørg for, at dit SD -kort er formateret til fat32.
  3. Flyt bootcode.bin, start.elf og fixup.dat til det formaterede sd -kort.

Sådan fandt jeg ud af det, link.

Trin 4: CHECK Mini SD

Tjek Mini SD
Tjek Mini SD
Tjek Mini SD
Tjek Mini SD

Okay, vi har et opstartbart mini sd -kort, og forhåbentlig har du en pi 3 på dette tidspunkt. Så nu skal vi teste det for at sikre, at pi 3 genkender mini sd -kortet som opstart.

På pi'en, i nærheden af mini usb -porten, er der to små LED'er. Den ene er rød. Dette er strømindikatoren. Når pi'en modtager strøm, skal denne lampe være tændt. Så hvis du tilslutter din pi lige nu uden mini -sd -kort, skal det lyse rødt. Okay, tag nu stikket ud af din pi, og sæt dit bootable mini sd -kort i, der blev oprettet i det foregående trin, og sæt pi'en i. Kan du se et andet lys? Der skal være et grønt lys, lige ved siden af det røde, der angiver, at det læser sd -kortet. Denne LED kaldes ACT LED. Det lyser, når der er indsat et levedygtigt sd -kort. Det blinker, når det får adgang til dit mini sd -kort.

Okay, så to ting skulle være sket, efter at du indsatte det bootable mini sd -kort og tilsluttede pi'en:

  1. Den røde lysdiode skal lyse, hvilket angiver strømmodtagelse
  2. Den grønne lysdiode skal lyse, hvilket angiver, at den er startet op på mini -sd -kortet

Hvis noget gik galt, kan du prøve at gentage de foregående trin eller klikke på linket herunder for at få flere oplysninger.

Linket her er en god reference.

Trin 5: KODE1

Dette projekt er skrevet på ARM -montagesprog. En grundlæggende forståelse af ARM -samling forudsættes i denne vejledning, men her er et par ting, du bør vide:

.equ: tildeler en værdi et symbol, dvs. abc.equ 5 abc repræsenterer nu fem

  • ldr: indlæses fra hukommelsen
  • str: skriver til hukommelsen
  • cmp: sammenligner to værdier ved at udføre en subtraktion. Sætter flag.
  • b: gren til etiket
  • tilføj: udfører regning

Hvis du ikke har nogen erfaring med armmontering, kan du se denne video. Det vil give dig en god forståelse af Arm -samlingens sprog.

Okay, så lige nu har vi et kredsløb, der er forbundet til vores hindbær pi 3, og vi har et sd -kort, som pi genkender, så vores næste opgave er at finde ud af, hvordan man interagerer med kredsløbet ved at indlæse pi med et eksekverbart program. Generelt er det, vi skal gøre, at fortælle pi'en at sende en spænding fra GPIO 21 (pin forbundet til den røde ledning). Så har vi brug for en måde at skifte LED'en for at få den til at blinke. For at gøre dette har vi brug for flere oplysninger. På dette tidspunkt har vi ingen idé om, hvordan vi skal fortælle GPIO 21 at sende, hvorfor vi skal læse databladet. De fleste mikrokontrollere har datablade, der præcist angiver, hvordan alt fungerer. Desværre har pi 3 ikke officiel dokumentation! Der er imidlertid et uofficielt datablad. Her er to links til det:

  1. github.com/raspberrypi/documentation/files…
  2. web.stanford.edu/class/cs140e/docs/BCM2837…

Okay på dette tidspunkt, bør du tage et par minutter, før du går videre til det næste trin for at gennemse databladet og se, hvilke oplysninger du kan finde.

Trin 6: CODE2: Turn_Led_ON

KODE2: Turn_Led_ON
KODE2: Turn_Led_ON
KODE2: Turn_Led_ON
KODE2: Turn_Led_ON
KODE2: Turn_Led_ON
KODE2: Turn_Led_ON

Raspberry pi 3 53 registrerer for at styre output/input pins (periferiudstyr). Stifterne grupperes sammen, og hver gruppe tildeles et register. For GPIO skal vi have adgang til SELECT -registret, SET -registret og CLEAR -registre. For at få adgang til disse registre har vi brug for de fysiske adresser til disse registre. Når du læser databladet, vil du kun notere forskydningen af adressen (lo byte) og tilføje det til basisadressen. Du skal gøre dette, fordi databladet viser den virtuelle linux -adresse, som grundlæggende er værdier, som operativsystemerne tildeler. Vi bruger ikke et operativsystem, så vi skal få adgang til disse registre direkte ved hjælp af den fysiske adresse. Til dette har du brug for følgende oplysninger:

  • Basisadresse for periferiudstyr: 0x3f200000. PDF -filen (side6) siger, at basisadressen er 0x3f000000, men denne adresse fungerer ikke. Brug 0x3f200000
  • Forskydning af FSEL2 (SELECT) ikke hele registerets adresse. PDF -filen viser FSEL2 på 0x7E20008, men denne adresse refererer til den virtuelle linux -adresse. Forskydningen vil være den samme, så det er det, vi vil bemærke. 0x08
  • Forskydning af GPSET0 (SET): 0x1c
  • Forskydning af GPCLR0 (CLEAR): 0x28

Så du har sikkert bemærket, at databladet indeholder 4 SELECT-registre, 2 SET-registre og 2 CLEAR-registre, så hvorfor valgte jeg dem, jeg gjorde? Dette er fordi vi vil bruge GPIO 21 og FSEL2 kontroller GPIO 20-29, SET0 og CLR0 kontroller GPIO 0-31. FSEL -registre tildeler tre bits for hver GPIO -pin. Da vi bruger FSEL2, betyder det, at bits 0-2 styrer GPIO 20, og bit 3-5 styrer GPIO 21 og så videre. Set- og CLR -registre tildeler hver pin en enkelt bit. For eksempel styrer bit 0 i SET0 og CLR0 GPIO 1. For at styre GPIO 21 ville du indstille bit 21 i SET0 og CLR0.

Okay, så vi har talt om, hvordan man får adgang til disse registre, men hvad betyder det hele?

  • FSEL2 -register bruges til at indstille GPIO 21 til output. For at indstille en pin til output skal du indstille lo-ordren bit af de tre bits til 1. Så hvis bits 3-5 styrer GPIO 21 betyder det, at vi skal indstille den første bit, bit 3 til 1. Dette vil fortælle pi at vi vil bruge GPIO 21 som output. Så hvis vi skulle se på de 3 bits til GPIO 21, skulle de se sådan ud, efter at vi havde sat den til output, b001.
  • GPSET0 fortæller pi'en at tænde stiften (udsende en spænding). For at gøre dette skifter vi bare den bit, der svarer til den GPIO -pin, vi ønsker. I vores, sag 21.
  • GPCLR0 fortæller pi'en at slukke for stiften (ingen spænding). For at slukke for stiften skal du sætte bit til den tilsvarende GPIO -pin. I vores tilfælde bit 21

Inden vi kommer til en blinkende LED, skal vi først lave et simpelt program, der simpelthen vil tænde LED'en.

For at starte skal vi tilføje to direktiver øverst i vores kildekode.

  • .section.init fortæller pi'en, hvor koden skal placeres
  • .global _start

Dernæst skal vi oprette alle de adresser, vi skal bruge. Brug.equ til at tildele værdierne læsbare symboler.

  • .equ GPFSEL2, 0x08
  • .equ GPSET0, 0x1c
  • .equ GPCLR0, 0x28
  • .equ BASE, 0x3f200000

Nu skal vi oprette masker til at indstille de bits, vi skal indstille.

  • .equ SET_BIT3, 0x08 Dette sætter bit tre 0000_1000
  • .equ SET_BIT21, 0x200000

Derefter skal vi tilføje vores _start -etiket

_Start:

Indlæs basisadresse i registret

ldr r0, = BASE

Nu skal vi indstille bit3 af GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Denne instruktion siger at skrive bit 0x08 tilbage til adressen på GPFSEL2

Endelig skal vi slå GPIO 21 til ved at indstille bit 21 i GPSET0 -registret

  • ldr r1, = SET_BIT21
  • str r1, [r0, #GPSET0]

Det endelige produkt skal ligne koden på billedet.

Det næste trin er at kompilere koden og oprette en.img -fil, som pi'en kan køre.

  • Download den vedhæftede makefile og kernel.ld, og hvis du vil have turn_led_on.s kildekoden.
  • Sæt alle filerne i den samme mappe.
  • Hvis du bruger din egen kildekode, skal du redigere makefilen og erstatte koden = turn_led_on.s med code =.s
  • Gem makefilen.
  • Brug terminalen (linux) eller cmd -vinduet (windows) til at navigere til din mappe, der indeholder filerne, og skriv make, og tryk på enter
  • Make -filen skal generere en fil kaldet kernel.img
  • Kopier kernel.img til dit mini sd -kort. Indholdet af dine kort skal være som på billedet (billede 3): bootcode.bin, start.elf, fixup.dat og kernel.img.
  • Skub mini sd -kortet ud, og sæt det i pi'et
  • Tilslut pi til strømkilden
  • LED skal lyse !!!

LIGT VIGTIG BEMÆRK: Tilsyneladende havde instruktører et problem med, at makefilen ikke havde en udvidelse, så jeg uploadede den igen med en.txt-udvidelse. Fjern udvidelsen, når du downloader den, for at den fungerer korrekt.

Anbefalede: