Sisällysluettelo:

Bare Metal Raspberry Pi 3: Vilkkuva LED: 8 vaihetta
Bare Metal Raspberry Pi 3: Vilkkuva LED: 8 vaihetta

Video: Bare Metal Raspberry Pi 3: Vilkkuva LED: 8 vaihetta

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

Seuraa lisää tekijältä:

Raspberry Pi -painike LED -valolla Bare Metal
Raspberry Pi -painike LED -valolla Bare Metal
Raspberry Pi -painike LED -valolla Bare Metal
Raspberry Pi -painike LED -valolla Bare Metal
Laatikot
Laatikot
Laatikot
Laatikot
Kuinka tehdä helpotuskaiverrus veteraanipäivälle
Kuinka tehdä helpotuskaiverrus veteraanipäivälle
Kuinka tehdä helpotuskaiverrus veteraanipäivälle
Kuinka tehdä helpotuskaiverrus veteraanipäivälle

Tietoja:.oO0Oo. Lisätietoja moldypizzasta »

Tervetuloa BARE METAL pi 3 Vilkkuva LED -opetusohjelmaan!

Tässä opetusohjelmassa käymme läpi vaiheet alusta loppuun, jotta LED -valo vilkkuu käyttämällä Raspberry PI 3: ta, leipälevyä, vastusta, lediä ja tyhjää SD -korttia.

Joten mikä on BARE METAL? BARE METAL ei ole yksinkertaista ohjelmointia. Pelkkä metalli tarkoittaa, että hallitsemme täysin, mitä tietokone tekee bittiin asti. Se tarkoittaa siis pohjimmiltaan sitä, että koodi kirjoitetaan kokonaan kokoonpanossa käyttäen Arm -käskysarjaa. Loppuun mennessä olemme luoneet ohjelman, joka vilkuttaa LED -valoa pääsemällä yhden Raspberry Pi: n GPIO -nastan fyysiseen osoitteeseen ja määrittämällä sen tulostamaan ja kytkemällä sen päälle ja pois päältä. Tämän projektin kokeilu on loistava tapa aloittaa sulautetun ohjelmoinnin aloittaminen ja toivottavasti antaa paremman käsityksen tietokoneen toiminnasta.

Mitä tarvitset?

Laitteisto

  • Vadelma PI 3
  • SD-kortti, joka on esiladattu käynnistyskuvalla
  • Leipälauta
  • Uros Naarashyppyjohdot
  • Urospuoliset urospuoliset johdot
  • LED
  • 220 ohmin vastus (ei tarvitse olla täsmälleen 220 ohmia, useimmat vastukset toimivat)
  • mini sd -kortti
  • mini sd -kortti, joka on esiladattu vadelma pi -käyttöjärjestelmällä (yleensä pi: n mukana)

Ohjelmisto

  • GCC -kääntäjä
  • GNU -sulautettu työkaluketju
  • tekstieditori
  • sd -kortin muotoilija

Okei, ALOITETAAN!

Vaihe 1: ASIAN ASETTAMINEN/ASENNUS

ASIAN ASETTAMINEN/ASENNUS
ASIAN ASETTAMINEN/ASENNUS

Okei niin … ensimmäinen askel on hankkia laitteisto. Voit ostaa osat erikseen tai on olemassa sarja, joka sisältää enemmän kuin tarpeeksi osia. LINKKI

Tämä sarja sisältää kaiken tarvittavan vadelmapi 3: n ja muiden asetusten tekemiseen! Ainoa asia, joka ei sisälly tähän pakettiin, on ylimääräinen mini -sd -kortti. Odota! Älä osta toista toista. Jos et aio käyttää kortille esiladattua linux -asennusta, kopioi vain mukana toimitetun mini -sd -kortin sisältö myöhempää käyttöä varten ja alusta kortti uudelleen (lisää siitä myöhemmin). TÄRKEÄ HUOMAUTUS: varmista, että pidät tiedostot mukana toimitetulla kortilla, joten tarvitset niitä myöhemmin!

Seuraavaksi on aika asentaa ohjelmisto. Tämä opetusohjelma ei sisällä yksityiskohtaisia ohjeita ohjelmiston asentamisesta. Netissä on paljon resursseja ja opetusohjelmia näiden asentamisesta:

WINDOWS -KÄYTTÄJÄT:

Lataa ja asenna gcc

Lataa ja asenna sitten upotettu GNU ARM -työkaluketju

LINUX/MAC

  • Linux-jakeluissa on gcc esiasennettuna
  • Lataa ja asenna sulautettu GNU ARM -työkaluketju.

Okei, joten jos kaikki menee hyvin, sinun pitäisi pystyä avaamaan pääte (linux/mac) tai cmd -rivi (Windows) ja yrittämään kirjoittaa

arm-none-eabi-gcc

Tuloksen pitäisi näyttää samalta kuin ensimmäinen kuva. Tämä on vain varmistaaksesi, että se on asennettu oikein.

Okei nyt, kun edellytykset ovat poissa tieltä, on aika aloittaa hauskat asiat.

Vaihe 2: VIRTA

PIIRI
PIIRI
PIIRI
PIIRI
PIIRI
PIIRI

Kierrosaika! Piiri tätä varten on yksinkertainen. Yhdistämme ledin GPIO 21: een (nasta 40) pi: llä (katso kuvat 2 ja 3). Johdossa on myös vastus, joka estää ledin vahingoittumisen. Vastus kytketään leipälevyn negatiiviseen sarakkeeseen, joka liitetään pi: n GND: hen (nasta 39). Kun kytket ledin, muista kytkeä lyhyt pää negatiiviseen puoleen. Katso viimeinen kuva

Vaihe 3: KÄYNNISTETTÄVÄ Mini SD

KÄYNNISTETTÄVÄ Mini SD
KÄYNNISTETTÄVÄ Mini SD
KÄYNNISTETTÄVÄ Mini SD
KÄYNNISTETTÄVÄ Mini SD
KÄYNNISTETTÄVÄ Mini SD
KÄYNNISTETTÄVÄ Mini SD

Voit saada pi 3: n tunnistamaan tyhjän mini sd -korttisi kolmella tavalla. Meidän on löydettävä ja kopioitava bootcode.bin, start.elf ja fixup.dat. Saat nämä tiedostot mukana toimitetulle mini -sd -kortille, jos ostit canakitin tai teet käynnistettävän sd -kortin pi 3: lle Linux -jakelulla. Joka tapauksessa nämä tiedostot ovat välttämättömiä, jotta pi voi tunnistaa sd -kortin käynnistettäväksi laitteeksi. Alusta seuraavaksi mini sd fat32 -muotoon (useimmat mini -sd -kortit on alustettu fat32 -muotoon. Käytin halpaa mini -sd -korttia sandiskista), siirrä bootcode.bin, start.elf, fixup.dat SD -kortille. Ja olet valmis! Okei vielä kerran ja kuvien järjestyksessä vaiheet ovat:

  1. Etsi bootcode.bin, start.elf, fixup.dat.
  2. Varmista, että sd -korttisi on alustettu fat32 -muotoon.
  3. Siirrä bootcode.bin, start.elf ja fixup.dat alustetulle SD -kortille.

Näin päädyin tähän, linkki.

Vaihe 4: TARKISTA Mini SD

TARKISTA Mini SD
TARKISTA Mini SD
TARKISTA Mini SD
TARKISTA Mini SD

Okei, meillä on käynnistettävä mini -SD -kortti, ja toivottavasti sinulla on pi 3 tässä vaiheessa. Joten nyt meidän pitäisi testata sitä varmistaaksesi, että pi 3 tunnistaa mini sd -kortin käynnistettäväksi.

Pi: ssä, lähellä mini -usb -porttia, on kaksi pientä lediä. Yksi on punainen. Tämä on virran merkkivalo. Kun pi saa virtaa, tämän valon pitäisi palaa. Joten jos liität pi: n juuri nyt ilman mini -sd -korttia, sen pitäisi syttyä punaiseksi. Okei, irrota nyt pi -pistorasia ja aseta käynnistyskelpoinen mini -sd -kortti, joka luotiin edellisessä vaiheessa, ja kytke pi -liitin. Näetkö toisen valon? Punaisen vieressä pitäisi olla vihreä valo, joka osoittaa, että se lukee SD -korttia. Tätä lediä kutsutaan ACT -lediksi. Se syttyy, kun laitteeseen on asetettu elinkelpoinen sd -kortti. Se vilkkuu, kun se käyttää mini -sd -korttiasi.

Okei, joten kahden asian olisi pitänyt tapahtua sen jälkeen, kun asetit käynnistettävän mini -sd -kortin ja liitit pi: n:

  1. Punaisen ledin pitäisi palaa, mikä osoittaa virran vastaanoton
  2. Vihreä merkkivalo palaa, mikä osoittaa, että se on käynnistynyt mini -sd -korttiin

Jos jokin meni pieleen, yritä toistaa edelliset vaiheet tai napsauta alla olevaa linkkiä saadaksesi lisätietoja.

Tässä linkki on hyvä viite.

Vaihe 5: KOODI 1

Tämä projekti on kirjoitettu ARM -kokoonpanokielellä. Tässä opetusohjelmassa oletetaan perustiedot ARM -kokoonpanosta, mutta tässä on muutamia asioita, jotka sinun pitäisi tietää:

.equ: määrittää arvon symbolille eli abc.equ 5 abc edustaa nyt viittä

  • ldr: lataa muistista
  • str: kirjoittaa muistiin
  • cmp: vertaa kahta arvoa vähentämällä. Asettaa liput.
  • b: haara etiketille
  • lisää: suorittaa laskutoimituksen

Jos sinulla ei ole kokemusta käsivarren kokoonpanosta, katso tämä video. Se antaa sinulle hyvän käsityksen käsivarren kokoonpanokielestä.

Okei, niin juuri nyt meillä on piiri, joka on yhdistetty vadelmapi 3: eemme ja meillä on sd -kortti, jonka pi tunnistaa, joten seuraava tehtävämme on selvittää, miten vuorovaikutuksessa piirin kanssa lataamalla pi suoritettavalle ohjelmalle. Yleensä meidän on kerrottava pi: lle, että se lähettää jännitteen GPIO 21: stä (nasta kytketty punaiseen lankaan). Sitten tarvitsemme tavan vaihtaa lediä, jotta se vilkkuu. Tätä varten tarvitsemme lisätietoja. Tässä vaiheessa meillä ei ole aavistustakaan, kuinka kertoa GPIO 21: lle, joten meidän on luettava lomake. Useimmilla mikro-ohjaimilla on tietolomakkeet, joissa määritetään tarkalleen, miten kaikki toimii. Valitettavasti pi 3: lla ei ole virallista dokumentaatiota! On kuitenkin epävirallinen tietolomake. Tässä on kaksi linkkiä siihen:

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

Okei, tässä vaiheessa sinun pitäisi kestää muutama minuutti ennen kuin siirryt seuraavaan vaiheeseen ja voit tarkastella tietolomaketta ja nähdä, mitä tietoja löydät.

Vaihe 6: 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

Vadelma pi 3 53 53 rekisteröi ohjaamaan lähtö-/tulotappeja (oheislaitteita). Nastat ryhmitellään yhteen ja jokainen ryhmä määritetään rekisteriin. GPIO: n osalta meidän on voitava käyttää SELECT-, SET- ja CLEAR -rekistereitä. Päästäksemme näihin rekistereihin tarvitsemme näiden rekisterien fyysiset osoitteet. Kun luet tietolomaketta, haluat vain huomata osoitteen siirtymän (lo tavu) ja lisätä sen perusosoitteeseen. Sinun on tehtävä tämä, koska lomakkeessa on luettelo linux -virtuaaliosoitteesta, jotka ovat pohjimmiltaan käyttöjärjestelmien määrittämiä arvoja. Emme käytä käyttöjärjestelmää, joten meidän on päästävä näihin rekistereihin suoraan käyttämällä fyysistä osoitetta. Tätä varten tarvitset seuraavat tiedot:

  • Oheislaitteiden perusosoite: 0x3f200000. Pdf (sivu 6) sanoo, että perusosoite on 0x3f000000, mutta tämä osoite ei toimi. Käytä 0x3f200000
  • FSEL2: n (SELECT) siirtymä ei ole rekisterin koko osoite. PDF -luettelossa on FSEL2 muodossa 0x7E20008, mutta tämä osoite viittaa linux -virtuaaliosoitteeseen. Siirtymä on sama, joten haluamme huomata. 0x08
  • GPSET0: n (SET) siirtymä: 0x1c
  • GPCLR0 -siirtymä (CLEAR): 0x28

Joten olet todennäköisesti huomannut, että tietolomakkeessa on 4 SELECT-rekisteriä, 2 SET-rekisteriä ja 2 CLEAR-rekisteriä, joten miksi valitsin ne, jotka tein? Tämä johtuu siitä, että haluamme käyttää GPIO 21- ja FSEL2-ohjaimia GPIO 20-29, SET0 ja CLR0 ohjaavat GPIO 0-31. FSEL -rekisterit määrittävät kolme bittiä kullekin GPIO -pinnille. Koska käytämme FSEL2: ta, se tarkoittaa, että bitit 0-2 ohjaavat GPIO 20: tä ja bitit 3-5 ohjaavat GPIO 21: tä ja niin edelleen. Set- ja CLR -rekisterit määrittävät yhden bitin jokaiselle nastalle. Esimerkiksi bitti 0 SET0: ssa ja CLR0 ohjaa GPIO 1: tä. Jos haluat ohjata GPIO 21: tä, asetat bitin 21 SET0: ssa ja CLR0: ssa.

Okei, olemme keskustelleet näiden rekisterien käyttämisestä, mutta mitä se kaikki tarkoittaa?

  • FSEL2 -rekisteriä käytetään asettamaan GPIO 21 lähtöön. Jos haluat asettaa nastan lähtöön, sinun on asetettava kolmen bitin lo-järjestysbitti arvoon 1. Joten jos bitit 3-5 ohjaavat GPIO 21: tä, se tarkoittaa, että meidän on asetettava ensimmäinen bitti, bitti 3-1. Tämä kertoo pi: lle että haluamme käyttää GPIO 21: tä tulostuksena. Joten jos tarkastelemme GPIO 21: n 3 bittiä, niiden pitäisi näyttää tältä, kun olemme asettaneet sen tulostettavaksi, b001.
  • GPSET0 käskee pi: n kytkemään nastan päälle (antaa jännitteen). Tätä varten vaihdamme vain haluamaamme GPIO -pinta vastaavaa bittiä. Meidän tapauksessamme bitti 21.
  • GPCLR0 käskee pi: n sammuttamaan nastan (ei jännitettä). Sammuta nasta asettamalla bitti vastaavaan GPIO -nastaan. Meidän tapauksessamme bitti 21

Ennen kuin pääsemme vilkkuvaan lediin, tehdään ensin yksinkertainen ohjelma, joka yksinkertaisesti kytkee ledin päälle.

Aluksi meidän on lisättävä kaksi direktiiviä lähdekoodimme alkuun.

  • .osa.init kertoo pi: lle, mihin koodi laitetaan
  • .global _start

Seuraavaksi meidän on asetettava kaikki käyttämämme osoitteet. Määritä arvoille luettavia symboleja.equ avulla.

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

Nyt aiomme luoda maskeja asettaaksemme tarvittavat bitit.

  • .equ SET_BIT3, 0x08 Tämä asettaa bitin kolme 0000_1000
  • .equ SET_BIT21, 0x200000

Sitten meidän on lisättävä _start -tarramme

_alkaa:

Lataa tukiaseman osoite rekisteriin

ldr r0, = PERUS

Nyt meidän on asetettava GPFSEL2: n bitti 3

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Tämä ohje käskee kirjoittaa bitin 0x08 takaisin GPFSEL2 -osoitteeseen

Lopuksi meidän on otettava GPIO 21 käyttöön asettamalla bitti 21 GPSET0 -rekisteriin

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

Lopputuotteen pitäisi näyttää kuvan kaltaiselta.

Seuraava vaihe on koota koodi ja luoda.img -tiedosto, jonka pi voi ajaa.

  • Lataa liitteenä oleva makefile ja kernel.ld ja jos haluat turn_led_on.s -lähdekoodin.
  • Laita kaikki tiedostot samaan kansioon.
  • Jos käytät omaa lähdekoodiasi, muokkaa makefileä ja korvaa code = turn_led_on.s koodilla =.s
  • Tallenna makefile.
  • Käytä päätelaitetta (Linux) tai cmd -ikkunaa (Windows) navigoidaksesi kansioon, joka sisältää tiedostot, ja kirjoita make ja paina enter
  • Make -tiedoston pitäisi luoda tiedosto nimeltä kernel.img
  • Kopioi kernel.img mini -sd -kortillesi. Korttisi sisällön tulee olla kuvan mukainen (kuva 3): bootcode.bin, start.elf, fixup.dat ja kernel.img.
  • Poista mini -sd -kortti ja aseta se pi -korttiin
  • Kytke pi virtalähteeseen
  • LEDin pitäisi syttyä !!!

TÄRKEÄ HUOMAUTUS: Ilmeisesti ohjeilla oli ongelma siinä, että makefile-tiedostossa ei ollut laajennusta, joten latasin sen uudelleen.txt-laajennuksella. Poista laajennus, kun lataat sen, jotta se toimii oikein.

Suositeltava: