Përmbajtje:

Bare Metal Raspberry Pi 3: LED që vezullon: 8 hapa
Bare Metal Raspberry Pi 3: LED që vezullon: 8 hapa

Video: Bare Metal Raspberry Pi 3: LED që vezullon: 8 hapa

Video: Bare Metal Raspberry Pi 3: LED që vezullon: 8 hapa
Video: "Bare metal" CircuitPython on a Raspberry Pi, HDMI, and e-ink :) 2024, Korrik
Anonim
Bare Metal Raspberry Pi 3: LED që vezullon
Bare Metal Raspberry Pi 3: LED që vezullon

Ndiqni më shumë nga autori:

Buton Shtypi Raspberry Pi Me LEDs Bare Metal
Buton Shtypi Raspberry Pi Me LEDs Bare Metal
Buton Shtypi Raspberry Pi Me LEDs Bare Metal
Buton Shtypi Raspberry Pi Me LEDs Bare Metal
Arka
Arka
Arka
Arka
Si të bëni një gdhendje lehtësuese për Ditën e Veteranëve
Si të bëni një gdhendje lehtësuese për Ditën e Veteranëve
Si të bëni një gdhendje lehtësuese për Ditën e Veteranëve
Si të bëni një gdhendje lehtësuese për Ditën e Veteranëve

Rreth:.oO0Oo. Më shumë rreth moldypizza »

Mirë se vini në tutorialin BARE METAL pi 3 Blinking LED!

Në këtë tutorial ne do të kalojmë hapat, nga fillimi në fund, për të marrë një LED të ndezur duke përdorur një Raspberry PI 3, një pjatë, një rezistencë, një led dhe një kartë SD bosh.

Pra, çfarë është BARE METAL? BARE METAL nuk është programim i shkëlqyeshëm. Bare metal do të thotë që ne jemi plotësisht në kontroll të asaj që kompjuteri do të bëjë deri në bit. Pra, në thelb do të thotë që kodi do të shkruhet plotësisht në asamble, duke përdorur grupin e udhëzimeve Arm. Deri në fund do të kemi krijuar një program që do të pulsojë një LED duke hyrë në adresën fizike të njërës prej kunjave GPIO të Raspberry Pi dhe duke e konfiguruar atë në dalje dhe më pas duke e ndezur dhe fikur. Përpjekja për këtë projekt, është një mënyrë e shkëlqyeshme për të filluar me programimin e integruar dhe shpresojmë të sigurojë një kuptim më të mirë se si funksionon një kompjuter.

Cfare te nevojitet?

Hardware

  • Mjedra PI 3
  • Karta SD e ngarkuar paraprakisht me një imazh të nisshëm
  • Breadboard
  • Tela meshkuj bluzë kërcyes
  • Tela meshkuj bluzë kërcyes
  • LED
  • Rezistencë 220 ohm (nuk duhet të jetë saktësisht 220 ohm, shumica e çdo rezistence do të funksionojë)
  • mini kartë sd
  • mini kartë sd e ngarkuar paraprakisht me sistemin operativ mjedër pi (zakonisht i përfshirë me pi)

Softuer

  • Përpiluesi GCC
  • Zinxhiri i veglave të ngulitura në GNU
  • redaktues teksti
  • formatues i kartës sd

Mirë le të Fillojmë!

Hapi 1: P SRGJITHSHMRIA E GJINGRAVE/GJENDJEVE

P SRFSHIRJA E GJINGRAVE/MBYLLJES
P SRFSHIRJA E GJINGRAVE/MBYLLJES

Mirë pra … hapi i parë është të fitoni pajisje. Ju mund t'i blini pjesët veç e veç ose ka një çantë që vjen me më shumë se pjesë të mjaftueshme. LINK

Ky komplet vjen me gjithçka që nevojitet për të konfiguruar mjedrën pi 3 dhe më shumë! e vetmja gjë që nuk përfshihet në këtë komplet është një mini kartë shtesë SD. Prit! Mos blini një tjetër akoma. Nëse nuk planifikoni të përdorni instalimin e linux të para -ngarkuar në kartë, atëherë thjesht kopjoni përmbajtjen e kartës mini sd të përfshirë për më vonë dhe riformatoni kartën (më shumë për atë më vonë). SH NOTNIM I RORTNDSISHM: sigurohuni që t'i mbani skedarët në kartën e përfshirë, për të cilat do t'i keni NEVOJ për më vonë!

Tjetra është koha për të konfiguruar softuerin. Ky tutorial nuk do të përfshijë udhëzime të hollësishme se si të instaloni softuerin. Ka shumë burime dhe mësime në internet se si t'i instaloni këto:

PERSRDORUESIT E WINDOWS:

Shkarkoni dhe instaloni gcc

Tjetra, shkarkoni dhe instaloni zinxhirin e veglave të integruara të GNU ARM

LINUX/MAC

  • Shpërndarjet Linux vijnë me gcc të para-instaluar
  • Shkarkoni dhe instaloni zinxhirin e veglave të integruara të GNU ARM.

Në rregull, nëse gjithçka shkon mirë, atëherë duhet të jeni në gjendje të hapni terminalin (linux/mac) ose cmd (dritaret) dhe të provoni të shtypni

krah-asnje-eabi-gcc

Dalja duhet të duket e ngjashme me figurën e parë. Kjo është vetëm për të verifikuar që është instaluar saktë.

Mirë tani që parakushtet nuk janë në rrugën e duhur, është koha për të filluar me gjërat argëtuese.

Hapi 2: QARKU

QARKU
QARKU
QARKU
QARKU
QARKU
QARKU

Koha e qarkut! Qarku për këtë është i thjeshtë. Ne do të lidhim një led në GPIO 21 (pin 40) në pi (shiko foton 2 dhe 3). Një rezistencë është gjithashtu e lidhur në seri për të parandaluar që led të dëmtohet. Rezistenca do të lidhet me kolonën negative në tabelën e bukës e cila do të lidhet me GND (pin 39) në pi. Kur lidhni led sigurohuni që të lidhni skajin e shkurtër me anën negative. Shikoni foton e fundit

Hapi 3: Mini SD BOOTABLE

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

Ka tre hapa për ta bërë pi 3 tuaj të njohë kartën tuaj bosh mini sd. Ne duhet të gjejmë dhe kopjojmë bootcode.bin, start.elf dhe fixup.dat. Ju mund t'i merrni këto skedarë në kartën mini sd të përfshirë nëse keni blerë canakit ose bëni një kartë sd bootable për pi 3 me një shpërndarje linux. Sido që të jetë, këto skedarë janë të nevojshëm për të lejuar që pi të njohë kartën sd si një pajisje bootable. Tjetra, formatoni mini sd në fat32 (shumica e mini kartave sd vijnë të formatuara në fat32. Kam përdorur një kartë mini sd të lirë nga sandisk), zhvendosni bootcode.bin, start.elf, fixup.dat në kartën sd. Dhe mbarove! Në rregull edhe një herë dhe sipas radhës së fotografive hapat janë:

  1. Gjeni bootcode.bin, start.elf, fixup.dat.
  2. Sigurohuni që karta juaj SD të jetë e formatuar në fat32.
  3. Zhvendosni bootcode.bin, start.elf dhe fixup.dat në kartën sd të formatuar.

Ja se si e kuptova këtë, lidhje.

Hapi 4: KONTROLLO Mini SD

KONTROLLO Mini SD
KONTROLLO Mini SD
KONTROLLO Mini SD
KONTROLLO Mini SD

Në rregull, ne kemi një kartë mini sd bootable, dhe me shpresë, ju keni një pi 3 në këtë pikë. Pra, tani ne duhet ta testojmë atë për t'u siguruar që pi 3 po njeh kartën mini sd si të nisshme.

Në pi, pranë portit mini usb ka dy led të vegjël. Njëra është e kuqe. Ky është treguesi i fuqisë. Kur pi merr energji kjo dritë duhet të jetë e ndezur. Pra, nëse e lidhni pi -në tuaj tani pa mini kartë sd, duhet të ndizet me të kuqe. Mirë tani shkëputeni pi -në tuaj dhe vendosni mini kartën tuaj bootable sd që u krijua në hapin e mëparshëm dhe futeni prizën. A shihni një dritë tjetër? Duhet të ketë një dritë jeshile, menjëherë pranë asaj të kuqe, që tregon se po lexon kartën sd. Ky led quhet ACT led. Do të ndriçojë kur futet një kartë SD e zbatueshme. Do të ndizet kur të ketë qasje në kartën tuaj mini sd.

Në rregull, dy gjëra duhet të kishin ndodhur pasi të keni futur kartën mini sd të bootable dhe të futni pi në:

  1. Ledi i kuq duhet të ndriçohet duke treguar marrjen e fuqisë
  2. Led -i i gjelbër duhet të ndriçohet duke treguar se është futur në kartën mini sd

Nëse diçka nuk shkoi mirë, provoni të përsërisni hapat e mëparshëm ose klikoni në lidhjen më poshtë për më shumë informacion.

Lidhja këtu është një referencë e mirë.

Hapi 5: KODI 1

Ky projekt është shkruar në gjuhën e asamblesë së ARM -së. Një kuptim themelor i asamblesë ARM supozohet në këtë tutorial, por këtu janë disa gjëra që duhet të dini:

.equ: i jep një vlerë një simboli dmth abc.equ 5 abc tani përfaqëson pesë

  • ldr: ngarkon nga kujtesa
  • str: i shkruan kujtesës
  • cmp: krahason dy vlera duke kryer një zbritje. Vendos flamuj.
  • b: degë në etiketë
  • shto: kryen aritmetikë

Nëse nuk keni përvojë me montimin e krahëve, shikoni këtë video. Kjo do t'ju japë një kuptim të mirë të gjuhës së asamblesë Arm.

Mirë kështu që tani kemi një qark që është i lidhur me mjedrën tonë pi 3 dhe kemi një kartë sd që pi e njeh, kështu që detyra jonë tjetër është të kuptojmë se si të ndërveprojmë me qarkun duke ngarkuar pi me një program të ekzekutueshëm. Në përgjithësi, ajo që duhet të bëjmë është t'i themi pi që të nxjerrë një tension nga GPIO 21 (kunja e lidhur me telin e kuq). Atëherë ne kemi nevojë për një mënyrë për të ndryshuar led për ta bërë atë të ndezet. Për ta bërë këtë ne kemi nevojë për më shumë informacion. Në këtë pikë ne nuk kemi asnjë ide se si t'i themi GPIO 21 të dalë, kjo është arsyeja pse ne duhet të lexojmë fletën e të dhënave. Shumica e mikrokontrolluesve kanë të dhëna që specifikojnë saktësisht se si funksionon gjithçka. Fatkeqësisht, pi 3 nuk ka dokumentacion zyrtar! Sidoqoftë, ekziston një fletë e të dhënave jozyrtare. Këtu janë dy lidhje me të:

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

Mirë në këtë pikë, ju duhet të kaloni disa minuta para se të kaloni në hapin tjetër për të parë fletën e të dhënave dhe për të parë se çfarë informacioni mund të gjeni.

Hapi 6: KODI 2: Turn_Led_ON

KODI 2: Turn_Led_ON
KODI 2: Turn_Led_ON
KODI 2: Turn_Led_ON
KODI 2: Turn_Led_ON
KODI 2: Turn_Led_ON
KODI 2: Turn_Led_ON

Mjedra pi 3 53 regjistrohet për të kontrolluar kunjat e daljes/hyrjes (periferikësh). Kunjat grupohen së bashku dhe secilit grup i caktohet një regjistër. Për GPIO ne duhet të jemi në gjendje të hyjmë në regjistrin SELECT, regjistrin SET dhe regjistrat CLEAR. Për të hyrë në këta regjistra na duhen adresat fizike të këtyre regjistrave. Kur jeni duke lexuar fletën e të dhënave ju vetëm dëshironi të shënoni kompensimin e adresës (lo byte) dhe shtojeni atë në adresën bazë. Ju duhet ta bëni këtë sepse fleta e të dhënave po liston adresën virtuale linux të cilat janë në thelb vlera që sistemet operative caktojnë. Ne nuk po përdorim një sistem operativ, kështu që ne duhet të hyjmë në këto regjistra drejtpërdrejt duke përdorur adresën fizike. Për këtë ju nevojiten informacionet e mëposhtme:

  • Adresa bazë e pajisjeve periferike: 0x3f200000. Pdf (faqe 6) thotë se adresa bazë është 0x3f000000, megjithatë, kjo adresë nuk do të funksionojë. Përdorni 0x3f200000
  • Kompensimi i FSEL2 (SELECT) jo adresa e plotë e regjistrit. Pdf liston FSEL2 në 0x7E20008 por kjo adresë i referohet adresës virtuale linux. Kompensimi do të jetë i njëjtë, kështu që ne duam të vërejmë. 0x08
  • Kompensimi i GPSET0 (SET): 0x1c
  • Kompensimi i GPCLR0 (CLEAR): 0x28

Pra, me siguri keni vënë re se fleta e të dhënave liston 4 regjistra SELECT, 2 regjistra SET dhe 2 regjistra CLEAR kështu që pse zgjodha ato që bëra? Kjo ndodh sepse duam të përdorim GPIO 21 dhe FSEL2 kontrollon GPIO 20-29, SET0 dhe CLR0 kontrollon GPIO 0-31. Regjistrat FSEL caktojnë tre bit për çdo pin GPIO. Meqenëse ne jemi duke përdorur FSEL2 që do të thotë bit 0-2 kontrollo GPIO 20, dhe bit 3-5 kontroll GPIO 21 e kështu me radhë. Regjistrat Set dhe CLR caktojnë një bit të vetëm për çdo kunj. Për shembull, bit 0 në SET0 dhe CLR0 kontrollon GPIO 1. Për të kontrolluar GPIO 21 do të vendosnit bitin 21 në SET0 dhe CLR0.

Mirë, kështu që ne kemi folur për mënyrën e qasjes në këto regjistra, por çfarë do të thotë e gjithë kjo?

  • Regjistri FSEL2 do të përdoret për të vendosur GPIO 21 në dalje. Për të vendosur një pin në dalje, duhet të vendosni bitin e rendit lo të tre bitëve në 1. Pra, nëse bitët 3-5 kontrollojnë GPIO 21, kjo do të thotë që ne duhet të vendosim bitin e parë, bitin 3 në 1. Kjo do t'i tregojë pi që duam të përdorim GPIO 21 si dalje. Pra, nëse do të shikonim 3 bitët për GPIO 21 ata duhet të duken kështu pasi ta vendosim atë në dalje, b001.
  • GPSET0 i thotë pi të ndezë kunjin (nxjerr tension). Për ta bërë këtë, ne thjesht kalojmë bitin që korrespondon me pinin GPIO që duam. Në rastin tonë, biti 21.
  • GPCLR0 i thotë pi të fikë pin (pa tension). Për të fikur kunjin vendoseni bitin në pinin përkatës GPIO. Në rastin tonë bit 21

Para se të arrijmë te një led i ndezur, së pari le të bëjmë një program të thjeshtë që thjesht do të ndezë led.

Për të filluar, duhet të shtojmë dy direktiva në krye të kodit burimor.

  • .seksioni.init i tregon piut ku ta vendos kodin
  • .global _fillo

Tjetra, ne duhet të vendosim të gjitha adresat që do të përdorim. Përdorni.equ për të caktuar simbole të lexueshme për vlerat.

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

Tani do të krijojmë maska për të vendosur pjesët që duhet të vendosim.

  • .equ SET_BIT3, 0x08 Kjo do të vendosë bit tre 0000_1000
  • .equ SET_BIT21, 0x200000

Atëherë duhet të shtojmë etiketën tonë _start

_fillo:

Ngarko adresën bazë në regjistër

ldr r0, = BAZA

Tani duhet të vendosim bit3 të GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Ky udhëzim thotë të shkruani bit 0x08 në adresën e GPFSEL2

Së fundi, ne duhet të vendosim GPIO 21 të aktivizuar duke vendosur bitin 21 në regjistrin GPSET0

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

Produkti përfundimtar duhet të duket diçka si kodi i paraqitur.

Hapi tjetër është përpilimi i kodit dhe krijimi i një skedari.img që pi mund ta ekzekutojë.

  • Shkarkoni makefile -in e bashkangjitur, dhe kernel.ld dhe nëse dëshironi kodin burimor turn_led_on.s.
  • Vendosni të gjithë skedarët në të njëjtën dosje.
  • Nëse jeni duke përdorur kodin tuaj burimor, modifikoni skedarin makefile dhe zëvendësoni kodin = turn_led_on.s me kodin =.s
  • Ruani përbërjen.
  • Përdorni terminalin (linux) ose dritaren cmd (dritaret) për të lundruar në dosjen tuaj që përmban skedarët dhe shtypni make and hit enter
  • Skedari make duhet të gjenerojë një skedar të quajtur kernel.img
  • Kopjoni kernel.img në mini kartën tuaj sd. Përmbajtja e kartave tuaja duhet të jetë si në figurë (figura 3): bootcode.bin, start.elf, fixup.dat dhe kernel.img.
  • Hidhni kartën mini sd dhe futeni në pi
  • Lidheni pi në burimin e energjisë
  • LED duhet të ndizet !!!

SH NOTNIM I DREJT I RORTNDSISHM: Me sa duket udhëzuesit kishin një problem me faktin që makefile nuk kishte një shtrirje, kështu që unë e ngarkova përsëri me një shtrirje.txt. Ju lutemi hiqni shtesën kur e shkarkoni që të funksionojë siç duhet.

Recommended: