Съдържание:
- Стъпка 1: НАСТРОЙВАНЕ НА НЕЩАТА/ПОВЕЧЕНИЕ
- Стъпка 2: КРЪГ
- Стъпка 3: МОЖЕ ДА ЗАПОЧНЕТЕ Mini SD
- Стъпка 4: ПРОВЕРЕТЕ Mini SD
- Стъпка 5: CODE1
- Стъпка 6: CODE2: Turn_Led_ON
Видео: Bare Metal Raspberry Pi 3: Мигащ светодиод: 8 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
От moldypizza Следвайте още от автора:
За:.oO0Oo. Повече за moldypizza »
Добре дошли в BARE METAL pi 3 Мигащ LED урок!
В този урок ще преминем през стъпките, от началото до края, за да мига светодиод, използвайки Raspberry PI 3, макет, резистор, светодиод и празна SD карта.
И така, какво е BARE METAL? BARE METAL не е излишно програмиране. Голият метал означава, че ние напълно контролираме какво ще прави компютърът. Така че това основно означава, че кодът ще бъде изцяло написан в асемблиране, използвайки набора от инструкции Arm. До края ще сме създали програма, която ще мига светодиод, като получи достъп до физическия адрес на един от GPIO пиновете на Raspberry Pi и го конфигурира за извеждане, след което го включва и изключва. Опитът на този проект е чудесен начин да започнете с вграденото програмиране и да се надяваме да осигурите по -добро разбиране за това как работи компютърът.
Какво ти е необходимо?
Хардуер
- Малина PI 3
- SD карта, предварително заредена с стартиращо изображение
- Платка
- Мъжки женски джъмперни проводници
- Мъжки проводници от мъжки тип
- LED
- Резистор 220 ома (не трябва да е точно 220 ома, почти всеки резистор ще работи)
- мини sd карта
- мини SD карта, предварително заредена с операционна система raspberry pi (обикновено е включена в pi)
Софтуер
- GCC компилатор
- GNU вградена верига от инструменти
- текстов редактор
- форматиране на sd карти
Добре, нека започнем!
Стъпка 1: НАСТРОЙВАНЕ НА НЕЩАТА/ПОВЕЧЕНИЕ
Добре, така че … първата стъпка е да придобиете хардуер. Можете да закупите частите отделно или има комплект, който идва с повече от достатъчно части. ВРЪЗКА
Този комплект идва с всичко необходимо за настройка на малинов пи 3 и повече! единственото нещо, което не е включено в този комплект, е допълнителна мини SD карта. Изчакайте! Не купувайте още един. Ако не планирате да използвате инсталирана на Linux инсталирана на картата, просто копирайте съдържанието на включената мини sd карта за по -късно и преформатирайте картата (повече за това по -късно). ВАЖНО ЗАБЕЛЕЖКА: не забравяйте да запазите файловете на включената карта, от която ще се нуждаете за по -късно!
След това е време да настроите софтуера. Този урок няма да включва подробни инструкции как да инсталирате софтуера. Има много ресурси и уроци онлайн за това как да ги инсталирате:
ПОТРЕБИТЕЛИ НА WINDOWS:
Изтеглете и инсталирайте gcc
След това изтеглете и инсталирайте GNU ARM вградената верига с инструменти
LINUX/MAC
- Linux дистрибуциите идват с предварително инсталиран gcc
- Изтеглете и инсталирайте GNU ARM вградена верига от инструменти.
Добре, така че ако всичко върви добре, трябва да можете да отворите терминала (linux/mac) или cmd ред (windows) и да опитате да напишете
arm-none-eabi-gcc
Изходът трябва да изглежда подобно на първата снимка. Това е само за да се провери дали е инсталиран правилно.
Добре, след като предпоставките са отстранени, време е да започнете със забавните неща.
Стъпка 2: КРЪГ
Време на веригата! Веригата за това е проста. Ще свържем светодиод към GPIO 21 (пин 40) на pi (виж снимка 2 и 3). Резистор също е свързан последователно, за да се предотврати повреда на светодиода. Резисторът ще бъде свързан към отрицателната колона на макета, който ще бъде свързан към GND (щифт 39) на pi. Когато свързвате светодиода, не забравяйте да свържете късия край към отрицателната страна. Вижте последната снимка
Стъпка 3: МОЖЕ ДА ЗАПОЧНЕТЕ Mini SD
Има три стъпки, за да накарате вашия pi 3 да разпознае вашата празна мини sd карта. Трябва да намерим и копираме bootcode.bin, start.elf и fixup.dat. Можете да получите тези файлове на включената мини sd карта, ако сте закупили canakit или сте направили стартираща sd карта за pi 3 с дистрибуция на linux. Така или иначе тези файлове са необходими, за да позволят на pi да разпознае sd картата като стартиращо устройство. След това форматирайте mini sd на fat32 (повечето мини sd карти са форматирани във fat32. Използвах евтина мини sd карта от sandisk), преместете bootcode.bin, start.elf, fixup.dat върху sd картата. И сте готови! Добре още веднъж и в реда на снимките стъпките са:
- Намерете bootcode.bin, start.elf, fixup.dat.
- Уверете се, че вашата SD карта е форматирана на fat32.
- Преместете bootcode.bin, start.elf и fixup.dat върху форматираната sd карта.
Ето как разбрах това, линк.
Стъпка 4: ПРОВЕРЕТЕ Mini SD
Добре, имаме стартираща мини SD карта и се надяваме, че имате pi 3 на този етап. Така че сега трябва да го тестваме, за да се уверим, че pi 3 разпознава mini sd картата като стартираща.
На pi, близо до мини usb порта има два малки светодиода. Единият е червен. Това е индикатор за захранване. Когато пи получава захранване, тази лампа трябва да свети. Така че, ако включите своя pi в момента без мини SD карта, той трябва да светне червено. Добре, сега изключете вашия pi и поставете стартиращата си mini sd карта, която е създадена в предишната стъпка и включете pi. Виждате ли друга светлина? Трябва да има зелена светлина, точно до червената, която показва, че чете SD картата. Този светодиод се нарича ACT led. Той ще свети, когато има поставена жизнеспособна SD карта. Той ще мига, когато има достъп до вашата мини sd карта.
Добре, така че две неща трябваше да се случат, след като поставите стартиращата мини sd карта и включите pi:
- Червеният светодиод трябва да свети, което показва приемане на мощност
- Зеленият светодиод трябва да свети, което показва, че е зареден в мини SD картата
Ако нещо се обърка, опитайте да повторите предишните стъпки или кликнете върху връзката по -долу за повече информация.
Връзката тук е добра справка.
Стъпка 5: CODE1
Този проект е написан на асемблерен език на ARM. В този урок се предполага основно разбиране за сглобяването на ARM, но ето няколко неща, които трябва да знаете:
.equ: присвоява стойност на символ, т.е. abc.equ 5 abc сега представлява пет
- ldr: зарежда от паметта
- str: записва в паметта
- cmp: сравнява две стойности чрез извършване на изваждане. Задава знамена.
- b: клон към етикета
- add: изпълнява аритметика
Ако нямате опит с монтажа на Arm, гледайте това видео. Това ще ви даде добро разбиране на асемблерния език на Arm.
Добре, така че в момента имаме схема, която е свързана с нашия малинов pi 3 и имаме sd карта, която pi разпознава, така че следващата ни задача е да разберем как да взаимодействаме с веригата, като заредим pi с изпълнима програма. Като цяло, това, което трябва да направим, е да кажем на pi да изведе напрежение от GPIO 21 (щифт, свързан към червения проводник). След това се нуждаем от начин да превключим светодиода, за да го накара да премигне. За да направим това, имаме нужда от повече информация. На този етап нямаме представа как да кажем на GPIO 21 да изведе, поради което трябва да прочетем листа с данни. Повечето микроконтролери имат информационни листове, които определят как точно работи всичко. За съжаление, pi 3 няма официална документация! Има обаче неофициален лист с данни. Ето две връзки към него:
- github.com/raspberrypi/documentation/files…
- web.stanford.edu/class/cs140e/docs/BCM2837…
Добре, на този етап трябва да отделите няколко минути, преди да преминете към следващата стъпка, за да прегледате информационния лист и да видите каква информация можете да намерите.
Стъпка 6: CODE2: Turn_Led_ON
Малина pi 3 53 регистрира за управление на изходните/входните щифтове (периферни устройства). Пиновете са групирани заедно и всяка група е присвоена на регистър. За GPIO трябва да имаме достъп до регистър SELECT, регистър SET и CLEAR. За достъп до тези регистри се нуждаем от физическия адрес на тези регистри. Когато четете листа с данни, искате само да отбележите изместването на адреса (lo byte) и да го добавите към основния адрес. Трябва да направите това, защото в листа с данни са изброени виртуалните адреси на 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 присвояват по един бит на всеки пин. Например бит 0 в SET0 и CLR0 контролира GPIO 1. За да контролирате GPIO 21, бихте задали бит 21 в SET0 и CLR0.
Добре, така че говорихме за това как да получите достъп до тези регистри, но какво означава всичко това?
- Регистърът FSEL2 ще се използва за настройка на изхода на GPIO 21. За да зададете извод за извеждане, трябва да зададете бита lo lo за трите бита на 1. Така че, ако битовете 3-5 контролират GPIO 21, това означава, че трябва да зададем първия бит, бит 3 на 1. Това ще каже на pi че искаме да използваме GPIO 21 като изход. Така че, ако трябва да разгледаме 3 -те бита за GPIO 21, те трябва да изглеждат така, след като го настроим на изход, b001.
- GPSET0 казва на pi да включи щифта (да изведе напрежение). За да направим това, просто превключваме бита, който съответства на желания от нас пин GPIO. В нашия случай бит 21.
- GPCLR0 казва на pi да изключи щифта (без напрежение). За да изключите щифта, задайте бита на съответния GPIO щифт. В нашия случай бит 21
Преди да стигнем до мигащ светодиод, първо нека направим проста програма, която просто ще включи светодиода.
За да започнем, трябва да добавим две директиви в горната част на нашия изходен код.
- .section.init казва на pi къде да постави кода
- .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
_старт:
Заредете базовия адрес в регистъра
ldr r0, = БАЗА
Сега трябва да зададем bit3 на GPFSEL2
- ldr r1, SET_BIT3
- str r1, [r0, #GPFSEL2] Тази инструкция казва да се запише битът 0x08 на адреса на GPFSEL2
Накрая трябва да включим GPIO 21, като зададем бит 21 в регистъра GPSET0
- ldr r1, = SET_BIT21
- str r1, [r0, #GPSET0]
Крайният продукт трябва да прилича на изобразения код.
Следващата стъпка е да компилирате кода и да създадете.img файл, който pi може да изпълнява.
- Изтеглете прикачения makefile и kernel.ld и ако искате изходния код turn_led_on.s.
- Поставете всички файлове в една и съща папка.
- Ако използвате свой собствен изходен код, редактирайте makefile и заменете code = turn_led_on.s с code =.s
- Запазете makefile.
- Използвайте терминала (linux) или cmd прозореца (windows), за да отидете до вашата папка, съдържаща файловете, и въведете make и натиснете enter
- Make файлът трябва да генерира файл, наречен kernel.img
- Копирайте kernel.img на вашата мини sd карта. Съдържанието на вашите карти трябва да бъде както на снимката (снимка 3): bootcode.bin, start.elf, fixup.dat и kernel.img.
- Извадете мини sd картата и я поставете в pi
- Включете pi към източника на захранване
- LED трябва да светне !!!
МАЛКО ВАЖНА ЗАБЕЛЕЖКА: Явно инструкторите са имали проблем с това, че makefile няма разширение, затова го качих отново с разширение.txt. Моля, премахнете разширението, когато го изтеглите, за да работи правилно.
Препоръчано:
Мигащ светодиод с помощта на Arduino (TinkerCAD): 5 стъпки
Мигащ светодиод с помощта на Arduino (TinkerCAD): Здравей! Тази инструкция ще бъде доста основна. Тук ще покажа как да използвам TinkerCAD за мигане на Led с помощта на Arduino.TinkerCAD е доста полезен софтуер, когато става въпрос за бързо тестване на кода ви и е много удобен за тези, които
Мигащ светодиод {Button Controlled}: 5 стъпки
Мигащ светодиод {Button Controlled}: Аз съм студент в Kang Chiao. Това е моят проект, използвам Arduino и направих мигаща LED светлина с бутон, който може да го накара да премигне. Можете да го поставите върху кърпата си и когато някои хора са твърде близо до вас, можете да натиснете бутона и крушката wi
Таймери на 8051 с мигащ светодиод Пример Част 1: 3 стъпки
Таймери на 8051 с мигащ светодиод Пример Част 1: В този урок ще ви разкажа как се правят таймери на 8051. Тук ще обсъдим таймер 0 в режим 1. Следващият урок ще обсъдим и други режими
Мигащ светодиод с помощта на ESP8266 NodeMCU Lua WiFi Урок: 6 стъпки
Мигащ светодиод с помощта на ESP8266 NodeMCU Lua WiFi Урок: ОПИСАНИЕ NodeMCU е IoT платформа с отворен код. Той включва фърмуер, който работи на ESP8266 WiFi SoC от Espressif, и хардуер, базиран на модула ESP-12. Терминът "NodeMcu" по подразбиране се отнася за филмовия софтуер, а не за
Започнете първия си проект с малина: Мигащ светодиод: 4 стъпки
Започнете първия си проект с Raspberry: Мигащ светодиод: В този проект ще ви покажа как да програмирате Raspberry Pi, за да направите LED мигане, Ако почти сте закупили Raspberry pi и не знаете нищо откъде да започнете, това урок, в който се вписва. В допълнение към вашия Raspberry Pi, работещ с Raspbian, y