Isi kandungan:

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

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

Video: Bare Metal Raspberry Pi 3: LED Berkedip: 8 Langkah
Video: Raspberry PI 4 project 74HC595 with 8 LEDS 2024, November
Anonim
Bare Metal Raspberry Pi 3: LED Berkedip
Bare Metal Raspberry Pi 3: LED Berkedip

Oleh mouldypizza Ikuti Lagi oleh pengarang:

Butang Tekan Raspberry Pi Dengan Logam Bare LED
Butang Tekan Raspberry Pi Dengan Logam Bare LED
Butang Tekan Raspberry Pi Dengan Logam Bare LED
Butang Tekan Raspberry Pi Dengan Logam Bare LED
Peti
Peti
Peti
Peti
Cara Membuat Ukiran Bantuan untuk Hari Veteran
Cara Membuat Ukiran Bantuan untuk Hari Veteran
Cara Membuat Ukiran Bantuan untuk Hari Veteran
Cara Membuat Ukiran Bantuan untuk Hari Veteran

Mengenai:.oO0Oo. Lebih Lanjut Mengenai moldypizza »

Selamat datang ke tutorial LED BARE METAL pi 3 Blinking!

Dalam tutorial ini kita akan melalui langkah-langkah, dari awal hingga akhir, untuk mendapatkan LED berkedip menggunakan Raspberry PI 3, papan roti, perintang, led, dan kad SD kosong.

Jadi apa itu LOGAM BARE? BARE METAL adalah pengaturcaraan tanpa embel-embel. Bare metal bermaksud kita dapat mengawal sepenuhnya apa yang akan dilakukan oleh komputer hingga sedikit. Oleh itu, ini pada dasarnya bermaksud bahawa kod tersebut akan ditulis sepenuhnya dalam pemasangan, menggunakan set arahan Arm. Pada akhirnya kita akan membuat program yang akan mengedipkan LED dengan mengakses alamat fizikal salah satu pin GPIO Raspberry Pi dan mengkonfigurasinya ke output dan kemudian menghidupkan dan mematikannya. Mencuba projek ini, adalah cara terbaik untuk memulakan pengaturcaraan tertanam dan semoga memberikan pemahaman yang lebih baik tentang bagaimana komputer berfungsi.

Apa yang anda perlukan?

Perkakasan

  • Raspberry PI 3
  • Kad SD dimuatkan dengan gambar yang boleh di-boot
  • Papan roti
  • Wayar pelompat Lelaki Perempuan
  • Kabel pelompat lelaki
  • LED
  • Perintang 220 ohm (tidak semestinya 220 ohm, kebanyakan perintang akan berfungsi)
  • kad sd mini
  • kad mini sd yang dimuatkan dengan sistem operasi raspberry pi (biasanya disertakan dengan pi)

Perisian

  • Penyusun GCC
  • Rantai alat terbenam GNU
  • penyunting teks
  • pembentuk kad sd

Baiklah Mari Bermula!

Langkah 1: MENYELESAIKAN HAL-HAL / MENGUASAI

MENYELESAIKAN HAL-HAL / MENGUASAI
MENYELESAIKAN HAL-HAL / MENGUASAI

Baiklah … langkah pertama adalah untuk mendapatkan perkakasan. Anda boleh membeli bahagiannya secara berasingan atau ada alat yang disertakan dengan lebih banyak bahagian. LINK

Kit ini dilengkapi dengan semua yang diperlukan untuk menyiapkan raspberry pi 3 dan banyak lagi! satu-satunya perkara yang tidak termasuk dalam kit ini ialah kad sd mini tambahan. Tunggu! Jangan beli yang lain. Sekiranya anda tidak merancang untuk menggunakan pemasangan linux yang dimuatkan pada kad, kemudian salin kandungan kad mini sd yang disertakan untuk kemudian dan format semula kad (lebih lanjut kemudian). CATATAN PENTING: pastikan anda menyimpan fail pada kad yang disertakan dan anda akan memerlukannya kemudian!

Seterusnya sudah tiba masanya untuk menyediakan perisian. Tutorial ini tidak akan merangkumi arahan terperinci mengenai cara memasang perisian. Terdapat banyak sumber dan tutorial dalam talian mengenai cara memasangnya:

PENGGUNA WINDOWS:

Muat turun dan pasang gcc

Seterusnya, muat turun dan pasang rantai alat terbenam GNU ARM

LINUX / MAC

  • Pengedaran Linux dilengkapi dengan gcc yang telah dipasang sebelumnya
  • Muat turun dan pasang rantai alat terbenam GNU ARM.

Baiklah, jadi jika semuanya berjalan lancar, anda seharusnya dapat membuka terminal (linux / mac) atau garis cmd (windows) dan cuba menaip

arm-none-eabi-gcc

Hasilnya mestilah serupa dengan gambar pertama. Ini hanya untuk mengesahkan bahawa ia dipasang dengan betul.

Baiklah sekarang bahawa pra-syarat tidak dapat dilupakan, sudah tiba masanya untuk memulakan perkara yang menyeronokkan.

Langkah 2: PEKELILING

PEKELILING
PEKELILING
PEKELILING
PEKELILING
PEKELILING
PEKELILING

Masa litar! Litar ini mudah. Kami akan menyambungkan LED ke GPIO 21 (pin 40) pada pi (lihat gambar 2 dan 3). Perintang juga disambungkan secara bersiri untuk mengelakkan lekapan rosak. Perintang akan disambungkan ke lajur negatif di papan roti yang akan disambungkan ke GND (pin 39) pada pi. Semasa menyambungkan led, pastikan untuk menghubungkan hujung pendek ke sisi negatif. Lihat gambar terakhir

Langkah 3: BOOTABLE Mini SD

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

Terdapat tiga langkah untuk mendapatkan pi 3 anda untuk mengenali kad sd mini kosong anda. Kita perlu mencari dan menyalin bootcode.bin, start.elf, dan fixup.dat. Anda boleh mendapatkan fail-fail ini pada kad mini sd yang disertakan jika anda membeli canakit atau membuat kad sd yang dapat di-boot untuk pi 3 dengan pengedaran linux. Sama ada fail ini diperlukan untuk membolehkan pi mengenali kad sd sebagai peranti yang boleh di-boot. Seterusnya, format mini sd ke fat32 (kebanyakan kad mini sd diformat dalam fat32. Saya menggunakan kad sd mini murah dari sandisk), pindahkan bootcode.bin, start.elf, fixup.dat ke kad sd. Dan anda selesai! Baiklah sekali lagi dan mengikut urutan gambar, langkahnya adalah:

  1. Cari bootcode.bin, start.elf, fixup.dat.
  2. Pastikan kad sd anda diformat menjadi fat32.
  3. Pindahkan bootcode.bin, start.elf, dan fixup.dat ke kad sd yang diformat.

Inilah cara saya mengetahui ini, pautan.

Langkah 4: CHECK Mini SD

CHECK Mini SD
CHECK Mini SD
CHECK SD Mini
CHECK SD Mini

Baiklah, kami mempunyai kad sd mini yang dapat di-boot, dan semoga anda mempunyai pi 3 pada ketika ini. Jadi sekarang kita harus mengujinya untuk memastikan pi 3 mengenali kad mini sd sebagai bootable.

Di pi, berhampiran port mini usb terdapat dua led kecil. Satu berwarna merah. Ini adalah penunjuk kuasa. Semasa pi menerima kuasa lampu ini harus menyala. Oleh itu, jika anda memasang pi anda sekarang tanpa kad mini sd, ia mesti menyala merah. Baiklah sekarang cabut plag anda dan masukkan kad sd mini anda yang boleh boot yang telah dibuat pada langkah sebelumnya dan pasangkan pi. Adakah anda melihat lampu lain? Harus ada lampu hijau, tepat di sebelah lampu merah, yang menunjukkan bahawa ia membaca kad sd. LED ini dipanggil ACT led. Ia akan menyala apabila terdapat kad sd yang layak dimasukkan. Ia akan berkelip semasa mengakses kad mini sd anda.

Baiklah, jadi dua perkara sepatutnya berlaku setelah anda memasukkan kad mini sd yang dapat di-boot dan memasukkan pi:

  1. Lampu merah harus diterangi yang menunjukkan penerimaan kuasa
  2. Lampu hijau mesti diterangi yang menunjukkan bahawa ia telah dimasukkan ke dalam kad mini sd

Sekiranya ada yang salah, cuba ulangi langkah sebelumnya atau klik pada pautan di bawah untuk maklumat lebih lanjut.

Pautan di sini adalah rujukan yang baik.

Langkah 5: KOD1

Projek ini ditulis dalam bahasa pemasangan ARM. Pemahaman asas mengenai pemasangan ARM diandaikan dalam tutorial ini, tetapi berikut adalah beberapa perkara yang harus anda ketahui:

.equ: memberikan nilai pada simbol iaitu abc.equ 5 abc sekarang mewakili lima

  • ldr: muatan dari memori
  • str: menulis ke ingatan
  • cmp: membandingkan dua nilai dengan melakukan penolakan. Menetapkan bendera.
  • b: cabang ke label
  • tambah: melakukan aritmetik

Sekiranya anda tidak mempunyai pengalaman dengan pemasangan Arm tonton video ini. Ini akan memberi anda pemahaman yang baik mengenai bahasa pemasangan Arm.

Baiklah, sekarang kita mempunyai litar yang disambungkan ke raspberry pi 3 kita dan kita mempunyai kad sd yang dikenali oleh pi, jadi tugas kita seterusnya adalah mencari cara untuk berinteraksi dengan litar dengan memuatkan pi dengan program yang dapat dilaksanakan. Secara umum, apa yang perlu kita lakukan ialah memberitahu pi untuk mengeluarkan voltan dari GPIO 21 (pin disambungkan ke wayar merah). Kemudian kita memerlukan kaedah untuk menukar LED agar ia berkedip. Untuk melakukan ini, kami memerlukan lebih banyak maklumat. Pada ketika ini kita tidak tahu bagaimana memberitahu GPIO 21 kepada output dan itulah sebabnya kita mesti membaca lembaran data. Sebilangan besar pengawal mikro mempunyai lembaran data yang menentukan dengan tepat bagaimana semuanya berfungsi. Malangnya, pi 3 tidak mempunyai dokumentasi rasmi! Walau bagaimanapun, terdapat lembaran data tidak rasmi. Berikut adalah dua pautan kepadanya:

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

Baiklah pada ketika ini, anda perlu meluangkan masa beberapa minit sebelum melangkah ke langkah seterusnya untuk melihat lembaran data dan melihat maklumat apa yang anda dapat.

Langkah 6: KODE2: Turn_Led_ON

KOD2: Putar_Led_ON
KOD2: Putar_Led_ON
KOD2: Putar_Led_ON
KOD2: Putar_Led_ON
KOD2: Putar_Led_ON
KOD2: Putar_Led_ON

Raspberry pi 3 53 mendaftar untuk mengawal pin output / input (periferal). Pin dikumpulkan bersama dan setiap kumpulan ditugaskan ke daftar. Untuk GPIO kita harus dapat mengakses daftar SELECT, register SET, dan CLEAR. Untuk mengakses daftar ini, kami memerlukan alamat fizikal daftar ini. Semasa anda membaca lembaran data, anda hanya ingin mencatat offset alamat (lo byte) dan menambahkannya ke alamat asas. Anda harus melakukan ini kerana lembar data menyenaraikan alamat maya linux yang pada dasarnya adalah nilai yang diberikan oleh sistem operasi. Kami tidak menggunakan sistem operasi jadi kami perlu mengakses daftar ini secara langsung dengan menggunakan alamat fizikal. Untuk ini, anda memerlukan maklumat berikut:

  • Alamat Pangkalan bagi Periferal: 0x3f200000. Pdf (halaman6) mengatakan bahawa alamat asasnya adalah 0x3f000000, namun alamat ini tidak akan berfungsi. Gunakan 0x3f200000
  • Offset FSEL2 (PILIH) bukan alamat penuh daftar. Pdf menyenaraikan FSEL2 pada 0x7E20008 tetapi alamat ini merujuk kepada alamat maya linux. Ofset akan sama jadi itulah yang ingin kita perhatikan. 0x08
  • Offset GPSET0 (SET): 0x1c
  • Pengimbangan GPCLR0 (CLEAR): 0x28

Oleh itu, anda mungkin menyedari bahawa lembaran data menyenaraikan 4 register SELECT, 2 register SET, dan 2 register CLEAR jadi mengapa saya memilih yang saya pilih? Ini kerana kami ingin menggunakan kawalan GPIO 21 dan FSEL2 GPIO 20-29, SET0 dan kawalan CLR0 GPIO 0-31. Daftar FSEL memberikan tiga bit untuk setiap pin GPIO. Oleh kerana kami menggunakan FSEL2 yang bermaksud bit 0-2 mengawal GPIO 20, dan bit 3-5 mengawal GPIO 21 dan seterusnya. Daftar Set dan CLR memberikan satu bit pada setiap pin. Sebagai contoh, bit 0 di SET0 dan CLR0 mengawal GPIO 1. Untuk mengawal GPIO 21, anda akan menetapkan bit 21 di SET0 dan CLR0.

Baiklah, jadi kami telah membincangkan cara mengakses daftar ini, tetapi apa maksudnya?

  • Daftar FSEL2 akan digunakan untuk menetapkan output GPIO 21. Untuk menetapkan pin ke output, anda perlu menetapkan bit susunan lo dari tiga bit ke 1. Jadi jika bit 3-5 mengawal GPIO 21 itu bermakna kita perlu menetapkan bit pertama, bit 3 hingga 1. Ini akan memberitahu pi bahawa kita mahu menggunakan GPIO 21 sebagai output. Oleh itu, jika kita melihat 3 bit untuk GPIO 21 mereka akan kelihatan seperti ini setelah kita menetapkannya ke output, b001.
  • GPSET0 memberitahu pi untuk menghidupkan pin (mengeluarkan voltan). Untuk melakukan ini, kita hanya menukar bit yang sesuai dengan pin GPIO yang kita mahukan. Dalam kes kami, bit 21.
  • GPCLR0 memberitahu pi untuk mematikan pin (tiada voltan). Untuk mematikan pin tetapkan bit ke pin GPIO yang sesuai. Dalam kes kami bit 21

Sebelum kita menuju ke lampu berkedip, pertama mari buat program sederhana yang hanya akan menyalakan lampu LED.

Untuk memulakan, kita perlu menambah dua arahan di bahagian atas kod sumber kita.

  • .seksyen.init memberitahu pi di mana meletakkan kod
  • .global _start

Seterusnya, kita perlu menyusun semua alamat yang akan kita gunakan. Gunakan.equ untuk menetapkan simbol yang boleh dibaca pada nilai.

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

Sekarang kita akan membuat topeng untuk menetapkan bit yang perlu kita tetapkan.

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

Kemudian kita perlu menambah label _start

_mulakan:

Muatkan alamat pangkalan ke dalam daftar

ldr r0, = ASAS

Sekarang kita perlu menetapkan bit3 GPFSEL2

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

Akhirnya kita perlu menghidupkan GPIO 21 dengan menetapkan bit 21 dalam daftar GPSET0

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

Produk akhir mestilah kelihatan seperti kod yang digambarkan.

Langkah seterusnya adalah menyusun kod dan membuat fail.img yang boleh dijalankan oleh pi.

  • Muat turun makefile yang dilampirkan, dan kernel.ld dan jika anda mahukan kod sumber turn_led_on.s.
  • Masukkan semua fail dalam folder yang sama.
  • Sekiranya anda menggunakan kod sumber anda sendiri, edit makefile dan ganti kod = turn_led_on.s dengan kod =.s
  • Simpan makefile.
  • Gunakan terminal (linux) atau cmd window (windows) untuk menavigasi ke folder anda yang berisi fail dan ketik make dan tekan enter
  • File make harus menghasilkan fail yang disebut kernel.img
  • Salin kernel.img ke kad sd mini anda. Kandungan kad anda harus seperti gambar (gambar 3): bootcode.bin, start.elf, fixup.dat, dan kernel.img.
  • Keluarkan kad mini sd dan masukkan ke dalam pi
  • Pasang pi ke sumber kuasa
  • LED mesti menyala !!!

CATATAN PENTING: Nampaknya instruksional mempunyai masalah dengan makefile tidak mempunyai pelanjutan, jadi saya memuat naik semula dengan sambungan.txt. Sila keluarkan pelanjutan semasa anda memuat turunnya agar berfungsi dengan baik.

Disyorkan: