Obsah:

Bare Metal Raspberry Pi 3: Blikající LED: 8 kroků
Bare Metal Raspberry Pi 3: Blikající LED: 8 kroků

Video: Bare Metal Raspberry Pi 3: Blikající LED: 8 kroků

Video: Bare Metal Raspberry Pi 3: Blikající LED: 8 kroků
Video: ESP32 Tutorial 3 - Resistor, LED, Bredboard and First Project: Hello LED -ESP32 IoT Learnig kit 2024, Červenec
Anonim
Bare Metal Raspberry Pi 3: Blikající LED
Bare Metal Raspberry Pi 3: Blikající LED

Autor: moldypizza Sledovat více od autora:

Tlačítko Raspberry Pi s LED diodami z holého kovu
Tlačítko Raspberry Pi s LED diodami z holého kovu
Tlačítko Raspberry Pi s LED diodami z holého kovu
Tlačítko Raspberry Pi s LED diodami z holého kovu
Přepravky
Přepravky
Přepravky
Přepravky
Jak udělat reliéfní řezbu pro Den veteránů
Jak udělat reliéfní řezbu pro Den veteránů
Jak udělat reliéfní řezbu pro Den veteránů
Jak udělat reliéfní řezbu pro Den veteránů

O:.oO0Oo. Více o moldypizza »

Vítejte v tutoriálu BARE METAL pi 3 Blinking LED!

V tomto tutoriálu projdeme kroky od začátku do konce, aby LED blikla pomocí Raspberry PI 3, prkénka, odporu, LED a prázdné SD karty.

Co je tedy BARE METAL? BARE METAL není žádné ozdůbkové programování. Holý kov znamená, že máme plnou kontrolu nad tím, co počítač udělá až do konce. V zásadě to tedy znamená, že kód bude kompletně zapsán v sestavě pomocí sady instrukcí Arm. Na konci vytvoříme program, který bude blikat LED diodou přístupem k fyzické adrese jednoho z GPIO pinů Raspberry Pi a konfigurací pro výstup a následným zapínáním a vypínáním. Pokus o tento projekt je skvělý způsob, jak začít s vestavěným programováním a doufejme, že lépe porozumíte fungování počítače.

Co potřebuješ?

Hardware

  • Malina PI 3
  • Na kartě SD je předem načten spouštěcí obraz
  • Prkénko
  • Mužské Ženské propojovací vodiče
  • Mužské Mužské propojovací vodiče
  • VEDENÝ
  • Rezistor 220 ohmů (nemusí být přesně 220 ohmů, většina rezistorů bude fungovat)
  • mini sd karta
  • mini SD karta s předinstalovaným operačním systémem Raspberry Pi (obvykle součástí Pi)

Software

  • Překladač GCC
  • Integrovaný nástrojový řetězec GNU
  • textový editor
  • formátovač karty SD

Dobře, ZAČNĚME!

Krok 1: NASTAVENÍ VĚCÍ/ZASTAVENÍ

NASTAVENÍ VĚCÍ/UPLNĚNÍ
NASTAVENÍ VĚCÍ/UPLNĚNÍ

Dobře, takže … prvním krokem je získání hardwaru. Díly můžete koupit samostatně nebo je k dispozici sada, která obsahuje více než dost dílů. ODKAZ

Tato sada obsahuje vše potřebné k nastavení Raspberry Pi 3 a dalších! jediná věc, která není součástí této sady, je extra mini SD karta. Počkejte! Nekupujte zatím další. Pokud neplánujete používat instalaci linuxu předem načtenou na kartu, zkopírujte obsah přiložené karty mini sd na později a kartu znovu naformátujte (více o tom později). DŮLEŽITÁ POZNÁMKA: Ujistěte se, že máte soubory na přiložené kartě, budete je POTŘEBOVAT později!

Dále je čas nastavit software. Tento tutoriál nebude obsahovat podrobné pokyny k instalaci softwaru. Na internetu je mnoho zdrojů a návodů, jak je nainstalovat:

UŽIVATELÉ WINDOWS:

Stáhněte a nainstalujte gcc

Dále si stáhněte a nainstalujte integrovanou sadu nástrojů GNU ARM

LINUX/MAC

  • Distribuce Linuxu jsou dodávány s předinstalovaným gcc
  • Stáhněte si a nainstalujte integrovanou sadu nástrojů GNU ARM.

Dobře, takže pokud vše půjde dobře, měli byste být schopni otevřít terminál (linux/mac) nebo cmd řádek (Windows) a zkusit napsat

arm-none-eabi-gcc

Výstup by měl vypadat podobně jako na prvním obrázku. Jde jen o ověření, že je správně nainstalován.

Dobře, když jsou předběžné požadavky mimo provoz, je čas začít se zábavnými věcmi.

Krok 2: OBVOD

OBVOD
OBVOD
OBVOD
OBVOD
OBVOD
OBVOD

Obvodový čas! Obvod je jednoduchý. Připojíme LED k GPIO 21 (pin 40) na pi (viz obrázek 2 a 3). Sériově je zapojen také odpor, aby se zabránilo poškození diody. Rezistor bude připojen k zápornému sloupci na desce, který bude připojen k GND (pin 39) na pí. Při připojování LED nezapomeňte připojit krátký konec k záporné straně. Viz poslední obrázek

Krok 3: BOOTABLE Mini SD

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

Aby váš pi 3 rozpoznal prázdnou kartu mini sd, musíte provést tři kroky. Musíme najít a zkopírovat bootcode.bin, start.elf a fixup.dat. Tyto soubory můžete získat na přiložené mini SD kartě, pokud jste si koupili canakit nebo vytvořili zaváděcí SD kartu pro pi 3 s linuxovou distribucí. Ať tak či onak, tyto soubory jsou nezbytné k tomu, aby pí rozpoznalo SD kartu jako zaváděcí zařízení. Dále naformátujte mini SD na fat32 (většina mini SD karet je naformátována na fat32. Použil jsem levnou mini SD kartu od sandisku), přesuňte bootcode.bin, start.elf, fixup.dat na sd kartu. A máte hotovo! Dobře, ještě jednou a v pořadí obrázků jsou kroky následující:

  1. Najděte bootcode.bin, start.elf, fixup.dat.
  2. Zkontrolujte, zda je vaše karta SD naformátována na fat32.
  3. Přesuňte bootcode.bin, start.elf a fixup.dat na formátovanou SD kartu.

Takhle jsem na to přišel, odkaz.

Krok 4: ZKONTROLUJTE Mini SD

ZKONTROLUJTE Mini SD
ZKONTROLUJTE Mini SD
ZKONTROLUJTE Mini SD
ZKONTROLUJTE Mini SD

Dobře, máme zaváděcí mini SD kartu a doufejme, že v tuto chvíli máte pi 3. Nyní bychom to tedy měli otestovat, abychom se ujistili, že pi 3 rozpoznává mini SD kartu jako zaváděcí.

Na pí, v blízkosti mini USB portu, jsou dvě malé LED diody. Jeden je červený. Toto je indikátor napájení. Když pí dostává energii, toto světlo by mělo svítit. Pokud tedy připojíte své pi právě teď bez karty mini sd, mělo by se rozsvítit červeně. Dobře, nyní odpojte své pi a vložte zaváděcí mini SD kartu, která byla vytvořena v předchozím kroku, a připojte pi. Vidíte další světlo? Hned vedle červeného by mělo svítit zelené světlo, které indikuje, že čte kartu sd. Tato LED se nazývá ACT LED. Rozsvítí se, když je vložena životaschopná karta SD. Bude blikat, když přistupuje k vaší mini SD kartě.

Dobře, takže dvě věci se měly stát poté, co jste vložili zaváděcí mini SD kartu a zapojili pi:

  1. Červená LED by měla svítit, což indikuje příjem energie
  2. Zelená LED dioda by měla svítit, což znamená, že byla zavedena do karty mini sd

Pokud se něco pokazí, zkuste zopakovat předchozí kroky nebo kliknutím na odkaz níže zobrazíte další informace.

Odkaz zde je dobrá reference.

Krok 5: KÓD1

Tento projekt je napsán v jazyce ARM assembly. V tomto kurzu se předpokládá základní porozumění sestavení ARM, ale zde je několik věcí, které byste měli vědět:

.equ: přiřadí hodnotu symbolu, tj. abc. ekv. 5 abc nyní představuje pět

  • ldr: načte se z paměti
  • str: zapisuje do paměti
  • cmp: porovnává dvě hodnoty provedením odčítání. Nastavuje vlajky.
  • b: větev na etiketu
  • přidat: provádí aritmetiku

Pokud nemáte žádné zkušenosti s montáží ramen, podívejte se na toto video. Poskytne vám dobré porozumění jazyku shromáždění Arm.

Dobře, takže právě teď máme obvod, který je připojen k našemu malinovému pi 3 a máme sd kartu, kterou pi rozpozná, takže naším dalším úkolem je zjistit, jak interagovat s obvodem načtením pí spustitelným programem. Obecně platí, že musíme říct pí, aby vyvedla napětí z GPIO 21 (pin připojený k červenému vodiči). Pak potřebujeme způsob, jak přepnout LED, aby blikala. K tomu potřebujeme více informací. V tomto okamžiku nemáme tušení, jak sdělit GPIO 21 výstup, a proto musíme přečíst datový list. Většina mikrořadičů má datové listy, které přesně specifikují, jak vše funguje. Pi 3 bohužel nemá oficiální dokumentaci! Existuje však neoficiální list. Zde jsou dva odkazy:

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

Dobře, v tuto chvíli byste měli věnovat několik minut, než přejdete k dalšímu kroku, abyste si prohlédli datový list a zjistili, jaké informace můžete najít.

Krok 6: CODE2: 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 se registruje pro ovládání výstupních/vstupních pinů (periferií). Piny jsou seskupeny a každá skupina je přiřazena k registru. Pro GPIO musíme mít přístup k registrům SELECT, SET a CLEAR. K přístupu do těchto registrů potřebujeme fyzickou adresu těchto registrů. Když čtete datový list, chcete pouze zaznamenat posun adresy (lo byte) a přidat ji k základní adrese. Musíte to udělat, protože datový list obsahuje virtuální adresu linuxu, což jsou v zásadě hodnoty, které přiřazují operační systémy. Nepoužíváme operační systém, takže potřebujeme přístup k těmto registrům přímo pomocí fyzické adresy. K tomu potřebujete následující informace:

  • Základní adresa periferií: 0x3f200000. Soubor pdf (strana 6) uvádí, že základní adresa je 0x3f000000, tato adresa však nebude fungovat. Použijte 0x3f200000
  • Offset FSEL2 (SELECT) není úplná adresa registru. Soubor pdf uvádí FSEL2 na 0x7E20008, ale tato adresa odkazuje na virtuální adresu linuxu. Ofset bude stejný, takže si toho chceme všimnout. 0x08
  • Ofset GPSET0 (SET): 0x1c
  • Ofset GPCLR0 (CLEAR): 0x28

Pravděpodobně jste si všimli, že datový list uvádí 4 registry SELECT, 2 registry SET a 2 CLEAR registry, proč jsem si vybral ty, které jsem udělal? Důvodem je, že chceme používat GPIO 21 a FSEL2 ovládání GPIO 20-29, SET0 a CLR0 ovládá GPIO 0-31. Registry FSEL přiřazují každému bitu GPIO tři bity. Protože používáme FSEL2, to znamená, že bity 0-2 řídí GPIO 20 a bity 3-5 řídí GPIO 21 a tak dále. Registry Set a CLR přiřazují každému pinu jeden bit. Například bit 0 v SET0 a CLR0 ovládá GPIO 1. Pro ovládání GPIO 21 byste nastavili bit 21 v SET0 a CLR0.

Dobře, takže jsme mluvili o tom, jak získat přístup k těmto registrům, ale co to všechno znamená?

  • Registr FSEL2 bude použit k nastavení výstupu GPIO 21. Chcete-li nastavit pin na výstup, musíte nastavit bit pořadí tří bitů na 1. Pokud tedy bity 3-5 řídí GPIO 21, znamená to, že musíme nastavit první bit, bit 3 až 1. To řekne pi že chceme jako výstup použít GPIO 21. Pokud bychom se tedy podívali na 3 bity pro GPIO 21, měly by vypadat takto poté, co jsme jej nastavili na výstup, b001.
  • GPSET0 říká pí, aby zapnula pin (výstup napětí). K tomu stačí přepnout bit, který odpovídá požadovanému kolíku GPIO. V našem případě bit 21.
  • GPCLR0 říká pí, aby vypnula pin (bez napětí). Chcete -li pin vypnout, nastavte bit na odpovídající pin GPIO. V našem případě bit 21

Než se dostaneme k blikající LED diodě, nejprve si vytvořme jednoduchý program, který LED jednoduše zapne.

Na začátek musíme přidat dvě směrnice do horní části zdrojového kódu.

  • .section.init řekne pí, kam vložit kód
  • .global _start

Dále musíme rozložit všechny adresy, které budeme používat. Pomocí.equ přiřaďte hodnotám čitelné symboly.

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

Nyní vytvoříme masky pro nastavení bitů, které musíme nastavit.

  • .equ SET_BIT3, 0x08 Tím se nastaví bit tři 0000_1000
  • .equ SET_BIT21, 0x200000

Poté musíme přidat náš štítek _start

_Start:

Načtěte základní adresu do registru

ldr r0, = ZÁKLAD

Nyní musíme nastavit bit3 GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Tato instrukce říká, že je třeba zapsat zpět bit 0x08 na adresu GPFSEL2

Nakonec musíme GPIO 21 zapnout nastavením bitu 21 v registru GPSET0

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

Konečný produkt by měl vypadat podobně jako kód na obrázku.

Dalším krokem je kompilace kódu a vytvoření souboru.img, který může pi spustit.

  • Stáhněte si přiložený makefile a kernel.ld a pokud chcete zdrojový kód turn_led_on.s.
  • Vložte všechny soubory do stejné složky.
  • Pokud používáte svůj vlastní zdrojový kód, upravte makefile a nahraďte code = turn_led_on.s kódem =.s
  • Uložte makefile.
  • Pomocí terminálu (linux) nebo okna cmd (Windows) přejděte do složky obsahující soubory a zadejte příkaz make a stiskněte klávesu Enter
  • Soubor make by měl vygenerovat soubor s názvem kernel.img
  • Zkopírujte soubor kernel.img na kartu mini sd. Obsah vašich karet by měl odpovídat obrázku (obrázek 3): bootcode.bin, start.elf, fixup.dat a kernel.img.
  • Vysuňte kartu mini sd a vložte ji do pí
  • Zapojte pí do zdroje napájení
  • LED by se měla rozsvítit !!!

SVĚTLE DŮLEŽITÁ POZNÁMKA: Zjevně instructables měl problém s tím, že makefile neměl příponu, tak jsem ho znovu nahrál s příponou.txt. Chcete -li, aby rozšíření správně fungovalo, odeberte jej.

Doporučuje: