Mündəricat:

Çılpaq Metal Raspberry Pi 3: yanıb -sönən LED: 8 addım
Çılpaq Metal Raspberry Pi 3: yanıb -sönən LED: 8 addım

Video: Çılpaq Metal Raspberry Pi 3: yanıb -sönən LED: 8 addım

Video: Çılpaq Metal Raspberry Pi 3: yanıb -sönən LED: 8 addım
Video: 20 товаров для автомобиля с Алиэкспресс, автотовары №29 2024, Noyabr
Anonim
Çılpaq Metal Raspberry Pi 3: yanıb -sönən LED
Çılpaq Metal Raspberry Pi 3: yanıb -sönən LED

Müəllif tərəfindən daha çox izləyin:

Çılpaq Metal LEDli Raspberry Pi Push Button
Çılpaq Metal LEDli Raspberry Pi Push Button
Çılpaq Metal LEDli Raspberry Pi Push Button
Çılpaq Metal LEDli Raspberry Pi Push Button
Sandıqlar
Sandıqlar
Sandıqlar
Sandıqlar
Veteranlar Günü üçün Bir Rölyef Oyma necə etmək olar
Veteranlar Günü üçün Bir Rölyef Oyma necə etmək olar
Veteranlar Günü üçün Bir Rölyef Oyma necə etmək olar
Veteranlar Günü üçün Bir Rölyef Oyma necə etmək olar

Haqqında:.oO0Oo. Moldypizza haqqında daha çox »

BARE METAL pi 3 Blinking LED dərsinə xoş gəldiniz!

Bu təlimatda, Raspberry PI 3, bir çörək taxtası, bir rezistor, bir LED və boş bir SD kart istifadə edərək LED -in yanıb -sönməsini əldə etmək üçün əvvəldən sona qədər addımlardan keçəcəyik.

BARE METAL nədir? BARE METAL heç bir fırıldaqçı proqramlaşdırma deyil. Çılpaq metal, kompüterin sonuna qədər nə edəcəyinə tam nəzarət etdiyimiz deməkdir. Beləliklə, bu, kodun Arm təlimat dəstindən istifadə edərək tamamilə montaj şəklində yazılacağı deməkdir. Sonda, Raspberry Pi -nin GPIO sancaqlarından birinin fiziki ünvanına daxil olaraq çıxışı konfiqurasiya edərək açaraq söndürərək bir LED -i yandıran bir proqram yaradacağıq. Bu layihəni sınamaq, quraşdırılmış proqramlaşdırmaya başlamaq və inşallah kompüterin necə işlədiyini daha yaxşı başa düşmək üçün əla bir yoldur.

Sənə nə lazımdır?

Avadanlıq

  • Moruq PI 3
  • Önyüklenebilir bir şəkil ilə əvvəlcədən yüklənmiş SD kart
  • Çörək lövhəsi
  • Kişi dişi tullanan tellər
  • Kişi Kişi tullanan tellər
  • LED
  • 220 ohm müqavimət (tam 220 ohm olmaq məcburiyyətində deyil, əksər rezistorlar işləyəcək)
  • mini sd kart
  • əvvəlcədən moruq pi əməliyyat sistemi ilə yüklənmiş mini sd kart (adətən pi ilə birlikdə verilir)

Proqram təminatı

  • GCC tərtibçisi
  • GNU quraşdırılmış alət zənciri
  • mətn redaktoru
  • sd kart formatlayıcı

Tamam, BAŞLAYIN!

Addım 1: ŞEYLERİN AYARLANMASI/STUFF UP

ŞEYLERİN AYARLANMASI/ƏŞYALAR
ŞEYLERİN AYARLANMASI/ƏŞYALAR

Tamam … ilk addım hardware əldə etməkdir. Parçaları ayrıca satın ala bilərsiniz və ya kifayət qədər hissədən çox olan bir dəst var. BAXIN

Bu dəstə moruq pi 3 və daha çoxunu qurmaq üçün lazım olan hər şeylə gəlir! bu dəstə daxil olmayan yeganə şey əlavə mini sd kartdır. Gözləmək! Başqa birini hələ almayın. Karta əvvəlcədən yüklənmiş linux qurğusunu istifadə etməyi planlaşdırmırsınızsa, daxil olan mini sd kartın məzmununu daha sonra kopyalayın və kartı yenidən formatlayın (daha sonra bu barədə). ƏHƏMİYYƏTLİ DİQQƏT: Daxil olan kartdakı faylları saxladığınızdan əmin olun, sonra ehtiyacınız olacaq!

Sonra proqramı qurmağın vaxtı gəldi. Bu dərslikdə proqramın necə qurulacağına dair ətraflı təlimatlar daxil olmayacaq. Bunları necə quracağınıza dair bir çox onlayn resurs və dərslər var:

WINDOWS İSTİFADƏÇİLƏRİ:

Gcc yükləyin və quraşdırın

Sonra GNU ARM quraşdırılmış alət zəncirini yükləyin və quraşdırın

LINUX/MAC

  • Linux paylamaları əvvəlcədən quraşdırılmış gcc ilə gəlir
  • GNU ARM quraşdırılmış alət zəncirini yükləyin və quraşdırın.

Yaxşı, hər şey yaxşı olarsa, terminalı (linux/mac) və ya cmd xəttini (pəncərələr) açıb yazmağa çalışmalısınız.

qol-heç-eabi-gcc

Çıxış ilk şəkilə bənzəməlidir. Bu, düzgün quraşdırıldığını yoxlamaq üçündür.

Pekala, ilkin şərtlər getmir, əyləncəli işlərə başlamağın vaxtı gəldi.

Addım 2: CURCUIT

Dairə
Dairə
Dairə
Dairə
Dairə
Dairə

Dövrə vaxtı! Bunun üçün sxem sadədir. Pi -də GPIO 21 -ə (pin 40) bir LED bağlayacağıq (şəkil 2 və 3 -ə baxın). Ledin zədələnməməsi üçün bir rezistor da ardıcıl olaraq bağlanır. Rezistor çörək lövhəsindəki GND (pin 39) ilə pi üzərində bağlanacaq mənfi sütuna bağlanacaq. Led bağlayarkən qısa ucunu mənfi tərəfə bağladığınızdan əmin olun. Son şəkilə baxın

Addım 3: BOOTABLE Mini SD

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

Pi 3 -ün boş mini sd kartınızı tanıması üçün üç addım var. Bootcode.bin, start.elf və fixup.dat tapıb kopyalamalıyıq. Canakit satın almış olsanız və ya linux paylanması ilə pi 3 üçün önyüklenebilir bir sd kartı hazırlasanız, bu faylları daxil olan mini sd kartına əldə edə bilərsiniz. Hər halda, bu sənədlər pi -nin sd kartı önyüklenebilir bir cihaz olaraq tanımasına icazə vermək üçün lazımdır. Sonra mini sd -ni fat32 -ə format edin (əksər mini sd kartlar fat32 -də formatlanır. Sandisk -dən ucuz mini sd kart istifadə etdim), bootcode.bin, start.elf, fixup.dat -ı sd kartın üzərinə köçürün. Və bitirdin! Tamam bir dəfə daha və şəkillər sırasına görə addımlar:

  1. Bootcode.bin, start.elf, fixup.dat tapın.
  2. SD kartınızın fat32 formatında olduğundan əmin olun.
  3. Bootcode.bin, start.elf və fixup.dat fayllarını formatlaşdırılmış sd kartına köçürün.

Bunu necə başa düşdüm, link.

Addım 4: Mini SD -ni yoxlayın

Mini SD -ni yoxlayın
Mini SD -ni yoxlayın
Mini SD -ni yoxlayın
Mini SD -ni yoxlayın

Tamam, önyüklenebilir bir mini sd kartımız var və inşallah bu anda bir pi 3 var. İndi pi 3 -ün mini sd kartı önyüklenebilir olaraq tanıdığını yoxlamaq üçün bunu sınamalıyıq.

Pi üzərində, mini usb portunun yaxınlığında iki kiçik led var. Biri qırmızıdır. Bu güc göstəricisidir. Pi güc alanda bu işıq yanmalıdır. Buna görə də, hazırda heç bir mini sd kartı olmadan pi -ni bağlasanız, qırmızı yanmalıdır. Yaxşı indi pi -nizi ayırın və əvvəlki addımda yaradılmış bootable mini sd kartınızı qoyun və pi -ni qoşun. Başqa bir işıq görürsünüzmü? Sd kartı oxuduğunu göstərən qırmızı işığın yanında yaşıl işıq olmalıdır. Bu led ACT led adlanır. Əlverişli bir sd kartı daxil edildikdə işıqlanacaq. Mini sd kartınıza daxil olduqda yanıb sönəcək.

Yaxşı, önyüklenebilir mini sd kartı daxil edib pi -ni bağladıqdan sonra iki şey olmalı idi:

  1. Qırmızı led işıq qəbul edilməli olduğunu göstərir
  2. Yaşıl led mini sd karta yükləndiyini göstərən işıqlandırılmalıdır

Bir şey səhv olarsa, əvvəlki addımları təkrarlamağa çalışın və ya daha çox məlumat üçün aşağıdakı linki vurun.

Buradakı link yaxşı bir istinaddır.

Addım 5: KOD 1

Bu layihə ARM montaj dilində yazılmışdır. Bu təlimatda ARM montajının əsas anlayışı qəbul edilir, ancaq burada bilməli olduğunuz bir neçə şey var:

.equ: simvola bir dəyər təyin edir, yəni abc.equ 5 abc indi beşi təmsil edir

  • ldr: yaddaşdan yüklənir
  • str: yaddaşa yazır
  • cmp: çıxarılaraq iki dəyəri müqayisə edir. Bayraqları təyin edir.
  • b: etiketləmək üçün filial
  • əlavə et: arifmetik yerinə yetirir

Kol montajı ilə bağlı heç bir təcrübəniz yoxdursa, bu videoya baxın. Bu, silah yığma dilini yaxşı başa düşməyə imkan verəcəkdir.

Yaxşı, indi bizim moruq pi 3 -ə bağlı bir dövrəmiz var və pi -nin tanıdığı bir sd kartımız var, buna görə də növbəti vəzifəmiz pi -ni icra olunan bir proqramla yükləyərək dövrə ilə necə qarşılıqlı əlaqə qurmağı öyrənməkdir. Ümumiyyətlə, etməli olduğumuz şey, pi -yə GPIO 21 -dən (qırmızı telə bağlı pin) bir gərginlik çıxarmasını söyləməkdir. Sonra ledin yanıb -sönməsini təmin etmək üçün onu dəyişdirmə üsuluna ehtiyacımız var. Bunun üçün daha çox məlumata ehtiyacımız var. Bu anda GPIO 21 -ə çıxışa necə deyəcəyimiz barədə heç bir fikrimiz yoxdur, buna görə də məlumat cədvəlini oxumalıyıq. Əksər mikro nəzarətçilərin hər şeyin necə işlədiyini dəqiq göstərən məlumat vərəqləri var. Təəssüf ki, pi 3 -də rəsmi sənədlər yoxdur! Ancaq qeyri-rəsmi bir məlumat vərəqi var. Burada iki bağlantı var:

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

Tamam bu nöqtədə, məlumat vərəqinə baxmaq və hansı məlumatları tapa biləcəyinizi görmək üçün növbəti addıma keçməzdən əvvəl bir neçə dəqiqə çəkməlisiniz.

Addım 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

Moruq pi 3 53, çıxış/giriş pinlərini (ətraf qurğuları) idarə etmək üçün qeydiyyatdan keçir. Sancaqlar birlikdə qruplaşdırılır və hər qrup bir reyestrə təyin edilir. GPIO üçün SELECT reyestrinə, SET reyestrinə və CLEAR qeydlərinə daxil ola bilməliyik. Bu qeydlərə daxil olmaq üçün bu qeydlərin fiziki ünvanlarına ehtiyacımız var. Məlumat vərəqini oxuduğunuz zaman yalnız ünvanın ofsetini (lo bayt) qeyd etmək və onu əsas ünvana əlavə etmək istəyirsiniz. Bunu etmək məcburiyyətindəsiniz, çünki məlumat cədvəli əsasən əməliyyat sistemlərinin təyin etdiyi dəyərlər olan linux virtual ünvanını siyahıya alır. Əməliyyat sistemindən istifadə etmirik, ona görə də fiziki ünvandan istifadə edərək bu qeydlərə birbaşa daxil olmalıyıq. Bunun üçün aşağıdakı məlumatlara ehtiyacınız var:

  • Periferik cihazların əsas ünvanı: 0x3f200000. Pdf (səhifə 6), əsas ünvanın 0x3f000000 olduğunu söyləyir, lakin bu ünvan işləməyəcək. 0x3f200000 istifadə edin
  • FSEL2 ofsetinin (SEÇİM) reyestrin tam ünvanı deyil. Pdf, FSEL2 -ni 0x7E20008 -də sadalayır, lakin bu ünvan linux virtual ünvanına aiddir. Ofset eyni olacaq, buna görə də qeyd etmək istəyirik. 0x08
  • GPSET0 ofset (SET): 0x1c
  • GPCLR0 ofset (CLEAR): 0x28

Yəqin ki, məlumat vərəqində 4 SELECT qeydinin, 2 SET qeydinin və 2 CLEAR qeydinin olduğunu gördünüz, buna görə niyə etdiyimi seçdim? Bunun səbəbi GPIO 21 və FSEL2 GPIO 20-29, SET0 və CLR0 GPIO 0-31 nəzarət sistemlərindən istifadə etməkdir. FSEL qeydləri hər GPIO pin üçün üç bit təyin edir. FSEL2-dən istifadə etdiyimiz üçün 0-2 bit GPIO 20-ni idarə edir və 3-5 bit GPIO 21 və s. Set və CLR qeydləri hər pin üçün bir bit təyin edir. Məsələn, SET0 -da 0 bit və CLR0 GPIO 1 -i idarə edir. GPIO 21 -i idarə etmək üçün SET0 və CLR0 -da bit 21 -i təyin edərdiniz.

Tamam, bu qeydlərə necə daxil olacağımız barədə danışdıq, amma bunların hamısı nə deməkdir?

  • GPIO 21 -in çıxışa qoyulması üçün FSEL2 reyestri istifadə ediləcək. Çıxış üçün bir pin təyin etmək üçün üç bitin lo sırasını 1-ə təyin etməlisiniz. Belə ki, bitlər GPIO 21-ə nəzarət edirsə, bu, ilk biti 3-dən 1-ə təyin etməyimiz deməkdir. GPIO 21 -ni çıxış olaraq istifadə etmək istəyirik. Beləliklə, GPIO 21 üçün 3 bitə baxsaydıq, çıxışı b001 olaraq təyin etdikdən sonra bunlar belə görünməlidir.
  • GPSET0, pi -yə pimi açmağı (gərginlik çıxışı) bildirir. Bunu etmək üçün istədiyimiz GPIO pininə uyğun olan biti dəyişdiririk. Bizim vəziyyətimizdə, bit 21.
  • GPCLR0, pi -yə pimi söndürməsini bildirir (gərginlik yoxdur). Pimi söndürmək üçün biti müvafiq GPIO pininə təyin edin. Bizim vəziyyətimizdə 21 bit

Yanıp sönən bir ledə çatmadan əvvəl, əvvəlcə lampanı açacaq sadə bir proqram hazırlayaq.

Başlamaq üçün mənbə kodumuzun üstünə iki direktiv əlavə etməliyik.

  • .section.init kodu hara qoyacağını pi -yə bildirir
  • .global _start

Sonra, istifadə edəcəyimiz bütün ünvanları düzəltməliyik. Dəyərlərə oxunaqlı simvollar təyin etmək üçün.equ istifadə edin.

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

İndi təyin etməyimiz lazım olan bitləri təyin etmək üçün maskalar hazırlayacağıq.

  • .equ SET_BIT3, 0x08 Bu bit üç 0000_1000 təyin edəcək
  • .equ SET_BIT21, 0x200000

Sonra _start etiketimizi əlavə etməliyik

_başlamaq:

Əsas ünvanı reyestrə yükləyin

ldr r0, = BAZA

İndi bit3 GPFSEL2 qurmalıyıq

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Bu təlimat 0x08 bitini GPFSEL2 ünvanına geri yazmağı söyləyir

Nəhayət, GPSET0 qeydində bit 21 -i təyin edərək GPIO 21 -i işə salmalıyıq

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

Son məhsul şəkildəki koda bənzəməlidir.

Növbəti addım kodu tərtib etmək və pi -nin işləyə biləcəyi bir.img faylı yaratmaqdır.

  • Əlavə edilmiş makefile və kernel.ld yükləyin və turn_led_on.s mənbə kodunu istəyirsinizsə.
  • Bütün faylları eyni qovluğa qoyun.
  • Öz mənbə kodunuzdan istifadə edirsinizsə, makefile faylını redaktə edin və kodu = turn_led_on.s kodunu =.s ilə əvəz edin.
  • Makefile faylını saxla.
  • Faylları olan qovluğa getmək üçün terminal (linux) və ya cmd pəncərəsindən (pəncərələr) istifadə edin və yazın və enter düyməsini basın.
  • Make faylı kernel.img adlı bir fayl yaratmalıdır
  • Kernel.img faylını mini sd kartınıza kopyalayın. Kartlarınızın məzmunu şəkildəki kimi olmalıdır (şəkil 3): bootcode.bin, start.elf, fixup.dat və kernel.img.
  • Mini sd kartı çıxarın və pi -yə daxil edin
  • Pi -ni enerji mənbəyinə qoşun
  • LED yanmalıdır !!!

YAXŞI Vacib Qeyd: Göründüyü kimi, instruksiyaların uzantısının olmaması ilə bağlı problem var idi, buna görə də.txt uzantısı ilə yenidən yüklədim. Zəhmət olmasa uzantının düzgün işləməsi üçün yüklədiyiniz zaman onu silin.

Tövsiyə: