Мазмуну:

Жалаң металл Raspberry Pi 3: Жарк эткен LED: 8 кадам
Жалаң металл Raspberry Pi 3: Жарк эткен LED: 8 кадам

Video: Жалаң металл Raspberry Pi 3: Жарк эткен LED: 8 кадам

Video: Жалаң металл Raspberry Pi 3: Жарк эткен LED: 8 кадам
Video: Итальянский усатый беспилотник ► 1 Прохождение Super Mario Galaxy 2 (Nintendo Wii) 2024, Июль
Anonim
Жалаң металл Raspberry Pi 3: Жаркылдаган LED
Жалаң металл Raspberry Pi 3: Жаркылдаган LED

By moldypizzaFollow More by Author:

Raspberry Pi басуу баскычы диоддор жалаң металл менен
Raspberry Pi басуу баскычы диоддор жалаң металл менен
Raspberry Pi баскычын LED Bare Metal менен
Raspberry Pi баскычын LED Bare Metal менен
Сандуктар
Сандуктар
Сандуктар
Сандуктар
Ардагерлер күнү үчүн рельефтин оюмун кантип жасаса болот
Ардагерлер күнү үчүн рельефтин оюмун кантип жасаса болот
Ардагерлер күнү үчүн рельефтин оюмун кантип жасаса болот
Ардагерлер күнү үчүн рельефтин оюмун кантип жасаса болот

Жөнүндө:.oO0Oo. Moldypizza жөнүндө көбүрөөк маалымат »

BARE METAL pi 3 Blinking LED үйрөткүчүнө кош келиңиз!

Бул үйрөткүчтө биз Raspberry PI 3, нан, резистор, жетектөөчү жана бош SD картаны колдонуп LEDдин жарк этип чыгышын башынан аягына чейин карайбыз.

Ошентип, BARE METAL деген эмне? BARE METAL - бул фрилинг программалоо эмес. Жалаң металл - бул биз компьютердин аягына чейин эмне кыларын толугу менен көзөмөлдөп турганыбызды билдирет. Демек, бул, негизинен, Arm толугу менен инструкция топтомун колдонуу менен жазылат дегенди билдирет. Акырында, биз Raspberry Piнин GPIO казактарынын биринин физикалык дарегине жетүү жана аны чыгаруу үчүн конфигурациялоо, андан кийин аны күйгүзүү жана өчүрүү аркылуу LED жаркырап турган программаны түзөбүз. Бул долбоорду ишке ашыруу - камтылган программалоону баштоонун эң сонун жолу жана компьютердин кантип иштээрин жакшыраак түшүнүү.

Сага эмне керек?

Аппараттык

  • Малина PI 3
  • SD карта жүктөлүүчү сүрөт менен алдын ала жүктөлгөн
  • Breadboard
  • Эркек Аял секирүүчү зымдар
  • Эркек Эркек секирүүчү зымдар
  • LED
  • 220 Ом каршылыгы (так 220 Ом болушу шарт эмес, көпчүлүк резистор иштейт)
  • мини SD карта
  • мини SD карта алдын ала малина pi операциялык системасы менен жүктөлгөн (адатта пи менен кошо берилет)

Программалык камсыздоо

  • GCC компилятору
  • GNU камтылган шаймандар тизмеги
  • текст редактору
  • sd карт форматтоочу

Жарайт, баштайлы!

1 -кадам: НЕРСЕЛЕРДИ ЖӨНДӨӨ/СТУФФ

НЕРСЕЛЕРДИ ЖӨНДӨӨ/СТУФФ
НЕРСЕЛЕРДИ ЖӨНДӨӨ/СТУФФ

Макул, ошондо … биринчи кадам - бул аппараттык жабдууларды алуу. Сиз бөлүктөрдү өзүнчө сатып алсаңыз болот же жетиштүү бөлүктөрү бар комплект бар. Шилтеме

Бул комплект малина pi 3 жана башкаларын орнотуу үчүн керектүү нерселердин баары менен келет! бул комплектке кирбеген жалгыз нерсе - бул кошумча SD карта. Күт! Азырынча башкасын сатып албаңыз. Эгерде сиз картага алдын ала жүктөлгөн Linux орнотууну колдонууну пландабасаңыз, анда камтылган mini sd картасынын мазмунун кийинчерээк көчүрүп, картаны кайра форматтаңыз (кийинчерээк). МААНИЛҮҮ ЭСКЕРТҮҮ: Файлдарды киргизилген картада сактаганыңызды текшериңиз, кийинчерээк аларга керек болот!

Андан кийин программаны орнотууга убакыт келди. Бул окуу куралы программалык камсыздоону орнотуу боюнча деталдуу көрсөтмөлөрдү камтыбайт. Буларды кантип орнотуу боюнча онлайнда көптөгөн ресурстар жана окуу куралдары бар:

WINDOWS КОЛДОНУЧУЛАРЫ:

Gccти жүктөп алып, орнотуңуз

Андан кийин, GNU ARM камтылган шаймандарын жүктөп алып, орнотуңуз

LINUX/MAC

  • Linux бөлүштүрүүлөрү алдын ала орнотулган gcc менен келет
  • GNU ARM камтылган шаймандарын жүктөп алып, орнотуңуз.

Макул, эгерде баары жакшы болсо, анда сиз терминалды (linux/mac) же cmd линиясын (терезелерди) ачып, терип көрүшүңүз керек

arm-none-eabi-gcc

Чыгаруу биринчи сүрөттө окшош болушу керек. Бул жөн гана туура орнотулганын текшерүү үчүн.

Жарайт, азыр алдын ала реквизиттер жок болгондуктан, кызыктуу нерселерди баштоого убакыт келди.

2 -кадам: CIRCUIT

ЦИРКУТ
ЦИРКУТ
ЦИРКУТ
ЦИРКУТ
ЦИРКУТ
ЦИРКУТ

Райондук убакыт! Бул үчүн схема жөнөкөй. Биз пи боюнча GPIO 21ге (пин 40) LED туташтырабыз (2 жана 3 -сүрөттү караңыз). Лидердин бузулушуна жол бербөө үчүн резистор да серия менен туташкан. Резистор питтеги GND (пин 39) менен туташтырылган нан тактасындагы терс мамычага кошулат. Жетектөөнү туташтырууда кыска жагын терс жагына туташтырууну унутпаңыз. Акыркы сүрөттү караңыз

3 -кадам: BOOTABLE Mini SD

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

Сиздин бош 3 мини SD картаңызды таануу үчүн 3 кадам бар. Биз bootcode.bin, start.elf жана fixup.dat файлдарын таап, көчүрүшүбүз керек. Эгерде сиз canakitти сатып алган болсоңуз же linux бөлүштүрүүсү менен pi 3 үчүн жүктөлүүчү SD картасын түзсөңүз, бул файлдарды камтылган sd картка ала аласыз. Кандай болбосун, бул файлдар пи үчүн SD картаны жүктөлүүчү түзмөк катары таанууга уруксат берүү үчүн керек. Кийинки, mini sdди fat32ге форматтаңыз (көпчүлүк мини SD карталары fat32де форматталган. Мен sandiskтен арзан чакан SD картаны колдондум), bootcode.bin, start.elf, fixup.dat карталарын SD картага жылдырыңыз. А сенин ишиң! Макул дагы бир жолу жана сүрөттөрдүн ирети менен кадамдар:

  1. Bootcode.bin, start.elf, fixup.dat табыңыз.
  2. Сиздин SD картаңыз fat32ге форматталганын тактаңыз.
  3. Bootcode.bin, start.elf жана fixup.dat форматталган SD картага жылдырыңыз.

Муну мен кантип түшүндүм, шилтеме.

4 -кадам: Mini SDди текшериңиз

Mini SD караңыз
Mini SD караңыз
Mini SD караңыз
Mini SD караңыз

Жарайт, бизде жүктөлүүчү мини sd картасы бар жана бул жерде сизде pi 3 бар деп үмүттөнөбүз. Эми биз муну текшеришибиз керек, pi 3 mini sd картасын жүктөлүүчү деп тааныйт.

Кичи USB порттун жанында эки кичинекей LED бар. Бири кызыл. Бул кубаттуулуктун көрсөткүчү. Пи кубат алганда бул жарык күйүп турушу керек. Ошентип, эгер сиз азыр пиди мини sd картасы жок туташтырсаңыз, анда ал кызыл күйүп күйүшү керек. Макул, азыр пиңизди сууруп, мурунку кадамда түзүлгөн жүктөлүүчү мини sd картты салып, пиди сайыңыз. Башка жарыкты көрүп жатасызбы? Кызыл картанын жанында жашыл жарык болушу керек, бул анын SD картаны окуп жатканын көрсөтүп турат. Бул LED ACT LED деп аталат. Жашоого жөндөмдүү SD карта салынганда жарык болот. Бул сиздин чакан SD картаңызга кирип жатканда жарк этет.

Макул, сиз жүктөлүүчү мини sd картты салып, пиди туташтыргандан кийин эки нерсе болушу керек болчу:

  1. Кызыл лампа жарык алышы керек, бул электр энергиясын алууну билдирет
  2. Жашыл LED кичинекей SD картага жүктөлгөнүн көрсөтүү менен жарыктандырылышы керек

Эгер бир нерсе туура эмес болуп калса, мурунку кадамдарды кайталап көрүңүз же көбүрөөк маалымат алуу үчүн төмөнкү шилтемени басыңыз.

Бул жердеги шилтеме жакшы шилтеме.

5 -кадам: CODE1

Бул долбоор ARM ассемблер тилинде жазылган. Бул окуу куралында ARM чогултуунун негизги түшүнүгү кабыл алынган, бирок бул жерде сиз билишиңиз керек болгон бир нече нерсе бар:

.equ: символго маани берет, башкача айтканда abc.equ 5 abc азыр бешти билдирет

  • ldr: эстен жүктөлөт
  • str: эсине жазат
  • cmp: алып салуу аркылуу эки маанини салыштырат. Желектерди орнотот.
  • б: этикеткага бутак
  • кошуу: арифметиканы аткарат

Эгерде сизде курал чогултуу боюнча тажрыйбаңыз жок болсо, бул видеону көрүңүз. Бул сизге курал чогултуу тилин жакшы түшүнүүгө жардам берет.

Макул, азыр бизде малина pi 3кө туташкан схема бар жана бизде пи тааныган sd картасы бар, андыктан биздин кийинки милдетибиз - аткарылуучу программа менен пи жүктөө аркылуу схема менен кантип өз ара аракеттенүү керек экенин аныктоо. Жалпысынан алганда, биз эмне кылышыбыз керек экенин билүү үчүн пиого GPIO 21ден чыңалуу чыгаруу керек (кызыл зымга туташкан пин). Андан кийин, биз жарк эттирип күйгүзүү үчүн, аны которуштуруу ыкмасына муктажбыз. Бул үчүн бизге көбүрөөк маалымат керек. Бул жерде биз GPIO 21ге кантип чыгууну айтышты билбейбиз, ошондуктан биз маалымат барагын окуубуз керек. Көпчүлүк микро контроллерлерде бардыгы кантип иштээри так көрсөтүлгөн маалымат баракчалары бар. Тилекке каршы, pi 3 расмий документтери жок! Бирок, расмий эмес маалымат баракчасы бар. Бул жерде ага эки шилтеме бар:

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

Макул, бул учурда, сиз маалымат баракчасын карап чыгууга жана сиз таба турган маалыматты көрүүгө кийинки кадамга өтүүдөн мурун бир нече мүнөт кетишиңиз керек.

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

Малина pi 3 53 чыгуу/кирүү казыктарын (перифериялык) көзөмөлдөө үчүн каттайт. Пиндер биригип, ар бир топ реестрге дайындалат. GPIO үчүн биз SELECT реестрине, SET реестрине жана CLEAR регистрлерине кире алышыбыз керек. Бул реестрлерге жетүү үчүн бизге бул реестрлердин физикалык дареги керек. Маалымат баракчасын окуп жатканда, сиз даректин офсетин (lo байт) гана белгилеп, аны базалык дарекке кошкуңуз келет. Сиз муну жасашыңыз керек, анткени маалымат барагында Linuxтун виртуалдык дареги бар, алар негизинен операциялык системалар дайындаган баалуулуктар. Биз операциялык тутумду колдонбойбуз, андыктан физикалык дарегин колдонуу менен бул реестрлерге түз кирүүбүз керек. Бул үчүн сизге төмөнкү маалымат керек:

  • Кошумча жабдуулардын базалык дареги: 0x3f200000. Pdf (6 -бет) базалык дарек 0x3f000000 деп айтылат, бирок бул дарек иштебейт. 0x3f200000 колдонуңуз
  • FSEL2 (SELECT) офсети реестрдин толук дареги эмес. PDF FSEL2ди 0x7E20008 боюнча тизмектейт, бирок бул дарек Linuxтун виртуалдык дарегин билдирет. Орун алмашуу бирдей болот, ошондуктан биз белгилегибиз келет. 0x08
  • GPSET0 офсет (SET): 0x1c
  • GPCLR0 ордун толтуруу (CLEAR): 0x28

Демек, сиз маалымат баракчасында 4 SELECT реестри, 2 SET реестри жана 2 CLEAR регистринин тизмеси бар экенин байкадыңыз, андыктан мен эмне үчүн тандадым? Себеби биз GPIO 21ди колдонууну каалайбыз жана FSEL2 GPIO 20-29, SET0 жана CLR0 GPIO 0-31 көзөмөлдөйт. FSEL регистрлери ар бир GPIO пин үчүн үч битти дайындайт. Биз FSEL2ди колдонуп жаткандыктан, бул 0-2 битти башкарат GPIO 20, ал эми 3-5 башкаруу GPIO 21 ж.б. Set жана CLR регистрлери ар бир пинге бир битти дайындайт. Мисалы, SET0до 0 бит жана CLR0 GPIO 1ди көзөмөлдөйт. GPIO 21ди көзөмөлдөө үчүн SET0 менен CLR0до 21 битти коймоксуз.

Макул, биз бул реестрлерге кантип кирүү жөнүндө сүйлөштүк, бирок мунун баары эмнени билдирет?

  • GPO 21ди чыгаруу үчүн FSEL2 реестри колдонулат. Чыгаруу үчүн пин орнотуу үчүн үч биттин заказ битин 1ге коюу керек. Демек, эгер биттер 3-5ти башкарса GPIO 21, биз биринчи битти 3төн 1ге чейин коюшубуз керек дегенди билдирет. биз GPIO 21ди өндүрүш катары колдонууну каалайбыз. Ошентип, эгер биз GPIO 21 үчүн 3 битти карай турган болсок, анда биз аны чыгарууга орноткондон кийин, b001 ушундай болушу керек.
  • GPSET0 пи -ге төөнөгүчтү күйгүзүүнү айтат (чыңалууну чыгаруу). Бул үчүн биз каалаган GPIO пинге туура келген битти алмаштырабыз. Биздин учурда, бит 21.
  • GPCLR0 пи пинди өчүрүүнү айтат (чыңалуу жок). Пинди өчүрүү үчүн, битти тиешелүү GPIO пинге коюңуз. Биздин учурда 21 бит

Жарк эткен ледге жетээрден мурун, адегенде ледди күйгүзө турган жөнөкөй программа түзөлү.

Баштоо үчүн биз баштапкы кодубуздун үстүнө эки директиваны кошушубуз керек.

  • .бөлүм.init пи кодду кайда коюу керектигин айтат
  • .global _start

Андан кийин, биз колдоно турган бардык даректерди жайгаштырышыбыз керек. Маанилерге окула турган символдорду берүү үчүн.equ колдонуңуз.

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

Эми биз орнотушубуз керек болгон биттерди орнотуу үчүн маскалар түзөбүз.

  • .equ SET_BIT3, 0x08 Бул үч битти 0000_1000 коёт
  • .equ SET_BIT21, 0x200000

Андан кийин биз _start энбелгибизди кошушубуз керек

_start:

Негизги даректи реестрге жүктөө

ldr r0, = БАЗА

Эми биз GPFSEL2 bit3 орнотушубуз керек

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Бул нускамада 0x08 битин GPFSEL2 дарегине кайра жазуу айтылат.

Акыр -аягы, биз GPSET0 реестрине битти 21 коюу менен GPIO 21ди күйгүзүшүбүз керек

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

Акыркы продукт сүрөттөгү кодго окшош болушу керек.

Кийинки кадам - кодду чогултуу жана pi иштете турган.img файлын түзүү.

  • Тиркелген makefile жана kernel.ld жүктөп алыңыз жана turn_led_on.s булак кодун кааласаңыз.
  • Бардык файлдарды бир папкага салыңыз.
  • Эгерде сиз өзүңүздүн баштапкы кодуңузду колдонуп жатсаңыз, анда файлды түзөтүңүз жана = turn_led_on.s кодун =.s менен алмаштырыңыз.
  • Makefile файлын сактаңыз.
  • Файлдарды камтыган папкаңызга өтүү үчүн терминалды (linux) же cmd терезесин (терезелерди) колдонуңуз жана "make" деп териңиз.
  • Make файлы kernel.img деп аталган файлды жаратышы керек
  • Мини sd картка kernel.img көчүрүү. Сиздин карттардын мазмуну сүрөттөгүдөй болушу керек (pic 3): bootcode.bin, start.elf, fixup.dat жана kernel.img.
  • Mini sd картасын чыгарып, пи ичине салыңыз
  • Пиди электр булагына туташтырыңыз
  • Светодиод жанышы керек !!!

ЖАҢЫ МААНИЛҮҮ ЭСКЕРТҮҮ: Кыязы, көрсөтмө берүүчүлөрдө кеңейтүүнүн жоктугу менен көйгөй бар болчу, ошондуктан мен аны.txt кеңейтүүсү менен кайра жүктөдүм. Сураныч, кеңейтүү туура иштеши үчүн аны жүктөп алганыңызда алып салыңыз.

Сунушталууда: