Daftar Isi:

Bare Metal Raspberry Pi 3: Berkedip LED: 8 Langkah
Bare Metal Raspberry Pi 3: Berkedip LED: 8 Langkah

Video: Bare Metal Raspberry Pi 3: Berkedip LED: 8 Langkah

Video: Bare Metal Raspberry Pi 3: Berkedip LED: 8 Langkah
Video: Broke 90 in Smart Tv 2024, Juli
Anonim
Bare Metal Raspberry Pi 3: LED Berkedip
Bare Metal Raspberry Pi 3: LED Berkedip

Oleh moldypizzaIkuti Lainnya oleh penulis:

Tombol Tekan Raspberry Pi Dengan LED Bare Metal
Tombol Tekan Raspberry Pi Dengan LED Bare Metal
Tombol Tekan Raspberry Pi Dengan LED Bare Metal
Tombol Tekan Raspberry Pi Dengan LED Bare Metal
peti
peti
peti
peti
Cara Membuat Ukiran Relief untuk Hari Veteran
Cara Membuat Ukiran Relief untuk Hari Veteran
Cara Membuat Ukiran Relief untuk Hari Veteran
Cara Membuat Ukiran Relief untuk Hari Veteran

Tentang:.oO0Oo. Selengkapnya Tentang mouldypizza »

Selamat datang di tutorial LED Blinking BARE METAL pi 3!

Dalam tutorial ini kita akan melalui langkah-langkah, dari awal sampai akhir, untuk mendapatkan LED berkedip menggunakan Raspberry PI 3, papan tempat memotong roti, resistor, led, dan kartu SD kosong.

Jadi apa itu BARE METAL? BARE METAL adalah pemrograman tanpa embel-embel. Bare metal berarti kita sepenuhnya mengendalikan apa yang akan dilakukan komputer hingga bagian terkecil. Jadi itu pada dasarnya berarti bahwa kode akan ditulis sepenuhnya dalam perakitan, menggunakan set instruksi Arm. Pada akhirnya kita akan membuat program yang akan mengedipkan LED dengan mengakses alamat fisik salah satu pin GPIO Raspberry Pi dan mengonfigurasinya ke output dan kemudian mengaktifkan dan menonaktifkannya. Mencoba proyek ini, adalah cara yang bagus untuk memulai dengan pemrograman tertanam dan mudah-mudahan memberikan pemahaman yang lebih baik tentang cara kerja komputer.

Apa yang kamu butuhkan?

Perangkat keras

  • Raspberry PI 3
  • Kartu SD dimuat sebelumnya dengan gambar yang dapat di-boot
  • Papan tempat memotong roti
  • Kabel jumper Pria Wanita
  • Kabel jumper Pria Pria
  • LED
  • Resistor 220 ohm (tidak harus persis 220 ohm, hampir semua resistor bisa digunakan)
  • kartu sd mini
  • kartu sd mini pra dimuat dengan sistem operasi raspberry pi (biasanya disertakan dengan pi)

Perangkat lunak

  • Kompiler GCC
  • Rantai alat tertanam GNU
  • editor teks
  • pemformat kartu sd

Baiklah mari kita MULAI!

Langkah 1: MENGATUR HAL / BARANG

MENYIAPKAN HAL / BARANG
MENYIAPKAN HAL / BARANG

Oke jadi… langkah pertama adalah memperoleh ke perangkat keras. Anda dapat membeli suku cadang secara terpisah atau ada kit yang dilengkapi dengan lebih dari cukup suku cadang. TAUTAN

Kit ini dilengkapi dengan semua yang diperlukan untuk menyiapkan raspberry pi 3 dan banyak lagi! satu-satunya hal yang tidak termasuk dalam kit ini adalah kartu mini sd tambahan. Tunggu! Jangan beli yang lain dulu. Jika Anda tidak berencana menggunakan instalasi linux yang dimuat sebelumnya pada kartu, maka salin saja isi kartu mini sd yang disertakan untuk nanti dan format ulang kartu (lebih lanjut tentang itu nanti). CATATAN PENTING: pastikan Anda menyimpan file di kartu yang disertakan, Anda akan MEMBUTUHKANnya nanti!

Selanjutnya saatnya untuk men-setup software. Tutorial ini tidak akan menyertakan petunjuk rinci tentang cara menginstal perangkat lunak. Ada banyak sumber dan tutorial online tentang cara menginstal ini:

PENGGUNA WINDOWS:

Unduh dan instal gcc

Selanjutnya, unduh dan instal rantai alat tertanam GNU ARM

LINUX/MAC

  • Distribusi Linux datang dengan gcc pra-instal
  • Unduh dan instal rantai alat tertanam GNU ARM.

Oke jadi jika semuanya berjalan dengan baik maka Anda harus dapat membuka terminal (linux/mac) atau cmd line (windows) dan coba ketik

arm-none-eabi-gcc

Outputnya akan terlihat mirip dengan gambar pertama. Ini hanya untuk memverifikasi bahwa itu diinstal dengan benar.

Baiklah sekarang prasyarat sudah keluar, saatnya untuk memulai dengan hal-hal yang menyenangkan.

Langkah 2: SIRKUIT

SIRKUIT
SIRKUIT
SIRKUIT
SIRKUIT
SIRKUIT
SIRKUIT

Waktu sirkuit! Rangkaian untuk ini sederhana. Kami akan menghubungkan led ke GPIO 21 (pin 40) pada pi (lihat gambar 2 dan 3). Sebuah resistor juga dihubungkan secara seri untuk mencegah led dari kerusakan. Resistor akan dihubungkan ke kolom negatif pada breadboard yang akan dihubungkan ke GND (pin 39) pada pi. Saat menghubungkan led pastikan untuk menghubungkan ujung pendek ke sisi negatif. Lihat gambar terakhir

Langkah 3: BOOTABLE Mini SD

Mini SD yang dapat di-boot
Mini SD yang dapat di-boot
Mini SD yang dapat di-boot
Mini SD yang dapat di-boot
Mini SD yang dapat di-boot
Mini SD yang dapat di-boot

Ada tiga langkah untuk membuat pi 3 Anda mengenali kartu mini sd kosong Anda. Kita perlu menemukan dan menyalin bootcode.bin, start.elf, dan fixup.dat. Anda bisa mendapatkan file-file ini pada kartu mini sd yang disertakan jika Anda membeli canakit atau membuat kartu sd yang dapat di-boot untuk pi 3 dengan distribusi linux. Either way file-file ini diperlukan untuk memungkinkan pi mengenali kartu sd sebagai perangkat yang dapat di-boot. Selanjutnya, format mini sd ke fat32 (kebanyakan mini sd card diformat dalam fat32. Saya menggunakan kartu mini sd murah dari sandisk), pindahkan bootcode.bin, start.elf, fixup.dat ke kartu sd. Dan Anda selesai! Oke sekali lagi dan sesuai urutan gambar langkah-langkahnya adalah:

  1. Temukan bootcode.bin, start.elf, fixup.dat.
  2. Pastikan kartu sd Anda diformat ke FAT32.
  3. Pindahkan bootcode.bin, start.elf, dan fixup.dat ke kartu sd yang telah diformat.

Inilah cara saya menemukan ini, tautan.

Langkah 4: PERIKSA Mini SD

PERIKSA Mini SD
PERIKSA Mini SD
PERIKSA Mini SD
PERIKSA Mini SD

Baiklah, kami memiliki kartu mini sd yang dapat di-boot, dan mudah-mudahan, Anda memiliki pi 3 saat ini. Jadi sekarang kita harus mengujinya untuk memastikan pi 3 mengenali kartu mini sd sebagai bootable.

Di pi, di dekat port mini usb ada dua led kecil. Satu berwarna merah. Ini adalah indikator daya. Saat pi menerima daya, lampu ini harus menyala. Jadi jika Anda mencolokkan pi Anda sekarang tanpa kartu sd mini, itu akan menyala merah. Oke sekarang cabut pi Anda dan masukkan kartu mini sd bootable Anda yang telah dibuat pada langkah sebelumnya dan colokkan pi. Apakah Anda melihat cahaya lain? Seharusnya ada lampu hijau, tepat di sebelah yang merah, yang menunjukkan bahwa ia sedang membaca kartu sd. Led ini disebut led ACT. Ini akan menyala ketika ada kartu sd yang layak dimasukkan. Ini akan berkedip ketika mengakses kartu mini sd Anda.

Oke jadi dua hal seharusnya terjadi setelah Anda memasukkan kartu mini sd yang dapat di-boot dan memasang pi:

  1. Led merah harus menyala menunjukkan penerimaan daya
  2. Led hijau harus menyala menunjukkan bahwa ia telah boot ke kartu mini sd

Jika ada yang salah coba ulangi langkah sebelumnya atau klik tautan di bawah untuk informasi lebih lanjut.

Tautan di sini adalah referensi yang bagus.

Langkah 5: KODE1

Proyek ini ditulis dalam bahasa rakitan ARM. Pemahaman dasar tentang perakitan ARM diasumsikan dalam tutorial ini, tetapi berikut adalah beberapa hal yang harus Anda ketahui:

.equ: memberikan nilai ke simbol yaitu abc.equ 5 abc sekarang mewakili lima

  • ldr: memuat dari memori
  • str: menulis ke memori
  • cmp: membandingkan dua nilai dengan melakukan pengurangan. Menetapkan bendera.
  • b: cabang ke label
  • tambahkan: melakukan aritmatika

Jika Anda tidak memiliki pengalaman dengan perakitan Arm, tonton video ini. Ini akan memberi Anda pemahaman yang baik tentang bahasa rakitan Arm.

Oke jadi sekarang kami memiliki sirkuit yang terhubung ke raspberry pi 3 kami dan kami memiliki kartu sd yang dikenali pi, jadi tugas kami selanjutnya adalah mencari tahu bagaimana berinteraksi dengan sirkuit dengan memuat pi dengan program yang dapat dieksekusi. Secara umum, yang perlu kita lakukan adalah memberi tahu pi untuk mengeluarkan tegangan dari GPIO 21 (pin terhubung ke kabel merah). Maka kita membutuhkan cara untuk mengaktifkan led agar berkedip. Untuk melakukan ini, kami membutuhkan lebih banyak informasi. Pada titik ini kami tidak tahu bagaimana memberi tahu GPIO 21 ke output, itulah sebabnya kami harus membaca lembar data. Sebagian besar pengontrol mikro memiliki lembar data yang menentukan dengan tepat cara kerja semuanya. Sayangnya, pi 3 tidak memiliki dokumentasi resmi! Namun, ada lembar data tidak resmi. Berikut adalah dua tautan ke sana:

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

Oke pada titik ini, Anda harus meluangkan beberapa menit sebelum melanjutkan ke langkah berikutnya untuk melihat lembar data dan melihat informasi apa yang dapat Anda temukan.

Langkah 6: KODE2: Turn_Led_ON

KODE2:Turn_Led_ON
KODE2:Turn_Led_ON
KODE2:Turn_Led_ON
KODE2:Turn_Led_ON
KODE2:Turn_Led_ON
KODE2:Turn_Led_ON

Raspberry pi 3 53 mendaftar untuk mengontrol pin output/input (periferal). Pin dikelompokkan bersama dan setiap kelompok ditugaskan ke register. Untuk GPIO kita harus dapat mengakses register SELECT, register SET, dan register CLEAR. Untuk mengakses register-register ini kita memerlukan alamat fisik dari register-register ini. Saat Anda membaca lembar data, Anda hanya ingin mencatat offset alamat (lo byte) dan menambahkannya ke alamat dasar. Anda harus melakukan ini karena lembar data mencantumkan alamat virtual linux yang pada dasarnya adalah nilai yang ditetapkan oleh sistem operasi. Kami tidak menggunakan sistem operasi sehingga kami perlu mengakses register ini secara langsung dengan menggunakan alamat fisik. Untuk ini, Anda memerlukan informasi berikut:

  • Alamat Dasar Periferal: 0x3f200000. Pdf (halaman6) mengatakan bahwa alamat dasarnya adalah 0x3f000000, namun, alamat ini tidak akan berfungsi. Gunakan 0x3f2000000
  • Offset FSEL2(SELECT) bukan alamat lengkap register. Pdf mencantumkan FSEL2 di 0x7E20008 tetapi alamat ini merujuk ke alamat virtual linux. Offsetnya akan sama sehingga itulah yang ingin kita perhatikan. 0x08
  • Offset dari GPSET0 (SET): 0x1c
  • Offset dari GPCLR0 (CLEAR): 0x28

Jadi Anda mungkin memperhatikan bahwa lembar data mencantumkan 4 register SELECT, 2 register SET, dan 2 register CLEAR, jadi mengapa saya memilih yang saya lakukan? Ini karena kami ingin menggunakan kontrol GPIO 21 dan FSEL2 GPIO 20-29, SET0 dan kontrol CLR0 GPIO 0-31. Register FSEL memberikan tiga bit untuk setiap pin GPIO. Karena kita menggunakan FSEL2 itu berarti bit 0-2 mengontrol GPIO 20, dan bit 3-5 mengontrol GPIO 21 dan seterusnya. Register Set dan CLR menetapkan satu bit untuk setiap pin. Misalnya, bit 0 di SET0 dan CLR0 mengontrol GPIO 1. Untuk mengontrol GPIO 21 Anda akan mengatur bit 21 di SET0 dan CLR0.

Oke jadi kita sudah berbicara tentang cara mengakses register ini, tapi apa artinya semua itu?

  • Register FSEL2 akan digunakan untuk mengatur GPIO 21 ke output. Untuk mengatur pin ke output Anda perlu mengatur bit urutan lo dari tiga bit ke 1. Jadi jika bit 3-5 mengontrol GPIO 21 itu berarti kita perlu mengatur bit pertama, bit 3 ke 1. Ini akan memberi tahu pi bahwa kita ingin menggunakan GPIO 21 sebagai output. Jadi jika kita melihat 3 bit untuk GPIO 21 mereka akan terlihat seperti ini setelah kita set ke output, b001.
  • GPSET0 memberitahu pi untuk menyalakan pin (mengeluarkan tegangan). Untuk melakukan ini, kita tinggal mengganti bit yang sesuai dengan pin GPIO yang kita inginkan. Dalam kasus kami, bit 21.
  • GPCLR0 memberitahu pi untuk mematikan pin (tidak ada tegangan). Untuk mematikan pin atur bit ke pin GPIO yang sesuai. Dalam kasus kami, bit 21

Sebelum kita masuk ke led yang berkedip, pertama-tama mari kita buat program sederhana yang hanya akan menyalakan led.

Untuk memulai kita perlu menambahkan dua arahan ke bagian atas kode sumber kita.

  • .section.init memberi tahu pi di mana harus meletakkan kode
  • .global _start

Selanjutnya, kita perlu menata semua alamat yang akan kita gunakan. Gunakan.equ untuk menetapkan simbol yang dapat dibaca ke nilai.

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

Sekarang kita akan membuat topeng untuk mengatur bit yang perlu kita atur.

  • .equ SET_BIT3, 0x08 Ini akan mengatur bit tiga 0000_1000
  • .equ SET_BIT21, 0x200000

Maka kita perlu menambahkan _start label kita

_Mulailah:

Muat alamat dasar ke dalam register

ldr r0, = BASE

Sekarang kita perlu mengatur bit3 dari GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Instruksi ini mengatakan untuk menulis kembali bit 0x08 ke alamat GPFSEL2

Akhirnya kita perlu mengatur GPIO 21 ke on dengan mengatur bit 21 di register GPSET0

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

Produk akhir akan terlihat seperti kode yang digambarkan.

Langkah selanjutnya adalah mengkompilasi kode dan membuat file.img yang dapat dijalankan oleh pi.

  • Unduh makefile terlampir, dan kernel.ld dan jika Anda menginginkan kode sumber turn_led_on.s.
  • Letakkan semua file dalam folder yang sama.
  • Jika Anda menggunakan kode sumber Anda sendiri, edit makefile dan ganti kode = turn_led_on.s dengan kode =.s
  • Simpan file make.
  • Gunakan terminal (linux) atau jendela cmd (windows) untuk menavigasi ke folder Anda yang berisi file dan ketik make dan tekan enter
  • File make harus menghasilkan file bernama kernel.img
  • Salin kernel.img ke kartu mini sd Anda. Isi kartu Anda harus seperti yang digambarkan (gambar 3):bootcode.bin, start.elf, fixup.dat, dan kernel.img.
  • Keluarkan kartu mini sd dan masukkan ke dalam pi
  • Colokkan pi ke sumber listrik
  • LED harus menyala!!!

CATATAN SANGAT PENTING: Rupanya instruksi memiliki masalah dengan makefile yang tidak memiliki ekstensi, jadi saya mengunggahnya kembali dengan ekstensi.txt. Harap hapus ekstensi saat Anda mengunduhnya agar berfungsi dengan baik.

Direkomendasikan: