Sadržaj:

Bare Metal Raspberry Pi 3: Trepćuća LED: 8 koraka
Bare Metal Raspberry Pi 3: Trepćuća LED: 8 koraka

Video: Bare Metal Raspberry Pi 3: Trepćuća LED: 8 koraka

Video: Bare Metal Raspberry Pi 3: Trepćuća LED: 8 koraka
Video: Bare Metal Emulation - ZX Spectrum on a Raspberry Pi 2024, Studeni
Anonim
Bare Metal Raspberry Pi 3: Treperi LED
Bare Metal Raspberry Pi 3: Treperi LED

By moldypizzaSlijedi više od autora:

Raspberry Pi tipkalo sa LED diodama od golog metala
Raspberry Pi tipkalo sa LED diodama od golog metala
Raspberry Pi tipkalo sa LED diodama od golog metala
Raspberry Pi tipkalo sa LED diodama od golog metala
Sanduci
Sanduci
Sanduci
Sanduci
Kako napraviti reljefnu rezbariju za Dan branitelja
Kako napraviti reljefnu rezbariju za Dan branitelja
Kako napraviti reljefnu rezbariju za Dan branitelja
Kako napraviti reljefnu rezbariju za Dan branitelja

O:.oO0Oo. Više o plesni »

Dobro došli u BARE METAL pi 3 LED trepćući LED!

U ovom ćemo vodiču proći korake, od početka do kraja, kako bi LED zasvijetlio pomoću Raspberry PI 3, matične ploče, otpornika, LED diode i prazne SD kartice.

Što je dakle BARE METAL? BARE METAL nije prekomjerno programiranje. Goli metal znači da imamo potpunu kontrolu nad onim što će računalo učiniti do sitnice. Dakle, to u osnovi znači da će kôd biti potpuno napisan u sklopu, koristeći skup uputa Arm. Do kraja ćemo stvoriti program koji će treptati LED tako što će pristupiti fizičkoj adresi jednog od Raspberry Pi GPIO pinova i konfigurirati ga za izlaz, a zatim ga uključiti i isključiti. Pokušaj ovog projekta odličan je način za početak rada s ugrađenim programiranjem i nadamo se da ćete bolje razumjeti kako računalo radi.

Što trebaš?

Hardver

  • Malina PI 3
  • SD kartica s unaprijed učitanom slikom za pokretanje
  • Oglasna ploča
  • Muške Ženske žice kratkospojnika
  • Muške žice kratkospojnika
  • LED
  • Otpornik od 220 ohma (ne mora biti točno 220 ohma, većina otpornika će raditi)
  • mini sd kartica
  • mini SD kartica unaprijed učitana s malinim pi operativnim sustavom (obično uključen u pi)

Softver

  • GCC prevoditelj
  • GNU ugrađeni lanac alata
  • uređivač teksta
  • formatter SD kartice

U redu, započnimo!

Korak 1: POSTAVLJANJE STVARI/POSTAVLJANJE

POSTAVLJANJE STVARI/POSTAVLJANJE
POSTAVLJANJE STVARI/POSTAVLJANJE

U redu pa … prvi korak je nabavka hardvera. Dijelove možete kupiti zasebno ili postoji komplet s više nego dovoljno dijelova. VEZA

Ovaj komplet dolazi sa svime što je potrebno za postavljanje maline pi 3 i više! jedino što nije uključeno u ovaj komplet je dodatna mini sd kartica. Čekati! Ne kupujte još jedan. Ako ne namjeravate koristiti instaliranu instalaciju linux -a na karticu, samo kopirajte sadržaj uključene mini sd kartice za kasnije i ponovno formatirajte karticu (više o tome kasnije). VAŽNA NAPOMENA: Čuvajte datoteke na priloženoj kartici koje će vam kasnije trebati!

Sljedeće je vrijeme za postavljanje softvera. Ovaj vodič neće sadržavati detaljna uputstva o tome kako instalirati softver. Na mreži postoji mnogo resursa i vodiča o tome kako ih instalirati:

KORISNICI PROZORA:

Preuzmite i instalirajte gcc

Zatim preuzmite i instalirajte GNU ARM ugrađeni lanac alata

LINUX/MAC

  • Linux distribucije dolaze s predinstaliranim gcc-om
  • Preuzmite i instalirajte GNU ARM ugrađeni lanac alata.

U redu, ako je sve u redu, trebali biste moći otvoriti terminal (linux/mac) ili cmd redak (prozori) i pokušati upisati

arm-none-eabi-gcc

Izlaz bi trebao izgledati slično prvoj slici. Ovim se samo želi provjeriti je li ispravno instaliran.

U redu sada kada su preduvjeti uklonjeni, vrijeme je da počnete sa zabavnim stvarima.

Korak 2: KRUG

KRUG
KRUG
KRUG
KRUG
KRUG
KRUG

Vrijeme kruga! Krug za to je jednostavan. Spojit ćemo LED na GPIO 21 (pin 40) na pi (vidi sliku 2 i 3). Otpornik je također spojen serijski kako bi se spriječilo oštećenje LED -a. Otpornik će biti spojen na negativni stupac na ploči koja će biti spojena na GND (pin 39) na pi. Prilikom spajanja LED diode spojite kratki kraj s negativnom stranom. Pogledajte zadnju sliku

Korak 3: MONTAŽNI Mini SD

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

Postoje tri koraka kako bi vaš pi 3 prepoznao vašu praznu mini sd karticu. Moramo pronaći i kopirati bootcode.bin, start.elf i fixup.dat. Ove datoteke možete dobiti na uključenoj mini sd kartici ako ste kupili canakit ili napravili bootabilnu sd karticu za pi 3 s distribucijom linux. U svakom slučaju, ove su datoteke potrebne kako bi pi prepoznao sd karticu kao uređaj za pokretanje. Zatim formatirajte mini sd u fat32 (većina mini sd kartica dolazi u formatu fat32. Koristio sam jeftinu mini sd karticu iz sandiska), premjestite bootcode.bin, start.elf, fixup.dat na sd karticu. I gotovi ste! U redu još jednom i redoslijedom slika koraci su:

  1. Pronađite bootcode.bin, start.elf, fixup.dat.
  2. Provjerite je li vaša SD kartica formatirana na fat32.
  3. Premjestite bootcode.bin, start.elf i fixup.dat na formatiranu SD karticu.

Evo kako sam to shvatio, link.

Korak 4: PROVJERITE Mini SD

PROVJERITE Mini SD
PROVJERITE Mini SD
PROVJERITE Mini SD
PROVJERITE Mini SD

U redu, imamo mini SD karticu za podizanje sustava, i nadamo se da u ovom trenutku imate pi 3. Stoga bismo ga trebali testirati kako bismo bili sigurni da pi 3 prepoznaje mini sd karticu kao pokretačku.

Na pi, u blizini mini usb priključka nalaze se dvije male LED diode. Jedan je crven. Ovo je indikator napajanja. Kad pi prima snagu, ovo svjetlo bi trebalo svijetliti. Dakle, ako odmah priključite svoj pi bez mini sd kartice, trebao bi zasvijetliti crveno. U redu, sada isključite svoj pi i umetnite svoju mini SD karticu za pokretanje koja je stvorena u prethodnom koraku i uključite pi. Vidite li drugo svjetlo? Trebalo bi biti zeleno svjetlo, odmah do crvenog, što znači da čita sd karticu. Ovaj LED dioda naziva se ACT LED. Svijetlit će kad je umetnuta održiva SD kartica. Treperit će kada pristupa vašoj mini sd kartici.

U redu, dvije stvari su se trebale dogoditi nakon što ste umetnuli bootable mini sd karticu i priključili pi:

  1. Crvena LED dioda trebala bi svijetliti što označava prijem napajanja
  2. Zelena LED dioda trebala bi biti osvijetljena što znači da se pokrenuo u mini sd karticu

Ako je nešto pošlo po zlu, pokušajte ponoviti prethodne korake ili kliknite na donju vezu za više informacija.

Link ovdje je dobra referenca.

Korak 5: KOD1

Ovaj je projekt napisan na ARM montažnom jeziku. Osnovno razumijevanje ARM montaže pretpostavlja se u ovom vodiču, ali evo nekoliko stvari koje biste trebali znati:

.equ: dodjeljuje vrijednost simbolu, tj. abc.equ 5 abc sada predstavlja pet

  • ldr: učitava se iz memorije
  • str: zapisuje u memoriju
  • cmp: uspoređuje dvije vrijednosti oduzimanjem. Postavlja zastavice.
  • b: grana do oznake
  • dodaj: izvodi aritmetiku

Ako nemate iskustva s montažom Arma, pogledajte ovaj video. To će vam omogućiti dobro razumijevanje asemblerskog jezika Arm.

U redu, sada imamo sklop koji je povezan s našim malinom pi 3 i imamo sd karticu koju pi prepoznaje, pa je naš sljedeći zadatak smisliti kako stupiti u interakciju s krugom učitavanjem pi izvršnim programom. Općenito, ono što trebamo učiniti je reći pi da emitira napon iz GPIO 21 (pin spojen na crvenu žicu). Zatim nam je potreban način da uključimo LED diodu kako bi trepnula. Za to nam je potrebno više informacija. U ovom trenutku nemamo pojma kako reći GPIO 21 na izlaz, zbog čega moramo pročitati podatkovnu tablicu. Većina mikrokontrolera ima podatkovne listove koji točno navode kako sve radi. Nažalost, pi 3 nema službenu dokumentaciju! Međutim, postoji neslužbeni popis podataka. Evo dva linka na njega:

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

U redu, u ovom trenutku trebate uzeti nekoliko minuta prije nego što prijeđete na sljedeći korak da pregledate podatkovnu tablicu i vidite koje informacije možete pronaći.

Korak 6: CODE2: Turn_Led_ON

KOD 2: Uključi_LED_ON
KOD 2: Uključi_LED_ON
KOD 2: Uključi_LED_ON
KOD 2: Uključi_LED_ON
KOD 2: Uključi_LED_ON
KOD 2: Uključi_LED_ON

Raspberry pi 3 53 registrira se za upravljanje izlaznim/ulaznim pinovima (periferija). Igle su grupirane zajedno i svaka je grupa dodijeljena registru. Za GPIO moramo imati pristup registru SELECT, registru SET i CLEAR. Za pristup tim registrima potrebna nam je fizička adresa tih registara. Kada čitate podatkovni list, samo želite zabilježiti pomak adrese (lo bajt) i dodati to osnovnoj adresi. Morate to učiniti jer podatkovna tablica navodi linux virtualnu adresu koje su u osnovi vrijednosti koje dodjeljuju operacijski sustavi. Ne koristimo operacijski sustav pa moramo pristupiti tim registrima izravno pomoću fizičke adrese. Za to su vam potrebne sljedeće informacije:

  • Osnovna adresa perifernih uređaja: 0x3f200000. PDF (stranica 6) kaže da je osnovna adresa 0x3f000000, međutim ova adresa neće raditi. Koristite 0x3f200000
  • Odmak FSEL2 (SELECT) nije puna adresa registra. U PDF -u je FSEL2 naveden na 0x7E20008, ali ova adresa se odnosi na linux virtualnu adresu. Odstupanje će biti isto pa to želimo primijetiti. 0x08
  • Odmak GPSET0 (SET): 0x1c
  • Pomak GPCLR0 (CLEAR): 0x28

Vjerojatno ste primijetili da list s podacima sadrži 4 registra SELECT, 2 SET registra i 2 CLEAR registra pa zašto sam odabrao one koje sam napravio? To je zato što želimo koristiti GPIO 21 i FSEL2 kontrole GPIO 20-29, SET0 i CLR0 kontrole GPIO 0-31. FSEL registri dodjeljuju tri bita za svaki GPIO pin. Budući da koristimo FSEL2, to znači da bitovi 0-2 upravljaju GPIO 20, a bitovi 3-5 upravljaju GPIO 21 i tako dalje. Registri Set i CLR svakom pin -u dodjeljuju jedan bit. Na primjer, bit 0 u SET0 i CLR0 kontrolira GPIO 1. Za upravljanje GPIO 21 postavite bit 21 u SET0 i CLR0.

U redu, razgovarali smo o tome kako pristupiti tim registrima, ali što to sve znači?

  • Registar FSEL2 će se koristiti za postavljanje GPIO 21 na izlaz. Da biste postavili pin na izlaz, morate postaviti lo red bit tri bita na 1. Dakle, ako bitovi 3-5 kontroliraju GPIO 21, to znači da moramo postaviti prvi bit, bit 3 na 1. To će reći pi da želimo koristiti GPIO 21 kao izlaz. Dakle, ako bismo gledali 3 bita za GPIO 21, oni bi trebali izgledati ovako nakon što smo ga postavili na izlaz, b001.
  • GPSET0 govori pi da uključi pin (izloži napon). Da bismo to učinili, samo promijenimo bit koji odgovara GPIO pin -u koji želimo. U našem slučaju bit 21.
  • GPCLR0 govori pi da isključi pin (bez napona). Za isključivanje pina postavite bit na odgovarajući GPIO pin. U našem slučaju bit 21

Prije nego što dođemo do trepćućeg LED -a, prvo napravimo jednostavan program koji će jednostavno uključiti LED.

Za početak moramo dodati dvije direktive na vrh našeg izvornog koda.

  • .odjeljak.init govori pi gdje smjestiti kôd
  • .global _start

Zatim moramo rasporediti sve adrese koje ćemo koristiti. Pomoću.equ dodijelite vrijednostima čitljive simbole.

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

Sada ćemo stvoriti maske za postavljanje bitova koje moramo postaviti.

  • .equ SET_BIT3, 0x08 Ovim će se postaviti bit tri 0000_1000
  • .equ SET_BIT21, 0x200000

Zatim moramo dodati našu oznaku _start

_početak:

Učitajte baznu adresu u registar

ldr r0, = BAZA

Sada moramo postaviti bit3 GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Ova uputa kaže zapisivanje bita 0x08 na adresu GPFSEL2

Na kraju moramo uključiti GPIO 21 postavljanjem bita 21 u GPSET0 registru

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

Konačni proizvod trebao bi izgledati poput koda na slici.

Sljedeći korak je sastaviti kôd i stvoriti.img datoteku koju pi može pokrenuti.

  • Preuzmite priloženi makefile i kernel.ld i ako želite izvorni kod turn_led_on.s.
  • Stavite sve datoteke u istu mapu.
  • Ako koristite vlastiti izvorni kod, uredite makefile i zamijenite code = turn_led_on.s kodom =.s
  • Spremite makefile.
  • Upotrijebite terminal (linux) ili cmd prozor (windows) za navigaciju do mape koja sadrži datoteke i upišite make i pritisnite enter
  • Make datoteka treba generirati datoteku pod nazivom kernel.img
  • Kopirajte kernel.img na svoju mini sd karticu. Sadržaj vaših kartica trebao bi biti kao na slici (slika 3): bootcode.bin, start.elf, fixup.dat i kernel.img.
  • Izvadite mini sd karticu i umetnite je u pi
  • Priključite pi u izvor napajanja
  • LED bi trebao zasvijetliti !!!

UMAKNO VAŽNA NAPOMENA: Očigledno je da su instruktori imali problem s time da makefile nema ekstenziju, pa sam je ponovno učitao s nastavkom.txt. Uklonite proširenje kada ga preuzmete kako bi ispravno radilo.

Preporučeni: