جدول المحتويات:

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 خطوات
فيديو: ARM Brick Breaker Game (Bare Metal Programming with Raspberry Pi) 2024, يوليو
Anonim
Bare Metal Raspberry Pi 3: مصباح LED وامض
Bare Metal Raspberry Pi 3: مصباح LED وامض

تابع المزيد بالمؤلف:

زر دفع Raspberry Pi مع مصابيح LED معدنية عارية
زر دفع Raspberry Pi مع مصابيح LED معدنية عارية
زر دفع Raspberry Pi مع مصابيح LED معدنية عارية
زر دفع Raspberry Pi مع مصابيح LED معدنية عارية
الصناديق
الصناديق
الصناديق
الصناديق
كيفية عمل نحت إغاثة ليوم قدامى المحاربين
كيفية عمل نحت إغاثة ليوم قدامى المحاربين
كيفية عمل نحت إغاثة ليوم قدامى المحاربين
كيفية عمل نحت إغاثة ليوم قدامى المحاربين

حول:. oO0Oo. المزيد عن مولديبيزا »

مرحبًا بك في البرنامج التعليمي BARE METAL pi 3 Blinking LED!

في هذا البرنامج التعليمي سوف ننتقل من خلال الخطوات ، من البداية إلى النهاية ، للحصول على وميض LED باستخدام Raspberry PI 3 ، ولوح التجارب ، والمقاوم ، ومصباح LED ، وبطاقة SD فارغة.

إذن ما هو BARE METAL؟ BARE METAL ليست برمجة زخرفة. تعني المعادن العارية أننا نتحكم بشكل كامل في ما سيفعله الكمبيوتر حتى الجزء البسيط. لذلك يعني ذلك بشكل أساسي أن الكود سيتم كتابته بالكامل في التجميع ، باستخدام مجموعة تعليمات Arm. في النهاية ، سنكون قد أنشأنا برنامجًا يومض مؤشر LED عن طريق الوصول إلى العنوان الفعلي لأحد دبابيس GPIO الخاصة بـ Raspberry Pi وتكوينه للإخراج ثم تشغيله وإيقاف تشغيله. تعد محاولة هذا المشروع طريقة رائعة للبدء في البرمجة المضمنة ونأمل أن توفر فهمًا أفضل لكيفية عمل الكمبيوتر.

ماذا تحتاج؟

المعدات

  • Raspberry PI 3
  • بطاقة SD محملة مسبقًا بصورة قابلة للتمهيد
  • اللوح
  • ذكر الأسلاك الطائر أنثى
  • ذكر الأسلاك الطائر ذكر
  • قاد
  • 220 أوم المقاوم (لا يجب أن يكون 220 أوم بالضبط ، معظم أي مقاوم سيعمل)
  • بطاقة sd صغيرة
  • بطاقة sd صغيرة محملة مسبقًا بنظام تشغيل raspberry pi (عادةً ما يتم تضمينها مع pi)

برمجة

  • مترجم دول مجلس التعاون الخليجي
  • سلسلة أدوات جنو المضمنة
  • محرر النص
  • منسق بطاقة sd

حسنًا ، لنبدأ!

الخطوة 1: ضبط الأشياء / الأشياء

ضبط الأشياء / الأشياء
ضبط الأشياء / الأشياء

حسنًا … الخطوة الأولى هي الحصول على الأجهزة. يمكنك شراء الأجزاء بشكل منفصل أو هناك مجموعة تأتي مع أكثر من أجزاء كافية. حلقة الوصل

تأتي هذه المجموعة مع كل ما هو مطلوب لإعداد Raspberry pi 3 والمزيد! الشيء الوحيد غير المتضمن في هذه المجموعة هو بطاقة sd صغيرة إضافية. انتظر! لا تشتري واحدة أخرى بعد. إذا كنت لا تخطط لاستخدام تثبيت Linux الذي تم تحميله مسبقًا على البطاقة ، فما عليك سوى نسخ محتويات بطاقة sd المصغرة المضمنة لاحقًا وإعادة تهيئة البطاقة (المزيد حول ذلك لاحقًا). ملاحظة مهمة: تأكد من الاحتفاظ بالملفات على البطاقة المضمنة التي ستحتاج إليها لاحقًا!

بعد ذلك ، حان وقت إعداد البرنامج. لن يتضمن هذا البرنامج التعليمي إرشادات مفصلة حول كيفية تثبيت البرنامج. هناك العديد من الموارد والبرامج التعليمية عبر الإنترنت حول كيفية تثبيت هذه:

مستخدمو WINDOWS:

قم بتنزيل وتثبيت gcc

بعد ذلك ، قم بتنزيل وتثبيت سلسلة أدوات GNU ARM المضمنة

لينوكس / ماك

  • توزيعات لينكس تأتي مع دول مجلس التعاون الخليجي مثبتة مسبقا
  • قم بتنزيل وتثبيت GNU ARM toolchain.

حسنًا ، إذا سارت الأمور على ما يرام ، فيجب أن تكون قادرًا على فتح الجهاز الطرفي (لينكس / ماك) أو خط cmd (ويندوز) ومحاولة الكتابة

arm-none-eabi-gcc

يجب أن يبدو الإخراج مشابهًا للصورة الأولى. هذا فقط للتحقق من أنه تم تثبيته بشكل صحيح.

حسنًا الآن بعد أن أصبحت المتطلبات المسبقة بعيدة عن الطريق ، فقد حان الوقت للبدء في الأشياء الممتعة.

الخطوة الثانية: الدائرة

دائرة كهربائية
دائرة كهربائية
دائرة كهربائية
دائرة كهربائية
دائرة كهربائية
دائرة كهربائية

وقت الحلبة! الدائرة لهذا بسيط. سنقوم بتوصيل الصمام بـ GPIO 21 (دبوس 40) على pi (انظر الصورة 2 و 3). يتم توصيل المقاوم أيضًا في سلسلة لمنع تلف الصمام. سيتم توصيل المقاوم بالعمود السالب على اللوح الذي سيتم توصيله بـ GND (دبوس 39) على pi. عند توصيل المصباح ، تأكد من توصيل الطرف القصير بالجانب السلبي. انظر الى الصورة الاخيرة

الخطوة 3: ميني SD قابل للتمهيد

ميني SD قابل للتمهيد
ميني SD قابل للتمهيد
ميني SD قابل للتمهيد
ميني SD قابل للتمهيد
ميني SD قابل للتمهيد
ميني SD قابل للتمهيد

هناك ثلاث خطوات لجعل pi 3 يتعرف على بطاقة sd الصغيرة الفارغة. نحتاج إلى البحث عن bootcode.bin و start.elf و fixup.dat ونسخه. يمكنك الحصول على هذه الملفات على بطاقة sd المصغرة المضمنة إذا اشتريت canakit أو صنعت بطاقة sd قابلة للتمهيد لـ pi 3 مع توزيع Linux. في كلتا الحالتين ، تكون هذه الملفات ضرورية للسماح لـ pi بالتعرف على بطاقة sd كجهاز قابل للتمهيد. بعد ذلك ، قم بتنسيق mini sd إلى fat32 (تأتي معظم بطاقات sd المصغرة منسقة في fat32. لقد استخدمت بطاقة 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

تحقق من ميني SD
تحقق من ميني SD
تحقق من ميني SD
تحقق من ميني SD

حسنًا ، لدينا بطاقة sd صغيرة قابلة للتمهيد ، ونأمل أن يكون لديك pi 3 في هذه المرحلة. لذا يجب علينا الآن اختباره للتأكد من أن pi 3 يتعرف على بطاقة mini sd على أنها قابلة للتمهيد.

على pi ، بالقرب من منفذ USB الصغير ، يوجد مصباحان صغيران. واحد أحمر. هذا هو مؤشر الطاقة. عندما يتلقى pi الطاقة ، يجب أن يكون هذا الضوء مضاءً. لذلك إذا قمت بتوصيل pi الخاص بك الآن بدون بطاقة sd صغيرة ، فيجب أن يضيء باللون الأحمر. حسنًا الآن افصل pi الخاص بك وأدخل بطاقة sd المصغرة القابلة للتمهيد التي تم إنشاؤها في الخطوة السابقة وقم بتوصيل pi. هل ترى ضوءًا آخر؟ يجب أن يكون هناك ضوء أخضر ، بجوار الضوء الأحمر ، يشير إلى أنه يقرأ بطاقة sd. هذا الصمام يسمى ACT بقيادة الولايات المتحدة. سيضيء عند إدخال بطاقة sd قابلة للتطبيق. سيومض عند الوصول إلى بطاقة sd المصغرة.

حسنًا ، كان من المفترض حدوث شيئين بعد إدخال بطاقة sd المصغرة القابلة للتمهيد وتوصيل pi:

  1. يجب أن يضيء المصباح الأحمر للإشارة إلى استقبال الطاقة
  2. يجب أن يضيء المصباح الأخضر للإشارة إلى أنه قد تم تمهيده في بطاقة الذاكرة الرقمية المؤمنة المصغرة

إذا حدث خطأ ما ، فحاول تكرار الخطوات السابقة أو انقر فوق الارتباط أدناه للحصول على مزيد من المعلومات.

الرابط هنا هو مرجع جيد.

الخطوة 5: CODE1

هذا المشروع مكتوب بلغة التجميع ARM. من المفترض أن يكون لديك فهم أساسي لتجميع ARM في هذا البرنامج التعليمي ، ولكن إليك بعض الأشياء التي يجب أن تعرفها:

.equ: يعين قيمة لرمز ، أي abc.equ 5 abc يمثل الآن خمسة

  • ldr: تحميل من الذاكرة
  • str: يكتب في الذاكرة
  • cmp: يقارن بين قيمتين عن طريق إجراء عملية طرح. يضع الأعلام.
  • ب: فرع للتسمية
  • add: إجراء العمليات الحسابية

إذا لم يكن لديك أي خبرة في تجميع الذراع ، شاهد هذا الفيديو. سوف يمنحك فهمًا جيدًا للغة تجميع الذراع.

حسنًا ، لدينا الآن دائرة متصلة بـ raspberry pi 3 ولدينا بطاقة sd يتعرف عليها pi ، لذا فإن مهمتنا التالية هي معرفة كيفية التفاعل مع الدائرة عن طريق تحميل pi ببرنامج قابل للتنفيذ. بشكل عام ، ما يتعين علينا القيام به هو إخبار pi بإخراج جهد من GPIO 21 (دبوس متصل بالسلك الأحمر). ثم نحتاج إلى طريقة لتبديل المصباح لجعله يومض. للقيام بذلك نحتاج إلى مزيد من المعلومات. في هذه المرحلة ، ليس لدينا أي فكرة عن كيفية إخبار 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

يسجل Raspberry pi 3 53 للتحكم في دبابيس الإخراج / الإدخال (الأجهزة الطرفية). يتم تجميع الدبابيس معًا ويتم تخصيص سجل لكل مجموعة. بالنسبة إلى GPIO ، نحتاج إلى أن نكون قادرين على الوصول إلى سجلات SELECT و SET register و CLEAR. للوصول إلى هذه السجلات ، نحتاج إلى العناوين الفعلية لهذه السجلات. عندما تقرأ ورقة البيانات ، فأنت تريد فقط ملاحظة إزاحة العنوان (لو بايت) وإضافة ذلك إلى العنوان الأساسي. يجب عليك القيام بذلك لأن ورقة البيانات تسرد عنوان Linux الظاهري الذي يمثل في الأساس قيمًا تعيّنها أنظمة التشغيل. نحن لا نستخدم نظام تشغيل لذلك نحن بحاجة للوصول إلى هذه السجلات مباشرة باستخدام العنوان الفعلي. لهذا تحتاج المعلومات التالية:

  • العنوان الأساسي للأجهزة الطرفية: 0x3f200000. يقول ملف pdf (الصفحة 6) أن العنوان الأساسي هو 0x3f000000 ، ومع ذلك ، لن يعمل هذا العنوان. استخدم 0x3f200000
  • إزاحة FSEL2 (SELECT) ليس العنوان الكامل للسجل. يسرد ملف pdf FSEL2 على 0x7E20008 ولكن هذا العنوان يشير إلى عنوان Linux الظاهري. ستكون الإزاحة هي نفسها ، وهذا ما نريد أن نلاحظه. 0x08
  • إزاحة GPSET0 (SET): 0x1c
  • إزاحة GPCLR0 (CLEAR): 0x28

لذلك ربما لاحظت أن ورقة البيانات تسرد 4 سجلات SELECT ، وسجلا SET ، وسجلا 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 ، يجب تعيين البت 21 في SET0 و CLR0.

حسنًا ، لقد تحدثنا عن كيفية الوصول إلى هذه السجلات ، ولكن ماذا يعني ذلك كله؟

  • سيتم استخدام سجل FSEL2 لضبط GPIO 21 على الإخراج. لتعيين دبوس للإخراج ، يلزمك تعيين بت ترتيب lo للبتات الثلاث على 1. لذا إذا كانت وحدات البت 3-5 تتحكم في GPIO 21 ، فهذا يعني أننا بحاجة إلى ضبط البتة الأولى ، البتة 3 إلى 1. هذا سيخبر pi أننا نريد استخدام GPIO 21 كمخرج. لذا ، إذا نظرنا إلى 3 بتات لـ GPIO 21 ، فيجب أن تبدو هكذا بعد أن قمنا بتعيينها على الإخراج ، b001.
  • يخبر GPSET0 pi بتشغيل الدبوس (إخراج جهد كهربائي). للقيام بذلك ، نقوم فقط بتبديل الجزء الذي يتوافق مع دبوس GPIO الذي نريده. في حالتنا ، بت 21.
  • يخبر GPCLR0 pi بإيقاف تشغيل الدبوس (بدون جهد). لإيقاف تشغيل الدبوس ، اضبط البت على دبوس GPIO المقابل. في حالتنا بت 21

قبل أن نصل إلى المصباح الوامض ، دعنا أولاً نصنع برنامجًا بسيطًا يعمل ببساطة على تشغيل المصباح.

للبدء ، نحتاج إلى إضافة توجيهين إلى أعلى شفرة المصدر الخاصة بنا.

  • . القسم.init يخبر pi أين تضع الكود
  • .global _start

بعد ذلك ، نحتاج إلى تخطيط جميع العناوين التي سنستخدمها. استخدمequ. لتعيين رموز قابلة للقراءة للقيم.

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

الآن سنقوم بإنشاء أقنعة لتعيين البتات التي نحتاج إلى ضبطها.

  • .equ SET_BIT3، 0x08 سيؤدي هذا إلى تعيين البت الثالث 0000_1000
  • .equ SET_BIT21، 0x200000

ثم نحتاج إلى إضافة تسمية _start الخاصة بنا

_بداية:

تحميل العنوان الأساسي في التسجيل

ldr r0 = القاعدة

الآن نحن بحاجة إلى تعيين 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 تشغيله.

  • قم بتنزيل makefile و kernel.ld المرفقين وإذا كنت تريد الكود المصدري لـ turn_led_on.s.
  • ضع كل الملفات في نفس المجلد.
  • إذا كنت تستخدم شفرة المصدر الخاصة بك ، فقم بتحرير ملف makefile واستبدل الكود = turn_led_on.s بالشفرة =.s
  • احفظ ملف makefile.
  • استخدم Terminal (linux) أو نافذة cmd (windows) للانتقال إلى مجلدك الذي يحتوي على الملفات واكتب make واضغط على enter
  • يجب أن يُنشئ ملف الإنشاء ملفًا يسمى kernel.img
  • انسخ kernel.img إلى بطاقة sd المصغرة. يجب أن تكون محتويات البطاقات كما هي في الصورة (صورة 3): bootcode.bin و start.elf و fixup.dat و kernel.img.
  • أخرج بطاقة sd المصغرة وأدخلها في pi
  • قم بتوصيل pi بمصدر الطاقة
  • يجب أن يضيء LED !!!

ملاحظة مهمة قليلاً: من الواضح أن التعليمات واجهت مشكلة مع ملف makefile الذي لا يحتوي على امتداد ، لذلك أعدت تحميله بامتداد.txt. يرجى إزالة الامتداد عند تنزيله حتى يعمل بشكل صحيح.

موصى به: