Kazalo:

Bare Metal Raspberry Pi 3: utripajoča LED: 8 korakov
Bare Metal Raspberry Pi 3: utripajoča LED: 8 korakov

Video: Bare Metal Raspberry Pi 3: utripajoča LED: 8 korakov

Video: Bare Metal Raspberry Pi 3: utripajoča LED: 8 korakov
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Julij
Anonim
Bare Metal Raspberry Pi 3: utripajoča LED
Bare Metal Raspberry Pi 3: utripajoča LED

Avtor moldypizzaSledi še avtorja:

Raspberry Pi potisni gumb z LED diodami iz gole kovine
Raspberry Pi potisni gumb z LED diodami iz gole kovine
Raspberry Pi potisni gumb z LED diodami iz gole kovine
Raspberry Pi potisni gumb z LED diodami iz gole kovine
Zaboji
Zaboji
Zaboji
Zaboji
Kako narediti reliefno rezbarijo za dan veteranov
Kako narediti reliefno rezbarijo za dan veteranov
Kako narediti reliefno rezbarijo za dan veteranov
Kako narediti reliefno rezbarijo za dan veteranov

O:.oO0Oo. Več o plesni »

Dobrodošli v vadnici BARE METAL pi 3 Utripajoča LED!

V tej vadnici bomo šli skozi korake, od začetka do konca, da LED utripa z uporabo Raspberry PI 3, plošče, upora, LED in prazne kartice SD.

Kaj je torej BARE METAL? BARE METAL ni zahtevno programiranje. Gola kovina pomeni, da imamo v celoti nadzor nad tem, kaj bo računalnik naredil do kosa. Torej v bistvu pomeni, da bo koda v celoti napisana v sklopu, z uporabo nabora navodil Arm. Do konca bomo ustvarili program, ki bo utripal LED z dostopom do fizičnega naslova enega od zatičev GPIO Raspberry Pi in ga konfiguriral za izhod ter nato vklopil in izklopil. Poskus tega projekta je odličen način, da začnete z vgrajenim programiranjem in upamo, da boste bolje razumeli delovanje računalnika.

Kaj potrebujete?

Strojna oprema

  • Malina PI 3
  • Na kartico SD je že naložena zagonska slika
  • Ogledna plošča
  • Moški Ženski mostički
  • Moški moški mostički
  • LED
  • 220 ohmski upor (ne mora biti ravno 220 ohmov, večina uporov bo delovala)
  • mini sd kartica
  • mini SD kartica, ki je vnaprej naložena z operacijskim sistemom raspberry pi (običajno priložena pi)

Programska oprema

  • Prevajalnik GCC
  • Vgrajena orodna veriga GNU
  • urejevalnik besedil
  • oblikovalnik sd kartic

V redu, začnimO!

1. korak: NASTAVITEV STVARI/NASTOPITEV

NASTAVITEV STVARI/NAPRAVI
NASTAVITEV STVARI/NAPRAVI

V redu … prvi korak je pridobitev strojne opreme. Deli lahko kupite ločeno ali pa je v kompletu več kot dovolj delov. POVEZAVA

Ta komplet vsebuje vse, kar je potrebno za nastavitev maline pi 3 in več! edina stvar, ki ni vključena v ta komplet, je dodatna mini SD kartica. Počakaj! Ne kupujte še enega. Če ne nameravate uporabljati vnaprej nameščene namestitve Linuxa na kartici, samo kopirajte vsebino priložene mini SD kartice za pozneje in jo znova formatirajte (več o tem kasneje). POMEMBNO OPOMBA: hranite datoteke na priloženi kartici, ki jih boste potrebovali pozneje!

Nato je čas za namestitev programske opreme. Ta vadnica ne vsebuje podrobnih navodil o namestitvi programske opreme. Na spletu je veliko virov in vadnic o tem, kako jih namestiti:

UPORABNIKI WINDOWS:

Prenesite in namestite gcc

Nato prenesite in namestite vgrajeno orodno verigo GNU ARM

LINUX/MAC

  • Distribucije Linuxa imajo vnaprej nameščen gcc
  • Prenesite in namestite vgrajeno orodno verigo GNU ARM.

Če je vse v redu, bi morali odpreti terminal (linux/mac) ali cmd vrstico (windows) in poskusiti vnesti

arm-none-eabi-gcc

Izhod mora biti podoben prvi sliki. To je samo zato, da preverite, ali je pravilno nameščen.

Zdaj, ko so predpogoji odpravljeni, je čas, da začnete z zabavnimi stvarmi.

2. korak: VEZEK

VEZJE
VEZJE
VEZJE
VEZJE
VEZJE
VEZJE

Čas kroga! Vezje za to je preprosto. Priključili bomo LED na GPIO 21 (pin 40) na pi (glej sliko 2 in 3). Zaporedno je priključen tudi upor, ki preprečuje poškodbe vodnika. Upor bo povezan z negativnim stolpcem na plošči, ki bo povezan z GND (pin 39) na pi. Ko priključujete LED, ne pozabite priključiti kratkega konca na negativno stran. Oglejte si zadnjo sliko

3. korak: ZMOGLJIVI Mini SD

MOGOČE ZA zagon Mini SD
MOGOČE ZA zagon Mini SD
MOGUJOČI Mini SD
MOGUJOČI Mini SD
MOGUJOČI Mini SD
MOGUJOČI Mini SD

Obstajajo trije koraki, da vaš pi 3 prepozna prazno mini sd kartico. Najti in kopirati moramo bootcode.bin, start.elf in fixup.dat. Te datoteke lahko dobite na priloženi mini SD kartici, če ste kupili canakit ali naredili zagonsko SD kartico za pi 3 z distribucijo linux. Kakorkoli, te datoteke so potrebne, da pi prepozna kartico sd kot zagonsko napravo. Nato formatirajte mini sd v fat32 (večina mini sd kartic je oblikovanih v fat32. Uporabil sem poceni mini sd kartico iz sandiska), premaknite bootcode.bin, start.elf, fixup.dat na sd kartico. In končali ste! V redu še enkrat in po vrstnem redu slik so koraki naslednji:

  1. Poiščite bootcode.bin, start.elf, fixup.dat.
  2. Poskrbite, da je vaša SD kartica formatirana na fat32.
  3. Premaknite bootcode.bin, start.elf in fixup.dat na formatirano SD kartico.

Evo, kako sem to ugotovil, link.

4. korak: PREVERITE Mini SD

PREVERITE Mini SD
PREVERITE Mini SD
PREVERITE Mini SD
PREVERITE Mini SD

V redu, imamo zagonsko mini SD kartico in upajmo, da imate na tem mestu pi 3. Zdaj bi ga morali preizkusiti, da se prepričamo, da pi 3 prepozna mini sd kartico kot zagonsko.

Na pi, blizu mini USB vhoda, sta dva majhna LED. Ena je rdeča. To je indikator moči. Ko pi prejema moč, mora ta lučka prižgati. Torej, če svoj pi priključite zdaj brez mini sd kartice, bi moral zasvetiti rdeče. V redu, zdaj odklopite pi in vstavite zagonsko mini sd kartico, ki je bila ustvarjena v prejšnjem koraku, in priključite pi. Ali vidite drugo luč? Tik ob rdeči luči mora biti zelena lučka, ki označuje, da bere SD kartico. Ta LED se imenuje ACT led. Sveti, ko je vstavljena sposobna SD kartica. Ko dostopa do mini SD kartice, bo utripal.

V redu, torej bi se morali po vstavitvi zagonske mini sd kartice in priključitvi pi zgoditi dve stvari:

  1. Rdeča dioda mora biti prižgana, kar označuje sprejem moči
  2. Zelena LED dioda mora biti osvetljena, kar pomeni, da se je zagnal v kartico mini sd

Če je šlo kaj narobe, ponovite prejšnje korake ali kliknite spodnjo povezavo za več informacij.

Povezava tukaj je dobra referenca.

5. korak: KODA1

Ta projekt je napisan v montažnem jeziku ARM. V tej vadnici je predvideno osnovno razumevanje montaže ARM, vendar morate vedeti nekaj stvari:

.equ: dodeli vrednost simbolu, tj. abc.equ 5 abc zdaj predstavlja pet

  • ldr: naloži iz spomina
  • str: zapisuje v spomin
  • cmp: primerja dve vrednosti z odštevanjem. Nastavi zastavice.
  • b: veja do oznake
  • add: izvaja aritmetiko

Če nimate izkušenj z montažo roke, si oglejte ta video. Tako boste dobro razumeli montažni jezik Arm.

V redu, zdaj imamo vezje, ki je povezano z našo malino pi 3 in imamo sd kartico, ki jo pi prepozna, zato je naša naslednja naloga ugotoviti, kako komunicirati s vezjem, tako da naložimo pi z izvedljivim programom. Na splošno moramo povedati pi, da odda napetost iz GPIO 21 (pin priključen na rdečo žico). Nato potrebujemo način za preklop LED, da utripa. Za to potrebujemo več informacij. Na tej točki nimamo pojma, kako povedati GPIO 21 izhodu, zato moramo prebrati podatkovni list. Večina mikrokrmilnikov ima podatkovne liste, ki natančno določajo, kako vse deluje. Na žalost pi 3 nima uradne dokumentacije! Vendar pa obstaja neuraden podatkovni list. Tu sta dve povezavi do nje:

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

V redu, na tem mestu bi morali vzeti nekaj minut, preden se premaknete na naslednji korak, da pregledate podatkovni list in vidite, katere podatke lahko najdete.

6. korak: CODE2: Turn_Led_ON

KODA 2: Turn_Led_ON
KODA 2: Turn_Led_ON
KODA 2: Turn_Led_ON
KODA 2: Turn_Led_ON
KODA 2: Turn_Led_ON
KODA 2: Turn_Led_ON

Raspberry pi 3 53 registri za krmiljenje izhodnih/vhodnih zatičev (zunanjih naprav). Zatiči so združeni in vsaka skupina je dodeljena registru. Za GPIO moramo imeti dostop do registra SELECT, registra SET in CLEAR. Za dostop do teh registrov potrebujemo fizični naslov teh registrov. Ko berete podatkovni list, želite le zabeležiti odmik naslova (lo bajt) in ga dodati osnovnemu naslovu. To morate storiti, ker je v podatkovnem listu naveden navidezni naslov linux, ki so v bistvu vrednosti, ki jih dodeljujejo operacijski sistemi. Ne uporabljamo operacijskega sistema, zato moramo do teh registrov dostopati neposredno z uporabo fizičnega naslova. Za to potrebujete naslednje podatke:

  • Osnovni naslov zunanjih naprav: 0x3f200000. PDF (stran 6) pravi, da je osnovni naslov 0x3f000000, vendar ta naslov ne bo deloval. Uporabite 0x3f200000
  • Odmik FSEL2 (SELECT) ni polni naslov registra. PDF navaja FSEL2 na 0x7E20008, vendar se ta naslov nanaša na navidezni naslov linux. Odmik bo enak, zato želimo opozoriti. 0x08
  • Odmik GPSET0 (SET): 0x1c
  • Odmik GPCLR0 (CLEAR): 0x28

Torej ste verjetno opazili, da na podatkovnem listu so navedeni 4 registri SELECT, 2 registra SET in 2 CLEAR, zato zakaj sem izbral tiste, ki sem jih naredil? To je zato, ker želimo uporabiti kontrolnike GPIO 21 in FSEL2 GPIO 20-29, nastavitve SET0 in CLR0 GPIO 0-31. Registri FSEL za vsak pin GPIO dodelijo tri bite. Ker uporabljamo FSEL2, to pomeni, da biti 0-2 nadzorujejo GPIO 20 in bitovi 3-5 krmilijo GPIO 21 itd. Registra Set in CLR vsakemu zatiču dodeli en sam bit. Na primer, bit 0 v SET0 in CLR0 nadzoruje GPIO 1. Za nadzor GPIO 21 bi nastavili bit 21 v SET0 in CLR0.

V redu smo se pogovarjali o tem, kako dostopati do teh registrov, toda kaj vse to pomeni?

  • Register FSEL2 bo uporabljen za nastavitev izhoda GPIO 21. Če želite nastaviti pin za izhod, morate nastaviti niz zaporedja treh bitov na 1. Torej, če biti 3-5 nadzorujejo GPIO 21, to pomeni, da moramo nastaviti prvi bit, bit 3 na 1. To bo povedalo pi da želimo kot izhod uporabiti GPIO 21. Če bi torej pogledali 3 bite za GPIO 21, bi morali izgledati tako, potem ko smo ga nastavili na izhod, b001.
  • GPSET0 pove pi, naj vklopi pin (izhod napetosti). Če želite to narediti, samo preklopite bit, ki ustreza želenemu pin -ju GPIO. V našem primeru bit 21.
  • GPCLR0 pove pi, naj izklopi pin (brez napetosti). Če želite izklopiti pin, nastavite bit na ustrezen pin GPIO. V našem primeru bit 21

Preden začnemo utripati LED, najprej naredimo preprost program, ki bo LED preprosto vklopil.

Za začetek moramo na vrh izvorne kode dodati dve direktivi.

  • .section.init pove pi, kam naj vnese kodo
  • .global _start

Nato moramo postaviti vse naslove, ki jih bomo uporabljali. Uporabite.equ, če želite vrednostim dodeliti berljive simbole.

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

Zdaj bomo ustvarili maske za nastavitev bitov, ki jih moramo nastaviti.

  • .equ SET_BIT3, 0x08 S tem nastavite tri bit 0000_1000
  • .equ SET_BIT21, 0x200000

Nato moramo dodati oznako _start

_start:

Naložite osnovni naslov v register

ldr r0, = OSNOVA

Zdaj moramo nastaviti bit3 GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] To navodilo pravi, da se bit 0x08 vrne na naslov GPFSEL2

Nazadnje moramo vklopiti GPIO 21 z nastavitvijo bita 21 v registru GPSET0

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

Končni izdelek bi moral biti videti kot koda na sliki.

Naslednji korak je sestavljanje kode in ustvarjanje datoteke.img, ki jo lahko pi zažene.

  • Prenesite priloženo datoteko make in kernel.ld in če želite izvorno kodo turn_led_on.s.
  • Vse datoteke postavite v isto mapo.
  • Če uporabljate svojo izvorno kodo, uredite datoteko make in kodo = turn_led_on.s zamenjajte s kodo =.s
  • Shranite datoteko make.
  • S terminalom (linux) ali oknom cmd (windows) se pomaknite do mape z datotekami in vnesite make ter pritisnite enter
  • Datoteka make bi morala ustvariti datoteko z imenom kernel.img
  • Kopirajte kernel.img na svojo mini sd kartico. Vsebina vaših kartic mora biti takšna, kot je na sliki (slika 3): bootcode.bin, start.elf, fixup.dat in kernel.img.
  • Izvlecite kartico mini sd in jo vstavite v pi
  • Priključite pi v vir napajanja
  • LED naj zasveti !!!

RAHLO POMEMBNO OPOMBA: Očitno je pri učiteljih prišlo do težave, ker makefile ni imel razširitve, zato sem jo znova naložil z razširitvijo.txt. Ko prenesete razširitev, jo odstranite, da bo delovala pravilno.

Priporočena: