İçindekiler:

Bare Metal Raspberry Pi 3: Yanıp Sönen LED: 8 Adım
Bare Metal Raspberry Pi 3: Yanıp Sönen LED: 8 Adım

Video: Bare Metal Raspberry Pi 3: Yanıp Sönen LED: 8 Adım

Video: Bare Metal Raspberry Pi 3: Yanıp Sönen LED: 8 Adım
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Kasım
Anonim
Çıplak Metal Raspberry Pi 3: Yanıp Sönen LED
Çıplak Metal Raspberry Pi 3: Yanıp Sönen LED

Moldypizza tarafındanTakip edinYazarın daha fazlası:

LED'li Ahududu Pi Basma Düğmesi Çıplak Metal
LED'li Ahududu Pi Basma Düğmesi Çıplak Metal
LED'li Ahududu Pi Basma Düğmesi Çıplak Metal
LED'li Ahududu Pi Basma Düğmesi Çıplak Metal
kasalar
kasalar
kasalar
kasalar
Gaziler Günü için Oyma Kabartma Nasıl Yapılır
Gaziler Günü için Oyma Kabartma Nasıl Yapılır
Gaziler Günü için Oyma Kabartma Nasıl Yapılır
Gaziler Günü için Oyma Kabartma Nasıl Yapılır

Hakkında:.oO0Oo. Moldypizza Hakkında Daha Fazla Bilgi »

BARE METAL pi 3 Yanıp Sönen LED eğitimine hoş geldiniz!

Bu eğitimde, bir Raspberry PI 3, bir devre tahtası, bir direnç, bir led ve bir boş SD kart kullanarak bir LED'in yanıp sönmesini sağlamak için baştan sona adımlardan geçeceğiz.

Peki BARE METAL nedir? BARE METAL basit bir programlama değildir. Çıplak metal, bilgisayarın ne yapacağını sonuna kadar kontrol ettiğimiz anlamına gelir. Bu, temel olarak, kodun Arm komut seti kullanılarak montajda tamamen yazılacağı anlamına gelir. Sonunda Raspberry Pi'nin GPIO pinlerinden birinin fiziksel adresine erişerek ve onu çıkışa yapılandırarak ve ardından açıp kapatarak bir LED'i yanıp sönecek bir program oluşturmuş olacağız. Bu projeyi denemek, gömülü programlamaya başlamak için harika bir yoldur ve bir bilgisayarın nasıl çalıştığını daha iyi anlamanızı umarız.

Ne istiyorsun?

Donanım

  • Ahududu PI 3
  • Önyüklenebilir bir görüntü ile önceden yüklenmiş SD kart
  • ekmek tahtası
  • Erkek Dişi jumper telleri
  • Erkek Erkek jumper teller
  • LED
  • 220 ohm direnç (tam olarak 220 ohm olması gerekmez, çoğu direnç çalışır)
  • mini sd kart
  • ahududu pi işletim sistemi ile önceden yüklenmiş mini sd kart (genellikle pi ile birlikte verilir)

Yazılım

  • GCC derleyicisi
  • GNU gömülü araç zinciri
  • Metin düzeltici
  • sd kart biçimlendirici

Pekala, BAŞLAYIN!

1. Adım: ŞEYLERİ AYARLAMA/ŞEYLER OLUŞTURMA

AYARLAR/ŞEYLER DÜZENLEME
AYARLAR/ŞEYLER DÜZENLEME

Tamam öyleyse… ilk adım donanıma sahip olmaktır. Parçaları ayrı olarak satın alabilir veya fazlasıyla parça içeren bir kit alabilirsiniz. BAĞLANTI

Bu kit, ahududu pi 3 ve daha fazlasını kurmak için gereken her şeyle birlikte gelir! Bu kite dahil olmayan tek şey ekstra bir mini sd karttır. Beklemek! Henüz başka bir tane satın almayın. Karta önceden yüklenmiş linux kurulumunu kullanmayı düşünmüyorsanız, verilen mini sd kartın içeriğini daha sonra kopyalayın ve kartı yeniden biçimlendirin (daha fazlası için). ÖNEMLİ NOT: Birlikte verilen karttaki dosyaları daha sonra ihtiyacınız olacak şekilde sakladığınızdan emin olun!

Ardından, yazılımı kurmanın zamanı geldi. Bu eğitim, yazılımın nasıl kurulacağına ilişkin ayrıntılı talimatlar içermeyecektir. Bunların nasıl kurulacağına dair çevrimiçi birçok kaynak ve eğitim var:

WINDOWS KULLANICILARI:

gcc'yi indirin ve yükleyin

Ardından, GNU ARM gömülü araç zincirini indirin ve kurun

LINUX/MAC

  • Linux dağıtımları gcc önceden yüklenmiş olarak gelir
  • GNU ARM gömülü araç zincirini indirin ve kurun.

Tamam, her şey yolunda giderse, terminali (linux/mac) veya cmd satırını (windows) açabilmeli ve yazmayı denemelisiniz.

arm-none-eabi-gcc

Çıktı ilk resme benzer görünmelidir. Bu sadece doğru şekilde kurulduğunu doğrulamak içindir.

Pekala, ön koşullar ortadan kalktığına göre, eğlenceli şeylere başlamanın zamanı geldi.

2. Adım: DEVRE

DEVRE
DEVRE
DEVRE
DEVRE
DEVRE
DEVRE

Devre zamanı! Bunun için devre basittir. Pi üzerindeki GPIO 21'e (pin 40) bir led bağlayacağız (bkz. resim 2 ve 3). Ledin zarar görmemesi için seri olarak bir direnç de bağlanmıştır. Direnç, pi üzerindeki GND'ye (pin 39) bağlanacak olan breadboard üzerindeki negatif sütuna bağlanacaktır. Led'i bağlarken kısa ucunu negatif tarafa bağladığınızdan emin olun. son resme bakın

3. Adım: Önyüklenebilir Mini SD

Önyüklenebilir Mini SD
Önyüklenebilir Mini SD
Önyüklenebilir Mini SD
Önyüklenebilir Mini SD
Önyüklenebilir Mini SD
Önyüklenebilir Mini SD

Pi 3'ünüzün boş mini sd kartınızı tanımasını sağlamak için üç adım vardır. Bootcode.bin, start.elf ve fixup.dat'ı bulup kopyalamamız gerekiyor. Canakit'i satın aldıysanız veya linux dağıtımı ile pi 3 için önyüklenebilir bir sd kart yaptıysanız, bu dosyaları birlikte verilen mini sd kartta alabilirsiniz. Her iki durumda da, pi'nin sd kartı önyüklenebilir bir aygıt olarak tanımasını sağlamak için bu dosyalar gereklidir. Ardından, mini sd'yi fat32 olarak biçimlendirin (çoğu mini sd kart fat32 olarak biçimlendirilir. Sandisk'ten ucuz bir mini sd kart kullandım), sd karta bootcode.bin, start.elf, fixup.dat'ı taşıyın. Ve işin bitti! Bir kez daha tamam ve resimlerin sırasına göre adımlar:

  1. bootcode.bin, start.elf, fixup.dat'ı bulun.
  2. SD kartınızın fat32 olarak biçimlendirildiğinden emin olun.
  3. bootcode.bin, start.elf ve fixup.dat dosyalarını biçimlendirilmiş sd karta taşıyın.

İşte bunu nasıl anladım, link.

4. Adım: Mini SD'yi KONTROL EDİN

Mini SD'yi KONTROL ET
Mini SD'yi KONTROL ET
Mini SD'yi KONTROL ET
Mini SD'yi KONTROL ET

Pekala, önyüklenebilir bir mini sd kartımız var ve umarım bu noktada bir pi 3'ünüz olur. Şimdi pi 3'ün mini sd kartı önyüklenebilir olarak tanıdığından emin olmak için test etmeliyiz.

Pi üzerinde, mini usb portunun yanında iki adet küçük led bulunmaktadır. Biri kırmızı. Bu güç göstergesidir. Pi güç alırken bu ışık yanmalıdır. Bu nedenle, pi'nizi mini sd kart olmadan takarsanız, kırmızı renkte yanmalıdır. Tamam, şimdi pi'nizi çıkarın ve önceki adımda oluşturduğunuz önyüklenebilir mini sd kartınızı takın ve pi'yi takın. Başka bir ışık görüyor musunuz? Kırmızı ışığın hemen yanında sd kartı okuduğunu gösteren yeşil bir ışık olmalıdır. Bu led'e ACT led denir. Uygun bir sd kart takıldığında yanacaktır. Mini sd kartınıza erişirken yanıp sönecektir.

Tamam, önyüklenebilir mini sd kartı taktıktan ve pi'yi taktıktan sonra iki şey olması gerekirdi:

  1. Güç alımını gösteren kırmızı led yanmalıdır
  2. Mini sd karta yüklendiğini gösteren yeşil led yanmalıdır.

Bir şeyler ters giderse, önceki adımları tekrarlamayı deneyin veya daha fazla bilgi için aşağıdaki bağlantıya tıklayın.

Buradaki bağlantı iyi bir referanstır.

Adım 5: KOD1

Bu proje ARM Assembly dilinde yazılmıştır. Bu eğitimde ARM montajının temel bir anlayışının olduğu varsayılmaktadır, ancak burada bilmeniz gereken birkaç şey var:

.equ: bir sembole bir değer atar, yani abc.equ 5 abc şimdi beşi temsil eder

  • ldr: bellekten yükler
  • str: belleğe yazar
  • cmp: çıkarma işlemi yaparak iki değeri karşılaştırır. Bayrakları ayarlar.
  • b: etiketlenecek dal
  • ekle: aritmetik gerçekleştirir

Kol montajı ile ilgili herhangi bir deneyiminiz yoksa bu videoyu izleyin. Size Arm Assembly dilini iyi bir şekilde anlamanızı sağlayacaktır.

Tamam, şimdi ahududu pi 3'ümüze bağlı bir devremiz var ve pi'nin tanıdığı bir sd kartımız var, bu yüzden bir sonraki görevimiz pi'yi çalıştırılabilir bir programla yükleyerek devre ile nasıl etkileşime gireceğimizi bulmak. Genel olarak yapmamız gereken, pi'ye GPIO 21'den (kırmızı kabloya bağlı pin) bir voltaj vermesini söylemektir. O zaman, yanıp sönmesini sağlamak için led'i değiştirmenin bir yoluna ihtiyacımız var. Bunu yapmak için daha fazla bilgiye ihtiyacımız var. Bu noktada, GPIO 21'e çıktısını nasıl söyleyeceğimize dair hiçbir fikrimiz yok, bu yüzden veri sayfasını okumamız gerekiyor. Çoğu mikro denetleyicide, her şeyin tam olarak nasıl çalıştığını belirten veri sayfaları bulunur. Ne yazık ki, pi 3'ün resmi belgeleri yok! Ancak, resmi olmayan bir veri sayfası var. İşte ona iki link:

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

Tamam, bu noktada, veri sayfasına bakmak ve hangi bilgileri bulabileceğinizi görmek için bir sonraki adıma geçmeden önce birkaç dakikanızı ayırmalısınız.

Adım 6: CODE2:Turn_Led_ON

KOD2:Turn_Led_ON
KOD2:Turn_Led_ON
KOD2:Turn_Led_ON
KOD2:Turn_Led_ON
KOD2:Turn_Led_ON
KOD2:Turn_Led_ON

Raspberry pi 3 53, çıkış/giriş pinlerini (çevre birimleri) kontrol etmek için kayıt yapar. Pinler birlikte gruplanır ve her grup bir register'a atanır. GPIO için SELECT kaydına, SET kaydına ve CLEAR kayıtlarına erişebilmemiz gerekir. Bu kayıtlara erişmek için bu kayıtların fiziksel adreslerine ihtiyacımız var. Veri sayfasını okurken sadece adresin ofsetini (lo bayt) not etmek ve bunu temel adrese eklemek istersiniz. Bunu yapmak zorundasınız çünkü veri sayfası, temel olarak işletim sistemlerinin atadığı değerler olan linux sanal adresini listeliyor. Bir işletim sistemi kullanmıyoruz, bu nedenle bu kayıtlara doğrudan fiziksel adresi kullanarak erişmemiz gerekiyor. Bunun için aşağıdaki bilgilere ihtiyacınız var:

  • Çevre Birimlerinin Temel Adresi: 0x3f200000. Pdf (sayfa6), temel adresin 0x3f000000 olduğunu söylüyor, ancak bu adres çalışmayacak. 0x3f200000 kullanın
  • FSEL2(SELECT) ofseti, kaydın tam adresi değil. Pdf, 0x7E20008'de FSEL2'yi listeler, ancak bu adres linux sanal adresini ifade eder. Ofset aynı olacak, bu yüzden not etmek istediğimiz şey bu. 0x08
  • GPSET0(SET) Ofseti:0x1c
  • GPCLR0 ofseti(TEMİZ):0x28

Muhtemelen veri sayfasının 4 SELECT kaydı, 2 SET kaydı ve 2 CLEAR kaydı listelediğini fark etmişsinizdir, öyleyse neden yaptığımı seçtim? Bunun nedeni, GPIO 21'i ve FSEL2 kontrollerini GPIO 20-29, SET0 ve CLR0 kontrollerini GPIO 0-31'i kullanmak istememizdir. FSEL kayıtları, her GPIO pini için üç bit atar. 0-2 bitlerinin GPIO 20'yi ve 3-5 bitlerinin GPIO 21'i vb. kontrol ettiği anlamına gelen FSEL2 kullandığımız için. Set ve CLR kayıtları, her pime tek bir bit atar. Örneğin, SET0 ve CLR0'daki bit 0, GPIO 1'i kontrol eder. GPIO 21'i kontrol etmek için SET0 ve CLR0'da bit 21'i ayarlarsınız.

Tamam, bu kayıtlara nasıl erişeceğimizi konuştuk, ama tüm bunlar ne anlama geliyor?

  • GPIO 21'i çıkışa ayarlamak için FSEL2 kaydı kullanılacaktır. Bir pini çıkışa ayarlamak için, üç bitin lo sıra bitini 1'e ayarlamanız gerekir. Bu nedenle, 3-5 bitleri GPIO 21'i kontrol ederse, bu, ilk biti, bit 3'ü 1'e ayarlamamız gerektiği anlamına gelir. Bu, pi'ye söyleyecektir. GPIO 21'i çıktı olarak kullanmak istiyoruz. Dolayısıyla, GPIO 21 için 3 bite bakacak olursak, b001 çıktısına ayarladıktan sonra bu şekilde görünmelidirler.
  • GPSET0, pi'ye pini açmasını söyler (bir voltaj çıkışı verir). Bunu yapmak için sadece istediğimiz GPIO pinine karşılık gelen biti değiştiriyoruz. Bizim durumumuzda, bit 21.
  • GPCLR0, pi'ye pini kapatmasını söyler (voltaj yok). Pimi kapatmak için biti ilgili GPIO pimine ayarlayın. Bizim durumumuzda bit 21

Yanıp sönen bir led'e geçmeden önce, led'i basitçe açacak basit bir program yapalım.

Başlamak için kaynak kodumuzun başına iki yönerge eklememiz gerekiyor.

  • .section.init, pi'ye kodu nereye koyacağını söyler
  • .global _başlangıç

Ardından, kullanacağımız tüm adresleri düzenlememiz gerekiyor. Değerlere okunabilir semboller atamak için.equ kullanın.

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

Şimdi ayarlanmamız gereken bitleri ayarlamak için maskeler oluşturacağız.

  • .equ SET_BIT3, 0x08 Bu, bit üçü ayarlayacaktır 0000_1000
  • .equ SET_BIT21, 0x200000

Ardından _start etiketimizi eklememiz gerekiyor.

_Başlat:

Temel adresi kayıt defterine yükle

ldr r0, =TABAN

Şimdi GPFSEL2'nin bit3'ünü ayarlamamız gerekiyor

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Bu komut, 0x08 bitini GPFSEL2 adresine geri yazmamızı söylüyor.

Son olarak, GPSET0 kaydındaki bit 21'i ayarlayarak GPIO 21'i açık olarak ayarlamamız gerekiyor.

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

Nihai ürün, resimdeki kod gibi görünmelidir.

Sonraki adım, kodu derlemek ve pi'nin çalıştırabileceği bir.img dosyası oluşturmaktır.

  • Ekli makefile ve kernel.ld dosyasını ve eğer isterseniz turn_led_on.s kaynak kodunu indirin.
  • Tüm dosyaları aynı klasöre atın.
  • Kendi kaynak kodunuzu kullanıyorsanız makefile dosyasını düzenleyin ve = turn_led_on.s kodunu =.s ile değiştirin.
  • Makefile'ı kaydedin.
  • Dosyaları içeren klasörünüze gitmek için terminal(linux) veya cmd penceresini(windows) kullanın ve make yazın ve enter tuşuna basın
  • make dosyası kernel.img adında bir dosya oluşturmalıdır.
  • kernel.img dosyasını mini sd kartınıza kopyalayın. Kartlarınızın içeriği resimdeki gibi olmalıdır(resim 3):bootcode.bin, start.elf, fixup.dat ve kernel.img.
  • Mini sd kartı çıkarın ve pi'ye takın
  • Pi'yi güç kaynağına takın
  • LED yanmalıdır!!!

HAFİF OLARAK ÖNEMLİ NOT: Anlaşılan komut dosyaları, makefile uzantısının olmamasıyla ilgili bir sorun yaşıyordu, bu yüzden onu bir.txt uzantısıyla yeniden yükledim. Düzgün çalışması için indirirken lütfen uzantıyı kaldırın.

Önerilen: