Բովանդակություն:

Bare Metal Raspberry Pi 3: Թարթող LED: 8 քայլ
Bare Metal Raspberry Pi 3: Թարթող LED: 8 քայլ

Video: Bare Metal Raspberry Pi 3: Թարթող LED: 8 քայլ

Video: Bare Metal Raspberry Pi 3: Թարթող LED: 8 քայլ
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Հուլիսի
Anonim
Bare Metal Raspberry Pi 3: Թարթող LED
Bare Metal Raspberry Pi 3: Թարթող LED

Հետեւեք հեղինակի ավելին.

Ազնվամորի Պի կոճակ LED- ով մերկ մետաղով
Ազնվամորի Պի կոճակ LED- ով մերկ մետաղով
Ազնվամորի Պի կոճակ LED- ով մերկ մետաղով
Ազնվամորի Պի կոճակ LED- ով մերկ մետաղով
Արկղեր
Արկղեր
Արկղեր
Արկղեր
Ինչպես կատարել օգնության փորագրություն վետերանների օրվա համար
Ինչպես կատարել օգնության փորագրություն վետերանների օրվա համար
Ինչպես կատարել օգնության փորագրություն վետերանների օրվա համար
Ինչպես կատարել օգնության փորագրություն վետերանների օրվա համար

Օգտվողի մասին.oO0Oo. Ավելին moldypizza- ի մասին »

Բարի գալուստ BARE METAL pi 3 Blinking LED ձեռնարկ:

Այս ձեռնարկում մենք սկզբից մինչև վերջ կանցնենք այն քայլերի միջոցով, որոնք կպայթեցնեն լուսադիոդի թարթումը ՝ օգտագործելով Raspberry PI 3, տախտակ, դիմադրություն, led և դատարկ SD քարտ:

Այսպիսով, ինչ է BARE METAL- ը: BARE METAL- ը շռայլ ծրագրավորում չէ: Մերկ մետաղը նշանակում է, որ մենք լիովին վերահսկում ենք համակարգչի անելիքները: Այսպիսով, դա հիմնականում նշանակում է, որ կոդը ամբողջությամբ գրվելու է հավաքման մեջ ՝ օգտագործելով Arm հրահանգների հավաքածուն: Մինչև վերջ մենք կստեղծենք ծրագիր, որը կթարթեցնի լուսադիոդային լուսարձակը ՝ մուտք գործելով Raspberry Pi- ի GPIO կապում մեկի ֆիզիկական հասցեով և կազմաձևելով այն ելքի վրա, այնուհետև միացնել և անջատել այն: Այս նախագիծը փորձելը հիանալի միջոց է ներդրված ծրագրավորում սկսելու համար և հուսով եմ ավելի լավ պատկերացում կազմելու, թե ինչպես է աշխատում համակարգիչը:

Ի՞նչ է ձեզ պետք:

Սարքավորումներ

  • Ազնվամորի PI 3
  • SD քարտ նախապես բեռնված bootable պատկերով
  • Breadboard
  • Արական իգական ցատկող լարեր
  • Արական Արական ցատկող լարեր
  • LED
  • 220 օմ դիմադրություն (պարտադիր չէ, որ լինի ճշգրիտ 220 օհմ, ցանկացած դիմադրիչի մեծ մասը կաշխատի)
  • մինի sd քարտ
  • մինի SD քարտ նախապես բեռնված ազնվամորու pi օպերացիոն համակարգով (սովորաբար ներառված է pi- ի հետ)

Ծրագրային ապահովում

  • GCC կազմող
  • GNU ներդրված գործիքաշղթա
  • տեքստային խմբագիր
  • sd քարտի ձևաչափիչ

Լավ, եկեք սկսենք:

Քայլ 1. ԲԱՆ/ԿԱՐԳԱՎԻԱԿԻ ԿԱՐԳԱՎՈՐՈՄ

ԲԱՆ/ԿԱՐԳԱՎՈՐՈՄ
ԲԱՆ/ԿԱՐԳԱՎՈՐՈՄ

Լավ … առաջին քայլը սարքավորում ձեռք բերելն է: Դուք կարող եք առանձին գնել մասերը կամ կա մի հավաքածու, որը գալիս է ավելի քան բավարար մասերով: ԿԱՊ

Այս հավաքածուն գալիս է այն ամենով, ինչ անհրաժեշտ է ազնվամորի pi 3 և ավելին տեղադրելու համար: միակ բանը, որը ներառված չէ այս հավաքածուի մեջ, լրացուցիչ մինի SD քարտ է: Սպասի! Դեռևս մեկ ուրիշը մի գնեք: Եթե չեք պլանավորում օգտագործել քարտի վրա նախապես բեռնված linux- ի տեղադրումը, ապա պարզապես պատճենեք ներառված մինի sd քարտի բովանդակությունը հետագայում և նորից ձևաչափեք քարտը (դրա մասին ավելի ուշ): ԿԱՐԵՎՈՐ ՈEՇԱԴՐՈԹՅՈՆ. Համոզվեք, որ ֆայլերը պահում եք ներառված քարտի վրա, որի կարիքը կունենաք հետագայում:

Հաջորդը ժամանակն է տեղադրել ծրագրակազմը: Այս ձեռնարկը չի ներառի մանրամասն հրահանգներ, թե ինչպես տեղադրել ծրագրակազմը: Կան բազմաթիվ ռեսուրսներ և ձեռնարկներ առցանց, թե ինչպես տեղադրել դրանք.

Պատուհանների օգտվողներ.

Ներբեռնեք և տեղադրեք gcc

Հաջորդը, ներբեռնեք և տեղադրեք GNU ARM- ի ներդրված գործիքաշղթան:

LINUX/MAC

  • Linux- ի բաշխումները գալիս են նախապես տեղադրված gcc- ով
  • Ներբեռնեք և տեղադրեք GNU ARM ներդրված գործիքաշղթա:

Լավ

arm-none-eabi-gcc

Ելքը պետք է նման լինի առաջին նկարին: Սա պարզապես ստուգելու համար, որ այն ճիշտ տեղադրված է:

Դե, հիմա, երբ նախապայմանները դուրս են եկել ճանապարհից, ժամանակն է սկսել զվարճալի իրերով:

Քայլ 2. ՇՐIRԱՆ

ՇՐՋԱՆ
ՇՐՋԱՆ
ՇՐՋԱՆ
ՇՐՋԱՆ
ՇՐՋԱՆ
ՇՐՋԱՆ

Շղթայի ժամանակը: Դրա համար միացումը պարզ է: Մենք միացնում ենք led- ը GPIO 21 -ին (փին 40) pi- ի վրա (տես նկար 2 և 3): Մի ռեզիստորը նույնպես միացված է մի շարք `կանխելու համար, որ լարերը վնասվեն: Ռեզիստորը միացված կլինի տախտակի բացասական սյունակին, որը միացված կլինի pi- ի GND- ին (39 -րդ փին): Led- ը միացնելիս անպայման միացրեք կարճ ծայրը բացասական կողմին: Տես վերջին նկարը

Քայլ 3: BOOTABLE Mini SD

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

Երեք քայլ կա, որպեսզի ձեր pi 3 -ը ճանաչի ձեր դատարկ մինի sd քարտը: Մենք պետք է գտնենք և պատճենենք bootcode.bin, start.elf և fixup.dat: Դուք կարող եք ստանալ այս ֆայլերը ներառված մինի sd քարտի վրա, եթե գնել եք canakit- ը կամ bootable sd քարտ պատրաստել pi 3 -ի համար linux բաշխմամբ: Ամեն դեպքում, այս ֆայլերը անհրաժեշտ են, որպեսզի pi- ն ճանաչի sd քարտը որպես bootable սարք: Հաջորդը, մինի 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- ն

Լավ, մենք ունենք bootable mini sd քարտ, և հուսանք, որ այս պահին դուք ունեք pi 3: Այսպիսով, այժմ մենք պետք է փորձարկենք այն `համոզվելու համար, որ pi 3 -ը ճանաչում է mini SD քարտը որպես bootable:

Pi- ի վրա, մինի USB պորտի մոտ կան երկու փոքր լեդեր: Մեկը կարմիր է: Սա էներգիայի ցուցիչն է: Երբ pi- ն էներգիա է ստանում, այս լույսը պետք է վառված լինի: Այսպիսով, եթե ձեր pi- ն միացնում եք այս պահին առանց մինի sd քարտի, այն պետք է լուսավորվի կարմիրով: Դե, հիմա անջատեք ձեր pi- ն և տեղադրեք ձեր bootable mini SD քարտը, որը ստեղծվել էր նախորդ քայլում և միացրեք pi- ն: Դուք այլ լույս տեսնու՞մ եք: Պետք է լինի կանաչ լույս, անմիջապես կարմիրի կողքին, որը ցույց է տալիս, որ կարդում է sd քարտը: Այս led- ը կոչվում է ACT led: Այն կլուսավորվի, երբ տեղադրվի կենսունակ sd քարտ: Այն կպայծառանա, երբ այն մուտք գործի ձեր մինի sd քարտ:

Լավ, այնպես որ երկու բան պետք է տեղի ունենար ՝ bootable mini SD քարտը տեղադրելուց և pi- ն միացնելուց հետո.

  1. Կարմիր լուսարձակը պետք է լուսավորված լինի ՝ նշելով հոսանքի ընդունումը
  2. Կանաչ լուսարձակը պետք է լուսավորված լինի ՝ նշելով, որ այն միացել է մինի sd քարտին

Եթե ինչ -որ բան սխալ է եղել, փորձեք կրկնել նախորդ քայլերը կամ լրացուցիչ տեղեկությունների համար կտտացրեք ստորև նշված հղմանը:

Հղումը այստեղ լավ տեղեկանք է:

Քայլ 5 ՝ ԿՈԴ 1

Այս նախագիծը գրված է ARM հավաքման լեզվով: Այս ձեռնարկում ենթադրվում է ARM հավաքման հիմնական հասկացություն, բայց ահա մի քանի բան, որ դուք պետք է իմանաք.

.equ: նշանակություն է տալիս խորհրդանիշին, այսինքն abc.equ 5 abc այժմ ներկայացնում է հինգը

  • ldr: բեռներ հիշողությունից
  • փող. գրում է հիշողության մեջ
  • cmp: համեմատում է երկու արժեք ՝ հանում կատարելով: Սահմանում է դրոշներ:
  • բ. ճյուղից պիտակ
  • ավելացնել. կատարում է թվաբանություն

Եթե Arm հավաքման հետ փորձ չունեք, դիտեք այս տեսանյութը: Այն ձեզ լավ կհասկանա Arm հավաքման լեզուն:

Լավ, հիմա մենք ունենք մի շրջան, որը կապված է մեր ազնվամորու pi 3 -ի հետ և մենք ունենք SD քարտ, որը pi- ն ճանաչում է, ուստի մեր հաջորդ խնդիրն է պարզել, թե ինչպես փոխազդել շրջանի հետ `բեռնելով pi- ն գործարկվող ծրագրով: Ընդհանուր առմամբ, այն, ինչ մենք պետք է անենք, այն է, որ pi- ն լարման թողնի GPIO 21 -ից (կարմիր մետաղալարին միացված քորոց): Հետո մեզ անհրաժեշտ է միացնել լուսարձակը թարթելու համար: Դա անելու համար մեզ անհրաժեշտ է ավելի շատ տեղեկատվություն: Այս պահին մենք գաղափար չունենք, թե ինչպես ասել GPIO 21 -ին ելքի համար, այդ իսկ պատճառով մենք պետք է կարդանք տվյալների թերթիկը: Միկրոհսկիչների մեծամասնությունը ունի տվյալների թերթեր, որոնք հստակ նշում են, թե ինչպես է ամեն ինչ աշխատում: Unfortunatelyավոք, pi 3 -ը չունի պաշտոնական փաստաթղթեր: Այնուամենայնիվ, կա ոչ պաշտոնական տվյալներ: Ահա դրա երկու հղումներ.

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

Լավ այս պահին, հաջորդ քայլին անցնելուց առաջ պետք է մի քանի րոպե տրամադրեք ՝ թերթելու թերթիկը և տեսնելու, թե ինչ տեղեկատվություն կարող եք գտնել:

Քայլ 6 ՝ ԿՈԴ 2 ՝ Turn_Led_ON

ԿՈԴ 2 ՝ Turn_Led_ON
ԿՈԴ 2 ՝ Turn_Led_ON
ԿՈԴ 2 ՝ Turn_Led_ON
ԿՈԴ 2 ՝ Turn_Led_ON
ԿՈԴ 2 ՝ Turn_Led_ON
ԿՈԴ 2 ՝ Turn_Led_ON

Ազնվամորու pi 3 53 գրանցվում է ելքային/մուտքային կապում (ծայրամասային սարքեր) վերահսկելու համար: Քորոցները խմբավորված են միասին և յուրաքանչյուր խումբ նշանակվում է գրանցամատյանում: GPIO- ի համար մենք պետք է կարողանանք մուտք գործել SELECT գրանցամատյան, SET գրանցամատյան և CLEAR գրանցամատյաններ: Այս գրանցամատյաններին մուտք գործելու համար մեզ անհրաժեշտ են այս գրանցամատյանների ֆիզիկական հասցեները: Երբ կարդում եք տվյալների թերթիկը, ցանկանում եք նշել միայն հասցեի փոխհատուցումը (բոյթ) և ավելացնել այն հիմնական հասցեին: Դուք պետք է դա անեք, քանի որ տվյալների թերթը ներկայացնում է linux վիրտուալ հասցեն, որոնք հիմնականում արժեքներ են, որոնք հատկացված են օպերացիոն համակարգերին: Մենք չենք օգտագործում օպերացիոն համակարգ, այնպես որ մենք պետք է ուղղակի մուտք գործենք այս գրանցամատյաններ ՝ օգտագործելով ֆիզիկական հասցեն: Դրա համար ձեզ անհրաժեշտ են հետևյալ տեղեկությունները.

  • Ipայրամասային սարքերի հիմնական հասցեն ՝ 0x3f200000: Pdf- ում (էջ 6) ասվում է, որ հիմնական հասցեն է ՝ 0x3f000000, այնուամենայնիվ, այս հասցեն չի աշխատի: Օգտագործեք 0x3f200000
  • FSEL2- ի (SELECT) հաշվանցումը գրանցամատյանի ամբողջական հասցեն չէ: Pdf- ում նշված է FSEL2 հասցեն ՝ 0x7E20008, սակայն այս հասցեն վերաբերում է linux վիրտուալ հասցեին: Օֆսեթը նույնն է լինելու, ինչ ուզում ենք նշել: 0x08
  • GPSET0 (SET) օֆսեթ ՝ 0x1c
  • GPCLR0- ի փոխհատուցում (Մաքրել) ՝ 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- ի և CLR0- ի 0 բիթը վերահսկում է GPIO 1. GPIO 21- ը վերահսկելու համար դուք պետք է սահմանեք 21 բիթը SET0- ում և CLR0- ում:

Լավ, մենք խոսեցինք այն մասին, թե ինչպես մուտք գործել այս գրանցամատյանները, բայց ի՞նչ է դա նշանակում:

  • FSEL2 գրանցամատյանը կօգտագործվի GPIO 21 ելքը կարգավորելու համար: Ելքի վրա քորոց դնելու համար հարկավոր է երեք բիթերի lo կարգի բիթը սահմանել 1. Այսպիսով, եթե 3-5 բիթերը վերահսկում են GPIO 21-ը, դա նշանակում է, որ մենք պետք է սահմանենք առաջին բիթը, բիթը 3-ից 1-ը: Սա կասի pi- ին որ մենք ցանկանում ենք օգտագործել GPIO 21 -ը որպես ելք: Այսպիսով, եթե մենք նայենք GPIO 21 -ի 3 բիթերին, դրանք պետք է այսպիսին լինեն այն բանից հետո, երբ այն դնում ենք ելքի վրա, b001:
  • GPSET0- ը pi- ին ասում է, որ միացնի քորոցը (թողարկի լարում): Դա անելու համար մենք պարզապես փոխում ենք այն բիթը, որը համապատասխանում է մեր ուզած GPIO կապին: Մեր դեպքում `բիթ 21:
  • GPCLR0- ը pi- ին ասում է անջատել քորոցը (առանց լարման): Պինն անջատելու համար բիթը սահմանեք համապատասխան GPIO կապի վրա: Մեր դեպքում բիթ 21

Մինչև թարթող լուսադիոդին հասնելը, նախ եկեք կազմենք մի պարզ ծրագիր, որը պարզապես կմիացնի լուսարձակը:

Սկսելու համար մենք պետք է երկու հրահանգ ավելացնենք մեր սկզբնական կոդի վերևում:

  • .section.init- ը պիին ասում է, թե որտեղ տեղադրել կոդը
  • . գլոբալ _սկսել

Հաջորդը, մենք պետք է դասավորենք այն բոլոր հասցեները, որոնք մենք կօգտագործենք: Օգտագործեք.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, = ԲԱEԻՆ

Այժմ մենք պետք է սահմանենք GPFSEL2- ի bit3

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Այս հրահանգը ասում է ՝ 0x08 բիթը հետ գրել GPFSEL2 հասցեով

Ի վերջո, մենք պետք է GPIO 21 -ը միացնենք GPSET0 գրանցամատյանում բիթ 21 տեղադրելով

  • ldr r1, = SET_BIT21
  • փող r1, [r0, #GPSET0]

Վերջնական արտադրանքը պետք է նման լինի պատկերված ծածկագրին:

Հաջորդ քայլը ծածկագիրը կազմելն է և.img ֆայլ ստեղծելը, որը pi- ն կարող է գործարկել:

  • Ներբեռնեք կցված makefile- ը և kernel.ld- ը, և եթե ցանկանում եք turn_led_on.s- ի աղբյուրի կոդը:
  • Տեղադրեք բոլոր ֆայլերը նույն թղթապանակում:
  • Եթե դուք օգտագործում եք ձեր սեփական աղբյուրի կոդը, խմբագրեք makefile- ը և փոխարինեք = turn_led_on.s ծածկագրով =.s ծածկագրով
  • Պահպանեք կազմաձևը:
  • Օգտագործեք տերմինալը (linux) կամ cmd պատուհանը (պատուհաններ) ՝ ֆայլեր պարունակող ձեր թղթապանակ նավարկելու համար և մուտքագրեք make և սեղմեք enter
  • Ստեղծման ֆայլը պետք է առաջացնի ֆայլ, որը կոչվում է kernel.img
  • Պատճենեք kernel.img- ը ձեր մինի sd քարտի վրա: Ձեր քարտերի բովանդակությունը պետք է լինի այնպես, ինչպես պատկերված է (նկար 3) ՝ bootcode.bin, start.elf, fixup.dat և kernel.img:
  • Հեռացրեք մինի sd քարտը և տեղադրեք այն pi- ի մեջ
  • Միացրեք pi- ն էներգիայի աղբյուրին
  • LED- ը պետք է լուսավորվի !!!

ԱՌԱ ԿԱՐԵՎՈՐ EԱՆՈԹՈԹՅՈՆ. Ըստ երևույթին, հրահանգվող ծրագրերի հետ կապված խնդիր էր առաջացել makefile- ի ընդլայնում չունենալու պատճառով, ուստի այն նորից վերբեռնեցի.txt ընդլայնմամբ: Խնդրում ենք հեռացնել ընդլայնումը, երբ այն բեռնում եք, որպեսզի այն ճիշտ աշխատի:

Խորհուրդ ենք տալիս: