Obsah:

Bare Metal Raspberry Pi 3: Blikajúca LED: 8 krokov
Bare Metal Raspberry Pi 3: Blikajúca LED: 8 krokov

Video: Bare Metal Raspberry Pi 3: Blikajúca LED: 8 krokov

Video: Bare Metal Raspberry Pi 3: Blikajúca LED: 8 krokov
Video: Raspberry Pi 4: GPIO все что нужно знать для начала работы 2024, November
Anonim
Bare Metal Raspberry Pi 3: Blikajúca LED dióda
Bare Metal Raspberry Pi 3: Blikajúca LED dióda

Od moldypizza Nasledovať viac od autora:

Tlačidlo Raspberry Pi s LED diódami z holého kovu
Tlačidlo Raspberry Pi s LED diódami z holého kovu
Tlačidlo Raspberry Pi s LED diódami z holého kovu
Tlačidlo Raspberry Pi s LED diódami z holého kovu
Prepravky
Prepravky
Prepravky
Prepravky
Ako urobiť reliéfnu rezbu na Deň veteránov
Ako urobiť reliéfnu rezbu na Deň veteránov
Ako urobiť reliéfnu rezbu na Deň veteránov
Ako urobiť reliéfnu rezbu na Deň veteránov

O:.oO0Oo. Viac o moldypizza »

Vitajte v návode BARE METAL pi 3 Blikajúce LED diódy!

V tomto tutoriále prejdeme krokmi od začiatku do konca, aby LED blikala pomocou Raspberry PI 3, nepájivej dosky, rezistora, LED diódy a prázdnej karty SD.

Čo je teda BARE METAL? BARE METAL nie je žiadne programovanie. Holý kov znamená, že máme úplnú kontrolu nad tým, čo počítač do najmenšej miery urobí. V zásade to teda znamená, že kód bude kompletne zapísaný v zostave pomocou sady inštrukcií Arm. Na konci vytvoríme program, ktorý bude blikať LED diódou prístupom k fyzickej adrese jedného z GPIO pinov Raspberry Pi a konfiguráciou jej výstupu a následným zapnutím a vypnutím. Pokus o tento projekt je úžasný spôsob, ako začať s vstavaným programovaním a dúfajme, že poskytne lepšie pochopenie fungovania počítača.

Čo potrebuješ?

Hardvér

  • Malina PI 3
  • Karta SD je vopred načítaná so zavádzacím obrázkom
  • Breadboard
  • Mužské Ženské prepojovacie vodiče
  • Mužské mužské prepojovacie vodiče
  • LED
  • Rezistor 220 ohmov (nemusí byť presne 220 ohmov, väčšina rezistorov bude fungovať)
  • mini sd karta
  • mini sd karta s predinštalovaným operačným systémom Raspberry Pi (zvyčajne súčasťou pi)

Softvér

  • Kompilátor GCC
  • Integrovaný nástrojový reťazec GNU
  • textový editor
  • formátovač karty SD

Dobre, začnime!

Krok 1: NASTAVENIE VECÍ/ZAMESTNANIE

NASTAVENIE VECÍ/ZAMESTNANIE
NASTAVENIE VECÍ/ZAMESTNANIE

Dobre … prvým krokom je prechod na hardvér. Náhradné diely si môžete kúpiť samostatne alebo je k dispozícii súprava, ktorá obsahuje viac ako dostatok dielov. ODKAZ

Táto súprava obsahuje všetko potrebné na nastavenie malinového pi 3 a ďalších! jediná vec, ktorá nie je súčasťou tejto súpravy, je extra mini SD karta. Počkaj! Zatiaľ si nekupujte ďalší. Ak neplánujete používať inštaláciu Linuxu vopred načítanú na kartu, skopírujte obsah dodanej karty mini sd na neskôr a kartu znova naformátujte (viac o tom neskôr). DÔLEŽITÁ POZNÁMKA: Uložte si súbory na priloženú kartu, budete ich POTREBOVAŤ neskôr!

Ďalej je čas na nastavenie softvéru. Tento tutoriál nebude obsahovať podrobné pokyny na inštaláciu softvéru. Na internete je veľa zdrojov a návodov, ako ich nainštalovať:

UŽÍVATELIA WINDOWS:

Stiahnite a nainštalujte gcc

Potom si stiahnite a nainštalujte vstavaný reťazec nástrojov GNU ARM

LINUX/MAC

  • Distribúcie Linuxu majú predinštalovaný gcc
  • Stiahnite si a nainštalujte vnorený nástrojový reťazec GNU ARM.

Dobre, takže ak všetko pôjde dobre, mali by ste byť schopní otvoriť terminál (linux/mac) alebo riadok cmd (Windows) a skúsiť napísať

arm-none-eabi-gcc

Výstup by mal vyzerať podobne ako na prvom obrázku. Ide len o overenie, či je správne nainštalovaný.

Dobre, teraz, keď sú predpoklady mimo cesty, je načase začať so zábavnými vecami.

Krok 2: OBVOD

OKRUH
OKRUH
OKRUH
OKRUH
OKRUH
OKRUH

Obvodový čas! Obvod je jednoduchý. Pripojíme LED k GPIO 21 (pin 40) na pí (pozri obrázok 2 a 3). Sériovo je zapojený aj odpor, aby sa zabránilo poškodeniu diódy. Rezistor bude pripojený k zápornému stĺpcu na doske, ktorý bude pripojený k GND (kolík 39) na pi. Pri pripájaní diódy LED zapojte kratší koniec k zápornej strane. Pozrite si posledný obrázok

Krok 3: BOOTABLE Mini SD

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

Existujú tri kroky, aby vaše pi 3 rozpoznalo vašu prázdnu mini SD kartu. Musíme nájsť a skopírovať bootcode.bin, start.elf a fixup.dat. Tieto súbory môžete získať na pribalenej mini sd karte, ak ste si kúpili kanakit alebo si vyrobili bootovaciu SD kartu pre pi 3 s distribúciou linux. V každom prípade sú tieto súbory nevyhnutné na to, aby pí rozpoznala kartu SD ako bootovacie zariadenie. Ďalej naformátujte kartu mini sd na fat32 (väčšina kariet mini sd je naformátovaná na server fat32. Použil som lacnú kartu mini sd od spoločnosti sandisk), presuňte bootcode.bin, start.elf, fixup.dat na kartu sd. A máte hotovo! Dobre ešte raz a v poradí podľa obrázkov sú tieto kroky:

  1. Nájdite bootcode.bin, start.elf, fixup.dat.
  2. Uistite sa, že je vaša karta SD naformátovaná na fat32.
  3. Presuňte bootcode.bin, start.elf a fixup.dat na naformátovanú kartu SD.

Takto som na to prišiel, odkaz.

Krok 4: SKONTROLUJTE Mini SD

SKONTROLUJTE Mini SD
SKONTROLUJTE Mini SD
SKONTROLUJTE Mini SD
SKONTROLUJTE Mini SD

Dobre, máme zavádzaciu kartu mini sd a dúfajme, že v tomto bode máte pi 3. Takže teraz by sme to mali otestovať, aby sme sa uistili, že pi 3 rozpoznáva mini SD kartu ako bootovaciu.

Na pí, v blízkosti mini USB portu, sú dve malé LED diódy. Jeden je červený. Toto je indikátor napájania. Keď pi získava energiu, toto svetlo by malo svietiť. Ak teda práve teraz zapojíte svoje pi bez mini SD karty, malo by sa rozsvietiť červeno. Dobre, teraz odpojte svoje pi a vložte bootovaciu mini SD kartu, ktorá bola vytvorená v predchádzajúcom kroku, a zapojte pi. Vidíte ďalšie svetlo? Hneď vedľa červeného svetla by malo byť zelené svetlo, ktoré indikuje, že číta kartu sd. Táto dióda sa nazýva ACT. Rozsvieti sa, keď je vložená životaschopná karta SD. Bliká, keď pristupuje k vašej mini SD karte.

Dobre, dve veci sa mali stať potom, čo ste vložili bootovaciu mini SD kartu a zapojili pi:

  1. Červená dióda by mala byť rozsvietená, čo indikuje príjem energie
  2. Zelená LED dióda by mala svietiť, čo znamená, že je zavedený do karty mini sd

Ak sa niečo pokazí, skúste zopakovať predchádzajúce kroky alebo získajte ďalšie informácie kliknutím na odkaz nižšie.

Odkaz tu je dobrá referencia.

Krok 5: KÓD1

Tento projekt je napísaný v jazyku ARM. V tomto návode sa predpokladá základné pochopenie montáže ARM, ale tu je niekoľko vecí, ktoré by ste mali vedieť:

.equ: priradí hodnotu symbolu, tj. abc. ekv. 5 abc teraz predstavuje päť

  • ldr: načítava sa z pamäte
  • str: zapisuje do pamäte
  • cmp: porovnáva dve hodnoty vykonaním odčítania. Nastavuje vlajky.
  • b: vetva na označenie
  • pridať: vykonáva aritmetiku

Ak nemáte žiadne skúsenosti s montážou ramena, pozrite si toto video. Poskytne vám dobré porozumenie jazyku zhromaždenia Arm.

Dobre, takže práve teraz máme obvod, ktorý je pripojený k nášmu malinovému pi 3 a máme sd kartu, ktorú pi rozpoznáva, takže našou ďalšou úlohou je zistiť, ako interagovať s obvodom načítaním pi spustiteľným programom. Vo všeobecnosti musíme povedať pí na výstup napätia z GPIO 21 (kolík pripojený k červenému vodiču). Potom potrebujeme spôsob, ako prepnúť LED, aby blikala. Na to potrebujeme viac informácií. V tomto mieste nemáme predstavu, ako povedať GPIO 21, aby vystupoval, a preto si musíme prečítať list s údajmi. Väčšina mikrořadičov má dátové listy, ktoré presne uvádzajú, ako všetko funguje. Pi 3 bohužiaľ nemá oficiálnu dokumentáciu! Existuje však neoficiálny list s údajmi. Tu sú dva odkazy naň:

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

Dobre, v tomto bode by ste mali venovať niekoľko minút, než prejdete na ďalší krok, aby ste si prezreli list s údajmi a zistili, aké informácie môžete nájsť.

Krok 6: KÓD2: Turn_Led_ON

KÓD2: Turn_Led_ON
KÓD2: Turn_Led_ON
KÓD2: Turn_Led_ON
KÓD2: Turn_Led_ON
KÓD2: Turn_Led_ON
KÓD2: Turn_Led_ON

Raspberry pi 3 53 sa registruje na ovládanie výstupných/vstupných pinov (periférnych zariadení). Kolíky sú zoskupené a každá skupina je priradená k registru. Pre GPIO musíme mať prístup k registrom SELECT, SET a CLEAR. Na prístup k týmto registrom potrebujeme fyzickú adresu týchto registrov. Pri čítaní dátového listu chcete zaznamenať iba posun adresy (lo byte) a pridať ju k základnej adrese. Musíte to urobiť, pretože v technickom liste je uvedená virtuálna adresa Linuxu, čo sú v zásade hodnoty, ktoré priraďujú operačné systémy. Nepoužívame operačný systém, takže potrebujeme prístup k týmto registrom priamo pomocou fyzickej adresy. Na to potrebujete nasledujúce informácie:

  • Základná adresa periférnych zariadení: 0x3f200000. PDF (strana 6) hovorí, že základná adresa je 0x3f000000, táto adresa však nebude fungovať. Použite 0x3f200000
  • Ofset FSEL2 (SELECT) nie je úplná adresa registra. Dokument pdf uvádza FSEL2 na 0x7E20008, ale táto adresa sa týka virtuálnej adresy linux. Ofset bude rovnaký, takže si to chceme všimnúť. 0x08
  • Ofset GPSET0 (SET): 0x1c
  • Ofset GPCLR0 (CLEAR): 0x28

Pravdepodobne ste si všimli, že údajový list obsahuje 4 registre SELECT, 2 registre SET a 2 registre CLEAR, tak prečo som si vybral tie, ktoré som urobil? Dôvodom je, že chceme používať GPIO 21 a FSEL2 ovládače GPIO 20-29, SET0 a CLR0 ovládače GPIO 0-31. Registre FSEL priraďujú tri bity pre každý kolík GPIO. Pretože používame FSEL2, to znamená, že bity 0-2 riadia GPIO 20 a bity 3-5 riadia GPIO 21 a tak ďalej. Registre Set a CLR priradia každému pinu jeden bit. Napríklad bit 0 v SET0 a CLR0 riadi GPIO 1. Na ovládanie GPIO 21 by ste nastavili bit 21 v SET0 a CLR0.

Dobre, hovorili sme o tom, ako získať prístup k týmto registrom, ale čo to všetko znamená?

  • Register FSEL2 bude použitý na nastavenie výstupu GPIO 21. Ak chcete nastaviť pin na výstup, musíte nastaviť malý poradie troch bitov na 1. Ak teda bity 3-5 riadia GPIO 21, znamená to, že musíme nastaviť prvý bit, bit 3 až 1. Toto povie pí že ako výstup chceme použiť GPIO 21. Ak by sme sa teda pozreli na 3 bity pre GPIO 21, mali by vyzerať takto, keď sme ho nastavili na výstup, b001.
  • GPSET0 hovorí pí, aby zapla pin (výstup napätia). Aby sme to urobili, jednoducho prepneme bit, ktorý zodpovedá požadovanému kolíku GPIO. V našom prípade bit 21.
  • GPCLR0 hovorí pí, aby vypol pin (bez napätia). Ak chcete pin vypnúť, nastavte bit na zodpovedajúci pin GPIO. V našom prípade bit 21

Predtým, ako sa dostaneme k blikajúcej dióde LED, najskôr si urobíme jednoduchý program, ktorý diódu LED jednoducho zapne.

Na začiatok musíme do hornej časti zdrojového kódu pridať dve smernice.

  • .sekcia.init povie pí, kam vložiť kód
  • .global _start

Ďalej musíme rozložiť všetky adresy, ktoré budeme používať. Na priradenie čitateľných symbolov k hodnotám použite.equ.

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

Teraz vytvoríme masky na nastavenie bitov, ktoré musíme nastaviť.

  • .equ SET_BIT3, 0x08 Tým sa nastaví bit tri 0000_1000
  • .equ SET_BIT21, 0x200000

Potom musíme pridať náš štítok _start

_ štart:

Načítajte základnú adresu do registra

ldr r0, = ZÁKLAD

Teraz musíme nastaviť bit3 GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Tento pokyn hovorí, aby sa bit 0x08 zapísal späť na adresu GPFSEL2

Nakoniec musíme zapnúť GPIO 21 nastavením bitu 21 v registri GPSET0

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

Konečný produkt by mal vyzerať podobne ako kód na obrázku.

Ďalším krokom je skompilovanie kódu a vytvorenie súboru.img, ktorý môže súbor pi spustiť.

  • Stiahnite si priložený makefile a kernel.ld a ak chcete zdrojový kód turn_led_on.s.
  • Vložte všetky súbory do rovnakého priečinka.
  • Ak používate svoj vlastný zdrojový kód, upravte makefile a nahraďte kód = turn_led_on.s kódom =.s
  • Uložte makefile.
  • Pomocou terminálu (Linux) alebo okna cmd (Windows) prejdite do priečinka obsahujúceho súbory a zadajte príkaz make a stlačte kláves Enter
  • Súbor make by mal vygenerovať súbor s názvom kernel.img
  • Skopírujte súbor kernel.img na svoju mini SD kartu. Obsah vašich kariet by mal zodpovedať obrázku (obrázok 3): bootcode.bin, start.elf, fixup.dat a kernel.img.
  • Vysuňte kartu mini sd a vložte ju do pí
  • Zapojte pí do zdroja napájania
  • LED by mala svietiť !!!

MALO DÔLEŽITÁ POZNÁMKA: Zjavne inštrukcie mali problém s tým, že makefile nemal príponu, tak som ho znova nahral s príponou.txt. Odstráňte rozšírenie po stiahnutí, aby fungovalo správne.

Odporúča: