Πίνακας περιεχομένων:

Bare Metal Raspberry Pi 3: LED που αναβοσβήνει: 8 βήματα
Bare Metal Raspberry Pi 3: LED που αναβοσβήνει: 8 βήματα

Βίντεο: Bare Metal Raspberry Pi 3: LED που αναβοσβήνει: 8 βήματα

Βίντεο: Bare Metal Raspberry Pi 3: LED που αναβοσβήνει: 8 βήματα
Βίντεο: Πώς να μετατρέψετε το Raspberry Pi Pico σε PLC | Beremiz4Pico 2024, Ιούλιος
Anonim
Bare Metal Raspberry Pi 3: LED που αναβοσβήνει
Bare Metal Raspberry Pi 3: LED που αναβοσβήνει

Ακολουθήστε περισσότερα από τον συγγραφέα:

Raspberry Pi Push Button με LED γυμνό μέταλλο
Raspberry Pi Push Button με LED γυμνό μέταλλο
Κουμπί Raspberry Pi με LED με γυμνό μέταλλο
Κουμπί Raspberry Pi με LED με γυμνό μέταλλο
Κιβώτια
Κιβώτια
Κιβώτια
Κιβώτια
Πώς να φτιάξετε ένα ανάγλυφο σκάλισμα για την Ημέρα των Βετεράνων
Πώς να φτιάξετε ένα ανάγλυφο σκάλισμα για την Ημέρα των Βετεράνων
Πώς να φτιάξετε ένα ανάγλυφο σκάλισμα για την Ημέρα των Βετεράνων
Πώς να φτιάξετε ένα ανάγλυφο σκάλισμα για την Ημέρα των Βετεράνων

Σχετικά με:.oO0Oo. Περισσότερα για τη moldypizza »

Καλώς ορίσατε στο σεμινάριο BARE METAL pi 3 Blinking LED!

Σε αυτό το σεμινάριο θα περάσουμε από τα βήματα, από την αρχή έως το τέλος, για να αναβοσβήνει ένα LED χρησιμοποιώντας ένα Raspberry PI 3, ένα breadboard, μια αντίσταση, ένα led και μια κενή κάρτα SD.

Τι είναι λοιπόν το BARE METAL; Το BARE METAL δεν είναι προγραμματισμός διακοσμητικών στοιχείων. Το γυμνό μέταλλο σημαίνει ότι έχουμε τον πλήρη έλεγχο του τι θα κάνει ο υπολογιστής μέχρι το κομμάτι. Συνεπώς, ουσιαστικά σημαίνει ότι ο κώδικας θα γραφτεί πλήρως στη συναρμολόγηση, χρησιμοποιώντας το σύνολο εντολών Arm. Στο τέλος θα έχουμε δημιουργήσει ένα πρόγραμμα που θα αναβοσβήνει ένα LED αποκτώντας πρόσβαση στη φυσική διεύθυνση ενός από τους ακροδέκτες GPIO του Raspberry Pi και διαμορφώνοντάς το στην έξοδο και στη συνέχεια ενεργοποιώντας και απενεργοποιώντας το. Η απόπειρα αυτού του έργου, είναι ένας πολύ καλός τρόπος για να ξεκινήσετε με τον ενσωματωμένο προγραμματισμό και ελπίζουμε να παρέχετε μια καλύτερη κατανόηση του τρόπου λειτουργίας ενός υπολογιστή.

Τι χρειάζεσαι?

Σκεύη, εξαρτήματα

  • Βατόμουρο PI 3
  • Κάρτα SD προφορτωμένη με δυνατότητα εκκίνησης
  • Breadboard
  • Αρσενικά θηλυκά καλώδια άλτη
  • Αρσενικά αρσενικά καλώδια άλτη
  • LED
  • Αντίσταση 220 ohm (δεν χρειάζεται να είναι ακριβώς 220 ohm, οι περισσότερες αντιστάσεις θα λειτουργήσουν)
  • μίνι κάρτα sd
  • μίνι κάρτα sd προφορτωμένη με λειτουργικό σύστημα raspberry pi (συνήθως περιλαμβάνεται με το pi)

Λογισμικό

  • Μεταγλωττιστής GCC
  • Ενσωματωμένη εργαλειοθήκη GNU
  • επεξεργαστής κειμένου
  • μορφοποιητής κάρτας sd

Εντάξει ας ξεκινήσουμε!

Βήμα 1: ΡΥΘΜΙΣΗ ΠΡΑΓΜΑΤΩΝ/ΕΞΑΡΤΗΜΑΤΩΝ

ΡΥΘΜΙΣΗ ΠΡΑΓΜΑΤΩΝ/ΕΞΑΡΤΗΜΑΤΩΝ
ΡΥΘΜΙΣΗ ΠΡΑΓΜΑΤΩΝ/ΕΞΑΡΤΗΜΑΤΩΝ

Εντάξει… το πρώτο βήμα είναι να αποκτήσετε υλικό. Θα μπορούσατε να αγοράσετε τα ανταλλακτικά ξεχωριστά ή υπάρχει ένα κιτ που συνοδεύεται από περισσότερα από αρκετά ανταλλακτικά. ΣΥΝΔΕΣΜΟΣ

Αυτό το κιτ έρχεται με όλα τα απαραίτητα για τη ρύθμιση του raspberry pi 3 και περισσότερο! το μόνο πράγμα που δεν περιλαμβάνεται σε αυτό το κιτ είναι μια επιπλέον κάρτα mini sd. Περίμενε! Μην αγοράσετε άλλο ένα ακόμα. Εάν δεν σκοπεύετε να χρησιμοποιήσετε την εγκατάσταση του linux που έχει προφορτωθεί στην κάρτα, απλώς αντιγράψτε τα περιεχόμενα της κάρτας mini sd που περιλαμβάνεται για αργότερα και διαμορφώστε ξανά την κάρτα (περισσότερα αργότερα). ΣΗΜΑΝΤΙΚΗ ΣΗΜΕΙΩΣΗ: βεβαιωθείτε ότι έχετε φυλάξει τα αρχεία στην κάρτα που περιλαμβάνεται και θα τα ΧΡΕΙΑΣΤΕ για αργότερα!

Στη συνέχεια, ήρθε η ώρα να ρυθμίσετε το λογισμικό. Αυτό το σεμινάριο δεν θα περιλαμβάνει λεπτομερείς οδηγίες σχετικά με τον τρόπο εγκατάστασης του λογισμικού. Υπάρχουν πολλοί πόροι και σεμινάρια στο διαδίκτυο σχετικά με τον τρόπο εγκατάστασης αυτών:

ΧΡΗΣΤΕΣ ΠΑΡΑΘΥΡΩΝ:

Κατεβάστε και εγκαταστήστε το gcc

Στη συνέχεια, κάντε λήψη και εγκαταστήστε την ενσωματωμένη εργαλειοθήκη GNU ARM

LINUX/MAC

  • Οι διανομές Linux συνοδεύονται από προεγκατεστημένο gcc
  • Κατεβάστε και εγκαταστήστε την ενσωματωμένη εργαλειοθήκη GNU ARM.

Εντάξει, εάν όλα πάνε καλά, θα πρέπει να μπορείτε να ανοίξετε το τερματικό (linux/mac) ή τη γραμμή cmd (παράθυρα) και να δοκιμάσετε να πληκτρολογήσετε

arm-none-eabi-gcc

Η έξοδος πρέπει να μοιάζει με την πρώτη εικόνα. Αυτό γίνεται μόνο για να επαληθεύσουμε ότι έχει εγκατασταθεί σωστά.

Εντάξει τώρα που οι προϋποθέσεις είναι εκτός λειτουργίας, ήρθε η ώρα να ξεκινήσετε με τα διασκεδαστικά πράγματα.

Βήμα 2: ΚΥΚΛΩΜΑ

ΚΥΚΛΩΜΑ
ΚΥΚΛΩΜΑ
ΚΥΚΛΩΜΑ
ΚΥΚΛΩΜΑ
ΚΥΚΛΩΜΑ
ΚΥΚΛΩΜΑ

Χρόνος κυκλώματος! Το κύκλωμα για αυτό είναι απλό. Θα συνδέσουμε ένα led στο GPIO 21 (pin 40) στο pi (δείτε τις εικόνες 2 και 3). Μια αντίσταση συνδέεται επίσης σε σειρά για να αποφευχθεί η ζημιά του led. Η αντίσταση θα συνδεθεί με την αρνητική στήλη στο breadboard η οποία θα συνδεθεί με το GND (pin 39) στο pi. Κατά τη σύνδεση του led φροντίστε να συνδέσετε το κοντό άκρο με την αρνητική πλευρά. Δείτε την τελευταία εικόνα

Βήμα 3: BOOTABLE Mini SD

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

Υπάρχουν τρία βήματα για να αναγνωρίσετε το pi 3 σας την κενή κάρτα mini sd. Πρέπει να βρούμε και να αντιγράψουμε bootcode.bin, start.elf και fixup.dat. Μπορείτε να λάβετε αυτά τα αρχεία στην κάρτα mini sd που περιλαμβάνεται εάν αγοράσατε το canakit ή δημιουργήσετε μια κάρτα sd με δυνατότητα εκκίνησης για το pi 3 με διανομή linux. Ούτως ή άλλως, αυτά τα αρχεία είναι απαραίτητα για να επιτρέψουν στο pi να αναγνωρίσει την κάρτα sd ως εκκινήσιμη συσκευή. Στη συνέχεια, διαμορφώστε το mini sd σε fat32 (οι περισσότερες κάρτες mini sd διαμορφώνονται σε fat32. Χρησιμοποίησα μια φθηνή κάρτα mini sd από το sandisk), μετακινήστε το bootcode.bin, start.elf, fixup.dat στην κάρτα sd. Και τελειώσατε! Εντάξει για άλλη μια φορά και με τη σειρά των εικόνων τα βήματα είναι:

  1. Βρείτε bootcode.bin, start.elf, fixup.dat.
  2. Βεβαιωθείτε ότι η κάρτα sd σας έχει μορφοποιηθεί σε fat32.
  3. Μετακινήστε τα bootcode.bin, start.elf και fixup.dat στη μορφοποιημένη κάρτα sd.

Να πώς το κατάλαβα, σύνδεσμος.

Βήμα 4: ΕΛΕΓΧΕ Mini SD

ΕΛΕΓΧΟΣ Mini SD
ΕΛΕΓΧΟΣ Mini SD
ΕΛΕΓΧΟΣ Mini SD
ΕΛΕΓΧΟΣ Mini SD

Εντάξει, έχουμε μια bootable mini sd κάρτα και ελπίζουμε ότι έχετε ένα pi 3 σε αυτό το σημείο. Έτσι, τώρα θα πρέπει να το δοκιμάσουμε για να βεβαιωθούμε ότι το pi 3 αναγνωρίζει την κάρτα mini sd ως bootable.

Στο pi, κοντά στη θύρα mini usb υπάρχουν δύο μικρά led. Το ένα είναι κόκκινο. Αυτός είναι ο δείκτης ισχύος. Όταν το pi λαμβάνει ισχύ, αυτό το φως πρέπει να είναι αναμμένο. Έτσι, εάν συνδέσετε το pi σας αυτήν τη στιγμή χωρίς κάρτα mini sd, θα πρέπει να ανάψει κόκκινο. Εντάξει, αποσυνδέστε το pi σας και βάλτε την bootable mini sd κάρτα που δημιουργήθηκε στο προηγούμενο βήμα και συνδέστε το pi. Βλέπετε άλλο φως; Θα πρέπει να υπάρχει ένα πράσινο φως, ακριβώς δίπλα στο κόκκινο, που δείχνει ότι διαβάζει την κάρτα sd. Αυτό το led ονομάζεται ACT led. Θα ανάψει όταν τοποθετηθεί μια βιώσιμη κάρτα sd. Θα αναβοσβήνει όταν έχει πρόσβαση στην κάρτα mini sd.

Εντάξει, δύο πράγματα θα έπρεπε να έχουν συμβεί αφού εισαγάγατε την κάρτα μίνι sd με δυνατότητα εκκίνησης και συνδέσατε το pi στην πρίζα:

  1. Το κόκκινο led θα πρέπει να είναι φωτισμένο υποδεικνύοντας τη λήψη ισχύος
  2. Το πράσινο led θα πρέπει να φωτιστεί υποδεικνύοντας ότι έχει μπει στην κάρτα mini sd

Εάν κάτι πήγε στραβά δοκιμάστε να επαναλάβετε τα προηγούμενα βήματα ή κάντε κλικ στον παρακάτω σύνδεσμο για περισσότερες πληροφορίες.

Ο σύνδεσμος εδώ είναι μια καλή αναφορά.

Βήμα 5: ΚΩΔΙΚΟΣ 1

Αυτό το έργο είναι γραμμένο στη γλώσσα συναρμολόγησης ARM. Μια βασική κατανόηση της συναρμολόγησης ARM υποτίθεται σε αυτό το σεμινάριο, αλλά εδώ είναι μερικά πράγματα που πρέπει να γνωρίζετε:

.equ: αποδίδει μια τιμή σε ένα σύμβολο δηλ. abc

  • ldr: φορτώνει από τη μνήμη
  • str: γράφει στη μνήμη
  • cmp: συγκρίνει δύο τιμές εκτελώντας μια αφαίρεση. Ορίζει σημαίες.
  • β: κλάδο σε ετικέτα
  • add: εκτελεί αριθμητική

Αν δεν έχετε εμπειρία με τη συναρμολόγηση του Arm, δείτε αυτό το βίντεο. Θα σας δώσει μια καλή κατανόηση της γλώσσας συγκέντρωσης Arm.

Εντάξει, τώρα έχουμε ένα κύκλωμα που είναι συνδεδεμένο με το βατόμουρο pi 3 και έχουμε μια κάρτα sd που αναγνωρίζει το pi, οπότε η επόμενη δουλειά μας είναι να βρούμε πώς να αλληλεπιδράσουμε με το κύκλωμα φορτώνοντας το pi με ένα εκτελέσιμο πρόγραμμα. Σε γενικές γραμμές, αυτό που πρέπει να κάνουμε είναι να πούμε στο pi να βγάλει τάση από το GPIO 21 (ακίδα συνδεδεμένη με το κόκκινο καλώδιο). Τότε χρειαζόμαστε έναν τρόπο εναλλαγής του led για να αναβοσβήνει. Για να γίνει αυτό χρειαζόμαστε περισσότερες πληροφορίες. Σε αυτό το σημείο δεν έχουμε ιδέα πώς να πούμε στην έξοδο GPIO 21, γι 'αυτό πρέπει να διαβάσουμε το φύλλο δεδομένων. Οι περισσότεροι μικροελεγκτές διαθέτουν φύλλα δεδομένων που καθορίζουν ακριβώς πώς λειτουργούν όλα. Δυστυχώς, το pi 3 δεν έχει επίσημη τεκμηρίωση! Ωστόσο, υπάρχει ένα ανεπίσημο δελτίο δεδομένων. Ακολουθούν δύο σύνδεσμοι για αυτό:

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

Εντάξει σε αυτό το σημείο, θα πρέπει να αφιερώσετε λίγα λεπτά πριν προχωρήσετε στο επόμενο βήμα για να αναζητήσετε το φύλλο δεδομένων και να δείτε ποιες πληροφορίες μπορείτε να βρείτε.

Βήμα 6: ΚΩΔΙΚΟΣ 2: Turn_Led_ON

ΚΩΔΙΚΟΣ 2: Turn_Led_ON
ΚΩΔΙΚΟΣ 2: Turn_Led_ON
ΚΩΔΙΚΟΣ 2: Turn_Led_ON
ΚΩΔΙΚΟΣ 2: Turn_Led_ON
ΚΩΔΙΚΟΣ 2: Turn_Led_ON
ΚΩΔΙΚΟΣ 2: Turn_Led_ON

Το raspberry pi 3 53 εγγράφεται για τον έλεγχο των ακίδων εξόδου/εισόδου (περιφερειακά). Οι καρφίτσες ομαδοποιούνται και κάθε ομάδα εκχωρείται σε έναν καταχωρητή. Για το GPIO πρέπει να μπορούμε να έχουμε πρόσβαση στο μητρώο SELECT, στο μητρώο SET και στο CLEAR. Για να αποκτήσουμε πρόσβαση σε αυτούς τους καταχωρητές χρειαζόμαστε τις φυσικές διευθύνσεις αυτών των καταχωρητών. Όταν διαβάζετε το φύλλο δεδομένων, θέλετε μόνο να σημειώσετε την αντιστάθμιση της διεύθυνσης (lo byte) και να το προσθέσετε στη βασική διεύθυνση. Πρέπει να το κάνετε αυτό επειδή στο φύλλο δεδομένων παρατίθεται η εικονική διεύθυνση linux, οι οποίες είναι βασικά τιμές που εκχωρούν τα λειτουργικά συστήματα. Δεν χρησιμοποιούμε λειτουργικό σύστημα, οπότε πρέπει να έχουμε άμεση πρόσβαση σε αυτούς τους καταχωρητές χρησιμοποιώντας τη φυσική διεύθυνση. Για αυτό χρειάζεστε τις ακόλουθες πληροφορίες:

  • Διεύθυνση Βάσης Περιφερειακών: 0x3f200000. Το pdf (σελίδα 6) λέει ότι η βασική διεύθυνση είναι 0x3f000000, ωστόσο, αυτή η διεύθυνση δεν θα λειτουργήσει. Χρησιμοποιήστε 0x3f200000
  • Μετατόπιση του FSEL2 (SELECT) όχι η πλήρης διεύθυνση του μητρώου. Το pdf παραθέτει το FSEL2 στο 0x7E20008 αλλά αυτή η διεύθυνση αναφέρεται στην εικονική διεύθυνση linux. Η μετατόπιση θα είναι η ίδια, έτσι είναι αυτό που θέλουμε να σημειώσουμε. 0x08
  • Μετατόπιση GPSET0 (SET): 0x1c
  • Μετατόπιση GPCLR0 (CLEAR): 0x28

Έτσι πιθανότατα παρατηρήσατε ότι το φύλλο δεδομένων απαριθμεί 4 καταχωρητές SELECT, 2 καταχωρητές SET και 2 καταχωρητές CLEAR, οπότε γιατί επέλεξα αυτούς που έκανα; Αυτό συμβαίνει επειδή θέλουμε να χρησιμοποιήσουμε GPIO 21 και FSEL2 χειριστήρια GPIO 20-29, SET0 και CLR0 χειριστήρια GPIO 0-31. Οι καταχωρητές FSEL εκχωρούν τρία bit για κάθε καρφίτσα GPIO. Δεδομένου ότι χρησιμοποιούμε το FSEL2 αυτό σημαίνει bits 0-2 ελέγχου GPIO 20 και bits 3-5 ελέγχου GPIO 21 κ.ο.κ. Οι καταχωρητές Set και CLR εκχωρούν ένα bit σε κάθε ακίδα. Για παράδειγμα, το bit 0 στο SET0 και το CLR0 ελέγχει το GPIO 1. Για τον έλεγχο του GPIO 21 θα ορίσατε το bit 21 σε SET0 και CLR0.

Εντάξει, έχουμε μιλήσει για τον τρόπο πρόσβασης σε αυτούς τους καταχωρητές, αλλά τι σημαίνουν όλα αυτά;

  • Το μητρώο FSEL2 θα χρησιμοποιηθεί για να ρυθμίσετε την έξοδο του GPIO 21. Για να ορίσετε μια καρφίτσα στην έξοδο, πρέπει να ορίσετε το bit τάξης των τριών δυαδικών ψηφίων στο 1. Έτσι, εάν τα bit 3-5 ελέγχουν το GPIO 21, αυτό σημαίνει ότι πρέπει να ορίσουμε το πρώτο bit, το bit 3 στο 1. Αυτό θα πει το pi ότι θέλουμε να χρησιμοποιήσουμε το GPIO 21 ως έξοδο. Έτσι, αν κοιτάξουμε τα 3 bits για το GPIO 21 θα πρέπει να μοιάζουν με αυτό αφού το ορίσουμε στην έξοδο, b001.
  • Το GPSET0 λέει στο pi να ενεργοποιήσει τον πείρο (εξόδου τάσης). Για να γίνει αυτό, απλώς εναλλάσσουμε το bit που αντιστοιχεί στο pin GPIO που θέλουμε. Στο δικό μας, περίπτωση bit 21.
  • Το GPCLR0 λέει στο pi να απενεργοποιήσει τον πείρο (χωρίς τάση). Για να απενεργοποιήσετε τον πείρο, ορίστε το bit στον αντίστοιχο ακροδέκτη GPIO. Στην περίπτωσή μας bit 21

Πριν φτάσουμε σε ένα led που αναβοσβήνει, ας κάνουμε πρώτα ένα απλό πρόγραμμα που απλώς θα ενεργοποιήσει το led.

Για να ξεκινήσουμε, πρέπει να προσθέσουμε δύο οδηγίες στην κορυφή του πηγαίου κώδικα.

  • .section.init λέει στο pi πού να βάλει τον κωδικό
  • .global _start

Στη συνέχεια, πρέπει να σχεδιάσουμε όλες τις διευθύνσεις που θα χρησιμοποιήσουμε. Χρησιμοποιήστε.equ για να αντιστοιχίσετε αναγνώσιμα σύμβολα στις τιμές.

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

Τώρα θα δημιουργήσουμε μάσκες για να ορίσουμε τα κομμάτια που πρέπει να ρυθμίσουμε.

  • .equ SET_BIT3, 0x08 Αυτό θα ορίσει το bit τρία 0000_1000
  • .equ SET_BIT21, 0x200000

Στη συνέχεια, πρέπει να προσθέσουμε την ετικέτα _start

_αρχή:

Φορτώστε τη διεύθυνση βάσης στο μητρώο

ldr r0, = ΒΑΣΗ

Τώρα πρέπει να ορίσουμε το bit3 του GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Αυτή η οδηγία λέει να γράψετε πίσω το bit 0x08 στη διεύθυνση του GPFSEL2

Τέλος, πρέπει να ενεργοποιήσουμε το GPIO 21 ρυθμίζοντας το bit 21 στον καταχωρητή GPSET0

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

Το τελικό προϊόν πρέπει να μοιάζει με τον κωδικό που απεικονίζεται.

Το επόμενο βήμα είναι να μεταγλωττίσετε τον κώδικα και να δημιουργήσετε ένα αρχείο.img που μπορεί να εκτελέσει το pi.

  • Κατεβάστε το συνημμένο makefile και το kernel.ld και αν θέλετε τον πηγαίο κώδικα turn_led_on.s.
  • Βάλτε όλα τα αρχεία στον ίδιο φάκελο.
  • Εάν χρησιμοποιείτε τον δικό σας πηγαίο κώδικα, επεξεργαστείτε το αρχείο makefile και αντικαταστήστε τον κωδικό = turn_led_on.s με κωδικό =.s
  • Αποθηκεύστε το makefile.
  • Χρησιμοποιήστε το τερματικό (linux) ή το παράθυρο cmd (παράθυρα) για να μεταβείτε στο φάκελό σας που περιέχει τα αρχεία και πληκτρολογήστε make και πατήστε enter
  • Το αρχείο δημιουργίας πρέπει να δημιουργεί ένα αρχείο που ονομάζεται kernel.img
  • Αντιγράψτε το kernel.img στην κάρτα mini sd. Τα περιεχόμενα των καρτών σας πρέπει να είναι όπως απεικονίζονται (εικόνα 3): bootcode.bin, start.elf, fixup.dat και kernel.img.
  • Εξαγάγετε την κάρτα mini sd και τοποθετήστε την στο pi
  • Συνδέστε το pi στην πηγή τροφοδοσίας
  • Το LED πρέπει να ανάψει !!!

ΕΛΑΦΡΗ ΣΗΜΑΝΤΙΚΗ ΣΗΜΕΙΩΣΗ: Προφανώς οι εκπαιδευτικοί είχαν πρόβλημα με το makefile που δεν είχε επέκταση, οπότε το ανέβασα ξανά με επέκταση.txt. Καταργήστε την επέκταση όταν τη κατεβάσετε για να λειτουργήσει σωστά.

Συνιστάται: