Sisukord:

Bare Metal Raspberry Pi 3: Vilkuv LED: 8 sammu
Bare Metal Raspberry Pi 3: Vilkuv LED: 8 sammu

Video: Bare Metal Raspberry Pi 3: Vilkuv LED: 8 sammu

Video: Bare Metal Raspberry Pi 3: Vilkuv LED: 8 sammu
Video: Dave Mustaine sneaks into seats behind fans secretly handing kids guitar picks 2024, Juuli
Anonim
Bare Metal Raspberry Pi 3: vilkuv LED
Bare Metal Raspberry Pi 3: vilkuv LED

Jälgige rohkem autorit:

Raspberry Pi vajutusnupp LED -idega
Raspberry Pi vajutusnupp LED -idega
Raspberry Pi vajutusnupp LED -idega
Raspberry Pi vajutusnupp LED -idega
Kastid
Kastid
Kastid
Kastid
Kuidas teha veteranide päeva jaoks kergendust
Kuidas teha veteranide päeva jaoks kergendust
Kuidas teha veteranide päeva jaoks kergendust
Kuidas teha veteranide päeva jaoks kergendust

Umbes:.oO0Oo. Lisateavet hallitusepizza kohta »

Tere tulemast BARE METAL pi 3 Vilkuva LED -i õpetusesse!

Selles õpetuses vaatame algusest lõpuni läbi LED -i vilkumise, kasutades Raspberry PI 3, leivaplaati, takistit, LED -i ja tühja SD -kaarti.

Mis on siis BARE METAL? BARE METAL ei ole lihtne programmeerimine. Paljas metall tähendab, et me kontrollime täielikult, mida arvuti bitti teeb. See tähendab põhimõtteliselt seda, et kood kirjutatakse täielikult kokkupanekus, kasutades käsukomplekti Arm. Lõpuks oleme loonud programmi, mis vilgutab LED -i, avades ühe Raspberry Pi GPIO -nööpnõela füüsilise aadressi ja konfigureerides selle väljundiks ning seejärel sisse ja välja lülitades. Selle projekti proovimine on suurepärane viis sisseehitatud programmeerimise alustamiseks ja loodetavasti arvuti paremaks mõistmiseks.

Mida sul vaja on?

Riistvara

  • Vaarika PI 3
  • SD-kaart, millel on alglaaditav pilt
  • Leivalaud
  • Isane Naissoost hüppaja juhtmed
  • Isased isased hüppajate juhtmed
  • LED
  • 220 oomi takisti (ei pea olema täpselt 220 oomi, enamik takisteid töötab)
  • mini sd kaart
  • mini sd -kaart, mis on eelnevalt laaditud vaarika pi operatsioonisüsteemiga (tavaliselt koos pi -ga)

Tarkvara

  • GCC kompilaator
  • GNU manustatud tööriistakett
  • tekstiredaktor
  • sd -kaardi vormindaja

Olgu, alustame!

Samm 1: ASJADE SEADISTAMINE/TARBIMINE

ASJATE SEADISTAMINE/ASJAD ÜLES
ASJATE SEADISTAMINE/ASJAD ÜLES

Olgu nii … esimene samm on riistvara omandamine. Saate osta osi eraldi või on komplektis rohkem kui piisavalt osi. LINK

See komplekt sisaldab kõike, mis on vajalik vaarika pi 3 ja muu seadistamiseks! ainus asi, mida see komplekt ei sisalda, on täiendav mini -sd -kaart. Oota! Ära osta veel teist. Kui te ei kavatse kasutada kaardile eelsalvestatud Linuxi installi, kopeerige lihtsalt kaasasoleva mini sd -kaardi sisu hilisemaks kasutamiseks ja vormindage kaart uuesti (sellest lähemalt hiljem). TÄHTIS MÄRKUS: hoidke failid kaasasoleval kaardil alles ja vajate neid hiljem!

Järgmisena on aeg tarkvara häälestada. See õpetus ei sisalda üksikasjalikke juhiseid tarkvara installimise kohta. Nende installimiseks on Internetis palju ressursse ja õpetusi:

Akende kasutajad:

Laadige alla ja installige gcc

Seejärel laadige alla ja installige GNU ARM -i manustatud tööriistakett

LINUX/MAC

  • Linuxi distributsioonides on gcc eelinstallitud
  • Laadige alla ja installige GNU ARM -i manustatud tööriistakett.

Olgu, nii et kui kõik läheb hästi, peaksite avama terminali (linux/mac) või cmd -rea (Windows) ja proovima sisestada

arm-none-eabi-gcc

Väljund peaks välja nägema sarnane esimese pildiga. Selle eesmärk on lihtsalt kontrollida, kas see on õigesti installitud.

Olgu nüüd, kui eeltingimused on teelt väljas, on aeg lõbusate asjadega alustada.

2. etapp: Ahel

AHTE
AHTE
LINGI
LINGI
AHTE
AHTE

Ringiaeg! Selle ahel on lihtne. Ühendame LED -i GPIO 21 -ga (tihvt 40) pi peal (vt joonis 2 ja 3). Samuti on jadaga ühendatud takisti, et vältida juhtme kahjustamist. Takisti ühendatakse leivaplaadi negatiivse veeruga, mis ühendatakse pi GND -ga (tihvt 39). LED -i ühendamisel ühendage kindlasti lühike ots negatiivse küljega. Vaata viimast pilti

3. samm: BOOTABLE Mini SD

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

Selleks, et teie pi 3 saaks teie tühja mini sd -kaardi ära tunda, on kolm sammu. Peame leidma ja kopeerima bootcode.bin, start.elf ja fixup.dat. Need failid saate kaasasolevalt mini -sd -kaardilt, kui ostsite canakiti või tegite alglaaditava sd -kaardi pi 3 jaoks Linuxi levitusega. Mõlemal juhul on need failid vajalikud, et pi saaks sd -kaardi alglaaditava seadmena ära tunda. Seejärel vormindage mini sd failiks fat32 (enamik mini -sd -kaarte on vormindatud fat32 -s. Kasutasin sandiskist odavat mini -SD -kaarti), teisaldage bootcode.bin, start.elf, fixup.dat SD -kaardile. Ja oletegi valmis! Olgu veel üks kord ja piltide järjekorras on sammud järgmised:

  1. Leidke bootcode.bin, start.elf, fixup.dat.
  2. Veenduge, et teie SD -kaart oleks vormindatud fat32 -ks.
  3. Liigutage bootcode.bin, start.elf ja fixup.dat vormindatud sd -kaardile.

Siin on, kuidas ma selle välja mõtlesin, link.

Samm: Kontrollige Mini SD -d

Kontrollige Mini SD -d
Kontrollige Mini SD -d
Kontrollige Mini SD -d
Kontrollige Mini SD -d

Olgu, meil on alglaaditav mini -SD -kaart ja loodetavasti on teil sellel hetkel pi 3. Nüüd peaksime seda testima, veendumaks, et pi 3 tunneb mini sd -kaardi käivitatavana.

Pi -l, mini -USB -pordi lähedal, on kaks väikest LED -i. Üks on punane. See on toiteindikaator. Kui pi saab energiat, peaks see tuli põlema. Nii et kui ühendate oma pi praegu ilma mini -sd -kaardita, peaks see punaselt helendama. Okei, ühendage oma pi pistik vooluvõrgust lahti ja sisestage eelmises etapis loodud alglaaditav mini -sd -kaart ja ühendage pi pistik. Kas näete teist valgust? Punase kõrval peaks olema roheline tuli, mis näitab, et see loeb SD -kaarti. Seda LED -i nimetatakse ACT -lediks. See süttib, kui sisestatud on elujõuline SD -kaart. See vilgub teie mini -sd -kaardile juurdepääsul.

Okei, nii et pärast alglaaditava mini sd -kaardi sisestamist ja pi ühendamist oleks pidanud juhtuma kaks asja:

  1. Punane LED peaks põlema, mis näitab toite vastuvõtmist
  2. Roheline LED peaks põlema, mis näitab, et see on mini sd -kaardile sisse lülitatud

Kui midagi läks valesti, proovige eelnevaid samme korrata või lisateabe saamiseks klõpsake alloleval lingil.

Link siin on hea viide.

5. samm: KOOD1

See projekt on kirjutatud ARM -i koostamiskeeles. Selles õpetuses eeldatakse ARM -i koostamise põhiteadmisi, kuid siin on mõned asjad, mida peaksite teadma:

.equ: määrab sümbolile väärtuse, st abc.equ 5 abc tähistab nüüd viit

  • ldr: laadib mälust
  • str: kirjutab mällu
  • cmp: võrdleb kahte väärtust lahutamise teel. Määrab lipud.
  • b: haru etikett
  • lisa: sooritab aritmeetika

Kui teil pole käsivarre kokkupanekuga kogemusi, vaadake seda videot. See annab teile hea arusaama käe kokkupaneku keelest.

Olgu, praegu on meil ahel, mis on ühendatud meie vaarika pi 3 -ga ja meil on sd -kaart, mille pi tunneb ära, nii et meie järgmine ülesanne on välja selgitada, kuidas ahelaga suhelda, laadides pi käivitatava programmiga. Üldiselt peame ütlema, et pi väljastaks pinget GPIO 21 -st (punase juhtmega ühendatud tihvt). Siis vajame viisi, kuidas LED -i vilkuma panna. Selleks vajame rohkem teavet. Praegu pole meil aimugi, kuidas öelda GPIO 21 väljundile, mistõttu peame lugema andmelehte. Enamikul mikrokontrolleritel on andmelehed, mis määravad täpselt, kuidas kõik töötab. Kahjuks pole pi 3 -l ametlikku dokumentatsiooni! Siiski on olemas mitteametlik andmeleht. Siin on kaks linki sellele:

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

Olgu, siinkohal peaksite võtma mõne minuti enne järgmise sammu juurde asumist, et vaadata läbi andmeleht ja vaadata, millist teavet leiate.

6. samm: CODE2: Turn_Led_ON

KOOD2: Pöörake_LED_ON
KOOD2: Pöörake_LED_ON
KOOD2: Pöörake_LED_ON
KOOD2: Pöörake_LED_ON
KOOD2: Pöörake_LED_ON
KOOD2: Pöörake_LED_ON

Vaarika pi 3 53 registreerib väljund-/sisendpoldid (välisseadmed). Nööpnõelad rühmitatakse kokku ja iga rühm määratakse registrisse. GPIO jaoks peame saama juurdepääsu registritele SELECT, SET register ja CLEAR. Nendele registritele juurdepääsemiseks vajame nende registrite füüsilist aadressi. Andmelehte lugedes soovite märkida ainult aadressi nihe (lo bait) ja lisada see baasaadressile. Peate seda tegema, sest andmelehel on loetletud linuxi virtuaalaadress, mis on põhimõtteliselt operatsioonisüsteemide määratud väärtused. Me ei kasuta operatsioonisüsteemi, seega peame neile registritele füüsilise aadressi abil otse juurde pääsema. Selleks vajate järgmist teavet:

  • Välisseadmete baasaadress: 0x3f200000. Pdf (lehekülg 6) ütleb, et baasaadress on 0x3f000000, kuid see aadress ei tööta. Kasutage 0x3f200000
  • FSEL2 (SELECT) nihe ei ole registri täielik aadress. PDF -is on FSEL2 kirjas 0x7E20008, kuid see aadress viitab Linuxi virtuaalaadressile. Nihe on sama, nii et me tahame seda märkida. 0x08
  • GPSET0 (SET) nihe: 0x1c
  • GPCLR0 (CLEAR) nihe: 0x28

Nii et ilmselt märkasite, et andmelehel on loetletud 4 SELECT-registrit, 2 SET-registrit ja 2 CLEAR-registrit, miks ma siis need valisin? Seda seetõttu, et tahame kasutada GPIO 21 ja FSEL2 juhtelemente GPIO 20-29, SET0 ja CLR0 juhib GPIO 0-31. FSEL -registrid määravad iga GPIO -pistiku jaoks kolm bitti. Kuna me kasutame FSEL2, tähendab see, et bitid 0-2 kontrollivad GPIO 20 ja bitid 3-5 kontrollivad GPIO 21 ja nii edasi. Registrid Set ja CLR määravad igale tihvtile ühe bitti. Näiteks SET0 ja CLR0 bitt 0 juhib GPIO 1. GPIO 21 juhtimiseks seadistate bitti 21 seadetes SET0 ja CLR0.

Olgu, nii et oleme rääkinud, kuidas nendele registritele juurde pääseda, kuid mida see kõik tähendab?

  • FSEL2 registrit kasutatakse GPIO 21 väljundi seadistamiseks. Nööpnõela määramiseks väljundiks peate määrama kolme bitti lo järjekorra bitiks 1. Seega, kui bitid 3-5 kontrollivad GPIO 21, tähendab see, et peame seadma esimese biti, biti 3 kuni 1. See ütleb pi et soovime väljundina kasutada GPIO 21. Nii et kui me vaatame GPIO 21 3 bitti, peaksid need pärast väljundi seadistamist välja nägema sellised: b001.
  • GPSET0 käsib pi -l pin sisse lülitada (väljastada pinge). Selleks lülitame lihtsalt bitti, mis vastab soovitud GPIO -nööpnõelale. Meie puhul, bitti 21.
  • GPCLR0 käsib pi -l tihvti välja lülitada (pinget pole). Tihvti väljalülitamiseks seadke bitt vastavale GPIO tihvtile. Meie puhul natuke 21

Enne vilkuva LED -i juurde jõudmist loome kõigepealt lihtsa programmi, mis lülitab LED -i lihtsalt sisse.

Alustuseks peame lisama oma lähtekoodi ülaossa kaks direktiivi.

  • .jagu.init ütleb pi, kuhu kood panna
  • .global _start

Järgmisena peame paigutama kõik kasutatavad aadressid. Väärtustele loetavate sümbolite määramiseks kasutage.equ.

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

Nüüd loome maskid, mis määravad vajalikud bitid.

  • .equ SET_BIT3, 0x08 See määrab kolmanda bitti 0000_1000
  • .equ SET_BIT21, 0x200000

Seejärel peame lisama sildi _start

_ algus:

Laadige baasaadress registrisse

ldr r0, = ALUS

Nüüd peame määrama GPFSEL2 bitti 3

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] See juhis ütleb, et kirjutage bit 0x08 tagasi GPFSEL2 aadressile

Lõpuks peame GPIO 21 sisse lülitama, seadistades biti 21 GPSET0 registrisse

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

Lõpptoode peaks välja nägema umbes nagu pildil olev kood.

Järgmine samm on koodi kompileerimine ja.img -faili loomine, mida pi saab käivitada.

  • Laadige alla lisatud makefile ja kernel.ld ning kui soovite turn_led_on.s lähtekoodi.
  • Pange kõik failid samasse kausta.
  • Kui kasutate oma lähtekoodi, muutke makefile'i ja asendage kood = turn_led_on.s koodiga =.s
  • Salvestage makefile.
  • Kasutage terminali (Linux) või cmd -akent (Windows), et navigeerida kausta, mis sisaldab faile, ja tippige make ning vajutage sisestusklahvi
  • Fail make peaks genereerima faili nimega kernel.img
  • Kopeerige kernel.img oma mini -sd -kaardile. Teie kaartide sisu peaks olema selline nagu pildil (pilt 3): bootcode.bin, start.elf, fixup.dat ja kernel.img.
  • Eemaldage mini sd -kaart ja sisestage see pi
  • Ühendage pi toiteallikaga
  • LED peaks põlema !!!

TÄHELEPANU TÄHTIS MÄRKUS: Ilmselt oli juhendatavatel probleem, et makefile'il puudus laiendus, seega laadisin selle uuesti üles.txt laiendiga. Eemaldage laiendus selle allalaadimisel, et see korralikult töötaks.

Soovitan: