INHOUDSOPGAWE:

Bare Metal Raspberry Pi 3: Knipperende LED: 8 stappe
Bare Metal Raspberry Pi 3: Knipperende LED: 8 stappe

Video: Bare Metal Raspberry Pi 3: Knipperende LED: 8 stappe

Video: Bare Metal Raspberry Pi 3: Knipperende LED: 8 stappe
Video: Как штукатурить откосы на окнах СВОИМИ РУКАМИ 2024, Julie
Anonim
Bare Metal Raspberry Pi 3: Knipperende LED
Bare Metal Raspberry Pi 3: Knipperende LED

Volg meer deur die skrywer:

Raspberry Pi drukknop met LED's kaalmetaal
Raspberry Pi drukknop met LED's kaalmetaal
Raspberry Pi drukknop met LED's kaalmetaal
Raspberry Pi drukknop met LED's kaalmetaal
Kratte
Kratte
Kratte
Kratte
Hoe om 'n verligting vir veterane -dag te maak
Hoe om 'n verligting vir veterane -dag te maak
Hoe om 'n verligting vir veterane -dag te maak
Hoe om 'n verligting vir veterane -dag te maak

Oor:.oO0Oo. Meer oor vormpizza »

Welkom by die BARE METAL pi 3 Knipperende LED -tutoriaal!

In hierdie handleiding gaan ons deur die stappe, van begin tot einde, om 'n LED te laat flikker met 'n Raspberry PI 3, 'n broodbord, 'n weerstand, 'n LED en 'n leë SD -kaart.

So, wat is BARE METAL? BARE METAL is 'n sagteware -programmering. Kaal metaal beteken dat ons ten volle in beheer is van wat die rekenaar tot op die punt sal doen. Dit beteken dus basies dat die kode volledig saamgestel sal word met behulp van die Arm -instruksiestel. Aan die einde het ons 'n program geskep wat 'n LED sal knip deur toegang tot die fisiese adres van een van die GPIO -penne van die Raspberry Pi te kry en dit te konfigureer om uit te voer en dan aan en af te skakel. Om hierdie projek te probeer, is 'n goeie manier om aan die gang te kom met ingebedde programmering en hopelik 'n beter begrip te gee van hoe 'n rekenaar werk.

Wat het jy nodig?

Hardeware

  • Framboos PI 3
  • SD-kaart wat vooraf gelaai is met 'n opstartbare prent
  • Broodbord
  • Manlike vroulike springdrade
  • Manlike manlike trui
  • LED
  • 220 ohm weerstand (hoef nie presies 220 ohm te wees nie, die meeste weerstand werk)
  • mini sd kaart
  • mini sd -kaart vooraf gelaai met framboos pi -bedryfstelsel (gewoonlik by die pi ingesluit)

Sagteware

  • GCC samesteller
  • GNU ingebedde werktuigketting
  • teksredakteur
  • sd kaart formater

Goed, laat ons BEGIN!

Stap 1: INSTELLING VAN DINGE/STUFF

DINGE INSTELLING/STUFF
DINGE INSTELLING/STUFF

Goed, so … die eerste stap is om hardeware te koop. U kan die onderdele afsonderlik koop, of daar is 'n kit wat meer as genoeg onderdele bevat. SKAKEL

Hierdie kit bevat alles wat nodig is om die framboos pi 3 en meer op te stel! die enigste ding wat nie in hierdie kit ingesluit is nie, is 'n ekstra mini -sd -kaart. Wag! Moet nog nie 'n ander een koop nie. As u nie van plan is om die vooraf geïnstalleerde linux -installasie op die kaart te gebruik nie, kopieer dan die inhoud van die meegeleverde mini sd -kaart vir later en formateer die kaart (meer hieroor later). BELANGRIKE OPMERKING: maak seker dat u die lêers op die ingeslote kaart hou, waarna u dit later nodig het!

Daarna is dit tyd om die sagteware op te stel. Hierdie handleiding bevat geen gedetailleerde instruksies oor hoe om die sagteware te installeer nie. Daar is baie hulpbronne en tutoriale aanlyn oor hoe om dit te installeer:

WINDOWS GEBRUIKERS:

Laai gcc af en installeer dit

Laai dan die GNU ARM -ingeboude werktuigketting af en installeer dit

LINUX/MAC

  • Linux-verspreidings word voorsien van vooraf geïnstalleerde gcc
  • Laai die GNU ARM -ingeboude werktuigketting af en installeer dit.

As alles goed gaan, moet u die terminale (linux/mac) of cmd line (windows) kan oopmaak en probeer tik

arm-geen-eabi-gcc

Die uitset moet soortgelyk aan die eerste prent lyk. Dit is net om te verifieer dat dit korrek geïnstalleer is.

Nou dat die voorvereistes uit die weg geruim is, is dit tyd om aan die gang te kom met die lekker dinge.

Stap 2: KRING

KRINGBAND
KRINGBAND
KRINGBAND
KRINGBAND
KRINGBAND
KRINGBAND

Kringtyd! Die kring hiervoor is eenvoudig. Ons sal 'n LED aan GPIO 21 (pen 40) op pi koppel (sien prent 2 en 3). 'N Weerstand word ook in serie gekoppel om te voorkom dat die LED beskadig word. Die weerstand sal gekoppel word aan die negatiewe kolom op die broodbord wat aan die GND (pen 39) op die pi gekoppel sal word. As u die led aansluit, moet u die kort ent aan die negatiewe kant koppel. Sien die laaste prentjie

Stap 3: BOOTABLE Mini SD

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

Daar is drie stappe om u pi 3 u leë mini -sd -kaart te laat herken. Ons moet bootcode.bin, start.elf en fixup.dat vind en kopieer. U kan hierdie lêers op die meegeleverde mini -sd -kaart kry as u die canakit gekoop het of 'n opstartbare sd -kaart vir die pi 3 met 'n Linux -verspreiding maak. Hierdie lêers is in elk geval nodig om die pi in staat te stel om die SD -kaart as 'n opstartbare toestel te herken. Formateer dan die mini sd na fat32 (die meeste mini sd -kaarte kom in fat32 geformateer. Ek gebruik 'n goedkoop mini sd -kaart van sandisk), skuif bootcode.bin, start.elf, fixup.dat op die sd -kaart. En jy is klaar! Nog 'n keer, en in die volgorde van die foto's is die stappe:

  1. Vind bootcode.bin, start.elf, fixup.dat.
  2. Maak seker dat u SD -kaart geformateer is na fat32.
  3. Beweeg bootcode.bin, start.elf en fixup.dat na die geformateerde sd -kaart.

Hier is hoe ek dit agtergekom het, skakel.

Stap 4: CHECK Mini SD

CHECK Mini SD
CHECK Mini SD
Gaan Mini SD na
Gaan Mini SD na

Goed, ons het 'n opstartbare mini -sd -kaart, en hopelik het u op hierdie stadium 'n pi 3. So nou moet ons dit toets om seker te maak dat die pi 3 die mini -sd -kaart herken as opstartbaar.

Op die pi, naby die mini -usb -poort, is daar twee klein LED's. Die een is rooi. Dit is die kragaanwyser. As die pi krag ontvang, moet hierdie lig brand. As u dus u pi nou aansluit sonder 'n mini -sd -kaart, moet dit rooi brand. Nou, trek die pi uit en plaas die opstartbare mini -sd -kaart wat in die vorige stap geskep is, en steek die pi in. Sien u 'n ander lig? Daar moet 'n groen lig wees, reg langs die rooi, wat aandui dat dit die sd -kaart lees. Hierdie LED word die ACT led genoem. Dit sal brand as daar 'n lewensvatbare SD -kaart ingevoeg is. Dit flits wanneer u toegang tot u mini -sd -kaart kry.

Goed, so twee dinge moes gebeur het nadat u die opstartbare mini -sd -kaart ingesit en die pi ingeprop het:

  1. Die rooi led moet verlig wees, wat aandui dat die kragopname ontvang word
  2. Die groen LED moet verlig word, wat aandui dat dit op die mini -sd -kaart ingeblaai is

As iets verkeerd loop, herhaal die vorige stappe of klik op die onderstaande skakel vir meer inligting.

Die skakel hier is 'n goeie verwysing.

Stap 5: KODE1

Hierdie projek is in ARM -monteringstaal geskryf. In hierdie tutoriaal word 'n basiese begrip van ARM -samestelling veronderstel, maar hier is 'n paar dinge wat u moet weet:

.equ: ken 'n waarde toe aan 'n simbool, dit wil sê abc. equ 5 abc stel nou vyf voor

  • ldr: laai uit die geheue
  • str: skryf aan die geheue
  • cmp: vergelyk twee waardes deur 'n aftrekking uit te voer. Stel vlae.
  • b: tak na etiket
  • voeg by: voer rekenkunde uit

Kyk na hierdie video as u nie ondervinding het met die montering van die arm nie. Dit gee u 'n goeie begrip van die taal van die vergadering van die arm.

Oké, nou het ons 'n stroombaan wat aan ons framboos pi 3 gekoppel is, en ons het 'n sd -kaart wat die pi herken, dus ons volgende taak is om uit te vind hoe om met die kring te werk deur die pi met 'n uitvoerbare program te laai. Oor die algemeen moet ons die pi vertel om 'n spanning van GPIO 21 af te gee (pen wat aan die rooi draad gekoppel is). Dan het ons 'n manier nodig om die LED te skakel om dit te laat knip. Om dit te kan doen, benodig ons meer inligting. Op hierdie stadium het ons geen idee hoe ons GPIO 21 moet vertel om uit te voer nie, en daarom moet ons die datablad lees. Die meeste mikrobeheerders het gegewensblaaie wat presies aandui hoe alles werk. Ongelukkig het die pi 3 nie amptelike dokumentasie nie! Daar is egter 'n nie-amptelike datablad. Hier is twee skakels daarna:

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

Goed, op hierdie stadium moet u 'n paar minute neem voordat u na die volgende stap gaan om deur die datablad te kyk en te kyk watter inligting u kan vind.

Stap 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

Die framboos pi 3 53 registreer om die uitvoer/invoerpenne (randapparatuur) te beheer. Die penne word saam gegroepeer en elke groep word aan 'n register toegewys. Vir GPIO moet ons toegang hê tot die SELECT -register, SET -register en CLEAR -registers. Om toegang tot hierdie registers te verkry, benodig ons die fisiese adres van hierdie registers. As u die datablad lees, wil u slegs die offset van die adres (lo byte) noteer en dit by die basisadres voeg. U moet dit doen omdat die datablad die virtuele Linux -adres bevat, wat basies waardes is wat die bedryfstelsels toewys. Ons gebruik nie 'n bedryfstelsel nie, dus moet ons direk toegang tot hierdie registers kry deur die fisiese adres te gebruik. Hiervoor benodig u die volgende inligting:

  • Basisadres van randapparatuur: 0x3f200000. Die pdf (bladsy 6) sê dat die basisadres 0x3f000000 is, maar hierdie adres werk nie. Gebruik 0x3f200000
  • Verrekening van FSEL2 (SELECT) nie die volledige adres van die register nie. Die pdf bevat FSEL2 by 0x7E20008, maar hierdie adres verwys na die virtuele Linux -adres. Die offset sal dieselfde wees, so dit is wat ons wil opmerk. 0x08
  • Verrekening van GPSET0 (SET): 0x1c
  • Verrekening van GPCLR0 (CLEAR): 0x28

U het dus waarskynlik opgemerk dat die gegewensblad 4 SELECT-registers, 2 SET-registers en 2 CLEAR-registers bevat, hoekom het ek die gekies wat ek gedoen het? Dit is omdat ons GPIO 21 en FSEL2-kontroles GPIO 20-29, SET0 en CLR0-kontroles GPIO 0-31 wil gebruik. Die FSEL -registers ken drie stukkies toe vir elke GPIO -pen. Aangesien ons FSEL2 gebruik, beteken dit dat bits 0-2 beheer GPIO 20, en bisse 3-5 beheer GPIO 21 ensovoorts. Die Set- en CLR -registers ken 'n enkele bis aan elke pen toe. Byvoorbeeld, bit 0 in SET0 en CLR0 beheer GPIO 1. Om GPIO 21 te beheer, stel u bit 21 in SET0 en CLR0.

Goed, so ons het gepraat oor hoe om toegang tot hierdie registers te kry, maar wat beteken dit alles?

  • FSEL2 -register sal gebruik word om GPIO 21 op uitset te stel. Om 'n pen op die uitset te stel, moet u die volgorde van die drie bisse op 1. Stel, as bisse 3-5 GPIO 21 beheer, beteken dit dat ons die eerste bis, bit 3 op 1. moet stel. Dit sal die pi vertel dat ons GPIO 21 as uitset wil gebruik. As ons dus na die 3 bisse vir GPIO 21 kyk, moet hulle so lyk nadat ons dit op output, b001, gestel het.
  • GPSET0 sê vir die pi om die pen aan te skakel (spanning uit te voer). Om dit te doen, skakel ons net die bietjie wat ooreenstem met die GPIO -pen wat ons wil hê. In ons geval 21.
  • GPCLR0 sê die pi moet die pen afskakel (geen spanning). Om die pen uit te skakel, stel die bit op die ooreenstemmende GPIO -pen. In ons geval bit 21

Voordat ons by 'n knipperende led kom, moet ons eers 'n eenvoudige program maak wat die LED net sal aanskakel.

Om mee te begin, moet ons twee voorskrifte bo -aan ons bronkode voeg.

  • .section.init vertel die pi waar die kode geplaas moet word
  • .global _start

Vervolgens moet ons al die adresse wat ons gaan gebruik, uiteensit. Gebruik.equ om leesbare simbole aan die waardes toe te ken.

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

Nou gaan ons maskers maak om die stukkies wat ons benodig, vas te stel.

  • .equ SET_BIT3, 0x08 Dit sal bietjie drie 0000_1000 stel
  • .equ SET_BIT21, 0x200000

Dan moet ons ons _start -etiket byvoeg

_start:

Laai die basisadres in die register

ldr r0, = BASE

Nou moet ons bit3 van GPFSEL2 instel

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Hierdie instruksie sê om die bietjie 0x08 terug te skryf na die adres van GPFSEL2

Uiteindelik moet ons GPIO 21 aanskakel deur bit 21 in die GPSET0 -register in te stel

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

Die finale produk moet ongeveer soos die afgebeelde kode lyk.

Die volgende stap is om die kode saam te stel en 'n.img -lêer te skep wat die pi kan uitvoer.

  • Laai die aangehegte makefile en kernel.ld af en as u die turn_led_on.s bronkode wil hê.
  • Plaas al die lêers in dieselfde gids.
  • As u u eie bronkode gebruik, wysig die makefile en vervang die code = turn_led_on.s met code =.s
  • Stoor die makebestand.
  • Gebruik die terminale (linux) of cmd venster (windows) om na u gids te gaan met die lêers en tik maak en druk enter
  • Die maak -lêer moet 'n lêer genaamd kernel.img genereer
  • Kopieer kernel.img op u mini -sd -kaart. Die inhoud van u kaarte moet soos op die foto verskyn (prent 3): bootcode.bin, start.elf, fixup.dat en kernel.img.
  • Gooi die mini sd -kaart uit en steek dit in die pi
  • Koppel die pi aan die kragbron
  • LED moet brand !!!

BELANGRIK BELANGRIKE OPMERKING: Blykbaar het instruksies 'n probleem gehad met die makefile wat nie 'n uitbreiding het nie, so ek het dit weer opgelaai met 'n.txt-uitbreiding. Verwyder die uitbreiding as u dit aflaai sodat dit behoorlik kan werk.

Aanbeveel: