Innholdsfortegnelse:
- Trinn 1: SETTING THINGS/STUFF UP
- Trinn 2: KRETS
- Trinn 3: BOOTABLE Mini SD
- Trinn 4: KONTROLLER Mini SD
- Trinn 5: KODE1
- Trinn 6: CODE2: Turn_Led_ON
Video: Bare Metal Raspberry Pi 3: Blinkende LED: 8 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Av moldypizzaFølg Mer av forfatteren:
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
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 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
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:
- Finn bootcode.bin, start.elf, fixup.dat.
- Sørg for at SD -kortet er formatert til fat32.
- Flytt bootcode.bin, start.elf og fixup.dat til det formaterte SD -kortet.
Slik fant jeg ut dette, lenke.
Trinn 4: KONTROLLER 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:
- Den røde lysdioden skal lyse for å indikere strømmottak
- 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:
- github.com/raspberrypi/documentation/files…
- 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
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:
Sangfølger Led-blinkende Hack-O-Lantern !: 6 trinn
Sangfølger Led-blinkende Hack-O-Lantern !: Lag en jack-o-lanterne som spiller og blinker flerfargede lysdioder til alles favoritt Halloween-sang
Liten LED -blinkende figur: 6 trinn
Liten LED -blinkende figur: Du kan enkelt blinke LED -en med arduino eller 555 timer. Men du kan lage en blinkende krets uten slike ICer. Dette er en enkel blinkende figur laget av diskrete deler
Hvordan lage ekte dataspill. Bare moro og bare ta en time: 10 trinn
Hvordan lage ekte dataspill. Moro og bare ta omtrent en time: Hei, dette prosjektet viser deg hvordan du lager spill !!! ekte spill for datamaskiner, og det krever ikke at du kjenner forvirrende koder. Når du fullfører dette prosjektet, vil du kjenne noen av det grunnleggende for å lage spill, og du kan lage så mange du vil
Konverter (bare om) hvilken som helst mediefil til (bare om) hvilken som helst annen mediefil gratis !: 4 trinn
Konverter (bare om) hvilken som helst mediefil til (bare om) hvilken som helst annen mediefil gratis !: Min første instruks, hei! Uansett, jeg var på Google på utkikk etter et gratis program som ville konvertere Youtube.flv -filene mine til et format som er mer universell, som. wmv eller.mov. Jeg søkte på utallige forum og nettsteder og fant deretter et program som heter
Grønn LED -lampe (kontrollert med en blinkende LED): 9 trinn
Grønn LED -lampe (kontrollert med en blinkende LED): For noen år siden leste jeg en artikkel om belysning i utviklingsland, den fortalte at 1,6 milliarder mennesker ikke har tilgang til elektrisitet og en pålitelig kilde til belysning er et STORT problem for dem. Ett kanadisk selskap produserer og distribuerer lightinâ €