תוכן עניינים:

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 שלבים
וִידֵאוֹ: ESP32 Tutorial 3 - Resistor, LED, Bredboard and First Project: Hello LED -ESP32 IoT Learnig kit 2024, יולי
Anonim
Bare Metal Raspberry Pi 3: LED מהבהב
Bare Metal Raspberry Pi 3: LED מהבהב

עקוב אחר המחבר:

כפתור לחיצה של פטל פי עם נוריות מתכת חשופות
כפתור לחיצה של פטל פי עם נוריות מתכת חשופות
כפתור לחיצה של פטל פי עם נוריות מתכת חשופות
כפתור לחיצה של פטל פי עם נוריות מתכת חשופות
ארגזים
ארגזים
ארגזים
ארגזים
כיצד להכין גילוף להקלה ליום הוותיקים
כיצד להכין גילוף להקלה ליום הוותיקים
כיצד להכין גילוף להקלה ליום הוותיקים
כיצד להכין גילוף להקלה ליום הוותיקים

אודות:.oO0Oo. עוד אודות עובש פיצה »

ברוכים הבאים למדריך BARE METAL pi 3 מהבהב LED!

במדריך זה נעבור על השלבים, מההתחלה ועד הסוף, כדי לקבל נורית מהבהבת באמצעות פטל PI 3, לוח לחם, נגד, לד, וכרטיס SD ריק.

אז מה זה BARE METAL? BARE METAL היא תכנות ללא סלסולים. מתכת חשופה פירושה שאנחנו בשליטה מלאה על מה שהמחשב יעשה עד הסוף. אז זה בעצם אומר שהקוד ייכתב במלואו בהרכבה, באמצעות מערכת הוראות הזרוע. בסוף יצרנו תוכנית שתמצמץ נורית LED על ידי גישה לכתובת הפיזית של אחד מפיני ה- GPIO של ה- Raspberry Pi ותגדיר אותה לפלט ולאחר מכן הפעלה וכיבוי. ניסיון לפרויקט זה הוא דרך מצוינת להתחיל בתכנות מוטבע ובתקווה לספק הבנה טובה יותר של אופן הפעולה של מחשב.

מה אתה צריך?

חוּמרָה

  • פטל PI 3
  • כרטיס SD טעון מראש עם תמונת אתחול
  • לוח לחם
  • חוטי מגשר נקבה
  • חוטי מגשר זכר זכרים
  • לד
  • נגד 220 אוהם (לא חייב להיות בדיוק 220 אוהם, רוב הנגדים יעבדו)
  • כרטיס מיני sd
  • כרטיס מיני sd טעון מראש במערכת הפעלה פטל פאי (בדרך כלל כלול בפאי)

תוֹכנָה

  • מהדר GCC
  • שרשרת כלים מוטבעת של GNU
  • עורך טקסט
  • עיצוב כרטיס sd

בסדר אפשר להתחיל!

שלב 1: הגדרת דברים/דברים

הגדרת דברים/חומר
הגדרת דברים/חומר

אוקיי אז … הצעד הראשון הוא לרכוש חומרה. אתה יכול לקנות את החלקים בנפרד או שיש ערכה שמגיעה עם יותר ממספיק חלקים. קישור

ערכה זו כוללת את כל הדרוש להתקנת פטל פי 3 ועוד! הדבר היחיד שאינו כלול בערכה זו הוא כרטיס מיני SD נוסף. לַחֲכוֹת! אל תקנה עוד אחד עדיין. אם אינך מתכוון להשתמש בהתקנת לינוקס הטעונה מראש בכרטיס, פשוט העתק את התוכן של כרטיס ה- mini sd הכלול להמשך ועיצב מחדש את הכרטיס (עוד על כך בהמשך). הערה חשובה: הקפד לשמור את הקבצים בכרטיס המצורף. תזדקק להם להמשך!

בשלב הבא הגיע הזמן להתקין את התוכנה. הדרכה זו לא תכלול הוראות מפורטות כיצד להתקין את התוכנה. ישנם מקורות רבים והדרכות מקוונות כיצד להתקין את אלה:

משתמשי WINDOWS:

הורד והתקן את gcc

לאחר מכן, הורד והתקן את שרשרת הכלים המשובצת של GNU ARM

LINUX/MAC

  • הפצות לינוקס מגיעות עם gcc מותקן מראש
  • הורד והתקן את כלי הכלים המשובץ של GNU ARM.

אוקיי אז אם הכל ילך כשורה אז אתה אמור להיות מסוגל לפתוח את הטרמינל (לינוקס/מק) או קו cmd (חלונות) ולנסות להקליד

arm-none-eabi-gcc

הפלט אמור להיראות דומה לתמונה הראשונה. זה רק כדי לוודא שהוא מותקן כראוי.

בסדר עכשיו, כשהדרישות המוקדמות אינן מגיעות, הגיע הזמן להתחיל עם הדברים המהנים.

שלב 2: מעגל

מעגל חשמלי
מעגל חשמלי
מעגל חשמלי
מעגל חשמלי
מעגל חשמלי
מעגל חשמלי

זמן המעגל! המעגל לכך פשוט. נחבר LED ל- GPIO 21 (סיכה 40) על פי (ראה תמונה 2 ו -3). נגד מחובר גם הוא בסדרה בכדי למנוע מהנזק להוביל. הנגד יתחבר לטור השלילי בלוח הלחם שיחובר ל- GND (סיכה 39) בפי. בעת חיבור הלד הקפד לחבר את הקצה הקצר לצד השלילי. ראו את התמונה האחרונה

שלב 3: מיני SD לאתחול

מיני SD לאתחול
מיני SD לאתחול
מיני SD לאתחול
מיני SD לאתחול
מיני SD לאתחול
מיני SD לאתחול

ישנם שלושה שלבים לגרום ל- pi 3 שלך לזהות את כרטיס ה- SD המיני הריק שלך. עלינו למצוא ולהעתיק bootcode.bin, start.elf ו- fixup.dat. אתה יכול לקבל קבצים אלה על כרטיס ה- mini sd הכלול אם קנית את canakit או עושה כרטיס sd לאתחול עבור pi 3 עם הפצה לינוקס. כך או כך, קבצים אלה נחוצים כדי לאפשר ל- 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: בדוק מיני SD

בדוק מיני SD
בדוק מיני SD
בדוק מיני SD
בדוק מיני SD

בסדר, יש לנו כרטיס מיני sd לאתחול, ואני מקווה שיש לך pi 3 בשלב זה. אז עכשיו עלינו לבדוק את זה כדי לוודא ש- pi 3 מזהה את כרטיס ה- mini sd כאתחול.

בפי, ליד יציאת ה- usb המיני יש שני לדים קטנים. אחד הוא אדום. זהו מחוון ההספק. כאשר ה- pi מקבל כוח הנורה הזו צריכה להיות דולקת. אז אם תחבר את ה- pi שלך כרגע ללא כרטיס מיני SD הוא אמור להאיר באדום. אוקיי עכשיו נתק את ה- pi שלך והכנס את כרטיס ה- mini sd לאתחול שנוצר בשלב הקודם וחבר את ה- pi. האם אתה רואה עוד נורה? צריכה להיות אור ירוק, ממש ליד האדום, המציין שהוא קורא את כרטיס ה- SD. לד הזה נקרא ACT led. הוא יאיר כאשר יוכנס כרטיס sd בר קיימא. הוא יהבהב כאשר הוא ניגש לכרטיס ה- mini -sd שלך.

אוקיי אז שני דברים היו צריכים לקרות אחרי שהכנסת את כרטיס ה- sd המיני לאתחול וחיברת את הפאי:

  1. יש להדליק את הנורית האדומה המצביעה על קליטת חשמל
  2. הדלק הירוק צריך להיות מואר ומצביע על כך שהוא התחבר לכרטיס ה- mini sd

אם משהו השתבש נסה לחזור על השלבים הקודמים או לחץ על הקישור למטה למידע נוסף.

הקישור כאן הוא הפניה טובה.

שלב 5: CODE1

פרויקט זה כתוב בשפת הרכבת ARM. הבנה בסיסית בהרכבת ARM מובנית במדריך זה, אך להלן מספר דברים שכדאי לדעת:

.equ: מקצה ערך לסמל כלומר abc.equ 5 abc מייצג כעת חמישה

  • ldr: נטען מהזיכרון
  • str: כותב לזיכרון
  • cmp: משווה שני ערכים על ידי ביצוע חיסור. קובע דגלים.
  • ב: ענף לתווית
  • הוסף: מבצע חשבון

אם אין לך ניסיון בהרכבת זרועות צפה בסרטון זה. זה ייתן לך הבנה טובה של שפת עצרת הזרוע.

אוקיי אז כרגע יש לנו מעגל שמחובר לפטל 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: 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

פטל pi 3 53 רושם לשליטה על סיכות הפלט/קלט (ציוד היקפי). הסיכות מקובצות יחד וכל קבוצה מוקצה לרגיסטר. עבור GPIO עלינו להיות מסוגלים לגשת לרשם SELECT, לרשם SET ול- CLEAR. כדי לגשת לרשמים אלה אנו זקוקים לכתובות הפיזיות של הרשמים הללו. כאשר אתה קורא את גליון הנתונים אתה רק רוצה לציין את הקיזוז של הכתובת (lo byte) ולהוסיף אותו לכתובת הבסיס. עליך לעשות זאת מכיוון שגליון הנתונים מפרט את הכתובת הווירטואלית של לינוקס שהם בעצם ערכים שמערכות ההפעלה מקצות. איננו משתמשים במערכת הפעלה ולכן עלינו לגשת ישירות לרשמים אלה באמצעות הכתובת הפיזית. לשם כך אתה צריך את המידע הבא:

  • כתובת בסיס של ציוד היקפי: 0x3f200000. ה- pdf (עמוד 6) אומר שכתובת הבסיס היא 0x3f000000, אולם כתובת זו לא תעבוד. השתמש ב- 0x3f200000
  • קיזוז FSEL2 (SELECT) לא הכתובת המלאה של הרשומה. ה- pdf מפרט את FSEL2 ב 0x7E20008 אך כתובת זו מתייחסת לכתובת הווירטואלית של לינוקס. הקיזוז יהיה זהה ולכן אנו רוצים לציין זאת. 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 מקצים שלושה סיביות לכל סיכת GPIO. מכיוון שאנו משתמשים ב- FSEL2 המשמעות היא סיביות 0-2 שולטות ב- GPIO 20, וביטים 3-5 שולטים ב- GPIO 21 וכן הלאה. מאגרי ה- Set וה- CLR מקצים סיכה אחת לכל סיכה. לדוגמה, ביט 0 ב- SET0 ו- CLR0 שולט ב- GPIO 1. לשליטה ב- GPIO 21 היית מגדיר את bit 21 ב- SET0 וב- CLR0.

אוקיי אז דיברנו על איך לגשת לרשמים האלה, אבל מה המשמעות של כל זה?

  • רשם FSEL2 ישמש להגדרת GPIO 21 לפלט. כדי להגדיר סיכה לפלט אתה צריך להגדיר את סידור lo של שלושת הביטים ל- 1. אז אם סיביות 3-5 שולטות ב- GPIO 21 זה אומר שאנחנו צריכים להגדיר את הסיביות הראשונה, bit 3 ל- 1. זה יגיד את ה- pi שאנחנו רוצים להשתמש ב- GPIO 21 כפלט. אז אם היינו מסתכלים על 3 הסיביות של GPIO 21 הם צריכים להיראות כך אחרי שהגדרנו אותו לפלט, b001.
  • GPSET0 אומר ל- pi להפעיל את הסיכה (פלט מתח). לשם כך אנו פשוט מחליפים את הסכום המתכתב עם סיכת ה- GPIO שאנו רוצים. במקרה שלנו ביט 21.
  • GPCLR0 אומר ל- pi לכבות את הסיכה (ללא מתח). כדי לכבות את הסיכה הגדר את הסיבית לסיכת ה- GPIO המתאימה. במקרה שלנו ביט 21

לפני שנגיע ללד מהבהב, ראשית אפשר ליצור תוכנית פשוטה שפשוט תדליק את הלייד.

כדי להתחיל, עלינו להוסיף שתי הנחיות לראש קוד המקור שלנו.

  • .section.init אומר לפאי היכן לשים את הקוד
  • .global _start

לאחר מכן, עלינו לפרוס את כל הכתובות בהן נשתמש. השתמש ב-.equ כדי להקצות סמלים קריאים לערכים.

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

עכשיו אנחנו הולכים ליצור מסכות כדי להגדיר את הסיביות שאנחנו צריכים להגדיר.

  • .equ SET_BIT3, 0x08 זה יקבע ביט שלוש 0000_1000
  • .equ SET_BIT21, 0x200000

לאחר מכן עלינו להוסיף את תווית _start שלנו

_הַתחָלָה:

טען את כתובת הבסיס לרשום

ldr r0, = BASE

כעת עלינו להגדיר את bit3 של GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] הוראה זו אומרת לכתוב בחזרה את הסיביות 0x08 לכתובת GPFSEL2

לבסוף עלינו להפעיל את GPIO 21 על ידי הגדרת ביט 21 ברשם GPSET0

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

המוצר הסופי צריך להיראות בערך כמו הקוד בתמונה.

השלב הבא הוא לאסוף את הקוד וליצור קובץ.img שה- pi יכול להריץ.

  • הורד את הקובץ המצורף המצורף, ואת kernel.ld ואם אתה רוצה את קוד המקור turn_led_on.s.
  • שים את כל הקבצים באותה תיקייה.
  • אם אתה משתמש בקוד המקור שלך, ערוך את קובץ התיקון והחלף את הקוד = turn_led_on.s ב- code =.s
  • שמור את הקובץ המיידי.
  • השתמש במסוף (לינוקס) או בחלון cmd (חלונות) כדי לנווט אל התיקייה שלך המכילה את הקבצים והקלד צור והקש enter
  • קובץ ה- make צריך ליצור קובץ בשם kernel.img
  • העתק את kernel.img לכרטיס ה- mini -sd שלך. תכולת הכרטיסים שלך צריכה להיות כמו בתמונה (תמונה 3): bootcode.bin, start.elf, fixup.dat ו- kernel.img.
  • הוצא את כרטיס ה- mini sd והכנס אותו לתוך ה- pi
  • חבר את פי למקור החשמל
  • LED צריך להאיר !!!

הערה חשובה מעט: כנראה שלמדריכים הייתה בעיה בכך שהקובץ לא היה בעל סיומת, אז העליתי אותו מחדש עם סיומת.txt. אנא הסר את התוסף כשאתה מוריד אותו כדי שהוא יפעל כהלכה.

מוּמלָץ: