Satura rādītājs:

Bare Metal Raspberry Pi 3: mirgojoša gaismas diode: 8 soļi
Bare Metal Raspberry Pi 3: mirgojoša gaismas diode: 8 soļi

Video: Bare Metal Raspberry Pi 3: mirgojoša gaismas diode: 8 soļi

Video: Bare Metal Raspberry Pi 3: mirgojoša gaismas diode: 8 soļi
Video: ESP32 Tutorial 3 - Resistor, LED, Bredboard and First Project: Hello LED -ESP32 IoT Learnig kit 2024, Novembris
Anonim
Bare Metal Raspberry Pi 3: mirgojoša gaismas diode
Bare Metal Raspberry Pi 3: mirgojoša gaismas diode

Sekojiet vairāk autora:

Raspberry Pi spiedpoga ar gaismas diodēm bez metāla
Raspberry Pi spiedpoga ar gaismas diodēm bez metāla
Raspberry Pi spiedpoga ar gaismas diodēm bez metāla
Raspberry Pi spiedpoga ar gaismas diodēm bez metāla
Kastes
Kastes
Kastes
Kastes
Kā padarīt palīdzības griešanu veterānu dienai
Kā padarīt palīdzības griešanu veterānu dienai
Kā padarīt palīdzības griešanu veterānu dienai
Kā padarīt palīdzības griešanu veterānu dienai

Par:.oO0Oo. Vairāk par moldypizza »

Laipni lūdzam BARE METAL pi 3 mirgojošā LED apmācībā!

Šajā apmācībā mēs veiksim soļus no sākuma līdz beigām, lai LED mirgos, izmantojot Raspberry PI 3, maizes dēli, rezistoru, LED un tukšu SD karti.

Tātad, kas ir tukšs metāls? BARE METAL nav vienkārša programmēšana. Kails metāls nozīmē, ka mēs pilnībā kontrolējam, ko dators darīs. Tātad būtībā tas nozīmē, ka kods tiks pilnībā uzrakstīts montāžā, izmantojot rokas instrukciju komplektu. Līdz beigām mēs būsim izveidojuši programmu, kas mirgos LED, piekļūstot vienas Raspberry Pi GPIO tapas fiziskajai adresei un konfigurējot to izvadīšanai un pēc tam to ieslēdzot un izslēdzot. Izmēģinot šo projektu, ir lielisks veids, kā sākt iegulto programmēšanu un, cerams, sniegt labāku izpratni par datora darbību.

Ko tev vajag?

Aparatūra

  • Aveņu PI 3
  • Iepriekš ielādēta SD karte ar sāknējamu attēlu
  • Maizes dēlis
  • Tēviņš Sieviešu džemperu vadi
  • Vīriešu džemperis
  • LED
  • 220 omu rezistors (tam nav jābūt tieši 220 omiem, vairums rezistoru darbosies)
  • mini sd karte
  • mini sd karte, kas iepriekš ielādēta ar aveņu pi operētājsistēmu (parasti iekļauta pi)

Programmatūra

  • GCC kompilators
  • GNU iegulta rīku ķēde
  • teksta redaktors
  • sd karšu formatētājs

Labi, sāksim darbu!

1. solis: LIETU IESTATĪŠANA/IEKĀRTAS

LIETU IESTATĪŠANA/IEKĀRTAS
LIETU IESTATĪŠANA/IEKĀRTAS

Labi, tāpēc… pirmais solis ir iegūt aparatūru. Jūs varat iegādāties detaļas atsevišķi, vai arī ir komplekts, kurā ir vairāk nekā pietiekami daudz detaļu. LINK

Šajā komplektā ir viss nepieciešamais, lai iestatītu aveņu pi 3 un vairāk! vienīgais, kas nav iekļauts šajā komplektā, ir papildu mini sd karte. Pagaidi! Neiegādājieties vēl vienu. Ja neplānojat izmantot kartē iepriekš ielādētu Linux instalāciju, vienkārši nokopējiet iekļautās mini sd kartes saturu vēlākam laikam un atkārtoti formatējiet karti (vairāk par to vēlāk). SVARĪGA PIEZĪME: glabājiet failus komplektā iekļautajā kartē, un tie būs nepieciešami vēlāk!

Tālāk ir pienācis laiks iestatīt programmatūru. Šī apmācība neietvers detalizētus norādījumus par programmatūras instalēšanu. Tiešsaistē ir daudz resursu un pamācību, kā tos instalēt:

LOGU LIETOTĀJI:

Lejupielādējiet un instalējiet gcc

Pēc tam lejupielādējiet un instalējiet GNU ARM iegulto rīku ķēdi

LINUX/MAC

  • Linux izplatīšanai ir iepriekš instalēta gcc
  • Lejupielādējiet un instalējiet GNU ARM iegulto rīku ķēdi.

Labi, tāpēc, ja viss ir kārtībā, jums vajadzētu būt iespējai atvērt termināli (Linux/Mac) vai cmd līniju (Windows) un mēģināt rakstīt

arm-none-eabi-gcc

Rezultātam vajadzētu izskatīties līdzīgi pirmajam attēlam. Tas ir tikai, lai pārbaudītu, vai tas ir pareizi instalēts.

Labi, tagad, kad priekšnosacījumi vairs nav pieejami, ir pienācis laiks sākt ar jautrajām lietām.

2. darbība: Ķēde

ĶĒDE
ĶĒDE
ĶĒDE
ĶĒDE
ĶĒDE
ĶĒDE

Ķēdes laiks! Šim nolūkam ķēde ir vienkārša. Mēs savienosim LED ar GPIO 21 (pin 40) uz pi (skat. 2. un 3. attēlu). Sērijveidā ir pievienots arī rezistors, lai novērstu LED bojājumus. Rezistors tiks pievienots maizes dēļa negatīvajai kolonnai, kas tiks savienota ar GND (39. tapa) uz pi. Pievienojot vadu, noteikti pievienojiet īso galu negatīvajai pusei. Skatīt pēdējo attēlu

3. darbība: BOOTABLE Mini SD

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

Ir trīs soļi, lai jūsu pi 3 atpazītu tukšo mini sd karti. Mums jāatrod un jākopē bootcode.bin, start.elf un fixup.dat. Šos failus varat iegūt iekļautajā mini sd kartē, ja iegādājāties kanakitu vai izveidojat sāknējamu sd karti pi 3 ar Linux izplatīšanu. Jebkurā gadījumā šie faili ir nepieciešami, lai ļautu pi atpazīt SD karti kā sāknējamu ierīci. Pēc tam formatējiet mini sd uz fat32 (lielākā daļa mini sd karšu ir formatētas fat32. Es izmantoju lētu mini sd karti no sandisk), pārvietojiet bootcode.bin, start.elf, fixup.dat uz sd kartes. Un esat pabeidzis! Labi vēl vienu reizi un attēlu secībā ir šādas darbības:

  1. Atrodiet bootcode.bin, start.elf, fixup.dat.
  2. Pārliecinieties, vai jūsu SD karte ir formatēta uz fat32.
  3. Pārvietojiet bootcode.bin, start.elf un fixup.dat uz formatētās SD kartes.

Lūk, kā es to sapratu, saite.

4. darbība: PĀRBAUDIET mini SD

PĀRBAUDIET mini SD
PĀRBAUDIET mini SD
PĀRBAUDIET mini SD
PĀRBAUDIET mini SD

Labi, mums ir bootable mini sd karte, un cerams, ka jums šajā brīdī ir pi 3. Tāpēc tagad mums tas jāpārbauda, lai pārliecinātos, ka pi 3 atpazīst mini sd karti kā sāknējamu.

Uz pi, netālu no mini USB porta, ir divi mazi LED. Viens ir sarkans. Šis ir jaudas indikators. Kad pi saņem enerģiju, šai gaismai vajadzētu iedegties. Tātad, ja jūs pievienojat savu pi tūlīt, ja nav mini SD kartes, tai vajadzētu iedegties sarkanā krāsā. Labi, tagad atvienojiet savu pi un pievienojiet iepriekšējā solī izveidoto sāknējamo mini sd karti un pievienojiet pi. Vai redzat citu gaismu? Blakus sarkanajai jābūt zaļai gaismai, kas norāda, ka tā lasa SD karti. Šo vadību sauc par ACT vadīto. Tas iedegsies, ja būs ievietota dzīvotspējīga SD karte. Tas mirgos, piekļūstot jūsu mini sd kartei.

Labi, tāpēc divām lietām vajadzēja notikt pēc tam, kad ievietojāt bootable mini sd karti un pievienojāt pi:

  1. Sarkanajam gaismas diodei vajadzētu iedegties, norādot uz strāvas saņemšanu
  2. Zaļajam gaismas diodei vajadzētu iedegties, norādot, ka tā ir ieslēgta mini sd kartē

Ja radās problēma, atkārtojiet iepriekšējās darbības vai noklikšķiniet uz tālāk esošās saites, lai iegūtu vairāk informācijas.

Saite šeit ir laba atsauce.

5. darbība: KODS1

Šis projekts ir uzrakstīts ARM montāžas valodā. Šajā apmācībā tiek pieņemta pamata izpratne par ARM montāžu, taču šeit ir dažas lietas, kas jums jāzina:

.equ: piešķir simbolam vērtību, ti, abc.equ 5 abc tagad apzīmē piecus

  • ldr: ielādējas no atmiņas
  • str: raksta atmiņā
  • cmp: salīdzina divas vērtības, veicot atņemšanu. Iestata karodziņus.
  • b: filiāle uz etiķetes
  • pievienot: veic aritmētiku

Ja jums nav pieredzes ar roku montāžu, noskatieties šo videoklipu. Tas ļaus jums labi saprast rokas montāžas valodu.

Labi, tāpēc šobrīd mums ir ķēde, kas ir savienota ar mūsu aveņu pi 3, un mums ir SD karte, kuru pi atpazīst, tāpēc mūsu nākamais uzdevums ir izdomāt, kā mijiedarboties ar ķēdi, ielādējot pi ar izpildāmu programmu. Kopumā mums ir jādara, lai pi izvadītu spriegumu no GPIO 21 (tapa, kas savienota ar sarkano vadu). Tad mums ir nepieciešams veids, kā pārslēgt LED, lai tas mirgot. Lai to izdarītu, mums ir nepieciešama plašāka informācija. Šobrīd mums nav ne jausmas, kā pateikt GPIO 21 izvadam, tāpēc mums ir jāizlasa datu lapa. Lielākajai daļai mikrokontrolleru ir datu lapas, kurās precīzi norādīts, kā viss darbojas. Diemžēl pi 3 nav oficiālas dokumentācijas! Tomēr ir neoficiāla datu lapa. Šeit ir divas saites uz to:

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

Labi, šajā brīdī jums vajadzētu veltīt dažas minūtes, pirms pāriet uz nākamo soli, lai izskatītu datu lapu un uzzinātu, kādu informāciju varat atrast.

6. darbība: CODE2: Turn_Led_ON

KODS2: pagrieziens_LED_ON
KODS2: pagrieziens_LED_ON
KODS2: pagrieziens_LED_ON
KODS2: pagrieziens_LED_ON
KODS2: pagrieziens_LED_ON
KODS2: pagrieziens_LED_ON

Aveņu pi 3 53 reģistrē izejas/ievades tapas (perifērijas ierīces). Tapas tiek sagrupētas kopā, un katra grupa tiek piešķirta reģistram. GPIO mums ir jāspēj piekļūt reģistram SELECT, SET reģistram un CLEAR. Lai piekļūtu šiem reģistriem, mums ir nepieciešama šo reģistru fiziskā adrese. Lasot datu lapu, jūs vēlaties atzīmēt tikai adreses nobīdi (lo baits) un pievienot to bāzes adresei. Jums tas jādara, jo datu lapā ir norādīta Linux virtuālā adrese, kas būtībā ir vērtības, kuras piešķir operētājsistēmas. Mēs neizmantojam operētājsistēmu, tāpēc mums ir tieši jāpiekļūst šiem reģistriem, izmantojot fizisko adresi. Šim nolūkam jums nepieciešama šāda informācija:

  • Perifērijas ierīču bāzes adrese: 0x3f200000. PDF failā (6. lpp.) Teikts, ka bāzes adrese ir 0x3f000000, tomēr šī adrese nedarbosies. Izmantojiet 0x3f200000
  • FSEL2 (SELECT) nobīde nav pilna reģistra adrese. Failā FSEL2 ir norādīts 0x7E20008, taču šī adrese attiecas uz Linux virtuālo adresi. Nobīde būs tāda pati, tāpēc mēs vēlamies to atzīmēt. 0x08
  • GPSET0 (SET) nobīde: 0x1c
  • GPCLR0 nobīde (CLEAR): 0x28

Tātad jūs droši vien pamanījāt, ka datu lapā ir uzskaitīti 4 SELECT reģistri, 2 SET reģistri un 2 CLEAR reģistri, tad kāpēc es izvēlējos tos, kurus darīju? Tas ir tāpēc, ka mēs vēlamies izmantot GPIO 21 un FSEL2 vadīklas GPIO 20-29, SET0 un CLR0 kontrolē GPIO 0-31. FSEL reģistri piešķir trīs bitus katrai GPIO tapai. Tā kā mēs izmantojam FSEL2, tas nozīmē, ka biti 0-2 kontrolē GPIO 20, bet biti 3-5 kontrolē GPIO 21 un tā tālāk. Reģistri Set un CLR katram tapam piešķir vienu bitu. Piemēram, 0 bits SET0 un CLR0 kontrolē GPIO 1. Lai kontrolētu GPIO 21, SET0 un CLR0 iestatītu 21. bitu.

Labi, tāpēc mēs esam runājuši par to, kā piekļūt šiem reģistriem, bet ko tas viss nozīmē?

  • FSEL2 reģistrs tiks izmantots, lai iestatītu GPIO 21 izvadi. Lai iestatītu tapu izvadīšanai, trīs bitu lo secības bits jāiestata uz 1. Tātad, ja biti 3-5 kontrolē GPIO 21, tas nozīmē, ka mums ir jāiestata pirmais bits, bits 3 līdz 1. Tas pateiks pi ka mēs vēlamies izmantot GPIO 21 kā izvadi. Tātad, ja mēs apskatītu GPIO 21 3 bitus, tiem vajadzētu izskatīties šādi pēc tam, kad esam iestatījuši izvadi, b001.
  • GPSET0 liek pi ieslēgt tapu (izvadīt spriegumu). Lai to izdarītu, mēs vienkārši pārslēdzam bitu, kas atbilst vajadzīgajam GPIO tapam. Mūsu gadījumā, 21. bits.
  • GPCLR0 liek pi izslēgt tapu (nav sprieguma). Lai izslēgtu tapu, iestatiet bitu uz atbilstošo GPIO tapu. Mūsu gadījumā 21. bits

Pirms mēs nonākam pie mirgojoša LED, vispirms ļaujiet izveidot vienkāršu programmu, kas vienkārši ieslēgs LED.

Lai sāktu, mūsu avota koda augšpusē ir jāpievieno divas direktīvas.

  • .nodaļa.init pasaka pi, kur ievietot kodu
  • .global _start

Tālāk mums jāizkārto visas adreses, kuras mēs izmantosim. Izmantojiet.equ, lai vērtībām piešķirtu lasāmus simbolus.

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

Tagad mēs izveidosim maskas, lai iestatītu vajadzīgos bitus.

  • .equ SET_BIT3, 0x08 Tas iestatīs trešo bitu 0000_1000
  • .ek SET_BIT21, 0x200000

Tad mums jāpievieno mūsu _start etiķete

_sākt:

Ielādējiet reģistrā bāzes adresi

ldr r0, = PAMATS

Tagad mums ir jāiestata GPFSEL2 bit3

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Šajā instrukcijā teikts, ka jāatraksta bits 0x08 uz GPFSEL2 adresi

Visbeidzot, mums jāieslēdz GPIO 21, iestatot bitu 21 GPSET0 reģistrā

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

Galaproduktam vajadzētu izskatīties līdzīgi attēlā redzamajam kodam.

Nākamais solis ir apkopot kodu un izveidot.img failu, ko pi var palaist.

  • Lejupielādējiet pievienoto makefile un kernel.ld un, ja vēlaties avota kodu turn_led_on.s.
  • Ievietojiet visus failus vienā mapē.
  • Ja izmantojat savu avota kodu, rediģējiet makefile un nomainiet kodu = turn_led_on.s ar kodu =.s
  • Saglabājiet makefile.
  • Izmantojiet termināli (Linux) vai cmd logu (logi), lai pārietu uz mapi, kurā ir faili, un ierakstiet make un nospiediet enter
  • Failam make vajadzētu ģenerēt failu ar nosaukumu kernel.img
  • Kopējiet kernel.img savā mini sd kartē. Jūsu karšu saturam jābūt tādam, kā parādīts attēlā (3. attēls): bootcode.bin, start.elf, fixup.dat un kernel.img.
  • Izņemiet mini sd karti un ievietojiet to pi
  • Pievienojiet pi barošanas avotam
  • LED vajadzētu iedegties !!!

Nedaudz SVARĪGA PIEZĪME: Acīmredzot pamācībām bija problēma ar makefile bez paplašinājuma, tāpēc es to atkārtoti augšupielādēju ar.txt paplašinājumu. Lūdzu, noņemiet paplašinājumu, kad to lejupielādējat, lai tas darbotos pareizi.

Ieteicams: