Inhaltsverzeichnis:

Bare Metal Raspberry Pi 3: Blinkende LED - Gunook
Bare Metal Raspberry Pi 3: Blinkende LED - Gunook

Video: Bare Metal Raspberry Pi 3: Blinkende LED - Gunook

Video: Bare Metal Raspberry Pi 3: Blinkende LED - Gunook
Video: Raspberry Pi Blinky 2024, Juli
Anonim
Bare Metal Raspberry Pi 3:Blinkende LED
Bare Metal Raspberry Pi 3:Blinkende LED

Von moldypizzaFolgen Sie mehr vom Autor:

Raspberry Pi Taster mit LEDs Bare Metal
Raspberry Pi Taster mit LEDs Bare Metal
Raspberry Pi Taster mit LEDs Bare Metal
Raspberry Pi Taster mit LEDs Bare Metal
Kisten
Kisten
Kisten
Kisten
Wie man eine Reliefschnitzerei für den Veteranentag macht
Wie man eine Reliefschnitzerei für den Veteranentag macht
Wie man eine Reliefschnitzerei für den Veteranentag macht
Wie man eine Reliefschnitzerei für den Veteranentag macht

Über:.oO0Oo. Mehr über moldypizza »

Willkommen zum BARE METAL pi 3 Blinkende LED-Tutorial!

In diesem Tutorial werden wir die Schritte von Anfang bis Ende durchgehen, um eine LED mit einem Raspberry PI 3, einem Steckbrett, einem Widerstand, einer LED und einer leeren SD-Karte zum Blinken zu bringen.

Was ist also BARE METAL? BARE METAL ist keine schnörkellose Programmierung. Bare Metal bedeutet, dass wir die volle Kontrolle darüber haben, was der Computer bis ins kleinste Detail tut. Im Grunde bedeutet dies also, dass der Code vollständig in Assembler geschrieben wird, unter Verwendung des Arm-Befehlssatzes. Am Ende haben wir ein Programm erstellt, das eine LED blinkt, indem wir auf die physikalische Adresse eines der GPIO-Pins des Raspberry Pi zugreifen und es für die Ausgabe konfigurieren und dann ein- und ausschalten. Der Versuch dieses Projekts ist eine großartige Möglichkeit, mit der eingebetteten Programmierung zu beginnen und hoffentlich ein besseres Verständnis der Funktionsweise eines Computers zu vermitteln.

Was brauchst du?

Hardware

  • Himbeer-PI 3
  • SD-Karte mit einem bootfähigen Image vorinstalliert
  • Steckbrett
  • Männlich Weiblich Überbrückungsdrähte
  • Männlich Männliche Überbrückungsdrähte
  • LED
  • 220 Ohm Widerstand (muss nicht genau 220 Ohm sein, fast jeder Widerstand funktioniert)
  • Mini-SD-Karte
  • Mini-SD-Karte vorinstalliert mit Raspberry Pi-Betriebssystem (normalerweise im Lieferumfang des Pi enthalten)

Software

  • GCC-Compiler
  • GNU eingebettete Toolchain
  • Texteditor
  • SD-Kartenformatierer

Okay, lass uns loslegen!

Schritt 1: EINSTELLEN/ZUSTELLEN

EINSTELLEN/AUFBAUEN
EINSTELLEN/AUFBAUEN

Okay, also… der erste Schritt besteht darin, die Hardware zu erwerben. Sie können die Teile separat kaufen oder es gibt ein Kit, das mehr als genug Teile enthält. VERKNÜPFUNG

Dieses Kit enthält alles, was Sie zum Einrichten des Raspberry Pi 3 und mehr benötigen! Das einzige, was in diesem Kit nicht enthalten ist, ist eine zusätzliche Mini-SD-Karte. Warte ab! Kaufen Sie noch keinen anderen. Wenn Sie nicht vorhaben, die auf der Karte vorinstallierte Linux-Installation zu verwenden, kopieren Sie einfach den Inhalt der mitgelieferten Mini-SD-Karte für später und formatieren Sie die Karte neu (dazu später mehr). WICHTIGER HINWEIS: Stellen Sie sicher, dass Sie die Dateien auf der mitgelieferten Karte aufbewahren, da Sie sie für später BENÖTIGEN!

Als nächstes ist es Zeit, die Software einzurichten. Dieses Tutorial enthält keine detaillierten Anweisungen zur Installation der Software. Es gibt viele Ressourcen und Tutorials online, wie man diese installiert:

WINDOWS-BENUTZER:

Laden Sie gcc herunter und installieren Sie es

Laden Sie als Nächstes die eingebettete GNU ARM-Toolchain herunter und installieren Sie sie

LINUX/MAC

  • Linux-Distributionen werden mit vorinstalliertem gcc geliefert
  • Laden Sie die eingebettete GNU ARM-Toolchain herunter und installieren Sie sie.

Okay, wenn alles gut geht, sollten Sie in der Lage sein, das Terminal (linux/mac) oder die cmd-Zeile (Windows) zu öffnen und zu tippen

arm-kein-eabi-gcc

Die Ausgabe sollte ähnlich wie das erste Bild aussehen. Dies dient nur dazu, zu überprüfen, ob es richtig installiert ist.

Nun gut, da die Voraussetzungen nicht mehr im Weg sind, ist es an der Zeit, mit den lustigen Dingen zu beginnen.

Schritt 2: SCHALTUNG

SCHALTKREIS
SCHALTKREIS
SCHALTKREIS
SCHALTKREIS
SCHALTKREIS
SCHALTKREIS

Rundenzeit! Die Schaltung dafür ist einfach. Wir werden eine LED an GPIO 21 (Pin 40) auf Pi anschließen (siehe Bild 2 und 3). Ein Widerstand ist auch in Reihe geschaltet, um zu verhindern, dass die LED beschädigt wird. Der Widerstand wird mit der negativen Spalte auf dem Steckbrett verbunden, die mit GND (Pin 39) auf dem Pi verbunden wird. Achten Sie beim Anschließen der LED darauf, das kurze Ende mit der negativen Seite zu verbinden. Siehe das letzte Bild

Schritt 3: BOOTBARES Mini-SD

BOOTBARES Mini-SD
BOOTBARES Mini-SD
BOOTBARES Mini-SD
BOOTBARES Mini-SD
BOOTBARES Mini-SD
BOOTBARES Mini-SD

Es gibt drei Schritte, damit Ihr Pi 3 Ihre leere Mini-SD-Karte erkennt. Wir müssen bootcode.bin, start.elf und fixup.dat finden und kopieren. Sie können diese Dateien auf der mitgelieferten Mini-SD-Karte erhalten, wenn Sie das Canakit gekauft haben, oder eine bootfähige SD-Karte für den Pi 3 mit einer Linux-Distribution erstellen. In jedem Fall sind diese Dateien erforderlich, damit der Pi die SD-Karte als bootfähiges Gerät erkennen kann. Als nächstes formatieren Sie die Mini-SD-Karte in Fat32 (die meisten Mini-SD-Karten werden in Fat32 formatiert. Ich habe eine billige Mini-SD-Karte von Sandisk verwendet), verschiebe bootcode.bin, start.elf, fixup.dat auf die SD-Karte. Und fertig! Okay noch einmal und in der Reihenfolge der Bilder sind die Schritte:

  1. Suchen Sie bootcode.bin, start.elf, fixup.dat.
  2. Stellen Sie sicher, dass Ihre SD-Karte auf fat32 formatiert ist.
  3. Verschieben Sie bootcode.bin, start.elf und fixup.dat auf die formatierte SD-Karte.

So habe ich das herausgefunden, Link.

Schritt 4: Mini-SD PRÜFEN

ÜBERPRÜFEN Sie die Mini-SD
ÜBERPRÜFEN Sie die Mini-SD
ÜBERPRÜFEN Sie die Mini-SD
ÜBERPRÜFEN Sie die Mini-SD

Okay, wir haben eine bootfähige Mini-SD-Karte und hoffentlich haben Sie zu diesem Zeitpunkt einen pi 3. Jetzt sollten wir es also testen, um sicherzustellen, dass der pi 3 die Mini-SD-Karte als bootfähig erkennt.

Auf dem Pi, in der Nähe des Mini-USB-Anschlusses, befinden sich zwei kleine LEDs. Einer ist rot. Dies ist die Stromanzeige. Wenn der Pi mit Strom versorgt wird, sollte dieses Licht leuchten. Wenn Sie also Ihren Pi jetzt ohne Mini-SD-Karte anschließen, sollte er rot aufleuchten. Okay, jetzt trennen Sie Ihr Pi und legen Sie Ihre bootfähige Mini-SD-Karte ein, die im vorherigen Schritt erstellt wurde, und schließen Sie das Pi an. Sehen Sie ein anderes Licht? Es sollte ein grünes Licht direkt neben dem roten sein, das anzeigt, dass die SD-Karte gelesen wird. Diese LED wird als ACT-LED bezeichnet. Sie leuchtet auf, wenn eine funktionsfähige SD-Karte eingelegt ist. Es blinkt, wenn es auf Ihre Mini-SD-Karte zugreift.

Okay, also sollten zwei Dinge passiert sein, nachdem Sie die bootfähige Mini-SD-Karte eingelegt und den Pi eingesteckt haben:

  1. Die rote LED sollte leuchten und den Stromempfang anzeigen
  2. Die grüne LED sollte leuchten, um anzuzeigen, dass sie in die Mini-SD-Karte gebootet wurde

Wenn etwas schief gelaufen ist, wiederholen Sie die vorherigen Schritte oder klicken Sie auf den unten stehenden Link, um weitere Informationen zu erhalten.

Link hier ist eine gute Referenz.

Schritt 5: CODE1

Dieses Projekt ist in der ARM-Assemblersprache geschrieben. In diesem Tutorial wird ein grundlegendes Verständnis der ARM-Assembly vorausgesetzt, aber hier sind ein paar Dinge, die Sie wissen sollten:

.equ: weist einem Symbol einen Wert zu, d. h. abc.equ 5 abc steht jetzt für fünf

  • ldr: lädt aus dem Speicher
  • str: schreibt in den Speicher
  • cmp: vergleicht zwei Werte durch eine Subtraktion. Setzt Flags.
  • b: Verzweigen zu Label
  • add: führt Arithmetik durch

Wenn Sie keine Erfahrung mit der Armmontage haben, sehen Sie sich dieses Video an. Es wird Ihnen ein gutes Verständnis der Arm-Assemblersprache vermitteln.

Okay, im Moment haben wir eine Schaltung, die mit unserem Raspberry Pi 3 verbunden ist, und wir haben eine SD-Karte, die der Pi erkennt. Unsere nächste Aufgabe besteht also darin, herauszufinden, wie wir mit der Schaltung interagieren, indem Sie den Pi mit einem ausführbaren Programm laden. Im Allgemeinen müssen wir dem Pi sagen, dass es eine Spannung von GPIO 21 ausgeben soll (Pin mit dem roten Draht verbunden). Dann brauchen wir eine Möglichkeit, die LED umzuschalten, damit sie blinkt. Dazu benötigen wir weitere Informationen. An dieser Stelle haben wir keine Ahnung, wie wir GPIO 21 anweisen sollen, auszugeben, weshalb wir das Datenblatt lesen müssen. Die meisten Mikrocontroller haben Datenblätter, die genau angeben, wie alles funktioniert. Leider hat der pi 3 keine offizielle Dokumentation! Es gibt jedoch ein inoffizielles Datenblatt. Hier zwei Links dazu:

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

An dieser Stelle sollten Sie sich ein paar Minuten Zeit nehmen, bevor Sie mit dem nächsten Schritt fortfahren, um das Datenblatt durchzusehen und zu sehen, welche Informationen Sie finden können.

Schritt 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

Der Raspberry Pi 3 53 registriert sich zur Steuerung der Ausgangs-/Eingangspins (Peripherie). Die Pins werden gruppiert und jeder Gruppe ist ein Register zugeordnet. Für GPIO müssen wir auf die Register SELECT, SET und CLEAR zugreifen können. Um auf diese Register zuzugreifen, benötigen wir die physikalischen Adressen dieser Register. Beim Lesen des Datenblattes möchte man sich nur den Offset der Adresse (lo Byte) notieren und zur Basisadresse addieren. Sie müssen dies tun, da das Datenblatt die virtuelle Linux-Adresse auflistet, bei der es sich im Grunde genommen um Werte handelt, die die Betriebssysteme zuweisen. Wir verwenden kein Betriebssystem, daher müssen wir direkt über die physische Adresse auf diese Register zugreifen. Dazu benötigen Sie folgende Informationen:

  • Basisadresse der Peripheriegeräte: 0x3f200000. Das PDF (Seite 6) sagt, dass die Basisadresse 0x3f000000 ist, diese Adresse funktioniert jedoch nicht. Verwenden Sie 0x3f200000
  • Offset von FSEL2(SELECT) ist nicht die vollständige Adresse des Registers. Das PDF listet FSEL2 unter 0x7E20008 auf, aber diese Adresse bezieht sich auf die virtuelle Linux-Adresse. Der Versatz wird gleich sein, also wollen wir uns das merken. 0x08
  • Offset von GPSET0(SET):0x1c
  • Offset von GPCLR0(CLEAR):0x28

Sie haben wahrscheinlich bemerkt, dass das Datenblatt 4 SELECT-Register, 2 SET-Register und 2 CLEAR-Register auflistet. Warum habe ich also die ausgewählt, die ich gemacht habe? Dies liegt daran, dass wir GPIO 21 und FSEL2 verwenden möchten, steuert GPIO 20-29, SET0 und CLR0 steuert GPIO 0-31. Die FSEL-Register weisen jedem GPIO-Pin drei Bits zu. Da wir FSEL2 verwenden, bedeutet dies, dass die Bits 0-2 GPIO 20 steuern und die Bits 3-5 GPIO 21 usw. Die Register Set und CLR weisen jedem Pin ein einzelnes Bit zu. Zum Beispiel steuert Bit 0 in SET0 und CLR0 GPIO 1. Um GPIO 21 zu steuern, würden Sie Bit 21 in SET0 und CLR0 setzen.

Okay, wir haben darüber gesprochen, wie man auf diese Register zugreifen kann, aber was bedeutet das alles?

  • Das FSEL2-Register wird verwendet, um GPIO 21 auf Ausgabe zu setzen. Um einen Pin für die Ausgabe zu setzen, müssen Sie das Bit niedrigerer Ordnung der drei Bits auf 1 setzen. Wenn also die Bits 3-5 GPIO 21 steuern, müssen wir das erste Bit, Bit 3 auf 1 setzen dass wir GPIO 21 als Ausgang verwenden wollen. Wenn wir uns also die 3 Bits für GPIO 21 ansehen, sollten sie so aussehen, nachdem wir sie auf den Ausgang b001 gesetzt haben.
  • GPSET0 weist den Pi an, den Pin einzuschalten (eine Spannung auszugeben). Dazu schalten wir einfach das Bit um, das dem gewünschten GPIO-Pin entspricht. In unserem Fall Bit 21.
  • GPCLR0 weist den Pi an, den Pin auszuschalten (keine Spannung). Um den Pin auszuschalten, setzen Sie das Bit auf den entsprechenden GPIO-Pin. In unserem Fall Bit 21

Bevor wir zu einer blinkenden LED kommen, erstellen wir zunächst ein einfaches Programm, das die LED einfach einschaltet.

Zu Beginn müssen wir zwei Direktiven am Anfang unseres Quellcodes hinzufügen.

  • .section.init sagt dem pi, wo der Code abgelegt werden soll
  • .globaler _start

Als nächstes müssen wir alle Adressen einrichten, die wir verwenden werden. Verwenden Sie.equ, um den Werten lesbare Symbole zuzuweisen.

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

Jetzt werden wir Masken erstellen, um die Bits zu setzen, die wir setzen müssen.

  • .equ SET_BIT3, 0x08 Dies setzt Bit drei 0000_1000
  • .equ SET_BIT21, 0x200000

Dann müssen wir unser _Start-Label hinzufügen

_Anfang:

Basisadresse in Register laden

ldr r0, =BASE

Jetzt müssen wir Bit3 von GPFSEL2 setzen

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Dieser Befehl sagt, das Bit 0x08 an die Adresse von GPFSEL2 zurückzuschreiben

Schließlich müssen wir GPIO 21 auf Ein setzen, indem wir Bit 21 im GPSET0-Register setzen

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

Das Endprodukt sollte in etwa wie der abgebildete Code aussehen.

Der nächste Schritt besteht darin, den Code zu kompilieren und eine.img-Datei zu erstellen, die das pi ausführen kann.

  • Laden Sie das angehängte Makefile und kernel.ld herunter und wenn Sie den Quellcode turn_led_on.s haben möchten.
  • Legen Sie alle Dateien in denselben Ordner.
  • Wenn Sie Ihren eigenen Quellcode verwenden, bearbeiten Sie das Makefile und ersetzen Sie den Code = turn_led_on.s durch code =.s
  • Speichern Sie das Makefile.
  • Verwenden Sie das Terminal (Linux) oder das cmd-Fenster (Windows), um zu Ihrem Ordner mit den Dateien zu navigieren, geben Sie make ein und drücken Sie die Eingabetaste
  • Die make-Datei sollte eine Datei namens kernel.img generieren
  • Kopiere kernel.img auf deine Mini-SD-Karte. Der Inhalt Ihrer Karten sollte wie abgebildet aussehen (Bild 3):bootcode.bin, start.elf, fixup.dat und kernel.img.
  • Werfen Sie die Mini-SD-Karte aus und legen Sie sie in das Pi. ein
  • Stecken Sie den Pi in die Stromquelle
  • LED sollte leuchten!!!

LEICHT WICHTIGER HINWEIS: Anscheinend hatte instructables ein Problem mit dem Makefile, das keine Erweiterung hatte, also habe ich es mit einer.txt-Erweiterung erneut hochgeladen. Bitte entfernen Sie die Erweiterung, wenn Sie sie herunterladen, damit sie ordnungsgemäß funktioniert.

Empfohlen: