Агуулгын хүснэгт:

Нүцгэн металл бөөрөлзгөнө Pi 3: LED анивчих: 8 алхам
Нүцгэн металл бөөрөлзгөнө Pi 3: LED анивчих: 8 алхам

Видео: Нүцгэн металл бөөрөлзгөнө Pi 3: LED анивчих: 8 алхам

Видео: Нүцгэн металл бөөрөлзгөнө Pi 3: LED анивчих: 8 алхам
Видео: 5 УДИВИТЕЛЬНЫХ ЖИЗНЕННЫХ ХАКОВ # 2 2024, Долдугаар сарын
Anonim
Нүцгэн металл бөөрөлзгөнө Pi 3: LED анивчдаг
Нүцгэн металл бөөрөлзгөнө Pi 3: LED анивчдаг

Зохиогчийн дэлгэрэнгүйг дагах:

LED нь нүцгэн металл бүхий Raspberry Pi түлхэх товч
LED нь нүцгэн металл бүхий Raspberry Pi түлхэх товч
LED нь нүцгэн металл бүхий Raspberry Pi түлхэх товч
LED нь нүцгэн металл бүхий Raspberry Pi түлхэх товч
Крат
Крат
Крат
Крат
Ахмад дайчдын өдөрт зориулсан тусламжийн сийлбэрийг хэрхэн яаж хийх вэ
Ахмад дайчдын өдөрт зориулсан тусламжийн сийлбэрийг хэрхэн яаж хийх вэ
Ахмад дайчдын өдөрт зориулсан тусламжийн сийлбэрийг хэрхэн яаж хийх вэ
Ахмад дайчдын өдөрт зориулсан тусламжийн сийлбэрийг хэрхэн яаж хийх вэ

Тухай:.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 карт
  • Талхны самбар
  • Эрэгтэй эмэгтэй холбогч утас
  • Эрэгтэй эрэгтэй холбогч утас
  • LED
  • 220 ом эсэргүүцэл (яг 220 ом байх албагүй, ихэнх эсэргүүцэл ажиллах болно)
  • мини sd карт
  • мини sd карт бөөрөлзгөнө pi үйлдлийн системээр урьдчилан ачаалагдсан (ихэвчлэн pi -д багтсан)

Програм хангамж

  • GCC хөрвүүлэгч
  • GNU суулгагдсан багаж хэрэгсэл
  • текст засварлагч
  • sd карт форматлагч

За, эхлүүлцгээе!

Алхам 1: ЗҮЙЛСИЙГ ТОХИРУУЛАХ/ЗӨВЛӨХ

ЗҮЙЛСИЙГ ТОХИРУУЛАХ/ЗӨВЛӨГӨӨ
ЗҮЙЛСИЙГ ТОХИРУУЛАХ/ЗӨВЛӨГӨӨ

За яахав … эхний алхам бол техник хангамж авах явдал юм. Та эд ангиудыг тусад нь худалдаж авч болно, эсвэл хангалттай олон хэсэгтэй багц байдаг. ХОЛБОО БАРИХ

Энэ хэрэгсэл нь бөөрөлзгөнө pi 3 ба түүнээс дээш тохируулахад шаардлагатай бүх зүйлтэй хамт ирдэг. Энэ хэрэгсэлд ороогүй цорын ганц зүйл бол нэмэлт мини карт юм. Хүлээгээрэй! Одоохондоо өөр нэгийг худалдаж авах хэрэггүй. Хэрэв та картанд урьдчилан суулгасан линукс суулгацыг ашиглахаар төлөвлөөгүй байгаа бол багтаасан мини sd картын агуулгыг дараа нь хуулж, картаа дахин форматлана уу (энэ талаар дараа нь). ЧУХАЛ ТАЙЛБАР: Оруулсан картан дээрх файлуудаа хадгалах хэрэгтэй бөгөөд дараа нь танд хэрэгтэй болно!

Дараа нь програм хангамжийг тохируулах цаг болжээ. Энэхүү гарын авлагад програм хангамжийг хэрхэн суулгах талаар дэлгэрэнгүй заавар байхгүй болно. Эдгээрийг хэрхэн суулгах талаар онлайнаар олон эх сурвалж, заавар байдаг.

ЦОНХНЫ ХЭРЭГЛЭГЧ:

Gcc татаж аваад суулгана уу

Дараа нь GNU ARM суулгагдсан багаж хэрэгслийг татаж аваад суулгана уу

LINUX/MAC

  • Linux түгээлт нь gcc-ийг урьдчилан суулгасан байдаг
  • GNU ARM суулгагдсан багаж хэрэгслийг татаж аваад суулгана уу.

За, хэрэв бүх зүйл сайн болвол та терминал (linux/mac) эсвэл cmd мөрийг (цонх) нээж бичээд үзээрэй.

arm-none-eabi-gcc

Гаралт нь эхний зурагтай төстэй байх ёстой. Энэ нь зүгээр л зөв суулгасан эсэхийг шалгах зорилготой юм.

За, урьдчилсан нөхцөл байхгүй болсон тул хөгжилтэй зүйлсийг эхлүүлэх цаг болжээ.

Алхам 2: ЦИРХ

ХҮРЭЭ
ХҮРЭЭ
ХҮРЭЭ
ХҮРЭЭ
ХҮРЭЭ
ХҮРЭЭ

Хэлхээний цаг! Үүний схем нь энгийн. Бид пи дээр GPIO 21 (зүү 40) руу LED холбоно (2 ба 3 -р зургийг үз). Ледийг гэмтээхгүйн тулд резисторыг цувралаар холбосон болно. Эсэргүүцэл нь талбар дээрх сөрөг баганатай холбогдсон байх бөгөөд энэ нь pi дээрх GND (зүү 39) -тэй холбогдоно. Ледийг холбохдоо богино үзүүрийг сөрөг тал руу нь холбох хэрэгтэй. Сүүлийн зургийг үзнэ үү

Алхам 3: BOOTABLE Mini SD

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

Таны хоосон мини sd картыг танихын тулд pi 3 -ийг авах гурван алхам бий. Бид bootcode.bin, start.elf, fixup.dat -ийг олж хуулах хэрэгтэй. Хэрэв та canakit худалдаж авсан эсвэл линукс түгээлттэй pi 3 -д зориулж bootable sd карт хийсэн бол та эдгээр файлуудыг багтаасан мини sd картаас авах боломжтой. Аль ч тохиолдолд эдгээр файлууд нь sd картыг ачаалагдах төхөөрөмж гэж таних боломжийг олгохын тулд эдгээр файлууд шаардлагатай байдаг. Дараа нь mini sd -ийг fat32 болгон форматлах (ихэнх мини SD картууд fat32 форматтай ирдэг. Би sandisk -ээс хямд үнэтэй mini 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 картгүйгээр пи -ээ залгасан бол улаан асах ёстой. За одоо пи -ээ салгаад өмнөх алхам дээр бүтээгдсэн bootable mini sd картаа оруулаад пи -ээ залгаарай. Та өөр гэрэл харж байна уу? Улаан гэрлийн хажууд ногоон карт байх ёстой бөгөөд энэ нь SD картыг уншиж байгааг илтгэнэ. Энэ удирдамжийг ACT led гэж нэрлэдэг. Ашиглах боломжтой sd карт оруулсан үед энэ нь гэрэлтэх болно. Таны мини sd карт руу нэвтрэх үед энэ нь анивчих болно.

Ачаалах боломжтой мини sd картыг оруулаад pi -г залгасны дараа хоёр зүйл тохиолдох ёстой байсан.

  1. Улаан гэрэл нь асаалттай байгааг илтгэсэн байх ёстой
  2. Ногоон LED нь гэрэлтүүлэгтэй байх ёстой бөгөөд энэ нь мини sd картанд ачаалагдсан болохыг илтгэнэ

Хэрэв ямар нэг зүйл буруу болвол өмнөх алхмуудыг давтаж үзээрэй, эсвэл доорх линк дээр дарж дэлгэрэнгүй мэдээлэл аваарай.

Энд байгаа линк бол сайн лавлагаа юм.

Алхам 5: КОД1

Энэ төслийг ARM ассемблер хэл дээр бичсэн болно. Энэхүү гарын авлагад ARM -ийн угсралтын талаархи үндсэн ойлголтыг өгсөн болно, гэхдээ энд таны мэдэх ёстой хэдэн зүйл байна.

.equ: тэмдэгтэд утга оноож өгдөг, өөрөөр хэлбэл abc.equ 5 abc одоо таван тоог илэрхийлнэ

  • ldr: санах ойгоос ачаална
  • str: санах ойд бичдэг
  • cmp: хасах үйлдлээр хоёр утгыг харьцуулна. Тугуудыг тохируулдаг.
  • б: шошгон дээр салбарлах
  • нэмэх: арифметикийг гүйцэтгэдэг

Хэрэв танд Arm угсрах туршлага байхгүй бол энэ видеог үзээрэй. Энэ нь танд Arm угсрах хэлний талаар сайн ойлголт өгөх болно.

За, яг одоо бид бөөрөлзгөнө pi 3 -тай холбогдсон хэлхээтэй бөгөөд pi таних sd карттай тул бидний дараагийн ажил бол pi -ийг гүйцэтгэх програмаар ачаалах замаар хэлхээтэй хэрхэн харьцах талаар олж мэдэх явдал юм. Ерөнхийдөө бидний хийх ёстой зүйл бол pi -д 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 байт) тэмдэглэж, үндсэн хаягаар нэмж оруулахыг хүсч байна. Өгөгдлийн хүснэгтэд үндсэндээ үйлдлийн системүүдийн өгсөн утга болох линукс виртуал хаягийг жагсаасан байдаг тул та үүнийг хийх ёстой. Бид үйлдлийн систем ашигладаггүй тул физик хаягийг ашиглан эдгээр бүртгэлд шууд хандах хэрэгтэй. Үүний тулд танд дараах мэдээлэл хэрэгтэй болно.

  • Захын төхөөрөмжүүдийн үндсэн хаяг: 0x3f200000. Pdf (6 -р хуудас) үндсэн хаяг нь 0x3f000000 гэж хэлсэн боловч энэ хаяг ажиллахгүй болно. 0x3f200000 ашиглана уу
  • FSEL2 (SELECT) офсет нь бүртгэлийн бүрэн хаяг биш юм. Pdf нь FSEL2 -ийг 0x7E20008 дээр жагсаасан боловч энэ хаяг нь линукс виртуал хаягийг хэлнэ. Офсет нь ижил байх тул бид үүнийг тэмдэглэхийг хүсч байна. 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 битийг тохируулах болно.

За, бид эдгээр бүртгэлд хэрхэн хандах талаар ярилцсан боловч энэ нь юу гэсэн үг вэ?

  • GPIO 21 -ийг гаралтанд тохируулахын тулд FSEL2 бүртгэлийг ашиглана. Гарах зүүг тохируулахын тулд та гурван битийн дарааллын битийг 1 болгож тохируулах хэрэгтэй. Тиймээс хэрэв 3-5 бит нь GPIO 21-ийг хянадаг бол бид эхний битийг 3-аас 1 болгож тохируулах хэрэгтэй гэсэн үг юм. бид GPIO 21 -ийг гаралт болгон ашиглахыг хүсч байна. Хэрэв бид GPIO 21 -ийн 3 битийг харах юм бол бид үүнийг гаралт болгож тохируулсны дараа b001 иймэрхүү харагдах ёстой.
  • GPSET0 нь зүүг асаахыг хэлдэг (хүчдэл гаргадаг). Үүнийг хийхийн тулд бид хүссэн GPIO зүүтэйгээ тохирох битийг сэлгэнэ үү. Манай тохиолдолд 21 -р бит.
  • GPCLR0 нь зүүг унтраахыг хэлдэг (хүчдэлгүй). Зүүг унтраахын тулд битийг харгалзах GPIO зүү болгон тохируулна уу. Манай тохиолдолд 21 бит

Бид анивчдаг лед рүү орохоосоо өмнө эхлээд гэрлийг асаах энгийн програм хийцгээе.

Эхлэхийн тулд бид эх кодынхоо дээд хэсэгт хоёр удирдамж нэмэх шаардлагатай.

  • .хэсэг.init нь кодыг хаана оруулахыг pi -д хэлдэг
  • .global _start

Дараа нь бид ашиглах бүх хаягаа байрлуулах хэрэгтэй. Унших боломжтой тэмдгүүдийг утгуудад оноохын тулд.equ ашиглана уу.

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

Одоо бид тохируулах шаардлагатай битүүдийг тохируулах маск хийх гэж байна.

  • .equ SET_BIT3, 0x08 Энэ нь битийн 0000_1000 -ийг тохируулна
  • .equ SET_BIT21, 0x200000

Дараа нь бид _start шошгоо нэмэх хэрэгтэй

_ эхлэх:

Үндсэн хаягийг бүртгэлд ачаална уу

ldr r0, = BASE

Одоо бид 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 -ийн эх кодыг хүсвэл татаж аваарай.
  • Бүх файлыг нэг хавтсанд хийнэ үү.
  • Хэрэв та өөрийн эх кодыг ашиглаж байгаа бол makefile файлыг засаад = turn_led_on.s кодыг код =.s -ээр солино уу.
  • Makefile файлыг хадгална уу.
  • Терминал (linux) эсвэл cmd цонх (цонх) ашиглан файлуудыг агуулсан фолдер руугаа ороод make бичээд enter дарна уу.
  • Make файл нь kernel.img нэртэй файл үүсгэх ёстой
  • Kernel.img -ийг мини sd карт руу хуулах. Таны картны агуулга зураг дээрх шиг байх ёстой (зураг 3): bootcode.bin, start.elf, fixup.dat, kernel.img.
  • Mini sd картыг гаргаж аваад pi руу оруулна уу
  • Пи -ийг тэжээлийн эх үүсвэрт холбоно уу
  • LED асах ёстой !!!

ХАМГИЙН ЧУХАЛ ТАЙЛБАР: Makefile-д өргөтгөл байхгүй байхад зааварчилгаа өгөхөд асуудал гардаг байсан тул би үүнийг.txt өргөтгөлөөр дахин байршуулсан. Зөв ажиллахын тулд өргөтгөлийг татаж авахдаа устгана уу.

Зөвлөмж болгож буй: