Innholdsfortegnelse:

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

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

Video: Bare Metal Raspberry Pi 3: Blinkende LED: 8 trinn
Video: Raspberry Pi Blinky 2024, November
Anonim
Bare Metal Raspberry Pi 3: Blinkende LED
Bare Metal Raspberry Pi 3: Blinkende LED

Av moldypizzaFølg Mer av forfatteren:

Bringebær Pi Trykknapp Med LED -er Bare Metall
Bringebær Pi Trykknapp Med LED -er Bare Metall
Bringebær Pi Trykknapp Med LED -er Bare Metall
Bringebær Pi Trykknapp Med LED -er Bare Metall
Kasser
Kasser
Kasser
Kasser
Hvordan lage en lettelseutskjæring for veterandagen
Hvordan lage en lettelseutskjæring for veterandagen
Hvordan lage en lettelseutskjæring for veterandagen
Hvordan lage en lettelseutskjæring for veterandagen

Om:.oO0Oo. Mer om moldypizza »

Velkommen til opplæringen BARE METAL pi 3 Blinkende LED!

I denne opplæringen går vi gjennom trinnene, fra start til slutt, for å få en LED å blinke med en Raspberry PI 3, et brødbrett, en motstand, en LED og et tomt SD -kort.

Så hva er BARE METAL? BARE METAL er programmering uten dikkedarer. Bare metall betyr at vi har full kontroll over hva datamaskinen vil gjøre ned til biten. Så det betyr i utgangspunktet at koden vil være fullstendig skrevet under montering ved bruk av Arm -instruksjonssettet. På slutten vil vi ha opprettet et program som vil blinke en LED ved å få tilgang til den fysiske adressen til en av Raspberry Pi's GPIO -pinner og konfigurere den til å sende ut og deretter slå den på og av. Å prøve dette prosjektet er en fin måte å komme i gang med innebygd programmering og forhåpentligvis gi en bedre forståelse av hvordan en datamaskin fungerer.

Hva trenger du?

Maskinvare

  • Bringebær PI 3
  • SD-kort forhåndslastet med et oppstartbart bilde
  • Brødbrett
  • Mannlige kvinnelige jumper ledninger
  • Mannlige jumpertråder
  • LED
  • 220 ohm motstand (trenger ikke å være nøyaktig 220 ohm, de fleste motstander vil fungere)
  • mini sd -kort
  • mini sd -kort forhåndslastet med bringebær pi -operativsystem (vanligvis inkludert i pi)

Programvare

  • GCC -kompilator
  • GNU innebygd verktøykjede
  • tekstredigerer
  • sd -kortformatering

OK, la oss komme i gang!

Trinn 1: SETTING THINGS/STUFF UP

INNSTILLING AV TING/STUFF UP
INNSTILLING AV TING/STUFF UP

Ok … det første trinnet er å skaffe seg maskinvare. Du kan kjøpe delene separat, eller det er et sett som inneholder mer enn nok deler. LINK

Dette settet inneholder alt du trenger for å sette opp bringebær pi 3 og mer! det eneste som ikke er inkludert i dette settet er et ekstra mini sd -kort. Vente! Ikke kjøp en til ennå. Hvis du ikke planlegger å bruke linux -installasjonen forhåndslastet på kortet, må du bare kopiere innholdet på det medfølgende mini -sd -kortet for senere og formatere kortet på nytt (mer om det senere). VIKTIG MERK: Sørg for at du beholder filene på det medfølgende kortet, du trenger dem senere!

Deretter er det på tide å sette opp programvaren. Denne opplæringen vil ikke inneholde detaljerte instruksjoner om hvordan du installerer programvaren. Det er mange ressurser og opplæringsprogrammer på nettet om hvordan du installerer disse:

WINDOWS BRUKERE:

Last ned og installer gcc

Last deretter ned og installer GNU ARM innebygde verktøykjede

LINUX/MAC

  • Linux-distribusjoner kommer med gcc forhåndsinstallert
  • Last ned og installer GNU ARM innebygd verktøykjede.

Ok, så hvis alt går bra, bør du kunne åpne terminalen (linux/mac) eller cmd -linjen (windows) og prøve å skrive

arm-none-eabi-gcc

Utgangen skal se ut som det første bildet. Dette er bare for å bekrefte at det er riktig installert.

OK nå som forutsetningene er ute av veien, er det på tide å komme i gang med det morsomme.

Trinn 2: KRETS

KRETS
KRETS
KRETS
KRETS
KRETS
KRETS

Krets tid! Kretsen for dette er enkel. Vi kobler en LED til GPIO 21 (pin 40) på pi (se bilde 2 og 3). En motstand er også koblet i serie for å forhindre at ledningen blir skadet. Motstanden vil bli koblet til den negative kolonnen på brødbrettet som vil bli koblet til GND (pin 39) på pi. Når du kobler LED -en, må du koble den korte enden til den negative siden. Se det siste bildet

Trinn 3: BOOTABLE Mini SD

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

Det er tre trinn for å få pi 3 til å gjenkjenne det tomme mini sd -kortet. Vi må finne og kopiere bootcode.bin, start.elf og fixup.dat. Du kan få disse filene på det medfølgende mini sd -kortet hvis du kjøpte canakit eller lager et oppstartbart sd -kort for pi 3 med en Linux -distribusjon. Uansett er disse filene nødvendige for å tillate pi å gjenkjenne SD -kortet som en oppstartbar enhet. Formater deretter mini sd til fat32 (de fleste mini sd -kortene er formatert i fat32. Jeg brukte et billig mini sd -kort fra sandisk), flytt bootcode.bin, start.elf, fixup.dat til sd -kortet. Og du er ferdig! Ok en gang til, og i rekkefølgen på bildene er trinnene:

  1. Finn bootcode.bin, start.elf, fixup.dat.
  2. Sørg for at SD -kortet er formatert til fat32.
  3. Flytt bootcode.bin, start.elf og fixup.dat til det formaterte SD -kortet.

Slik fant jeg ut dette, lenke.

Trinn 4: KONTROLLER Mini SD

CHECK Mini SD
CHECK Mini SD
SJEKK Mini SD
SJEKK Mini SD

Ok, vi har et oppstartbart mini sd -kort, og forhåpentligvis har du en pi 3 på dette tidspunktet. Så nå bør vi teste det for å sikre at pi 3 gjenkjenner mini sd -kortet som oppstartbart.

På pi, i nærheten av mini usb -porten, er det to små LED -er. Den ene er rød. Dette er strømindikatoren. Når pi mottar strøm, bør denne lampen være på. Så hvis du kobler til pi -en din akkurat nå uten mini -SD -kort, skal den lyse rødt. Ok, nå koble fra pi -en og sett inn det oppstartbare mini -sd -kortet som ble opprettet i forrige trinn, og koble til pi -en. Ser du et annet lys? Det skal være et grønt lys, rett ved siden av det røde, som indikerer at det leser sd -kortet. Denne LED -en kalles ACT LED. Den lyser når det er satt inn et levedyktig sd -kort. Den blinker når den får tilgang til mini -sd -kortet.

Ok, så to ting burde ha skjedd etter at du satte inn det oppstartbare mini -sd -kortet og koblet til pi -en:

  1. Den røde lysdioden skal lyse for å indikere strømmottak
  2. Den grønne lysdioden skal lyse for å indikere at den har startet opp på mini -sd -kortet

Hvis noe gikk galt, prøv å gjenta de forrige trinnene eller klikk på lenken nedenfor for mer informasjon.

Linken her er en god referanse.

Trinn 5: KODE1

Dette prosjektet er skrevet på ARM -monteringsspråk. En grunnleggende forståelse av ARM -montering forutsettes i denne opplæringen, men her er noen ting du bør vite:

.equ: tilordner en verdi til et symbol, dvs. abc. equ 5 abc representerer nå fem

  • ldr: lastes fra minnet
  • str: skriver til minnet
  • cmp: sammenligner to verdier ved å utføre en subtraksjon. Setter flagg.
  • b: gren til etikett
  • legg til: utfører regning

Hvis du ikke har noen erfaring med armmontering, kan du se denne videoen. Det vil gi deg en god forståelse av Arm -forsamlingsspråket.

Ok, så akkurat nå har vi en krets som er koblet til vår bringebær pi 3, og vi har et SD -kort som pien gjenkjenner, så vår neste oppgave er å finne ut hvordan vi skal samhandle med kretsen ved å laste pi med et kjørbart program. Generelt er det vi må gjøre å fortelle pi’en om å sende ut en spenning fra GPIO 21 (pinne koblet til den røde ledningen). Da trenger vi en måte å veksle ledet for å få det til å blinke. For å gjøre dette trenger vi mer informasjon. På dette tidspunktet aner vi ikke hvordan vi skal fortelle GPIO 21 om utdata, og derfor må vi lese databladet. De fleste mikrokontrollere har datablad som spesifiserer nøyaktig hvordan alt fungerer. Dessverre har pi 3 ikke offisiell dokumentasjon! Det er imidlertid et uoffisielt datablad. Her er to lenker til den:

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

Ok, på dette tidspunktet bør du ta noen minutter før du går videre til neste trinn for å se gjennom databladet og se hvilken informasjon du kan finne.

Trinn 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 å kontrollere utgangs-/inngangspinnene (periferiutstyr). Pinnene grupperes sammen og hver gruppe er tilordnet et register. For GPIO må vi ha tilgang til SELECT -registeret, SET -registeret og CLEAR -registerene. For å få tilgang til disse registrene trenger vi den fysiske adressen til disse registrene. Når du leser databladet, vil du bare merke forskyvningen av adressen (lo byte) og legge den til i baseadressen. Du må gjøre dette fordi databladet viser den virtuelle linux -adressen som i utgangspunktet er verdier som operativsystemene tildeler. Vi bruker ikke et operativsystem, så vi må få tilgang til disse registerene direkte ved å bruke den fysiske adressen. Til dette trenger du følgende informasjon:

  • Grunnadresse for eksterne enheter: 0x3f200000. PDF -filen (side6) sier at basisadressen er 0x3f000000, men denne adressen vil ikke fungere. Bruk 0x3f200000
  • Forskyvning av FSEL2 (SELECT) ikke hele registerets adresse. PDF -filen viser FSEL2 på 0x7E20008, men denne adressen refererer til den virtuelle linux -adressen. Forskyvningen vil være den samme, så det er det vi vil merke. 0x08
  • Forskyvning av GPSET0 (SET): 0x1c
  • Forskyvning av GPCLR0 (CLEAR): 0x28

Så du har sikkert lagt merke til at databladet viser 4 SELECT-registre, 2 SET-registre og 2 CLEAR-registre, så hvorfor valgte jeg de jeg gjorde? Dette er fordi vi ønsker å bruke GPIO 21 og FSEL2 kontroller GPIO 20-29, SET0 og CLR0 kontroller GPIO 0-31. FSEL -registrene tildeler tre biter for hver GPIO -pinne. Siden vi bruker FSEL2 betyr det at bits 0-2 styrer GPIO 20, og bits 3-5 styrer GPIO 21 og så videre. Set- og CLR -registerene tilordner en enkelt bit til hver pin. For eksempel kontrollerer bit 0 i SET0 og CLR0 GPIO 1. For å kontrollere GPIO 21 vil du sette bit 21 i SET0 og CLR0.

Ok, så vi har snakket om hvordan du får tilgang til disse registrene, men hva betyr det hele?

  • FSEL2 -register vil bli brukt til å sette GPIO 21 til utgang. For å sette en pin til utgang må du sette lo rekkefølgen på de tre bitene til 1. Så hvis bitene 3-5 styrer GPIO 21 betyr det at vi må sette den første biten, bit 3 til 1. Dette vil fortelle pi at vi ønsker å bruke GPIO 21 som utgang. Så hvis vi skulle se på de 3 bitene for GPIO 21, burde de se slik ut etter at vi satte den til output, b001.
  • GPSET0 forteller pi å slå på pinnen (send ut en spenning). For å gjøre dette bytter vi bare biten som korresponderer med GPIO -pinnen vi ønsker. I vårt tilfelle bit 21.
  • GPCLR0 forteller pi å slå av pinnen (ingen spenning). For å slå av pinnen, sett biten til den tilsvarende GPIO -pinnen. I vårt tilfelle bit 21

Før vi kommer til en blinkende LED, må vi først lage et enkelt program som bare vil slå på LED -en.

For å starte må vi legge til to direktiver øverst i kildekoden.

  • .section.init forteller pi hvor koden skal plasseres
  • .global _start

Deretter må vi sette opp alle adressene vi skal bruke. Bruk.equ for å tilordne lesbare symboler til verdiene.

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

Nå skal vi lage masker for å sette bitene vi må sette.

  • .equ SET_BIT3, 0x08 Dette vil sette bit tre 0000_1000
  • .equ SET_BIT21, 0x200000

Da må vi legge til vår _start -etikett

_start:

Last baseadressen inn i registeret

ldr r0, = BASE

Nå må vi sette bit3 av GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Denne instruksjonen sier å skrive tilbake biten 0x08 til adressen til GPFSEL2

Til slutt må vi slå på GPIO 21 ved å sette bit 21 i GPSET0 -registeret

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

Det endelige produktet skal se ut som koden på bildet.

Det neste trinnet er å kompilere koden og lage en.img -fil som pi kan kjøre.

  • Last ned den vedlagte makefilen og kernel.ld, og hvis du vil ha turn_led_on.s kildekoden.
  • Legg alle filene i samme mappe.
  • Hvis du bruker din egen kildekode, rediger filen og erstatt koden = turn_led_on.s med code =.s
  • Lagre makefilen.
  • Bruk terminalen (linux) eller cmd -vinduet (windows) til å navigere til mappen din som inneholder filene, og skriv make og trykk enter
  • Lagefilen skal generere en fil som heter kernel.img
  • Kopier kernel.img til mini sd -kortet. Kortinnholdet skal være som avbildet (bilde 3): bootcode.bin, start.elf, fixup.dat og kernel.img.
  • Løs ut mini sd -kortet og sett det inn i pi -en
  • Koble pi til strømkilden
  • LED skal lyse !!!

LITT VIKTIG MERKNAD: Tilsynelatende hadde instruktører et problem med at makefilen ikke hadde en utvidelse, så jeg lastet den opp på nytt med en.txt-utvidelse. Fjern utvidelsen når du laster den ned for at den skal fungere skikkelig.

Anbefalt: