Mundarija:

Yalang'och metall Raspberry Pi 3: miltillovchi LED: 8 qadam
Yalang'och metall Raspberry Pi 3: miltillovchi LED: 8 qadam

Video: Yalang'och metall Raspberry Pi 3: miltillovchi LED: 8 qadam

Video: Yalang'och metall Raspberry Pi 3: miltillovchi LED: 8 qadam
Video: Удивительный карманный компьютер «сделай сам» geeekpi raspberry pi 4 алюминиевый чехол для NAS 2024, Iyul
Anonim
Yalang'och metall Raspberry Pi 3: miltillovchi LED
Yalang'och metall Raspberry Pi 3: miltillovchi LED

Muallif: More by Muallif

Yalang'och metallli LEDli Raspberry Pi tugmasi
Yalang'och metallli LEDli Raspberry Pi tugmasi
Yalang'och metallli LEDli Raspberry Pi tugmasi
Yalang'och metallli LEDli Raspberry Pi tugmasi
Kassalar
Kassalar
Kassalar
Kassalar
Qanday qilib faxriylar kuniga yordam o'ymakorligi qilish kerak
Qanday qilib faxriylar kuniga yordam o'ymakorligi qilish kerak
Qanday qilib faxriylar kuniga yordam o'ymakorligi qilish kerak
Qanday qilib faxriylar kuniga yordam o'ymakorligi qilish kerak

Haqida:.oO0Oo. Moldypizza haqida ko'proq ma'lumot »

BARE METAL pi 3 miltillovchi LED darsligiga xush kelibsiz!

Ushbu qo'llanmada biz Raspberry PI 3, non paneli, qarshilik, etakchi va bo'sh SD -karta yordamida LEDning miltillashi uchun boshidan oxirigacha bosqichlarni o'tamiz.

Xo'sh, BARE METAL nima? BARE METAL - bu noaniq dasturlash. Yalang'och metall degani, biz kompyuterning oxirigacha nima qilishini to'liq nazorat qilamiz. Bu shuni anglatadiki, bu kod Arm buyruqlar to'plamidan foydalangan holda to'liq yig'ilishda yoziladi. Oxir -oqibat biz Raspberry Pi GPIO pinlaridan birining jismoniy manziliga kirish va uni chiqish uchun sozlash, so'ng uni yoqish va o'chirish orqali LEDni yonib -o'chadigan dastur yaratamiz. Ushbu loyihani sinab ko'rish - bu ko'milgan dasturlashni boshlashning ajoyib usuli va umid qilamanki, kompyuter qanday ishlashini yaxshiroq tushunishga yordam beradi.

Sizga nima kerak?

Uskuna

  • Malinali PI 3
  • SD-karta yuklanadigan tasvir bilan oldindan yuklangan
  • Non paneli
  • Erkak ayol o'tish simlari
  • Erkak erkak o'tish simlari
  • LED
  • 220 ohmli rezistor (to'liq 220 ohm bo'lishi shart emas, ko'pchilik qarshilik ishlaydi)
  • mini sd karta
  • oldindan malinali pi operatsion tizimi o'rnatilgan mini sd -karta (odatda pi bilan birga keladi)

Dasturiy ta'minot

  • GCC kompilyatori
  • GNU o'rnatilgan asboblar zanjiri
  • matn muharriri
  • sd kartani formatlashtiruvchi

Xo'sh, boshlaylik!

1 -qadam: NARSALARNI O'RNATISH/STUFF UP

NARSALARNI O'RNATISH/STUFF UP
NARSALARNI O'RNATISH/STUFF UP

Xo'sh, birinchi qadam - qo'shimcha qurilmalarni sotib olish. Siz ehtiyot qismlarni alohida sotib olishingiz mumkin yoki etarli qismlardan iborat to'plam mavjud. ULANISH

Bu to'plam malina pi 3 va undan ko'pini sozlash uchun kerak bo'lgan hamma narsaga ega! bu to'plamga kiritilmagan yagona narsa - bu qo'shimcha sd -karta. Kutmoq! Hozircha boshqasini sotib olmang. Agar siz kartaga oldindan yuklangan linuxni o'rnatishni ishlatishni rejalashtirmasangiz, unda mini sd kartaning tarkibini keyinroq nusxa ko'chiring va kartani qayta formatlang (bu haqda keyinroq). MUHIM ESLATMA: kartadagi fayllarni saqlaganingizga ishonch hosil qiling, keyinroq ularga kerak bo'ladi!

Keyin dasturiy ta'minotni sozlash vaqti keldi. Ushbu qo'llanmada dasturiy ta'minotni o'rnatish bo'yicha batafsil ko'rsatmalar mavjud emas. Internetda ularni o'rnatish bo'yicha ko'plab manbalar va qo'llanmalar mavjud:

WINDOWS foydalanuvchilari:

Gcc -ni yuklab oling va o'rnating

Keyin GNU ARM o'rnatilgan asboblar zanjirini yuklab oling va o'rnating

LINUX/MAC

  • Linux taqsimotlari oldindan o'rnatilgan gcc bilan birga keladi
  • GNU ARM o'rnatilgan asboblar zanjirini yuklab oling va o'rnating.

OK, agar hamma narsa yaxshi bo'lsa, siz terminalni (linux/mac) yoki cmd chizig'ini (derazalarni) ochib, yozishga harakat qilishingiz kerak.

arm-none-eabi-gcc

Chiqish birinchi rasmga o'xshash bo'lishi kerak. Bu faqat uning to'g'ri o'rnatilganligini tekshirish uchun.

Yaxshiyamki, old shartlar yo'q, endi qiziqarli narsalarni boshlash vaqti keldi.

2 -qadam: CIRCUIT

O'RNAK
O'RNAK
O'RNAK
O'RNAK
O'RNAK
O'RNAK

O'chirish vaqti! Buning sxemasi oddiy. Biz LEDni GPIO 21 ga (pin 40) pi ga ulaymiz (2 va 3 -rasmlarga qarang). Led shikastlanmasligi uchun rezistor ketma -ket ulanadi. Rezistor non panelidagi GND (pin 39) ga ulangan manfiy ustunga ulanadi. Ledni ulaganda, qisqa uchini salbiy tomonga ulang. Oxirgi rasmga qarang

3 -qadam: BOOTABLE Mini SD

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

Pi 3 -ni bo'sh sd -kartani tanib olish uchun uchta qadam bor. Biz bootcode.bin, start.elf va fixup.dat fayllarini topib nusxalashimiz kerak. Agar siz kanakitni sotib olgan bo'lsangiz yoki linux taqsimoti bilan pi 3 uchun bootable sd kartasini tayyorlagan bo'lsangiz, siz ushbu fayllarni o'z ichiga olgan mini sd kartaga olishingiz mumkin. Qanday bo'lmasin, bu fayllar pi -ga sd -kartani yuklash qurilmasi sifatida tan olish uchun kerak. Keyin mini sdni fat32 ga formatlang (aksariyat mini sd kartalar fat32 formatida keladi. Men sandiskdan arzon mini sd kartani ishlatardim), bootcode.bin, start.elf, fixup.dat ni sd kartaga o'tkazing. Va tugatdingiz! Yana bir marta va rasmlar ketma -ketligi bo'yicha qadamlar:

  1. Bootcode.bin, start.elf, fixup.dat -ni toping.
  2. SD -kartangiz fat32 formatlanganligiga ishonch hosil qiling.
  3. Bootcode.bin, start.elf va fixup.dat -ni formatlangan sd -kartaga o'tkazing.

Mana men buni qanday tushundim, havola.

4 -qadam: Mini SD -ni tekshiring

Mini SD -ni tekshiring
Mini SD -ni tekshiring
Mini SD -ni tekshiring
Mini SD -ni tekshiring

Yaxshi, bizda yuklanadigan mini sd -karta bor va umid qilamanki, sizda pi 3 bor. Endi biz pi 3 mini sd kartani yuklash mumkin deb tan olishiga ishonch hosil qilish uchun uni sinab ko'rishimiz kerak.

Mini -usb porti yonida, ikkita kichik LED bor. Biri qizil. Bu quvvat ko'rsatkichi. Quvvat olganda, bu chiroq yonishi kerak. Agar siz hozirda mini -sd -kartasiz pi -ni ulasangiz, u qizil rangda yonadi. Xo'sh, endi pi -ni uzing va oldingi qadamda yaratilgan yuklanadigan mini sd -kartani qo'ying va pinni ulang. Boshqa chiroqni ko'ryapsizmi? Qizil chiroq yonida yashil chiroq bo'lishi kerak, bu uning sd -kartani o'qishini ko'rsatadi. Bu LED ACT led deb ataladi. Sd karta o'rnatilgan bo'lsa, u yonadi. Mini -sd -kartangizga kirganda u yonadi.

OK, yuklanadigan mini sd -kartani joylashtirgandan va pi -ni ulaganingizdan keyin ikkita narsa bo'lishi kerak edi:

  1. Qizil LED yoritilgan bo'lishi kerak, bu quvvat qabul qilinishini ko'rsatadi
  2. Yashil LED yoritilgan bo'lishi kerak, bu uning mini sd kartaga o'rnatilganligini ko'rsatadi

Agar biror narsa noto'g'ri bo'lsa, oldingi amallarni takrorlashga harakat qiling yoki qo'shimcha ma'lumot olish uchun quyidagi havolani bosing.

Bu erdagi havola yaxshi havola.

5 -qadam: CODE1

Bu loyiha ARM assambleyasi tilida yozilgan. Ushbu qo'llanmada ARM yig'ish haqida asosiy tushuncha bor, lekin siz bilishingiz kerak bo'lgan bir nechta narsalar:

.equ: belgiga qiymat belgilaydi, ya'ni abc.equ 5 abc endi beshni bildiradi

  • ldr: xotiradan yuklaydi
  • str: xotiraga yozadi
  • cmp: olib tashlash orqali ikkita qiymatni solishtiradi. Bayroqlarni o'rnatadi.
  • b: yorliqqa bo'linish
  • qo'shish: arifmetikani bajaradi

Agar qo'llarni yig'ish bo'yicha tajribangiz bo'lmasa, ushbu videoni tomosha qiling. Bu sizga qurol yig'ish tilini yaxshi tushunishga yordam beradi.

Xo'sh, hozir bizda malina pi 3 ga ulangan sxemamiz bor va bizda pi taniydigan sd -karta bor, shuning uchun bizning keyingi vazifamiz pi -ni bajariladigan dastur bilan yuklash orqali kontaktlarning zanglashini qanday topish mumkin. Umuman olganda, biz pi ga GPIO 21 (qizil simga ulangan pin) dan kuchlanishni chiqarishni aytishimiz kerak. Keyin biz milt -miltni miltillash uchun uni almashtirish usuliga muhtojmiz. Buning uchun bizga qo'shimcha ma'lumot kerak. Hozirgi vaqtda biz GPIO 21 -ni chiqishga qanday aytishni bilmaymiz, shuning uchun biz ma'lumotlar jadvalini o'qishimiz kerak. Ko'pgina mikro-kontrollerlarda hamma narsa qanday ishlashini aniq ko'rsatadigan ma'lumotlar varaqlari mavjud. Afsuski, pi 3 -da rasmiy hujjatlar yo'q! Biroq, norasmiy ma'lumotlar varaqasi mavjud. Mana, unga ikkita havola:

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

Xo'sh, bu vaqtda, keyingi bosqichga o'tishdan bir necha daqiqa oldin, ma'lumot varag'ini ko'rib chiqish va qanday ma'lumotlarni topishingiz mumkinligini bilish kerak.

6 -qadam: 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

Malinali pi 3 53 chiqish/kirish pinlarini (periferiya qurilmalari) boshqarishni qayd qiladi. Pinlar birlashtirilgan va har bir guruh registrga biriktirilgan. GPIO uchun biz SELECT, SET va CLEAR registrlariga kira olamiz. Bu registrlarga kirish uchun bizga bu registrlarning jismoniy manzillari kerak. Ma'lumotlar varag'ini o'qiyotganda, siz faqat manzilning ofsetini (lo bayt) qayd qilib, uni asosiy manzilga qo'shishni xohlaysiz. Siz buni qilishingiz kerak, chunki ma'lumotlar jadvalida Linux operatsion tizimlari belgilaydigan qiymatlar ko'rsatilgan. Biz operatsion tizimdan foydalanmayapmiz, shuning uchun biz to'g'ridan -to'g'ri jismoniy manzil orqali ushbu registrlarga kirishimiz kerak. Buning uchun sizga quyidagi ma'lumotlar kerak bo'ladi:

  • Qo'shimcha qurilmalarning asosiy manzili: 0x3f200000. Pdf (6 -bet), asosiy manzil 0x3f000000 ekanligini aytadi, lekin bu manzil ishlamaydi. 0x3f200000 dan foydalaning
  • FSEL2 ofset (SELECT) registrning to'liq manzili emas. Pdf FSEL2 ni 0x7E20008 da ro'yxatlaydi, lekin bu manzil Linux virtual manziliga ishora qiladi. Ofset bir xil bo'ladi, shuning uchun biz ta'kidlamoqchimiz. 0x08
  • GPSET0 ofset (SET): 0x1c
  • GPCLR0 ofset (CLEAR): 0x28

Ehtimol, siz ma'lumot varaqasida 4 ta SELECT registrlari, 2 ta SET registrlari va 2 ta CLEAR registrlari borligini payqadingiz, shuning uchun men nima uchun men tanlaganimni tanladim? Buning sababi shundaki, biz GPIO 21 va FSEL2 GPIO 20-29, SET0 va CLR0 GPIO 0-31 boshqaruvlarini ishlatmoqchimiz. FSEL registrlari har bir GPIO pin uchun uchta bitni belgilaydi. Biz FSEL2 dan foydalanayotganimiz uchun bu 0-2 bitli GPIO 20 ni boshqaradi va 3-5 bitli GPIO 21 ni boshqaradi va hokazo. Set va CLR registrlari har bir pin uchun bitta bitni belgilaydi. Masalan, SET0 va CLR0 -dagi 0 -bit GPIO -ni boshqaradi. GPIO 21 -ni boshqarish uchun siz SET0 va CLR0 -da 21 -bitni o'rnatasiz.

Xo'sh, biz bu registrlarga qanday kirish haqida gaplashdik, lekin bu nimani anglatadi?

  • GPIO 21 ni chiqishga o'rnatish uchun FSEL2 registri ishlatiladi. Chiqish uchun pin o'rnatish uchun siz uchta bitning tartib tartibini 1 ga o'rnatishingiz kerak. Shunday qilib, agar 3-5 bit GPIO 21 ni boshqarsa, bu biz birinchi bitni 3 bitdan 1 gacha o'rnatishimiz kerakligini bildiradi. GPIO 21 -ni chiqish sifatida ishlatmoqchimiz. Shunday qilib, agar biz GPIO 21 uchun 3 bitni ko'rib chiqmoqchi bo'lsak, biz uni b001 chiqishiga o'rnatganimizdan keyin shunday bo'lishi kerak.
  • GPSET0 pi -ga pinni yoqishni aytadi (kuchlanish chiqishi). Buning uchun biz kerakli GPIO piniga mos keladigan bitni almashtiramiz. Bizning holatda, bit 21.
  • GPCLR0 pi ga pinni o'chirishni aytadi (kuchlanish yo'q). Pinni o'chirish uchun bitni mos keladigan GPIO piniga o'rnating. Bizning holatda 21 bit

Yonib -o'chib turgan chiroqqa etib borishdan oldin, avvalo, chiroqni yoqadigan oddiy dasturni tuzamiz.

Boshlash uchun biz manba kodimizning yuqori qismiga ikkita ko'rsatma qo'shishimiz kerak.

  • .init.init pi kodni qaerga qo'yish kerakligini aytadi
  • .global _start

Keyinchalik, biz foydalanadigan barcha manzillarni joylashtirishimiz kerak. Qiymatlarga o'qiladigan belgilarni belgilash uchun.equ dan foydalaning.

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

Endi biz sozlashimiz kerak bo'lgan bitlarni o'rnatish uchun niqoblar yaratmoqchimiz.

  • .equ SET_BIT3, 0x08 Bu uch bit 0000_1000 ni o'rnatadi
  • teng SET_BIT21, 0x200000

Keyin biz _start yorlig'ini qo'shishimiz kerak

_boshlang:

Ro'yxatga asosiy manzilni yuklang

ldr r0, = BASE

Endi biz GPFSEL2 bit3 ni o'rnatishimiz kerak

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Ushbu yo'riqnomada 0x08 bitni GPFSEL2 manziliga qaytarish yozilgan.

Nihoyat, GPSET0 registrida 21 -bitni o'rnatish orqali GPIO 21 -ni yoqishimiz kerak

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

Yakuniy mahsulot rasmdagi kodga o'xshash bo'lishi kerak.

Keyingi qadam - kodni kompilyatsiya qilish va pi ishlashi mumkin bo'lgan.img faylini yaratish.

  • Biriktirilgan makefile va kernel.ld -ni yuklab oling va agar turn_led_on.s manba kodini xohlasangiz.
  • Barcha fayllarni bitta papkaga joylashtiring.
  • Agar siz o'zingizning manba kodingizdan foydalansangiz, makefile -ni tahrir qiling va = turn_led_on.s kodini kod =.s bilan almashtiring.
  • Makefile faylini saqlang.
  • Fayllarni o'z ichiga olgan papkaga o'tish uchun terminal (linux) yoki cmd oynasidan (derazalar) foydalaning va "enter" tugmasini bosing.
  • Make fayli kernel.img deb nomlangan faylni yaratishi kerak
  • Mini yadro kartangizga kernel.img -ni nusxalash. Sizning kartalaringiz mazmuni rasmdagi kabi bo'lishi kerak (3 -rasm): bootcode.bin, start.elf, fixup.dat va kernel.img.
  • Mini sd -kartani chiqarib oling va uni pi -ga joylashtiring
  • Pini quvvat manbaiga ulang
  • LED yonishi kerak !!!

MUHIM MUHIM QAYD: Ko'rinib turibdiki, instruksiyalarda makefile kengaytmasi yo'qligi bilan bog'liq muammo bor edi, shuning uchun men uni.txt kengaytmasi bilan qayta yukladim. Iltimos, kengaytmani to'g'ri ishlashi uchun uni yuklaganingizda olib tashlang.

Tavsiya: