فهرست مطالب:

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 مرحله
تصویری: $5 WiFi Camera Setup | ESP32 Wifi Setup view on Mobile phone 2024, جولای
Anonim
Bare Metal Raspberry Pi 3: LED چشمک زن
Bare Metal Raspberry Pi 3: LED چشمک زن

بیشتر توسط نویسنده دنبال کنید:

دکمه فشاری رزبری پای با LED های فلزی برهنه
دکمه فشاری رزبری پای با LED های فلزی برهنه
دکمه فشاری رزبری پای با LED های فلزی برهنه
دکمه فشاری رزبری پای با LED های فلزی برهنه
جعبه ها
جعبه ها
جعبه ها
جعبه ها
چگونه می توان یک نقش برجسته برای روز جانبازان ساخت
چگونه می توان یک نقش برجسته برای روز جانبازان ساخت
چگونه می توان یک نقش برجسته برای روز جانبازان ساخت
چگونه می توان یک نقش برجسته برای روز جانبازان ساخت

درباره:.oO0Oo. اطلاعات بیشتر درباره قالب پیتزا »

به آموزش BARE METAL pi 3 چشمک زن LED خوش آمدید!

در این آموزش ما مراحل را از ابتدا تا انتها طی می کنیم تا با استفاده از Raspberry PI 3 ، یک صفحه نان ، یک مقاومت ، یک led و یک کارت SD خالی چشمک بزنید.

بنابراین BARE METAL چیست؟ BARE METAL بدون برنامه نویسی است. فلز برهنه به این معنی است که ما کاملاً در کنترل آنچه کامپیوتر تا بیت انجام می دهد ، داریم. بنابراین اساساً به این معنی است که کد با استفاده از مجموعه دستور Arm به طور کامل در اسمبلی نوشته می شود. در پایان ما برنامه ای ایجاد کرده ایم که با دسترسی به آدرس فیزیکی یکی از پین های GPIO رزبری پای و پیکربندی خروجی و سپس روشن و خاموش کردن آن ، یک LED را چشمک می زند. تلاش برای انجام این پروژه ، راهی عالی برای شروع برنامه نویسی تعبیه شده است و امیدوارم درک بهتری از نحوه عملکرد رایانه ارائه دهد.

چه چیزی نیاز دارید؟

سخت افزار

  • تمشک PI 3
  • کارت SD از قبل بارگذاری شده با یک تصویر قابل بوت
  • تخته نان
  • سیمهای جهنده زن نر
  • سیمهای جهنده نر نر
  • رهبری
  • مقاومت 220 اهم (لازم نیست دقیقاً 220 اهم باشد ، اکثر مقاومتها کار می کنند)
  • مینی کارت SD
  • مینی کارت SD از قبل بارگذاری شده با سیستم عامل تمشک pi (معمولاً همراه pi)

نرم افزار

  • کامپایلر GCC
  • زنجیره ابزار تعبیه شده در GNU
  • ویرایشگر متن
  • قالب بندی کارت SD

خوب اجازه دهید شروع کنیم!

مرحله 1: تنظیم موارد یا کارها

تنظیم چیزها/سرقت
تنظیم چیزها/سرقت

بسیار خوب … اولین قدم دستیابی به سخت افزار است. می توانید قطعات را جداگانه بخرید یا کیتی وجود دارد که بیش از قطعات کافی دارد. ارتباط دادن

این کیت با همه چیز مورد نیاز برای راه اندازی رزبری pi 3 و بیشتر همراه است! تنها چیزی که در این کیت گنجانده نشده یک مینی کارت SD اضافی است. صبر کن! هنوز یکی دیگر نخرید اگر قصد استفاده از نصب لینوکس را ندارید که روی کارت بارگذاری شده است ، فقط محتویات کارت SD کوچک موجود را کپی کنید و کارت را مجدداً قالب بندی کنید (بعداً بیشتر). نکته مهم: اطمینان حاصل کنید که فایلها را روی کارت گنجانده شده نگه دارید تا بعداً به آنها نیاز داشته باشید!

بعد نوبت به راه اندازی نرم افزار می رسد. این آموزش شامل دستورالعمل های دقیق نحوه نصب نرم افزار نخواهد بود. منابع و آموزش های زیادی در مورد نحوه نصب این موارد وجود دارد:

کاربران ویندوز:

gcc را بارگیری و نصب کنید

در مرحله بعد ، زنجیره ابزار تعبیه شده GNU ARM را بارگیری و نصب کنید

لینوکس/مک

  • توزیع های لینوکس با gcc از پیش نصب شده همراه است
  • ابزارک جاسازی شده GNU ARM را بارگیری و نصب کنید.

خوب اگر همه چیز خوب پیش رفت ، باید بتوانید ترمینال (linux/mac) یا cmd (پنجره ها) را باز کرده و تایپ کنید

arm-none-eabi-gcc

خروجی باید شبیه تصویر اول باشد. این فقط برای اطمینان از صحت نصب شدن آن است.

خوب اکنون که پیش نیازها از بین رفته اند ، وقت آن است که با موارد سرگرم کننده شروع کنیم.

مرحله 2: مدار

جریان
جریان
جریان
جریان
جریان
جریان

زمان مدار! مدار برای این کار ساده است. یک led را به GPIO 21 (پین 40) در pi متصل می کنیم (به تصویر 2 و 3 مراجعه کنید). همچنین یک مقاومت به صورت سری به هم متصل شده است تا از آسیب دیدن لید جلوگیری شود. مقاومت به ستون منفی روی تخته نان متصل می شود که در pi به GND (پایه 39) متصل می شود. هنگام اتصال 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 را پیدا کرده و کپی کنیم. اگر canakit را خریداری کرده اید یا یک کارت sd قابل بوت برای pi 3 با توزیع لینوکس تهیه کرده اید ، می توانید این فایل ها را دریافت کنید. در هر صورت این فایل ها ضروری هستند تا pi بتواند کارت sd را به عنوان یک دستگاه قابل بوت تشخیص دهد. در مرحله بعد ، mini sd را به fat32 فرمت کنید (اکثر کارت های mini sd با فرمت fat32 ارائه می شوند. من از یک کارت SD ارزان mini از 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 را بوت قابل تشخیص می داند.

در pi ، در نزدیکی درگاه USB کوچک ، دو عدد led کوچک وجود دارد. یکی قرمز است. این نشانگر قدرت است. هنگامی که pi نیرو دریافت می کند ، این چراغ باید روشن باشد. بنابراین اگر pi خود را در حال حاضر بدون کارت SD کوچک وصل می کنید ، باید قرمز روشن شود. خوب حالا pi خود را از برق بکشید و mini sd کارت قابل بوت خود را که در مرحله قبل ایجاد شده بود قرار دهید و pi را وصل کنید. آیا چراغ دیگری می بینید؟ باید یک چراغ سبز ، درست در کنار چراغ قرمز وجود داشته باشد که نشان می دهد کارت SD را می خواند. به این led ACT led گفته می شود. هنگامی که یک کارت sd مناسب وارد شده باشد ، روشن می شود. هنگام دسترسی به کارت SD کوچک شما چشمک می زند.

خوب پس از اینکه کارت sd قابل بوت را وارد کردید و pi را به برق وصل کردید ، دو اتفاق باید رخ می داد:

  1. چراغ قرمز باید روشن باشد که نشان دهنده قدرت دریافت است
  2. چراغ سبز باید روشن باشد که نشان می دهد در کارت mini sd بوت شده است

اگر مشکلی پیش آمد مراحل قبلی را تکرار کنید یا برای اطلاعات بیشتر روی پیوند زیر کلیک کنید.

پیوند اینجا مرجع خوبی است.

مرحله 5: CODE1

این پروژه به زبان اسمبلی ARM نوشته شده است. در این آموزش یک درک اساسی از مونتاژ ARM فرض شده است ، اما در اینجا چند نکته است که باید بدانید:

.equ: به نمادی یعنی abc مقداری اختصاص می دهد. Equ 5 abc در حال حاضر نشان دهنده پنج است

  • ldr: از حافظه بارگیری می شود
  • str: به حافظه می نویسد
  • cmp: با انجام یک تفریق دو مقدار را مقایسه می کند. پرچم ها را تنظیم می کند.
  • ب: شاخه به برچسب
  • add: حسابی را انجام می دهد

اگر هیچ تجربه ای در زمینه مونتاژ بازو ندارید این ویدیو را تماشا کنید. این به شما درک خوبی از زبان اسمبلی 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: 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) را یادداشت کرده و آن را به آدرس اصلی اضافه کنید. شما باید این کار را انجام دهید زیرا برگه داده آدرس مجازی linux را فهرست می کند که اساساً مقادیری هستند که سیستم عامل ها به آن اختصاص می دهند. ما از سیستم عامل استفاده نمی کنیم بنابراین باید مستقیماً با استفاده از آدرس فیزیکی به این رجیسترها دسترسی پیدا کنیم. برای این کار به اطلاعات زیر نیاز دارید:

  • آدرس اصلی لوازم جانبی: 0x3f200000. pdf (صفحه 6) می گوید که آدرس اصلی 0x3f000000 است ، با این حال ، این آدرس کار نمی کند. از 0x3f200000 استفاده کنید
  • افست FSEL2 (SELECT) آدرس کامل ثبت نام نیست. فایل پی دی اف 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 را کنترل می کند. برای کنترل GPIO 21 شما باید بیت 21 را در SET0 و CLR0 تنظیم کنید.

خوب ، ما در مورد نحوه دسترسی به این رجیسترها صحبت کردیم ، اما این همه به چه معناست؟

  • برای تنظیم GPIO 21 روی خروجی ، از ثبت FSEL2 استفاده می شود. برای تنظیم یک پین به خروجی ، باید بیت سفارش lo را از سه بیت روی 1 تنظیم کنید. بنابراین اگر بیت های 3-5 GPIO 21 را کنترل کنند ، این بدان معناست که ما باید بیت اول ، بیت 3 را به 1 تنظیم کنیم. این به پی نشان می دهد که می خواهیم از GPIO 21 به عنوان خروجی استفاده کنیم. بنابراین اگر بخواهیم 3 بیت GPIO 21 را بررسی کنیم ، پس از تنظیم خروجی b001 ، باید به این شکل باشد.
  • GPSET0 به pi می گوید پین را روشن کنید (ولتاژ خروجی). برای انجام این کار ، ما فقط بیتی را که با پین GPIO مورد نظر ما مطابقت دارد تغییر می دهیم. در مورد ما ، مورد بیت 21.
  • GPCLR0 به pi می گوید پین را خاموش کنید (بدون ولتاژ). برای خاموش کردن پین ، بیت را روی پین GPIO مربوطه تنظیم کنید. در مورد ما بیت 21

قبل از رسیدن به یک چراغ چشمک زن ، ابتدا اجازه دهید یک برنامه ساده بسازیم که به سادگی led را روشن کند.

برای شروع باید دو دستورالعمل را به بالای کد منبع خود اضافه کنیم.

  • .section.init به pi می گوید که کد را کجا قرار دهد
  • .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 بتواند آن را اجرا کند.

  • makefile پیوست شده و kernel.ld و در صورت تمایل کد منبع turn_led_on.s را بارگیری کنید.
  • همه فایلها را در یک پوشه قرار دهید.
  • اگر از کد منبع خود استفاده می کنید makefile را ویرایش کرده و کد = turn_led_on.s را با کد =.s جایگزین کنید
  • فایل makefile را ذخیره کنید
  • از ترمینال (لینوکس) یا پنجره cmd (ویندوز) برای رفتن به پوشه خود حاوی فایلها استفاده کنید و تایپ کنید و Enter را بزنید
  • فایل make باید فایلی به نام kernel.img ایجاد کند
  • kernel.img را روی کارت SD کوچک خود کپی کنید. محتویات کارت های شما باید مطابق تصویر (تصویر 3) باشد: bootcode.bin ، start.elf ، fixup.dat و kernel.img.
  • کارت mini sd را خارج کرده و آن را در pi وارد کنید
  • پی را به منبع تغذیه وصل کنید
  • LED باید روشن شود !!!

نکته بسیار مهم: ظاهراً دستورالعمل ها مشکلی با نداشتن پسوند makefile داشتند ، بنابراین مجدداً آن را با پسوند.txt بارگذاری کردم. لطفاً هنگام بارگیری برنامه افزودنی را حذف کنید تا به درستی کار کند.

توصیه شده: