„Bare Metal Raspberry Pi 3“: mirksi šviesos diodas: 8 žingsniai
„Bare Metal Raspberry Pi 3“: mirksi šviesos diodas: 8 žingsniai
Anonim
„Bare Metal Raspberry Pi 3“: mirksi šviesos diodas
„Bare Metal Raspberry Pi 3“: mirksi šviesos diodas

Sekite daugiau autoriaus:

„Raspberry Pi“mygtukas su šviesos diodais be metalo
„Raspberry Pi“mygtukas su šviesos diodais be metalo
„Raspberry Pi“mygtukas su šviesos diodais be metalo
„Raspberry Pi“mygtukas su šviesos diodais be metalo
Dėžės
Dėžės
Dėžės
Dėžės
Kaip padaryti pagalbą veteranų dienai
Kaip padaryti pagalbą veteranų dienai
Kaip padaryti pagalbą veteranų dienai
Kaip padaryti pagalbą veteranų dienai

Apie:.oO0Oo. Daugiau apie moldypizza »

Sveiki atvykę į „BARE METAL pi 3“mirksintį LED vadovėlį!

Šioje pamokoje mes atliksime veiksmus nuo pradžios iki pabaigos, kad LED lemputė mirksėtų naudojant „Raspberry PI 3“, duonos lentą, rezistorių, LED ir tuščią SD kortelę.

Taigi, kas yra BARE METAL? „BARE METAL“nėra paprastas programavimas. Plikas metalas reiškia, kad mes visiškai kontroliuojame, ką kompiuteris padarys. Taigi iš esmės tai reiškia, kad kodas bus visiškai parašytas surinkus, naudojant „Arm“instrukcijų rinkinį. Galų gale mes sukūrėme programą, kuri mirksės šviesos diodą, pasiekdama vieno iš „Raspberry Pi“GPIO kaiščių fizinį adresą ir sukonfigūruodamas jį išvesti, tada įjungdamas ir išjungdamas. Bandymas įgyvendinti šį projektą yra puikus būdas pradėti naudoti įterptąjį programavimą ir, tikiuosi, geriau suprasti, kaip veikia kompiuteris.

Ko tau reikia?

Techninė įranga

  • Aviečių PI 3
  • Iš anksto įkelta SD kortelė su įkrovos atvaizdu
  • Bandomoji Lenta
  • Vyriškos lyties moteriški laidai
  • Vyriški vyriški megztiniai laidai
  • LED
  • 220 omų rezistorius (nebūtinai turi būti tiksliai 220 omų, dauguma rezistorių veiks)
  • mini sd kortelė
  • mini sd kortelė, iš anksto įkelta su aviečių pi operacine sistema (paprastai pridedama prie pi)

Programinė įranga

  • GCC kompiliatorius
  • Įterpta GNU įrankių grandinė
  • teksto redaktorius
  • sd kortelės formatuotojas

Gerai, pradėkime!

1 žingsnis: DALYKŲ NUSTATYMAS/KOMPLEKTAS

DAIKTŲ NUSTATYMAS/ĮRENGIMAS
DAIKTŲ NUSTATYMAS/ĮRENGIMAS

Gerai, kad … pirmas žingsnis yra įsigyti aparatūros. Dalys galite nusipirkti atskirai arba yra komplektas, kuriame yra daugiau nei pakankamai dalių. NUORODA

Šiame rinkinyje yra viskas, ko reikia aviečių pi 3 ir dar daugiau! Į šį rinkinį neįeina tik papildoma mini sd kortelė. Laukti! Dar nepirkite kito. Jei neplanuojate naudoti „Linux“diegimo, iš anksto įdėto į kortelę, tiesiog nukopijuokite pridėtos „mini sd“kortelės turinį vėlesniam laikui ir iš naujo suformatuokite kortelę (daugiau apie tai vėliau). SVARBI PASTABA: įsitikinkite, kad failus išsaugojote pridedamoje kortelėje, jums jų prireiks vėliau!

Kitas laikas nustatyti programinę įrangą. Šiame vadove nebus išsamių instrukcijų, kaip įdiegti programinę įrangą. Internete yra daug išteklių ir vadovėlių, kaip juos įdiegti:

WINDOWS NAUDOTOJAI:

Atsisiųskite ir įdiekite gcc

Tada atsisiųskite ir įdiekite įterptąją GNU ARM įrankių grandinę

LINUX/MAC

  • „Linux“platinimuose yra iš anksto įdiegtas „gcc“
  • Atsisiųskite ir įdiekite „GNU ARM“įterptąją įrankių grandinę.

Gerai, taigi, jei viskas gerai, turėtumėte turėti galimybę atidaryti terminalą („Linux“/„Mac“) arba „cmd“eilutę („Windows“) ir pabandyti įvesti

arm-none-eabi-gcc

Išvestis turėtų atrodyti kaip pirmoji nuotrauka. Tai tik norint patikrinti, ar jis tinkamai įdiegtas.

Na, dabar, kai išankstiniai reikalavimai yra nepasiekiami, laikas pradėti linksmus dalykus.

2 žingsnis: SROVĖ

SROVĖ
SROVĖ
SROVĖ
SROVĖ
SROVĖ
SROVĖ

Grandinės laikas! Grandinė tam yra paprasta. Mes prijungsime LED prie GPIO 21 (kaištis 40) ant pi (žr. 2 ir 3 paveikslus). Rezistorius taip pat yra prijungtas nuosekliai, kad nebūtų pažeistas šviesos diodas. Rezistorius bus prijungtas prie duonos lentos neigiamo stulpelio, kuris bus prijungtas prie GND (39 kaištis) ant pi. Prijungdami šviesos diodą, būtinai prijunkite trumpąjį galą prie neigiamos pusės. Žiūrėkite paskutinę nuotrauką

3 veiksmas: ĮKROVIMAS „Mini SD“

ĮKELTINĖ Mini SD
ĮKELTINĖ Mini SD
ĮKELTINĖ Mini SD
ĮKELTINĖ Mini SD
ĮKELTINĖ Mini SD
ĮKELTINĖ Mini SD

Yra trys žingsniai, kad jūsų „pi 3“atpažintų tuščią mini sd kortelę. Turime rasti ir nukopijuoti bootcode.bin, start.elf ir fixup.dat. Šiuos failus galite gauti į pridėtą mini sd kortelę, jei nusipirkote „canakit“arba sukūrėte įkraunamą sd kortelę „pi 3“su „Linux“platinimu. Bet kuriuo atveju šie failai yra būtini, kad pi galėtų atpažinti sd kortelę kaip įkrovos įrenginį. Tada suformatuokite „mini sd“į „fat32“(dauguma mini SD kortelių yra suformatuotos „fat32“. Aš naudoju pigią „mini sd“kortelę iš „sandisk“), perkelkite „bootcode.bin“, „start.elf“, „fixup.dat“į SD kortelę. Ir baigta! Gerai dar vieną kartą ir paveikslų seka yra tokia:

  1. Raskite bootcode.bin, start.elf, fixup.dat.
  2. Įsitikinkite, kad jūsų SD kortelė suformatuota į fat32.
  3. Perkelkite bootcode.bin, start.elf ir fixup.dat į suformatuotą SD kortelę.

Štai kaip aš tai supratau, nuoroda.

4 žingsnis: PATIKRINKITE „Mini SD“

PATIKRINKITE „Mini SD“
PATIKRINKITE „Mini SD“
PATIKRINKITE „Mini SD“
PATIKRINKITE „Mini SD“

Gerai, mes turime įkraunamą mini sd kortelę ir, tikiuosi, šiuo metu turite pi 3. Taigi dabar turėtume tai išbandyti, kad įsitikintume, jog „pi 3“atpažįsta „mini sd“kortelę kaip įkraunamą.

Pi, netoli mini USB prievado yra du nedideli šviesos diodai. Vienas yra raudonas. Tai galios indikatorius. Kai pi gauna maitinimą, ši lemputė turėtų degti. Taigi, jei dabar prijungsite „pi“be mini sd kortelės, ji turėtų šviesti raudonai. Gerai, dabar atjunkite „pi“ir įdėkite įkraunamą mini sd kortelę, kuri buvo sukurta ankstesniame žingsnyje, ir prijunkite „pi“. Ar matote kitą lemputę? Šalia raudonos turėtų būti žalia lemputė, rodanti, kad ji skaito SD kortelę. Ši lemputė vadinama ACT. Jis užsidegs, kai bus įdėta perspektyvi SD kortelė. Jis mirksi, kai jis pasiekia jūsų mini sd kortelę.

Gerai, todėl įdėjus įkraunamą mini sd kortelę ir prijungus „pi“, turėjo įvykti du dalykai:

  1. Raudonas šviesos diodas turėtų užsidegti, rodydamas galios priėmimą
  2. Žalia lemputė turėtų užsidegti, nurodydama, kad ji įsijungė į mini sd kortelę

Jei kažkas nepavyko, pabandykite pakartoti ankstesnius veiksmus arba spustelėkite toliau pateiktą nuorodą, kad gautumėte daugiau informacijos.

Nuoroda čia yra gera nuoroda.

5 žingsnis: KODAS1

Šis projektas parašytas ARM surinkimo kalba. Šiame vadove prisiimtas pagrindinis ARM surinkimo supratimas, tačiau čia yra keletas dalykų, kuriuos turėtumėte žinoti:

.equ: priskiria reikšmę simboliui, ty abc.equ 5 abc dabar reiškia penkis

  • ldr: įkeliamas iš atminties
  • str: rašo į atmintį
  • cmp: lygina dvi reikšmes, atlikdamos atimtį. Nustato vėliavas.
  • b: šaka į etiketę
  • pridėti: atlieka aritmetiką

Jei neturite patirties su rankenų surinkimu, žiūrėkite šį vaizdo įrašą. Tai suteiks jums gerą supratimą apie rankos surinkimo kalbą.

Gerai, kad dabar mes turime grandinę, prijungtą prie mūsų aviečių pi 3, ir mes turime sd kortelę, kurią pi atpažįsta, todėl kita mūsų užduotis yra išsiaiškinti, kaip sąveikauti su grandine, įkeliant pi su vykdomąja programa. Apskritai, mes turime pasakyti pi, kad išvestų įtampą iš GPIO 21 (kaištis prijungtas prie raudono laido). Tada mums reikia būdo perjungti šviesos diodą, kad jis mirksėtų. Norėdami tai padaryti, mums reikia daugiau informacijos. Šiuo metu mes neįsivaizduojame, kaip nurodyti GPIO 21 išvesti, todėl turime perskaityti duomenų lapą. Dauguma mikrovaldiklių turi duomenų lapus, kuriuose tiksliai nurodyta, kaip viskas veikia. Deja, „pi 3“neturi oficialių dokumentų! Tačiau yra neoficialus duomenų lapas. Čia yra dvi nuorodos į jį:

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

Gerai, šiuo metu turėtumėte pereiti prie kelių žingsnių ir pereiti prie kito veiksmo, kad peržiūrėtumėte duomenų lapą ir sužinotumėte, kokią informaciją galite rasti.

6 veiksmas: CODE2: Turn_Led_ON

CODE2: „Turn_Led_ON“
CODE2: „Turn_Led_ON“
CODE2: „Turn_Led_ON“
CODE2: „Turn_Led_ON“
CODE2: „Turn_Led_ON“
CODE2: „Turn_Led_ON“

Raspberry pi 3 53 registruoja išvesties/įvesties kaiščius (išorinius įrenginius). Smeigtukai yra sugrupuoti ir kiekviena grupė priskiriama registrui. GPIO turime turėti prieigą prie registrų SELECT, SET registro ir CLEAR. Norėdami pasiekti šiuos registrus, mums reikia šių registrų fizinio adreso. Skaitydami duomenų lapą norite tik pažymėti adreso poslinkį (lo baitą) ir pridėti jį prie pagrindinio adreso. Turite tai padaryti, nes duomenų lape pateikiamas virtualus „Linux“adresas, kuris iš esmės yra operacinių sistemų priskirtos vertės. Mes nenaudojame operacinės sistemos, todėl turime tiesiogiai pasiekti šiuos registrus naudodami fizinį adresą. Tam jums reikia šios informacijos:

  • Pagrindinis išorinių įrenginių adresas: 0x3f200000. Pdf (puslapis 6) sako, kad pagrindinis adresas yra 0x3f000000, tačiau šis adresas neveiks. Naudokite 0x3f200000
  • FSEL2 (SELECT) poslinkis nėra visas registro adresas. Pdf išvardija FSEL2 adresu 0x7E20008, tačiau šis adresas nurodo virtualų „Linux“adresą. Poslinkis bus tas pats, todėl norime atkreipti dėmesį. 0x08
  • GPSET0 (SET) poslinkis: 0x1c
  • GPCLR0 poslinkis (CLEAR): 0x28

Taigi tikriausiai pastebėjote, kad duomenų lape yra 4 SELECT registrai, 2 SET registrai ir 2 CLEAR registrai, tad kodėl aš pasirinkau tuos, kuriuos padariau? Taip yra todėl, kad norime naudoti GPIO 21 ir FSEL2 valdiklius GPIO 20-29, SET0 ir CLR0 valdo GPIO 0-31. FSEL registrai kiekvienam GPIO kaiščiui priskiria tris bitus. Kadangi mes naudojame FSEL2, tai reiškia, kad bitai 0-2 valdo GPIO 20, o 3-5 bitai-GPIO 21 ir pan. „Set“ir „CLR“registrai kiekvienam kaiščiui priskiria vieną bitą. Pavyzdžiui, 0 bitas SET0 ir CLR0 valdo GPIO 1. Norėdami valdyti GPIO 21, SET0 ir CLR0 nustatytumėte 21 bitą.

Gerai, todėl mes kalbėjome apie tai, kaip pasiekti šiuos registrus, bet ką visa tai reiškia?

  • FSEL2 registras bus naudojamas nustatyti GPIO 21 išvestį. Norėdami nustatyti išvesties kaištį, trijų bitų eilės bitą turite nustatyti į 1. Taigi, jei bitai 3-5 valdo GPIO 21, tai reiškia, kad turime nustatyti pirmąjį bitą, 3 bitą iki 1. Tai pasakys pi kad norime naudoti GPIO 21 kaip išvestį. Taigi, jei pažvelgtume į 3 GPIO 21 bitus, jie turėtų atrodyti taip, kai nustatysime išvestį, b001.
  • GPSET0 liepia pi įjungti kaištį (išvesti įtampą). Norėdami tai padaryti, mes tiesiog perjungiame bitą, kuris atitinka norimą GPIO kaištį. Mūsų atveju 21 bitas.
  • GPCLR0 liepia pi išjungti kaištį (nėra įtampos). Norėdami išjungti kaištį, nustatykite bitą į atitinkamą GPIO kaištį. Mūsų atveju 21 bitas

Prieš pradėdami mirksėti, pirmiausia sukurkite paprastą programą, kuri tiesiog įjungs LED.

Norėdami pradėti, prie šaltinio kodo viršaus turime pridėti dvi direktyvas.

  • .sekcija.init nurodo pi, kur įdėti kodą
  • .global _pradėti

Toliau turime išdėstyti visus adresus, kuriuos naudosime. Naudokite.equ reikšmėms priskirti skaitomus simbolius.

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

Dabar mes sukursime kaukes, kad nustatytume reikiamus bitus.

  • .equ SET_BIT3, 0x08 Tai nustatys trečiąjį bitą 0000_1000
  • .equ SET_BIT21, 0x200000

Tada turime pridėti etiketę _start

_pradėti:

Įkelkite bazės adresą į registrą

ldr r0, = PAGRINDAS

Dabar turime nustatyti GPFSEL2 bitą 3

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Ši instrukcija liepia parašyti bitą 0x08 GPFSEL2 adresu

Galiausiai turime įjungti GPIO 21, nustatydami bitą 21 GPSET0 registre

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

Galutinis produktas turėtų atrodyti panašiai kaip pavaizduotas kodas.

Kitas žingsnis yra surinkti kodą ir sukurti.img failą, kurį pi gali paleisti.

  • Atsisiųskite pridėtą makefile ir kernel.ld ir, jei norite „turn_led_on.s“šaltinio kodo.
  • Įdėkite visus failus į tą patį aplanką.
  • Jei naudojate savo šaltinio kodą, redaguokite makefile ir pakeiskite code = turn_led_on.s į code =.s
  • Išsaugoti makefile.
  • Naudokite terminalą („Linux“) arba cmd langą („Windows“), kad pereitumėte į aplanką, kuriame yra failai, ir įveskite „make“ir paspauskite „Enter“
  • „Make“failas turėtų sugeneruoti failą kernel.img
  • Nukopijuokite kernel.img į savo mini sd kortelę. Jūsų kortelių turinys turėtų būti toks, kaip parodyta paveikslėlyje (3 pav.): Bootcode.bin, start.elf, fixup.dat ir kernel.img.
  • Išimkite mini sd kortelę ir įdėkite ją į pi
  • Prijunkite pi prie maitinimo šaltinio
  • LED turi užsidegti !!!

LABAI SVARBI PASTABA: Matyt, nurodomosios programos turėjo problemų dėl to, kad „makefile“neturėjo plėtinio, todėl iš naujo įkėliau jį su.txt plėtiniu. Pašalinkite plėtinį, kai jį atsisiunčiate, kad jis tinkamai veiktų.

Rekomenduojamas: