Talaan ng mga Nilalaman:

Bare Metal Raspberry Pi 3: Blinking LED: 8 Hakbang
Bare Metal Raspberry Pi 3: Blinking LED: 8 Hakbang

Video: Bare Metal Raspberry Pi 3: Blinking LED: 8 Hakbang

Video: Bare Metal Raspberry Pi 3: Blinking LED: 8 Hakbang
Video: How to Turn Raspberry Pi Pico into PLC | Beremiz4Pico 2024, Hulyo
Anonim
Bare Metal Raspberry Pi 3: Blinking LED
Bare Metal Raspberry Pi 3: Blinking LED

Sundin ang Higit Pa ng may-akda:

Button ng Raspberry Pi Push Na May LEDs Bare Metal
Button ng Raspberry Pi Push Na May LEDs Bare Metal
Button ng Raspberry Pi Push Na May LEDs Bare Metal
Button ng Raspberry Pi Push Na May LEDs Bare Metal
Mga Crate
Mga Crate
Mga Crate
Mga Crate
Paano Gumawa ng isang Pag-ukit ng Kahulugan para sa Araw ng mga Beterano
Paano Gumawa ng isang Pag-ukit ng Kahulugan para sa Araw ng mga Beterano
Paano Gumawa ng isang Pag-ukit ng Kahulugan para sa Araw ng mga Beterano
Paano Gumawa ng isang Pag-ukit ng Kahulugan para sa Araw ng mga Beterano

Tungkol sa:.oO0Oo. Karagdagang Tungkol sa moldypizza »

Maligayang pagdating sa BARE METAL pi 3 Blinking LED tutorial!

Sa tutorial na ito ay dadaan kami sa mga hakbang, mula simula hanggang matapos, upang makakuha ng LED na kumikislap gamit ang isang Raspberry PI 3, isang breadboard, isang resistor, isang led, at isang blangkong SD card.

Kaya ano ang BARE METAL? Ang BARE METAL ay walang frills program. Nangangahulugan ang hubad na metal na kontrolado natin nang buo ang gagawin ng computer. Kaya't nangangahulugang nangangahulugang ang code ay ganap na maisusulat sa pagpupulong, gamit ang hanay ng tagubilin sa Arm. Sa pagtatapos ay lumikha kami ng isang programa na magpikit ng isang LED sa pamamagitan ng pag-access sa pisikal na address ng isa sa mga pin ng GPIO ng Raspberry Pi at i-configure ito upang mag-output at pagkatapos ay i-on ito at i-off. Ang pagtatangka sa proyektong ito, ay isang mahusay na paraan upang makapagsimula sa naka-embed na programa at sana magbigay ng isang mas mahusay na pag-unawa sa kung paano gumagana ang isang computer.

Ano'ng kailangan mo?

Hardware

  • Raspberry PI 3
  • Paunang na-load ang SD card na may bootable na imahe
  • Breadboard
  • Mga wire ng jumper na Babae Babae
  • Mga lalaking wire ng jumper na lalaki
  • LED
  • 220 ohm risistor (hindi kailangang eksaktong 220 ohm, karamihan sa anumang risistor ay gagana)
  • mini sd card
  • mini sd card na paunang na-load sa operating system ng raspberry pi (karaniwang kasama sa pi)

Software

  • Tagatala ng GCC
  • Naka-embed na toolchain ang GNU
  • text editor
  • sd card formatter

Hinahayaan mong Magsimula!

Hakbang 1: PAGTATAYA NG BAGAY / STUFF UP

PAGTATAYA NG BAGAY / STUFF UP
PAGTATAYA NG BAGAY / STUFF UP

Okay kaya … ang unang hakbang ay upang makakuha sa hardware. Maaari kang bumili ng mga hiwalay na bahagi o mayroong isang kit na may higit sa sapat na mga bahagi. LINK

Ang kit na ito ay mayroong lahat ng kinakailangan upang mai-setup ang raspberry pi 3 at higit pa! ang tanging bagay na hindi kasama sa kit na ito ay isang sobrang mini sd card. Teka lang! Huwag bumili pa ng isa pa. Kung hindi mo planong gamitin ang pag-install ng linux na naka-preload sa card pagkatapos kopyahin lamang ang mga nilalaman ng kasamang mini sd card para sa paglaon at muling i-format ang card (higit pa sa paglaon). MAHALAGA NA TANDAAN: siguraduhing itatago mo ang mga file sa kasama na card kakailanganin mo ang mga ito sa paglaon!

Susunod oras na upang i-setup ang software. Ang tutorial na ito ay hindi isasama ang detalyadong mga tagubilin sa kung paano i-install ang software. Maraming mga mapagkukunan at tutorial sa online kung paano i-install ang mga ito:

Mga Gumagamit ng WINDOWS:

Mag-download at mag-install ng gcc

Susunod, i-download at i-install ang naka-embed na toolchain ng GNU ARM

LINUX / MAC

  • Ang mga pamamahagi ng Linux ay mayroong paunang naka-install na gcc
  • Mag-download at mag-install ng naka-embed na toolchain ng GNU ARM.

Okay kaya kung maayos ang lahat kung gayon dapat mong buksan ang terminal (linux / mac) o cmd line (windows) at subukang mag-type

arm-none-eabi-gcc

Ang output ay dapat magmukhang katulad sa unang larawan. Ito ay upang patunayan lamang na na-install nang tama.

Tama na ngayon na wala nang daan ang mga paunang kinakailangan, oras na upang magsimula sa mga nakakatuwang bagay.

Hakbang 2: CIRCUIT

CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT

Oras ng circuit! Ang circuit para dito ay simple. Ikonekta namin ang isang humantong sa GPIO 21 (pin 40) sa pi (tingnan ang larawan 2 at 3). Ang isang risistor ay konektado din sa serye upang maiwasan ang led mula sa nasira. Ang risistor ay konektado sa negatibong haligi sa breadboard na konektado sa GND (pin 39) sa pi. Kapag kumokonekta sa humantong siguraduhin na ikonekta ang maikling dulo sa negatibong bahagi. Tingnan ang huling larawan

Hakbang 3: BOOTABLE Mini SD

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

Mayroong tatlong mga hakbang upang makilala ang iyong pi 3 sa iyong blangko mini sd card. Kailangan nating hanapin at kopyahin ang bootcode.bin, start.elf, at fixup.dat. Maaari mong makuha ang mga file na ito sa kasama na mini sd card kung bumili ka ng canakit o gumawa ng isang bootable sd card para sa pi 3 na may pamamahagi ng linux. Alinmang paraan ang mga file na ito ay kinakailangan upang payagan ang pi na makilala ang sd card bilang isang bootable device. Susunod, i-format ang mini sd sa fat32 (ang karamihan sa mga mini sd card ay na-format sa fat32. Gumamit ako ng isang murang mini sd card mula sa sandisk), ilipat ang bootcode.bin, simulan ang sarili, fixup.dat papunta sa sd card. At ang iyong tapos na! Okay isang beses pa at sa pagkakasunud-sunod ng mga larawan ang mga hakbang ay:

  1. Hanapin ang bootcode.bin, simulan ang sarili, pag-aayos.dat.
  2. Tiyaking naka-format ang iyong sd card sa fat32.
  3. Ilipat ang bootcode.bin, start.elf, at fixup.dat papunta sa naka-format na sd card.

Narito kung paano ko nalaman ito, link.

Hakbang 4: Suriin ang Mini SD

Suriin ang Mini SD
Suriin ang Mini SD
Suriin ang Mini SD
Suriin ang Mini SD

Okay, mayroon kaming isang bootable mini sd card, at sana, mayroon kang pi 3 sa puntong ito. Kaya ngayon dapat nating subukan ito upang matiyak na nakikilala ng pi 3 ang mini sd card bilang bootable.

Sa pi, malapit sa mini usb port mayroong dalawang maliit na led. Ang isa ay pula. Ito ang tagapagpahiwatig ng kuryente. Kapag ang pi ay tumatanggap ng kuryente dapat ang ilaw na ito ay nakabukas. Kaya't kung isaksak mo ang iyong pi sa ngayon nang walang mini sd card dapat itong ilaw nang pula. Okay ngayon i-unplug ang iyong pi at ilagay sa iyong bootable mini sd card na nilikha sa nakaraang hakbang at i-plug ang pi. Nakakita ka ba ng isa pang ilaw? Dapat mayroong isang berdeng ilaw, sa tabi mismo ng pula, na nagpapahiwatig na binabasa nito ang sd card. Ang humantong na ito ay tinatawag na pinamunuan ng ACT. Ito ay mag-iilaw kapag may isang viable sd card na ipinasok. Mag-flash ito kapag na-access ang iyong mini sd card.

Okay kaya dapat nangyari ang dalawang bagay pagkatapos mong ipasok ang bootable mini sd card at isaksak ang pi sa:

  1. Ang pulang pinangungunahan ay dapat na naiilawan na nagpapahiwatig ng pagtanggap ng kuryente
  2. Ang berde na humantong ay dapat na naiilawan na nagpapahiwatig na ito ay naka-boot sa mini sd card

Kung may isang maling nangyari subukang ulitin ang mga nakaraang hakbang o mag-click sa link sa ibaba para sa karagdagang impormasyon.

Ang link dito ay isang magandang sanggunian.

Hakbang 5: CODE1

Ang proyektong ito ay nakasulat sa wika ng pagpupulong ng ARM. Ang isang pangunahing pag-unawa sa pagpupulong ng ARM ay ipinapalagay sa tutorial na ito, ngunit narito ang ilang mga bagay na dapat mong malaman:

.equ: nagtatalaga ng isang halaga sa isang simbolo ie abc.equ 5 na ngayon ay kumakatawan sa lima

  • ldr: naglo-load mula sa memorya
  • str: sumusulat sa memorya
  • cmp: pinaghahambing ang dalawang halaga sa pamamagitan ng pagsasagawa ng isang pagbabawas. Nagtatakda ng mga watawat.
  • b: sangay sa label
  • idagdag: gumaganap ng arithmetic

Kung wala kang anumang karanasan sa Arm pagpupulong panoorin ang video na ito. Bibigyan ka nito ng isang mahusay na pag-unawa sa wika ng pagpupulong ng Arm.

Okay kaya sa ngayon mayroon kaming isang circuit na konektado sa aming raspberry pi 3 at mayroon kaming isang sd card na kinikilala ng pi, kaya ang aming susunod na gawain ay pag-uunawa kung paano makihalubilo sa circuit sa pamamagitan ng paglo-load ng pi gamit ang isang maipapatupad na programa. Sa pangkalahatan, ang kailangan nating gawin ay sabihin sa pi upang maglabas ng boltahe mula sa GPIO 21 (pin na konektado sa pulang kawad). Pagkatapos kailangan namin ng isang paraan upang i-toggle ang led upang gawin itong blink. Upang magawa ito kailangan namin ng karagdagang impormasyon. Sa puntong ito wala kaming ideya kung paano sasabihin sa GPIO 21 sa output na kung bakit kailangan naming basahin ang datasheet. Karamihan sa mga micro-Controller ay may mga sheet ng data na tumutukoy nang eksakto kung paano gumagana ang lahat. Sa kasamaang palad, ang pi 3 ay walang opisyal na dokumentasyon! Gayunpaman, mayroong isang hindi opisyal na sheet ng data. Narito ang dalawang mga link dito:

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

Okay sa puntong ito, dapat kang tumagal ng ilang minuto bago lumipat sa susunod na hakbang upang tingnan ang sheet ng data at makita kung anong impormasyon ang maaari mong makita.

Hakbang 6: CODE2: Turn_Led_ON

CODE2: Lumiko_Led_ON
CODE2: Lumiko_Led_ON
CODE2: Lumiko_Led_ON
CODE2: Lumiko_Led_ON
CODE2: Lumiko_Led_ON
CODE2: Lumiko_Led_ON

Nagrerehistro ang raspberry pi 3 53 upang makontrol ang mga output / input pin (peripheral). Ang mga pin ay pinagsama-sama at ang bawat pangkat ay nakatalaga sa isang rehistro. Para sa GPIO kailangan nating ma-access ang SELECT register, SET register, at CLEAR register. Upang ma-access ang mga rehistro na ito kailangan namin ng pisikal na address ng mga rehistro na ito. Kapag binabasa mo ang sheet ng data nais mo lamang tandaan ang offset ng address (lo byte) at idagdag iyon sa base address. Kailangan mong gawin ito dahil nakalista sa datasheet ang linux virtual address na karaniwang mga halaga na itatalaga ng mga operating system. Hindi kami gumagamit ng isang operating system kaya kailangan naming i-access ang mga rehistro na ito nang direkta sa pamamagitan ng paggamit ng pisikal na address. Sa ito kailangan mo ang sumusunod na impormasyon:

  • Base Address ng Peripherals: 0x3f200000. Sinasabi ng pdf (pahina6) na ang pangunahing address ay 0x3f000000, subalit, ang address na ito ay hindi gagana. Gumamit ng 0x3f200000
  • Ang offset ng FSEL2 (SELECT) hindi ang buong address ng rehistro. Ang PDF ay naglilista ng FSEL2 sa 0x7E20008 ngunit ang address na ito ay tumutukoy sa linux virtual address. Ang offset ay magiging pareho sa gayon iyon ang nais nating tandaan. 0x08
  • Offset ng GPSET0 (SET): 0x1c
  • Offset ng GPCLR0 (MALINAW): 0x28

Kaya't malamang na napansin mo na ang listahan ng data-sheet ay 4 na PINILI na mga rehistro, 2 mga rehistro ng SET, at 2 MALINAW na rehistro kaya bakit pinili ko ang mga ginawa ko? Ito ay dahil nais naming gamitin ang GPIO 21 at FSEL2 kontrol GPIO 20-29, SET0 at CLR0 kontrol GPIO 0-31. Ang mga rehistro ng FSEL ay nagtatalaga ng tatlong mga piraso para sa bawat GPIO pin. Dahil gumagamit kami ng FSEL2 nangangahulugang mga bit 0-2 control GPIO 20, at bits 3-5 control GPIO 21 at iba pa. Ang mga rehistro ng Set at CLR ay nagtatalaga ng isang solong bit sa bawat pin. Halimbawa, ang bit 0 sa SET0 at CLR0 ay kumokontrol sa GPIO 1. Upang makontrol ang GPIO 21 itatakda mo ang bit 21 sa SET0 at CLR0.

Okay kaya napag-usapan namin kung paano i-access ang mga rehistro na ito, ngunit ano ang ibig sabihin ng lahat?

  • Gagamitin ang rehistro ng FSEL2 upang maitakda ang GPIO 21 sa output. Upang magtakda ng isang pin upang mag-output kailangan mong itakda ang pagkakasunud-sunod ng kaunti ng tatlong mga piraso sa 1. Kaya't kung ang mga bit 3-5 ay makontrol ang GPIO 21 na nangangahulugang kailangan nating itakda ang unang bit, bit 3 hanggang 1. Sasabihin nito sa pi na nais naming gamitin ang GPIO 21 bilang isang output. Kaya't kung titingnan natin ang 3 mga piraso para sa GPIO 21 dapat silang magmukhang ganito pagkatapos nating maitakda ito sa output, b001.
  • Sinasabi ng GPSET0 ang pi upang i-on ang pin (output ng isang boltahe). Upang magawa ito, i-toggle lang namin ang kaunti na tumutugma sa gusto naming GPIO pin. Sa aming, kaso bit 21.
  • Sinasabi ng GPCLR0 ang pi upang patayin ang pin (walang boltahe). Upang patayin ang pin na itakda ang kaunti sa kaukulang GPIO pin. Sa aming kaso bit 21

Bago kami makarating sa isang kumikislap na humantong, hinayaan muna gumawa ng isang simpleng programa na i-on lamang ang led.

Upang magsimula kailangan naming magdagdag ng dalawang mga direktiba sa tuktok ng aming source code.

  • .seksyon.nagsasabi sa pi kung saan ilalagay ang code
  • .global _start

Susunod, kailangan naming i-layout ang lahat ng mga address na gagamitin namin. Gumamit ng.equ upang magtalaga ng mga nabasang simbolo sa mga halaga.

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

Ngayon ay lilikha kami ng mga maskara upang maitakda ang mga piraso na kailangan naming maitakda.

  • .equ SET_BIT3, 0x08 Itatakda nito ang bit tatlong 0000_1000
  • .equ SET_BIT21, 0x200000

Pagkatapos kailangan naming idagdag ang aming _start na label

_start:

Mag-load ng base address sa magparehistro

ldr r0, = BASE

Ngayon kailangan naming magtakda ng bit3 ng GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, # GPFSEL2] Sinasabi ng tagubiling ito na isulat muli ang kaunting 0x08 sa address ng GPFSEL2

Sa wakas kailangan naming itakda ang GPIO 21 hanggang sa pamamagitan ng pagtatakda ng bit 21 sa rehistro ng GPSET0

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

Ang panghuling produkto ay dapat magmukhang katulad ng code na nakalarawan.

Ang susunod na hakbang ay upang ayusin ang code at lumikha ng isang.img file na maaaring patakbuhin ng pi.

  • I-download ang kalakip na makefile, at kernel.ld at kung nais mo ang source code ng turn_led_on.s.
  • Ilagay ang lahat ng mga file sa parehong folder.
  • Kung gumagamit ka ng iyong sariling source code i-edit ang makefile at palitan ang code = turn_led_on.s ng code =.s
  • I-save ang makefile.
  • Gamitin ang terminal (linux) o cmd window (windows) upang mag-navigate sa iyong folder na naglalaman ng mga file at i-type ang make at hit enter
  • Dapat gumawa ang file na gumawa ng isang file na tinatawag na kernel.img
  • Kopyahin ang kernel.img sa iyong mini sd card. Ang mga nilalaman ng iyong card ay dapat na nakalarawan (larawan 3): bootcode.bin, start.elf, fixup.dat, at kernel.img.
  • Iwaksi ang mini sd card at ipasok ito sa pi
  • I-plug pi sa mapagkukunan ng kuryente
  • Dapat ilaw ang LED !!!

Bahagyang MAHALAGA TANDAAN: Maliwanag na ang mga instruktor ay may problema sa makefile na walang extension, kaya't muling na-upload ko ito sa isang extension na.txt. Mangyaring alisin ang extension kapag na-download mo ito upang gumana ito nang maayos.

Inirerekumendang: