uporaba vhodno/izhodnih vmesnikov na ...-zunanji pomnilnik: 2 gb 8-bit pomnilniški medij;...
TRANSCRIPT
-
UNIVERZA V MARIBORU
FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO
Manja Kocet
UPORABA VHODNO/IZHODNIH VMESNIKOV
NA PLATFORMI BEAGLEBONE BLACK
Diplomsko delo
Maribor, avgust 2014
-
I
UPORABA VHODNO/IZHODNIH VMESNIKOV NA
PLATFORMI BEAGLEBONE BLACK
Diplomsko delo
Študent: Manja Kocet
Študijski program: Univerzitetni študijski program
Smer: Računalništvo in informacijske tehnologije
Mentor: doc. dr. Boris Cigale
Lektorica: Mija Čuk, univ. dipl. spl. jez.
Maribor, avgust 2014
-
II
-
III
-
IV
-
V
ZAHVALA
Zahvaljujem se mentorju doc. dr. Borisu Cigaletu
za pomoč in vodenje pri opravljanju diplomskega
dela.
Posebna zahvala velja staršem, ki so mi
omogočili študij, in Sašu za podporo med
študijem in izdelavo diplomskega dela.
-
VI
UPORABA VHODNO/IZHODNIH VMESNIKOV NA
PLATFORMI BEAGLEBONE BLACK
Ključne besede: BeagleBone Black, vhodno/izhodni vmesniki, SPI, I2C, PRU
UDK: 004.326.1(043.2)
Povzetek
V diplomskem delu predstavljamo uporabo vhodno/izhodnih vmesnikov na platformi
BeagleBone Black. Proučili smo razvojno ploščico BeagleBone Black in njen širok nabor
vhodno/izhodnih vmesnikov. Predvsem so nas zanimale hitrosti prenosa podatkov, ki jih
lahko dosežemo z uporabo serijskih komunikacijskih vmesnikov SPI in I2C. Primerjali smo
tudi hitrosti, ki smo jih dosegli z uporabo digitalnih izhodnih vmesnikov in
analogno/digitalnega pretvornika na centralno procesni enoti s hitrostmi, doseženimi na
programabilni realno-časovni enoti.
-
VII
USING INPUT/OUTPUT INTERFACES ON THE
BEAGLEBONE BLACK PLATFORM
Key words: BeagleBone Blac, input/output interfaces, SPI, I2C, PRU
UDK: 004.326.1(043.2)
Abstract
In this diploma thesis we present the usage of input/output interfaces on the BeagleBone
Black platform. We examined BeagleBone Black development board and its wide range of
input/output interfaces. In particular we were interested in data transfer speeds, which can
be achieved by using SPI and I2C interfaces. We also compared the speeds that we have
achieved with the use of digital output interface and analog/digital converter on central
processing unit with the speeds achieved on programmable real-time unit.
-
VIII
KAZALO
1 UVOD ....................................................................................................................... 1
2 BEAGLEBONE BLACK ......................................................................................... 2
2.1 Specifikacije .......................................................................................................................... 3
2.2 Drevo naprav ......................................................................................................................... 7
2.2.1 Drevo naprav s prekrivki ............................................................................................ 7
3 VZPOSTAVITEV SISTEMA ................................................................................ 10
4 DIGITALNI VHODNO/IZHODNI VMESNIKI................................................... 11
4.1 Primer uporabe .................................................................................................................... 12
4.1.1 Izsek programske rešitve uporabe digitalnih izhodov .............................................. 13
4.1.2 Izsek programske rešitve uporabe digitalnega vhoda in izhoda ............................... 14
4.2 Merjenje hitrosti .................................................................................................................. 15
4.2.1 Izsek programske rešitve z zapisovanjem v sistemsko datoteko .............................. 16
4.2.2 Izsek programske rešitve z uporabo neposrednega dostopa do registrov ................. 16
5 ANALOGNO VHODNI VMESNIKI IN A/D PRETVORNIK ............................. 18
5.1 Primer uporabe .................................................................................................................... 19
5.1.1 Izsek programske rešitve .......................................................................................... 20
5.2 Merjenje hitrosti .................................................................................................................. 21
5.2.1 Izsek programske rešitve .......................................................................................... 21
6 UART ...................................................................................................................... 22
6.1 Serijska povezava ................................................................................................................ 22
6.1.1 Sinhrona in asinhrona serijska povezava .................................................................. 22
6.2 Prenos podatkov .................................................................................................................. 23
6.3 Primer uporabe .................................................................................................................... 23
6.3.1 Izsek programske rešitve .......................................................................................... 24
7 SPI ........................................................................................................................... 25
7.1 Vmesnik .............................................................................................................................. 25
7.1.1 Več podrejenih naprav .............................................................................................. 25
7.2 Prenos podatkov .................................................................................................................. 27
7.3 Polariteta faza ure ................................................................................................................ 27
7.4 Primer uporabe .................................................................................................................... 28
7.4.1 Izsek programske rešitve .......................................................................................... 30
7.5 Merjenje hitrosti .................................................................................................................. 30
-
IX
8 I2C ............................................................................................................................ 33
8.1 Prednosti pred vmesnikom SPI ........................................................................................... 33
8.2 Vmesnik .............................................................................................................................. 33
8.3 Primer uporabe .................................................................................................................... 35
8.3.1 Izsek programske rešitve .......................................................................................... 37
8.4 Merjenje hitrosti .................................................................................................................. 38
9 PRU ......................................................................................................................... 40
9.1 Zgradba PRU aplikacije ...................................................................................................... 40
9.2 Set instrukcij........................................................................................................................ 41
9.3 Priprava sistema .................................................................................................................. 43
9.4 Digitalno vhodno/izhodni vmesniki .................................................................................... 45
9.4.1 Merjenje hitrosti ....................................................................................................... 45
9.5 A/D pretvorba...................................................................................................................... 47
9.5.1 Merjenje hitrosti ....................................................................................................... 48
10 SKLEP ................................................................................................................ 49
11 VIRI, LITERATURA ......................................................................................... 50
KAZALO SLIK
Slika 2.1: Digitalni vhodno/izhodni vmesniki. Vir [4]. .......................................................4
Slika 2.2: Analogni vhodni vmesniki. Vir [4]. ....................................................................4
Slika 2.3: Vmesniki UART. Vir [4]. ...................................................................................5
Slika 2.4: Vmesnika I2C. Vir [4]. .......................................................................................6
Slika 2.5: Vmesnika SPI. Vir [4]. .......................................................................................7
Slika 4.1: Shema priklopa svetlečih diod .......................................................................... 12
Slika 4.2: Prižiganje in ugašanje svetlečih diod ................................................................ 13
Slika 4.3: Shema priklopa gumba in svetleče diode .......................................................... 13
Slika 4.4: Frekvenca utripanja svetleče diode ................................................................... 15
Slika 4.5: Frekvenca utripanja svetleče diode z uporabo neposrednega dostopa do registrov
........................................................................................................................................ 16
Slika 5.1: Shema za priklop termistorja ............................................................................ 20
-
X
Slika 6.1: Shema priklopa vmesnika UART ..................................................................... 23
Slika 7.1: SPI ločene linije SS ......................................................................................... 26
Slika 7.2: SPI skupne linije SS ......................................................................................... 26
Slika 7.3: SPI prenos podatkov ........................................................................................ 27
Slika 7.4: Časovni diagram prikazuje polariteto in fazo ure. Rdeča navpičnica predstavlja
CHPA = 0, modra pa CHPA = 1. Vir [27]. ....................................................................... 28
Slika 7.5: Shema priklopa senzorja TC77 ........................................................................ 29
Slika 7.6: Izmerjena frekvenca delovanja senzorja ........................................................... 31
Slika 7.7: Čas med branjem prvih 8 bitov in drugih 8 bitov .............................................. 31
Slika 7.8: Čas med ponovnim branjem temperature ......................................................... 32
Slika 8.1: Diagram prenosa podatkov za vmesnik I2C. Vir [16]. ....................................... 35
Slika 8.2: Shema priklopa senzorja TMP100 ................................................................... 36
Slika 8.3: i2c izmerjena frekvenca 100 kHz ..................................................................... 39
Slika 8.4: i2c izmerjena frekvenca 390 kHz ..................................................................... 39
Slika 9.1: Frekvenca utripanja svetleče diode z enoto PRU .............................................. 46
KAZALO TABEL
Tabela 4.1: Napetost in tok vmesnikov na priključku P9. Povzeto po [9]. ........................ 11
Tabela 8.1: Poraba časa pri določeni resoluciji. Povzeto po [12]. ..................................... 36
Tabela 8.2: Naslov senzorja glede nožice ADD1 in ADD0. Povzeto po [13]. ................... 37
-
XI
UPORABLJENE KRATICE
SPI – standard za sinhrono serijsko podatkovno povezavo elektronskih naprav (angl. Serial
Peripheral Interface Bus)
I2C – medsebojno integrirana vezja (angl. Inter-Integrated Circuit)
UART – univerzalni asinhroni sprejemnik/oddajnik (angl. Universal Asynchronous
Receiver/Transmitter)
PRU – programabilna realno-časovna enota (angl. Programmable Real-time Unit)
USB – univerzalno serijsko vodilo (angl. Universal Serial Bus)
SSH – dostop do ukazne lupine (angl. Secure Shell)
eMMC – vgrajena večpredstavnostna kartica (angl. embedded multi-media card)
SD – spominska kartica (angl. Secure Digital)
HDMI – digitalni prenos slike visoke ločljivosti ter zvoka (angl. High-Definition Multimedia
Interface)
GPIO – splošno namenski vhod/izhod (angl. General-purpose input/output)
A/D – analogno/digitalno (angl. Analog-to-Digital)
EEPROM – električno zbrisljiv in programljiv bralni pomnilnik (angl. Electrically Erasable
Programmable Read-Only Memory)
DTC – prevajalnik drevesa naprav (angl. Device Tree Compiler)
PTC – pozitivni temperaturni koeficient (angl. Positive Temperature Coefficient)
NTC – negativni temperaturni koeficient (angl. Negative Temperature Coefficient)
MISO – narejena naprava posluša, podrejena sporoča (angl. Master Input, Slave Output)
MOSI – nadrejena naprava sporoča, podrejena posluša (angl. Master Output, Slave Input)
-
XII
SS – izbira podrejene naprave (angl. Slave Select)
SCLK – urin takt (angl. Serial Clock)
CPOL – polariteta ure (angl. Clock Polarity)
CPHA – faza ure (angl. Clock Phase)
SCL – urin takt (angl. Serial Clock)
SDA – serijska podatkovna linija (angl. Serial Data Line)
ACK – priznan (angl. Acknowledge)
GND – ozemljitev (angl. Ground)
LED – zaslon s svetlečimi diodami (angl. Light Emitting Diode)
LCD – zaslon s tekočimi kristali (angl. Liquid Cristal Display)
PRUSS – podsistem programabilne realno-časovne enote (angl. Programmable Real-time
Unit Subsystem)
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 1
1 UVOD
Razvojna ploščica je tiskano vezje z mikrokrmilnikom in drugimi perifernimi napravami ter
nameščenim operacijskim sistemom [15]. Razvojne ploščice so zaradi nizke cene in
zmogljivosti uporabne predvsem na področju prototipiranja. V zadnjih letih se na trgu
pojavlja vse več razvojnih ploščic, katerih zmogljivost pa se s časom izboljšuje. Ena izmed
njih je BeagleBone Black.
Ploščica BeagleBone Black je najnovejša in zelo zmogljiva razvojna ploščica podjetja Texas
Instruments, ki je bila razvita 23. aprila leta 2013 [2].
Namen diplomskega dela je proučiti razvojno ploščico BeagleBone Black in njen širok nabor
vhodno/izhodnih vmesnikov. Predvsem nas zanimajo hitrosti prenosa podatkov, ki jih lahko
dosežemo z uporabo serijskih komunikacijskih vmesnikov SPI in I2C. Prav tako nas zanima
primerjava hitrosti, ki jih lahko dosežemo z uporabo digitalnih izhodnih vmesnikov in
analogno/digitalnega pretvornika na centralno procesni enoti s hitrostmi, doseženimi na
programabilni realno-časovni enoti.
Diplomsko delo je razdeljeno na deset poglavij. V drugem poglavju predstavimo razvojno
ploščico BeagleBone Black in njene specifikacije. V tretjem poglavju opišemo vzpostavitev
sistema in namestitev operacijskega sistema Ubuntu. V četrtem poglavju predstavimo
digitalne vhodno/izhodne vmesnike in programsko rešitev uporabe vmesnikov. Peto
poglavje je namenjeno analognim vhodno/izhodnim vmesnikom in analogno/digitalni
pretvorbi. V šestem poglavju se seznanimo s komunikacijskim vmesnikom UART,
predstavimo shemo ter programsko rešitev asinhrone serijske komunikacije. V sedmem
poglavju si podrobno pogledamo serijski vmesnik SPI, predstavimo shemo, programsko
rešitev uporabe vmesnika ter izmerjene hitrosti podatkovnih prenosov. V osmem poglavju
opišemo vmesnik I2C, za katerega prav tako predstavimo shemo, programsko rešitev
uporabe vmesnika in izmerjene hitrosti podatkovnih prenosov. V devetem poglavju
proučimo enoto PRU in naredimo primerjavo s centralno procesno enoto. Deseto poglavje
vsebuje naš sklep.
-
2 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
2 BEAGLEBONE BLACK
BeagleBone Black je majhen računalnik v velikosti bančne kartice z vsemi zmožnostmi
današnjega namiznega računalnika. Razvilo ga je podjetje Texas Instruments, cena ploščice
znaša 45 $ na ameriškem trgu in 42,74 € na evropskem trgu. Ob nakupu ploščice dobimo v
paketu razvojno ploščico BeagleBone Black z nameščenim operacijskim sistemom Linux
Angström, USB kabel ter navodila. Nameščen operacijski sistem se zažene v manj kot 10
sekundah in v manj kot 5 minutah lahko s pomočjo USB povezave med ploščico in
računalnikom začnemo z razvijanjem [6].
BeagleBone Black je mogoče uporabljati kot samostojno napravo. To pomeni, da
potrebujemo ločeno napajanje in lahko nanj priključimo monitor, miško in tipkovnico.
Lahko pa ga povežemo z računalnikom preko vmesnika USB. V tem primeru je treba
namestiti gonilnike, ki omogočijo dostop do ploščice. Do naprave lahko dostopamo tudi
preko protokola SSH. Po lastni izbiri lahko kljub že nameščenemu operacijskemu sistemu
namestimo ostale operacijske sisteme, kot so Ubuntu, Debian, Android, FreeBSD itd.
Na izbiro imamo štiri možnosti zagona operacijskega sistema:
- eMMC: privzeti in najhitrejši način zagona operacijskega sistema, ki je mogoč že ob
prvem vklopu naprave, brez micro SD kartice;
- SD: ta način omogoča zagon operacijskega sistema iz micro SD kartice. Ob uporabi
tega načina zagona se naprava eMMC ignorira. Ta način zagona lahko uporabimo za
programiranje naprave eMMC;
- serijska vrata: ta način uporablja serijski vmesnik za neposreden prenos programske
opreme. Za uporabo tega vmesnika potrebujemo serijski kabel, ki pa ni priložen;
- USB: zagon naprave preko vmesnika USB.
Na ploščici je pritrjen gumb, ki omogoča preklop med načini zagona. Brez pritisnjenega
gumba bo naprava zagnala operacijski sistem iz pomnilnika eMMC. Če je ta prazen, bo
poskusila operacijski sistem zagnati iz micro SD kartice. V primeru, da je micro SD kartica
prazna ali pa je ni, se bo za zagon najprej izbral način preko serijskega, nato pa še preko
vmesnika USB. Ob držanju gumba med zagonom, brez vstavljene micro SD kartice, se bo
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 3
izbral način zagona preko vmesnika USB. V kolikor naprava vmesnika ne zazna, se izbere
način za zagon preko serijskega vmesnika [9].
2.1 Specifikacije
BeagleBone Black je opremljen s procesorjem ARM Corex-A8, s frekvenco 1 GHz, vsebuje
512 MB sistemskega pomnilnika in 2 GB notranjega eMMC pomnilnika. Ima širok nabor
vhodno/izhodnih vmesnikov, saj sta na ploščici dva priključka s 46 povezavami na
mikrokrmilnik. Na ploščici so še priključki USB, micro HDMI, priključek za internetno
povezavo in reža za micro SD [9].
Podrobnejše specifikacije [9]:
- centralno procesna enota: 1 GHz ARM Cortex-A8;
- mikrokrmilnik: 2x PRU 32-bit enota;
- grafična procesna enota: PowerVR SGX530;
- pomnilnik: 512 MB DDR3;
- priključki: USB 2.0, mini-USB 2.0, microHDMI, Ethernet, 2x 46 vhodnih
vmesnikov;
- zunanji pomnilnik: 2 GB 8-bit pomnilniški medij;
- napajanje: 210–460 mA, 5 V;
- dimenzije 86,40 mm x 53,3 mm;
- teža: 39,68 g.
Ploščica ima na voljo 65 digitalnih vhodno/izhodnih vmesnikov, njihov razpored je prikazan
na Sliki 2.1. Digitalnim vhodno/izhodno vmesnikom je mogoče nastaviti način GPIO, kar
pomeni, da lahko uporabnik za vsak vmesnik, ki je v tem načinu, določi ali predstavlja vhod
ali izhod. V načinu GPIO lahko vsak digitalni vhod/izhod proži prekinitve. Izhodna in
maksimalna vhodna napetost na digitalnih vhodno/izhodnih vmesnikih je 3,3 V.
-
4 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Slika 2.1: Digitalni vhodno/izhodni vmesniki. Vir [4].
Za analogno digitalno pretvorbo imamo na voljo 7 analognih vhodov, pri katerih moramo
paziti, da vhodna napetost ni večja od 1,8 V. Na voljo imamo en 12-bitni A/D pretvornik z
osmimi vhodnimi kanali, vendar imamo na priključku na voljo samo 7 vhodov [4]. Razpored
analognih vmesnikov je prikazan na Sliki 2.2.
Slika 2.2: Analogni vhodni vmesniki. Vir [4].
Za asinhrono serijsko komunikacijo imamo na voljo 4 vmesnike UART ter eno dodatno
povezavo TX. Na ploščici so še dodatne vhodne nožice povezane z UART0, ki so namenjene
kablu za odpravljanje napak [4]. Izhodna in maksimalna vhodna napetost na teh vmesnikih
je 3,3 V. Na Sliki 2.3 je prikazana razporeditev vmesnikov UART.
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 5
Slika 2.3: Vmesniki UART. Vir [4].
BeagleBone Black ima na voljo dva serijska vmesnika I2C, za katera razporeditev je
prikazana na Sliki 2.4. Prvi vmesnik I2C se uporablja za branje pomnilnika EEPROM in ga
ne moremo uporabiti za ostale digitalne vhodno/izhodne operacije brez poseganja v funkcijo
branja. Lahko pa ga vseeno uporabimo za dodajanje ostalih I2C naprav na naslove, ki so na
voljo. Drugi vmesnik I2C pa je moč prosto uporabljati in nastavljati [4]. Na vodilo I2C lahko
priključimo tako nadrejeno kot podrejeno napravo. Kaj naprava predstavlja, določimo v
klicu sistemske funkcije ioctl. Izhodna in maksimalna vhodna napetost na teh vmesnikih je
3,3 V.
-
6 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Slika 2.4: Vmesnika I2C. Vir [4].
Za hitro pošiljanje podatkov imamo na voljo dva serijska komunikacijska vmesnika SPI [4].
SPI oziroma serijski periferni vmesnik je vodilo, ki se pogosto uporablja za pošiljanje
podatkov med mikrokrmilniki in perifernimi napravami, kot so senzorji, pomični registri in
SD kartice. Izhodna in maksimalna vhodna napetost na teh vmesnikih je 3,3 V. Naprava
BeagleBone Black nam glede na polariteto ure in fazo omogoča štiri načine prenosa
podatkov, ki so podrobneje opisani v sedmem poglavju. Na vodilo lahko priključimo
podrejeno ali nadrejeno napravo, vendar moramo v fazi omogočanja vmesnika SPI v datoteki
.dts določiti, kaj predstavlja BeagleBone Black, torej podrejeno ali nadrejeno napravo.
Razporeditev vhodov vmesnikov je prikazana na Sliki 2.5.
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 7
Slika 2.5: Vmesnika SPI. Vir [4].
2.2 Drevo naprav
Drevo naprav (angl. Device Tree) je podatkovna struktura, ki opiše strojno opremo, sistem,
funkcijo posameznih vmesnikov in gonilnik, ki ga naj le-ta uporablja. Namesto
programiranja vseh podrobnosti naprave v jedro operacijskega sistema lahko veliko vidikov
strojne opreme opišemo s podatkovno strukturo, ki jo operacijski sistem prejme v času
zagona. Sama podatkovna struktura je predstavljena s preprostim drevesom, ki vsebuje
imena vozlišč in lastnosti. Vozlišča vsebujejo lastnosti in otroke. Lastnosti pa so preprosti
pari imen in vrednosti [12].
Prvotno so ARM naprave imele gonilnike za različne možnosti vmesnikov in časovnike
shranjene v svoji mapi jedra. S prihodom drevesa naprav te datoteke več ni. Tako mora vsaka
naprava biti opisana v datoteki s končnico .dts, ki se nato s pomočjo DTC prevajalnika
prevede v binarni zapis s končnico .dtb. Ta binarni zapis se nato ob zagonu pošlje jedru
operacijskega sistema in tako se ustvari nova naprava [5].
Največja sprememba in prednost je sedaj ta, da lahko uporabnik nastavlja platformo brez
ponovnega prevajanja jedra sistema.
2.2.1 Drevo naprav s prekrivki
Drevo naprav s prekrivki (angl. Device Tree Overlays) je metoda za dinamično nalaganje
nastavitev vmesnikov v izvajajoče jedro sistema. Metoda je odgovorna za prenos sprememb
-
8 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
v notranje drevo naprav v jedru. Torej metoda mora poskrbeti, da je rezultat dodajanja in
omogočanja novega vozlišča naprave ustvarjena nova naprava [20].
Datoteka .dts je sestavljena iz več delov. Prvi dve vrstici opišeta različico .dts datoteke ter
da gre za vtičnik.
/dts-v1/; /plugin/;
Naslednje vrstice pomenijo začetek korena drevesa naprav, opis platforme, za katero so
namenjeni prekrivki, in na koncu sledi identifikacija. Za napravo BeagleBone Black je treba
uporabiti različico 00A0.
/{ compatible = "ti,beaglebone-black"; part-number = "BB-UART1"; version = "00A0";
Vrstica exclusive-use dovoli prekrivkom opis potrebnih virov ter onemogoči, da bi kateri
drug prekrivek zasedel te vire. V naslednjem primeru uporabljamo vmesnika P9.24 in P9.26
in uart1.
exclusive-use = "P9.24", /* txd */ "P9.26", /* rxd */ "uart1";
Prekrivek je sestavljen iz dveh fragmentov, ki opišeta napravo ter ali gre za nastavitev naloge
vmesnikov ali omogočanje naprave. V našem primeru prvi fragment dodeli nalogo
vmesnikoma P9.24 in P9.26.
fragment@0 { target = ; __overlay__ {
bb_uart1_pins: pinmux_bb_uart1_pins { pinctrl-single,pins = < 0x184 0x20 /* P9.24 uart1_txd.uart1_txd MODE0 OUTPUT */
0x180 0x20 /* P9.26 uart1_rxd.uart1_rxd MODE0 INPUT */ >;
}; };
};
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 9
Drugi fragment omogoči napravo uart.
fragment@1 { target = ; __overlay__ {
Status = "okay"; pinctrl-names = "default"; pinctrl-0 = ;
}; };
Na koncu s spodnjim ukazom prevedemo ustvarjeno .dts datoteko.
dtc -O dtb -o UART2-00A0.dtbo -b 0 -@ UART2-00A0.dts
• -O dtb je izhodni format,
• -o je ime izhodne datoteke,
• -b 0 je nastavitev fizičnega zagona CPU in
• -@ ustvari vozlišče kot del dinamičnega drevesa naprav, naloženega s prekrivkom.
-
10 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
3 VZPOSTAVITEV SISTEMA
Kljub nameščenemu operacijskemu sistemu na ploščici BeagleBone Black smo se odločili
namestiti operacijski sistem Ubuntu Bone, ki je okrnjena različica distribucije Ubuntu. Ta
sistem vsebuje vse potrebne knjižnice in gonilnike. Sliko za namestitev operacijskega
sistema smo prenesli s povezave [4], ki jo lahko najdemo na uradni spletni strani [6] ploščice
BeagleBone Black. S pomočjo navodil na spletni strani smo sliko operacijskega sistema
naložili na spominsko kartico micro SD, velikosti 2 GB.
Na BeagleBone Black smo priključili tipkovnico, monitor, kabel za internetno povezavo in
zunanje napajanje. Po zagonu sistema iz spominske kartice smo najprej spremenili privzeto
geslo, namestili vse potrebne posodobitve ter nadgradili sistem. Ker smo se odločili, da
bomo programske rešitve danih problemov implementirali v programskem jeziku C++, smo
za ta jezik namestili prevajalnik.
Prevajalnik smo namestili z ukazom:
sudo apt-get install g++
Po končani vzpostavitvi sistema smo se odločili, da bomo do operacijskega sistema na
ploščici dostopali iz oddaljenega računalnika, in sicer preko protokola SSH s programsko
opremo PuTTY. Tako nam na ploščico ni bilo treba priklapljati tipkovnice, monitorja in
dodatnega napajanja, temveč ploščico priklopimo na drug računalnik preko vmesnika USB.
Za preizkus pravilnega delovanja vseh knjižnic in gonilnikov smo napisali preprost program,
s katerim smo na ploščici prižgali svetlečo diodo USR3, ki je privzeto nastavljena tako, da
ob zagonu operacijskega sistema utripa ob dostopu do pomnilnika eMMC.
Izsek programske rešitve za vklop diode USR3:
const char *led3 = "/sys/class/leds/beaglebone:green:usr3/brightness"; fstream fs; fs.open(led3, fstream::out); fs
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 11
4 DIGITALNI VHODNO/IZHODNI VMESNIKI
Analogni signali so signali, ki vsebujejo zvezne vrednosti. Teoretično vsebujejo neskončno
mnogo informacij. Svet, v katerem živimo, je analogen, na primer: temperatura, zvok, sila
itd. Analogni signal lahko s pomočjo tipal pretvorimo v električni signal, kjer se sorazmerno
s signalom spreminja napetost, tok, frekvenca itd.
V splošnem v računalništvu vsi mikroprocesorji operirajo z binarnimi števili, kar pomeni,
da ni mogoče operirati z neskončnimi vrednostmi, zato analogni signal pretvorimo v
digitalnega. Digitalni signali so diskretne nezvezne vrednosti. V računalništvu je ta signal
najpogosteje binaren. Za predstavljanje podatkov navadno uporabimo električno napetost.
Binarni vrednosti 0 in 1 tako predstavljata interval napetosti.
Na ploščici BeagleBone Black je napetost na vhodno/izhodnih vmesnikih enaka 3,3 V, razen
v primeru, ko je to drugače označeno. Pri tem je lahko maksimalen tok na vhodno/izhodnih
vmesnikih 4 mA ali 6 mA [31]. Na priključku P9 imamo na voljo izhodne vmesnike, ki
nimajo napetosti enake 3,3 V, kar prikazuje Tabela 4.1.
Tabela 4.1: Napetost in tok vmesnikov na priključku P9. Povzeto po [9].
Tok Napetost Ime P9 Ime Napetost Tok
GND 1 2 GND 250 mA 3,3 V VDD_3V3 3 4 VDD_3V3 3,3 V 250 mA 1000 mA 5 V VDD_5V 5 6 VDD_5 5 V 1000 mA 250 mA 5 V SYS_5V 7 8 SYS_5 5 V 250 mA
…
…
32 VDD_ADC 1,8 V 400 mA …
…
GND 43 44 GND GND 45 46 GND
Na ploščici imamo na voljo 65 vhodno/izhodnih digitalnih vmesnikov. Odločili smo se, da
bomo delovanje izhodnih vmesnikov prikazali z utripajočimi svetlečimi diodami. Delovanje
vhodnega in izhodnega vmesnika hkrati pa bomo prikazali s pomočjo gumba in svetleče
diode. Uporabili smo modre svetleče diode, velikosti 5 mm.
-
12 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
4.1 Primer uporabe
Najprej smo za svetlečo diodo po enačbi Ohmovega zakona (4.1) izračunali idealen upor, ki
ga potrebujemo za omejitev toka, ki teče skozi svetlečo diodo. Uporabili smo napajalno
napetost 3,3 V. Tok, ki teče skozi svetlečo diodo, je 10 mA, padec napetosti na svetleči diodi
pa je približno 2,7 V. Glede na te podatke smo izračunali, da bi moral imeti idealen upor
upornost 60 Ω. Uporabili smo upor z upornostjo 68 Ω, saj je ta najbližji idealnemu uporu.
� =
�
�
(4.1)
Kjer je:
I – tok (A),
U – napetost (V) in
R – upornost (Ω).
Za predstavitev delovanja izhodnih vmesnikov smo uporabili štiri modre svetleče diode in
jih priklopili na ploščico BeagleBone Black, kot prikazuje shema, vidna na Sliki 4.1.
Svetleče diode smo priključili na digitalne vmesnike GPIO_60, GPIO_51, GPIO_30 in
GPIO_48. Ker smo želeli, da svetleče diode svetijo, smo morali te vmesnike nastaviti na
izhode. Napisali smo program, ki svetleče diode po vrsti prižiga in ugaša. V prvi iteraciji
smo diode prižigali in ugašali v naslednjem vrstnem redu: GPIO_60, GPIO_51, GPIO_30 in
GPIO_48. V drugi iteraciji smo prižgali in ugasnili dve diodi GPIO_51 in GPIO_30. Ti dve
zaporedji prižiganja in ugašanja smo izvedli desetkrat. Programska rešitev je predstavljena
v poglavju 4.1.1. Slika 4.2 prikazuje vrstni red prižiganja in ugašanja svetlečih diod.
Slika 4.1: Shema priklopa svetlečih diod
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 13
Slika 4.2: Prižiganje in ugašanje svetlečih diod
Za prikaz delovanja vhodnega in izhodnega vmesnika smo uporabili gumb ter eno modro
svetlečo diodo ter ju priklopili na ploščico BeagleBone Black, kot prikazuje Slika 4.3. Za
branje vrednosti gumba smo vmesnik GPIO_51, na katerega je le-ta povezan, nastavili na
vhod. Vmesnik GPIO_60, na katerega je povezana svetleča dioda, pa smo postavili na izhod.
Napisali smo program, s katerim smo ob pritisku gumba prižgali oziroma ugasnili svetlečo
diodo. Programska rešitev je predstavljena v poglavju 4.1.2.
Slika 4.3: Shema priklopa gumba in svetleče diode
4.1.1 Izsek programske rešitve uporabe digitalnih izhodov
void prizgiDiodo(string datoteka){ ofstream fd; fd.open(datoteka.c_str()); fd
-
14 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
int main(){ string pini[4] = {"/sys/class/gpio/gpio60/value","/sys/class/gpio/gpio30/value","/sys/class/gpio/gpio51/value","/sys/class/gpio/gpio48/value"}; for(int i = 0; i < 10 ; i++) for(int j = 0; j < 4; j++){ prizgiDiodo(pini[j]); } for(int j = 2; j > 0; j--){ prizgiDiodo(pini[j]); } } }
4.1.2 Izsek programske rešitve uporabe digitalnega vhoda in izhoda
void preklopiDiodo(string datoteka, int vrednost){ ofstream fd; fd.open(datoteka.c_str()); fd
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 15
4.2 Merjenje hitrosti
Po uspešni implementaciji programa za uporabo izhodnih vmesnikov smo želeli izmeriti, s
kakšno frekvenco lahko prižigamo in ugašamo svetlečo diodo, s tem ko v vsaki iteraciji
odpremo datoteko, vanjo zapišemo vrednost in jo zapremo. Napisali smo program, v katerem
smo v neskončni zanki prižigali in ugašali svetlečo diodo, priključeno na vmesnik GPIO_60.
Programska rešitev je predstavljena v poglavju 4.2.1. Odločili smo se, da bomo frekvenco
izmerili s pomočjo logičnega analizatorja Logic 16, podjetja Salae. Logični analizator je
naprava za vzorčenje in prikaz digitalnih signalov. Zajete podatke lahko prikaže v časovnih
diagramih. Logični analizator je uporaben predvsem, ko želimo videti časovne relacije med
določenimi signali.
Logični analizator Logic 16, ki smo ga uporabili, podpira 17 različnih protokolov, med
katerimi sta tudi SPI in I2C. Logic 16 lahko vzorči dva kanala s hitrostjo 100 MHz, štiri
kanale s hitrostjo 50 MHz, osem kanalov s hitrostjo 25 MHz ali vseh šestnajst kanalov s
hitrostjo 12,5 MHz [19].
Po priključitvi logičnega analizatorja na senzor in izvedeni meritvi smo ugotovili, da svetleča
dioda utripa s frekvenco 6,08 kHz, kar je prikazano na Sliki 4.3.
Slika 4.4: Frekvenca utripanja svetleče diode
Ker z izmerjeno frekvenco nismo bili zadovoljni, smo se odločili implementirati še drugo
programsko rešitev, predstavljeno v poglavju 4.2.2, in sicer z uporabo preslikave pomnilnika
in neposrednega dostopa do registrov GPIO. V dokumentaciji procesorjev serije AM335x,
dostopni na [1], smo našli za nas potrebne lokacije registrov. V našem primeru uporabljamo
lokacijo registra GPIO1, ki je 0x4804C000. Po uspešni implementaciji smo z logičnim
analizatorjem izmerili frekvenco utripanja svetleče diode, ki je tokrat znašala 2,78 MHz.
-
16 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Ugotovili smo, da lahko z neposrednim dostopom do registrov izboljšamo frekvenco
utripanja diode za kar 457-krat. Izmerjena frekvenca, ki smo jo dosegli s pomočjo
neposrednega dostopa do registrov vmesnika, je prikazana na Sliki 4.5.
Slika 4.5: Frekvenca utripanja svetleče diode z uporabo neposrednega dostopa do registrov
4.2.1 Izsek programske rešitve z zapisovanjem v sistemsko datoteko
void prizgiDiodo(string datoteka){ ofstream fd; fd.open(datoteka.c_str()); fd
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 17
ulong* pinconf1 = (ulong*) mmap(NULL, GPIO1_END_ADDR - GPIO1_START_ADDR, PROT_READ |PROT_WRITE, MAP_SHARED, fd, GPIO1_START_ADDR); pinconf1[GPIO_OE/4] &= (0xFFFFFFFF ^ (1
-
18 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
5 ANALOGNO VHODNI VMESNIKI IN A/D PRETVORNIK
Analogno-digitalna pretvorba je postopek, s katerim analogni signal pretvorimo v ustrezno
digitalno vrednost. Za analogno digitalno pretvorbo potrebujemo analogno digitalni
pretvornik (A/D pretvornik). A/D pretvornik se uporablja za zajem analognih napetosti iz
analognih senzorjev, kot so tlak, teža, temperatura itd. Pri pretvorbi v rednih časovnih
intervalih jemljemo vzorce analogne napetosti, kjer nato vrednost iz intervala napetosti, v
katerem se nahaja vzorec, predstavlja rezultat pretvorbe.
Ločljivost A/D pretvorbe nam pove, kako natančen bo digitalen zapis vhodne analogne
vrednosti. Poznamo 8-, 10-, 11-, 12-, 16-bitno ločljivost. A/D pretvornik na ploščici
BeagleBone Black ima 12-bitno ločljivost.
12-bitni A/D pretvornik pretvori vhodno območje napetosti v 12-mestni binarni zapis.
Možnih je 4096 različnih vrednosti, kar izračunamo po enačbi (5.1). Vrednost enega bita
ustreza 1/4095 največje možne vhodne napetosti.
� = 2� (5.1)
Kjer je:
N – možne vrednosti (bit) in
M – ločljivost AD pretvornika (bit).
Ločljivost lahko po enačbi (5.2) izračunamo tudi kot električno napetost. Najmanjša
sprememba vhodne napetosti, ki zagotovi spremembo na izhodnem nivoju, se imenuje
napetost najmanj pomembnega bita. Ločljivost A/D pretvornika je enaka napetosti najmanj
pomembnega bita.
� =
��� − �����
2�
(5.2)
Kjer je:
VRefHi – zgornja meja napetosti,
VRefLow – spodnja meja napetosti in
M – ločljivost AD pretvornika (bit).
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 19
5.1 Primer uporabe
Za preizkus delovanja A/D pretvornika na ploščici BeagleBone Black smo se odločili
uporabiti termistor. Termistor je vrsta upora, katerega upornost se spreminja glede na
spreminjanje temperature. Termistorji se uporabljajo kot omejevalniki tokovnih sunkov,
temperaturni senzorji, samoregulativni grelni elementi itd.
Predpostavimo, da je zveza med upornostjo in temperaturo linearna. Tako lahko temperaturo
dobimo iz enačbe (5.3) oziroma iz enačbe (5.4), če upoštevamo zvezo med temperaturo in
vrednostjo A/D pretvornika.
∆� = �∆� (5.3)
Kjer je:
∆R – sprememba upornosti,
k – temperaturni koeficient upornosti in
∆T – sprememba temperature.
� = �� + � (5.4)
Kjer je:
T – temperatura,
k – smerni količnik premice,
x – vrednost A/D pretvornika in
n – začetna vrednost premice.
Glede na koeficient k ločimo dva tipa termistorjev. Če je koeficient k pozitivno število,
upornost narašča z naraščanjem temperature. Tak termistor imenujemo PTC termistor. Če je
koeficient k negativno število, upornost pada z naraščanjem temperature. Tak termistor
imenujemo NTC termistor. Upori, ki niso termistorji, imajo koeficient k blizu števila 0. Tako
lahko njihova upornost ostaja konstantna v velikem temperaturnem razponu [28].
-
20 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Za potrebe našega dela smo uporabili NTC termistor. Termistor in izbran upor smo
priključili na ploščico BeagleBone Black preko analognega vhoda AIN1, kot prikazuje
shema, prikazana na Sliki 5.1. Glede na opravljene meritve smo za izračun temperature
dobili naslednjo funkcijo: T = -13,252x + 863,64.
Slika 5.1: Shema za priklop termistorja
5.1.1 Izsek programske rešitve
Izsek programske kode metode main()
int main(){ string datoteka = "/sys/devices/ocp.3/helper.12/AIN1"; ifstream fd; fd.open(datoteka.c_str()); string line; double temperatura; for(int i = 0; i < 100000; i++){ while(getline(fd, line)){ int tmp = atoi(line.c_str()); temperatura = (tmp - 863.64) / (-13.25); cout
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 21
5.2 Merjenje hitrosti
Po izmerjeni temperaturi nas je zanimala hitrost prebiranja vrednosti A/D pretvorbe.
Maksimalno frekvenco prebiranja vrednosti A/D pretvornika smo izmerili tako, da smo v
zanki, ki se je izvajala eno minuto, prebirali vrednost iz vhoda AIN1, pri tem pa smo vodili
še števec. Po koncu izvajanja zanke smo izpisali kvocient med števcem in številom 60, ki
predstavlja našo maksimalno vzorčevalno frekvenco. V našem primeru je ta znašala
približno 934 Hz.
5.2.1 Izsek programske rešitve
Programska koda metode main()
int main(){ string datoteka = "/sys/devices/ocp.3/helper.12/AIN1"; string line, adcVrednost; ifstream fd; fd.open(datoteka.c_str()); int stevec = 0; cout
-
22 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
6 UART
UART ali univerzalni asinhroni sprejemnik/oddajnik je strojna oprema, odgovorna za
serijsko komunikacijo. Je ključna komponenta serijske komunikacije računalnika. Vmesnik
UART je pogosto uporabljen v povezavi s komunikacijskimi standardi, kot sta RS-232 in
RS-422. Vmesnik UART vzame zloge podatkov in po podatkovni liniji zaporedno pošilja
posamezne bite. Sprejemnik nato te bite zloži nazaj v zloge. Serijski prenos je pogosto
uporabljen pri modemih in komunikacijah med računalniki. Danes je vmesnik UART
navadno vključen v mikrokrmilnikih. Veliko današnjih integriranih vezij vsebuje UART, ki
podpira tudi sinhrono serijsko komunikacijo, te naprave se imenujejo USART [30].
6.1 Serijska povezava
V splošnem lahko komunikacijske protokole delimo na paralelne in serijske. Paralelni
vmesniki prenašajo več bitov naenkrat. Navadno podatke pošiljajo preko osem, šestnajst ali
več povezav.
Pri serijski povezavi pa se pošilja vsak bit posamezno. Ti vmesniki lahko pošiljajo podatke
tudi po eni sami povezavi, navadno pa je teh povezav manj kot pet. Serijska komunikacija
je uporabna za komunikacijo na velike razdalje. Primeri vmesnikov, ki uporabljajo
arhitekturo serijske komunikacije, so RS-232. I2C, SPI, Ethernet in drugi [24].
Prednost paralelne komunikacije je preprosta implementacija, vendar pa je potrebnih veliko
vhodno/izhodnih linij.
6.1.1 Sinhrona in asinhrona serijska povezava
Sinhron serijski prenos zahteva od pošiljatelja in prejemnika, da drug z drugim delita uro, ki
skrbi za sinhronizacijo obeh strani. Ura je nihajoč signal, ki pove prejemniku, kdaj natančno
naj vzorči podatke na liniji. To je lahko naraščajoč ali padajoč rob signala ure. Ko prejemnik
zazna ta prehod, prebere naslednji bit iz podatkovne linije. Ker se ura pošilja skupaj s
podatki, nam ni treba določati hitrosti prenosa podatkov [24].
Drug način prenosa se imenuje asinhrona serijska povezava. Podatki se prenašajo brez ure,
ki bi skrbela za sinhronizacijo obeh strani. Pri asinhroni povezavi ni nobenega nadzora nad
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 23
tem, kdaj so podatki poslani, prav tako ni nobenega zagotovila, da obe napravi komunicirata
z enako hitrostjo. Ker se računalniki običajno zanašajo na sinhronizacijo glede na določeno
uro, lahko to predstavlja težavo, ko želita med seboj komunicirati dva sistema z različnimi
hitrostmi ur. Da se tej težavi izognemo, dodamo v vsak blok bitov dodaten start in stop bit,
s katerima pomagamo prejemniku pri sinhronizaciji. Obe napravi se morata vnaprej
dogovoriti o hitrosti prenosa podatkov (npr. 9600 bitov/s) [24].
6.2 Prenos podatkov
Vmesnik UART je zadolžen tako za pošiljanje kot prejemanje podatkov. Pri pošiljanju
podatkov mora vmesnik UART ustvariti podatkovni paket, dodati sinhronizacijska ter
paritetna bita in glede na dogovorjeno hitrost poslati paket po liniji TX ob določenem
časovnem trenutku. Na prejemnikovi strani mora vmesnik UART glede na dogovorjeno
hitrost ob določenih časovnih trenutkih vzorčiti linijo RX, prebrati sinhronizacijske bite ter
združiti podatke [24].
6.3 Primer uporabe
Za prikaz delovanja vmesnika UART smo le-tega morali najprej omogočiti, pri tem pa smo
si pomagali s [14]. Delovanje smo nato preverili s programom Minicom, ob tem pa smo med
seboj, kot prikazuje shema, prikazana na Sliki 6.1, povezali vmesnika UART1 ter UART2
na napravi BeagleBone Black.
Slika 6.1: Shema priklopa vmesnika UART
-
24 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Namestitev programa Minicom:
sudo apt-get install minicom
Preverjanje vmesnika s programom Minicom:
#prvo terminalno okno minicom –b 9600 –D /dev/ttyO1 #drugo terminalno okno minicom –b 9600 –D /dev/ttyO2
Ko smo videli, da vmesnik deluje pravilno, smo sami implementirali programsko rešitev,
kjer smo iz vmesnika UART1 pošiljali niz Uart na vmesnik UART2, s hitrostjo 115.200
bitov/s.
6.3.1 Izsek programske rešitve
Izsek programske kode za prejemnika:
struct termios options; fd = open(DEVICE, O_RDWR | O_NOCTTY | O_NDELAY); options.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; options.c_iflag = IGNPAR; options.c_oflag = 0; tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &options); while(true){
int len = read(fd, (void*)buf, 4); buf[len] = '\0'; printf("%s", buf); cout
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 25
7 SPI
SPI oziroma serijski periferni vmesnik je vodilo, ki ga je sredi 80-ih let razvilo podjetje
Motorola. Vmesnik se pogosto uporablja za pošiljanje podatkov med mikrokrmilniki in
perifernimi napravami, kot so senzorji, pomični registri in SD kartice. SPI uporablja ločeni
liniji za uro in podatke ter dodatno linijo, s katero izbere napravo za komuniciranje.
Uporablja se za komunikacijo med napravami na kratkih razdaljah in deluje v dvosmernem
načinu [26].
Protokol za komuniciranje uporablja princip podrejena – nadrejena naprava. Nadrejena
naprava mora vzpostaviti stik in voditi komunikacijo s podrejeno napravo.
Na ploščici BeagleBone Black imamo na voljo dva serijska vmesnika SPI.
7.1 Vmesnik
Vmesnik SPI omogoča dvosmerno komunikacijo z eno ali več napravami. Vedno pa imamo
le eno nadrejeno napravo.
SPI uporablja štiri signalne linije:
- MISO – nadrejena naprava posluša, podrejena sporoča (angl. Master Input – Slave
Output);
- MOSI – nadrejena naprava sporoča, podrejena posluša (angl. Master Output – Slave
Input);
- SS – s tem signalom nadrejena naprava določi, s katero podrejeno napravo želi
komunicirati;
- SCLK – urin takt, ki ga generira nadrejena naprava.
7.1.1 Več podrejenih naprav
Poznamo dva načina priklopa naprav na vmesnik SPI:
1. v prvem načinu vsaka podrejena naprava potrebuje ločeno linijo SS. Za izbiro
naprave, s katero želimo komunicirati, postavimo linijo SS za to napravo na nizko
-
26 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
napetost, ostale pa na visoko [26]. Za veliko število podrejenih naprav potrebujemo
veliko število linij SS. Ta način priklopa prikazuje Slika 7.1;
Slika 7.1: SPI ločene linije SS
2. v drugem načinu pa linijo MISO ene podrejene naprave vežemo na linijo MOSI
druge podrejene naprave. V tem primeru imamo eno linijo SS priklopljeno na vse
podrejene naprave [26]. Drugi način priklopa prikazuje Slika 7.2.
Slika 7.2: SPI skupne linije SS
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 27
7.2 Prenos podatkov
Ob začetku komunikacije nadrejena naprava konfigurira uro z uporabo frekvence, ki je
manjša ali enaka frekvenci podrejene naprave. Te frekvence so po navadi reda nekaj MHz.
Nadrejena naprava za napravo, s katero želi komunicirati, postavi linijo SS na logično 0. Ta
postavitev označuje začetek prenosa podatkov.
Ob vsakem urinem ciklu pride do dvosmernega prenosa [26]:
- nadrejena naprava pošlje en bit po liniji MOSI, podrejena naprava pa iz te linije en
bit prebere;
- podrejena naprava pošlje en bit po liniji MISO, nadrejena naprava pa iz te linije en
bit prebere.
Prenos je običajno realiziran z dvema pomičnima registroma, velikosti nekaj besed, recimo
8-bitni register. En izmed njiju je nadrejeni, drugi pa podrejeni. Navadno se najprej pošlje
najpomembnejši bit [27]. Prenos podatkov med registroma je prikazan na Sliki 7.3.
Slika 7.3: SPI prenos podatkov
7.3 Polariteta faza ure
Poleg tega, da je nadrejena naprava odgovorna za konfiguracijo ure, mora še dodatno
konfigurirati polariteto (CPOL) in fazo (CPHA) ure. CPOL določa osnovno vrednost ure, to
je vrednost, ko vodilo SPI miruje. CHPA določa prehod ure, ob katerem se morajo vzorčiti
podatki. Slika 7.4 prikazuje časovni diagram glede na vrednosti polaritete in fazo ure.
Za konfiguracijo CPOL in CPHA imamo naslednje možnosti [27]:
- CPOL = 0, osnovna vrednost ure je enaka 0:
-
28 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
o CHPA = 0, podatki se vzorčijo ob urinem prehodu iz nizkega v visoko stanje,
pošiljajo pa se ob prehodu iz visokega v nizko stanje;
o CHPA = 1, podatki se vzorčijo ob urinem prehodu iz visokega v nizko stanje,
pošiljajo pa se ob prehodu iz nizkega v visoko stanje;
- CPOL = 1, osnovna vrednost ure je enaka 1:
o CHPA = 0, podatki se vzorčijo ob urinem prehodu iz visokega v nizko stanje,
pošiljajo pa se ob prehodu iz nizkega v visoko stanje;
o CHPA = 1, podatki se vzorčijo ob urinem prehodu iz nizkega v visoko stanje,
pošiljajo pa se ob prehodu iz visokega v nizko stanje.
Slika 7.4: Časovni diagram prikazuje polariteto in fazo ure. Rdeča navpičnica predstavlja CHPA = 0, modra pa CHPA = 1. Vir [27].
7.4 Primer uporabe
Delovanje vmesnika SPI na napravi BeagleBone Black smo preizkusili s temperaturnim
senzorjem TC77 podjetja Microchip. Ta senzor, za razliko od drugih SPI naprav, podatkov
ne prejema, ampak jih le pošilja, zato ima le eno podatkovno linijo, in sicer signalno linijo
MISO. Maksimalna frekvenca, s katero lahko senzor komunicira, je 7 MHz, zato smo se tej
hitrosti z našo programsko rešitvijo želeli čim bolj približati.
BeagleBone Black ima na voljo dva vmesnika SPI, SPI0 in SPI1. Vmesnik z imenom SPI1
je uporabljen s strani vmesnika HDMI naprave BeagleBone Black, zato smo naš senzor
priključili na vmesnik SPI0. Priklop senzorja prikazuje shema, prikazana na Sliki 7.4.
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 29
Vmesnik SPI na napravi BeagleBone Black ima namesto linij MISO in MOSI liniji z
imenom d0 in d1.
Uporabljen senzor vrača 16 bitov, vendar le 13 bitov predstavlja temperaturo. Senzor ima
12-bitno temperaturno resolucijo z 0,0625 °C na najmanj pomembnem bitu. Najbolj
pomemben bit predstavlja predznak števila. Temperaturni razpon senzorja TC77 je med -55
°C in 125 °C [29].
Natančnost meritev senzorja [29]:
- ±1 °C v območju med +25 °C in +65 °C,
- ±2 °C v območju med -40 °C in +85 °C in
- ±3 °C v območju med -55 °C in +125 °C.
Pred uporabo vmesnika SPI smo morali le-tega najprej omogočiti. Vmesnik SPI0 smo
omogočili s pomočjo navodil, prikazanih kot izseki kode, dostopnih na [8]. V datoteki BB-
SPI0-01-00A0.dts smo namesto frekvence 24.000.000 Hz uporabili frekvenco 7.000.000 Hz,
ki je maksimalna frekvenca, s katero lahko komunicira naš temperaturni senzor.
Slika 7.5: Shema priklopa senzorja TC77
-
30 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
7.4.1 Izsek programske rešitve
Izsek programske kode metode main()
while(true){ podatki[0] = 0; podatki[1] = 0;
tc.spiRead(podatki, sizeof(podatki));
tmp = 0; int predznak = podatki [0] & 0x80; if(predznak == 0)
tmp = (podatki [0] > 3; else
tmp = (((podatki [0] & 0x7f) > 3) - 4096;
temperatura = (float)tmp * 0.0625; cout
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 31
Podatke smo iz senzorja brali v dveh delih, in sicer najprej prvih 8 bitov in nato še zadnjih 8
bitov. V časovnem diagramu, ki smo ga pridobili z logičnim analizatorjem, smo ugotovili,
da je čas, ki preteče med branjem prvih 8 bitov in drugih 8 bitov, približno 1,9 µs, kar je
prikazano na Sliki 7.6. Za branje podatkov s senzorja je zadolžena sistemska funkcija ioctl,
zato predvidevamo, da ta čas porabi ta funkcija. Opazili smo tudi, da poteče precej časa pred
ponovnim branjem temperature, in sicer približno 23 µs, kar prikazuje Slika 7.7.
Predvidevali smo, da je za porabo tega časa prav tako kriv klic sistemske funkcije ioctl, zato
smo čas, ki ga ta klic sistemske funkcije potrebuje, programsko izmerili z uporabo strukture
timespec. Z izvedeno meritvijo smo našo predpostavko potrdili, saj smo izmerili, da klic te
funkcije porabi med 21 in 30 µs. Sledi izsek programske kode za meritev časa. Programska
koda se nahaja v metodi spiRead(unsigned char * podatki, int dolzina) v razredu tc77.
struct timespec t1, t2; clock_gettime(CLOCK_MONOTONIC, &t1); retVal = ioctl(this->spifd, SPI_IOC_MESSAGE(length), &spi); clock_gettime(CLOCK_MONOTONIC, &t2); cout
-
32 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Slika 7.8: Čas med ponovnim branjem temperature
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 33
8 I2C
I2C je komunikacijski protokol, ki ga je razvilo podjetje Philips leta 1982. Ta protokol
dovoljuje komunikacijo več podrejenih naprav z več nadrejenimi napravami. Tako kot
vmesnik SPI je namenjen za komunikacijo med napravami na kratkih razdaljah. Potrebuje
le dve signalni liniji za prenos podatkov. Od leta 2006 ni več treba plačevati licenčnine za
implementacijo tega protokola [18].
8.1 Prednosti pred vmesnikom SPI
Največja slabost vmesnika SPI je število potrebnih signalnih linij. Povezava nadrejene in
ene podrejene naprave preko vmesnika SPI zahteva štiri linije. Vsaka dodatna podrejena
naprava zahteva še dodatno linijo SS. Veliko število povezav, ki so potrebne za vsako
napravo, lahko privede do težav pri usmerjanju signalnih linij zapletenih in tesnih postavitev
elementov. Vmesnik SPI za razliko od I2C dovoljuje na vodilu le eno nadrejeno napravo
[17].
SPI je primeren za visoke podatkovne hitrosti v polnem dvosmernem načinu in omogoča
hitrosti komunikacije do 10 MHz za določene naprave, medtem ko klasičen I2C omogoča
hitrosti komunikacije do 100 kHz ali 400 kHz.
8.2 Vmesnik
Tako kot asinhrona serijska povezava zahteva vmesnik I2C le dve liniji. Pri klasičnem
vmesniku, ki dovoljuje hitrosti samo do 100 kHz, imamo 7-bitne naslove, kar pomeni, da
lahko priključimo 127 naprav. Zaradi želje po priključitvi večjega števila naprav se je uvedlo
10-bitno naslavljanje, ki dovoljuje priključitev 1023 naprav. Prav tako I2C omogoča več
nadrejenih naprav, ki lahko komunicirajo z vsemi napravami na vodilu [17].
Podatkovne hitrosti se gibljejo med hitrostmi asinhrone serijske komunikacije ter
komunikacije SPI. Večina I2C naprav lahko komunicira s 100 ali 400 kHz. Vsak vmesnik
I2C vsebuje dve signalni liniji, imenovani SCL in SDA. Linija SCL je urin signal, linija SDA
pa je podatkovna linija. Urin signal vedno generira trenutna nadrejena naprava vodila.
Včasih mora podrejena naprava postaviti linijo SCL na vrednost 0, da s tem zakasni
pošiljanje podatkov nadrejene naprave [17].
-
34 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Vsaka signalna linija potrebuje upor za dvig napetostnega nivoja na liniji. S tem se postavi
signal na liniji na vrednost 1. Izbira upora je odvisna od hitrosti naprave na vodilu, za
napravo s hitrostjo 100 kHz je določen upor z upornostjo 4,7 kΩ.
Podatki so razdeljeni v dva okvirja, in sicer naslovni okvir, s katerim nadrejena naprava
označi, s katero izmed podrejenih naprav želi komunicirati, ter en ali več podatkovnih
okvirjev, ki so 8-bitna sporočila. Podatki se pošljejo na linijo SDA potem, ko se linija SCL
postavi na vrednost 0, vzorčijo pa se, ko se linija SCL postavi na vrednost 1. Za sprožitev
naslovnega okvirja nadrejena naprava pusti linijo SCL na vrednosti 1, linijo SDA pa postavi
na vrednost 0. S tem sporoči podrejenim napravam, da se bo pričel prenos podatkov. Če
želita dve nadrejeni napravi sočasno prevzeti vodilo, potem zmaga tista naprava, ki prva
postavi linijo SDA na vrednost 0 [17].
Naslovni okvir je vedno prvi v novi komunikacijski sekvenci. Najprej se pošlje naslov
naprave, in sicer najpomembnejši bit najprej, nato pa sledi bit, ki pove, ali želimo brati
(vrednost 1) ali pisati (vrednost 0). Deveti bit naslovnega okvirja je tako imenovan bit ACK.
Ko je poslanih prvih osem bitov okvirja, prejemnik dobi nadzor nad linijo SDA. Če
prejemnik linije SDA ne postavi na vrednost 0 pred devetim urinim ciklom, lahko to pomeni,
da naprava podatkov ni prejela ali pa ni uspela razbrati sporočila. V tem primeru se
izmenjava podatkov zaustavi in naloga nadrejene naprave sistema je, da se odloči, kako
postopati v tem primeru [17].
Po poslanem naslovnem okvirju se prične prenos podatkov. Nadrejena naprava nadaljuje z
generiranjem urinih impulzov in glede na to, ali gre za pisanje ali branje, nadrejena oziroma
podrejena naprava na linijo SDA pošlje podatke. Potem, ko so vsi podatkovni okvirji poslani,
nadrejena naprava ustavi prenos podatkov. Zaustavitev je definirana, ko linija SDA preide
iz stanja 0 v stanje 1 po tem, ko tudi linija SCL preide iz stanja 0 v stanje 1 [17]. Slika 8.1
prikazuje časovni diagram prenosa podatkov.
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 35
Slika 8.1: Diagram prenosa podatkov za vmesnik I2C. Vir [16].
8.3 Primer uporabe
Delovanje vmesnika I2C na napravi BeagleBone Black smo preizkusili s temperaturnim
senzorjem TMP100 podjetja Texas Instruments. Senzor ima 6 nožic SCL, GND, ADD1,
SDA, ADD0 in V+. S povezavo nožic ADD1 in ADD0 na linijo GND ali V+ določimo
naslov podrejene naprave. Temperaturni senzor TMP100 lahko deluje le kot podrejena
naprava in omogoča hitrosti prenosa podatkov do 400 kHz v hitrem načinu in do 3,4 MHz
načinu visoke hitrosti [13].
Ploščica BeagleBone Black ima na voljo dva vmesnika I2C, I2C0 in I2C1. Ker je vmesnik z
imenom I2C0 uporabljen za branje pomnilnika EEPROM na napravi BeagleBone Black,
smo za našo aplikacijo uporabili drugi vmesnik, I2C1. Priklop senzorja prikazuje shema,
prikazana na Sliki 8.1.
-
36 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Slika 8.2: Shema priklopa senzorja TMP100
Senzor TMP100 ima na voljo 9-, 10-, 11- ali 12-bitno resolucijo, ki jo lahko izbere uporabnik
s spreminjanjem določenega registra naprave. Najbolj pomemben bit predstavlja predznak
števila. Senzor je zmožen izmeriti temperaturo na intervalu med -55 °C in +125 °C, z
natančnostjo 0,0625 °C pri 12-bitni resoluciji [13].
Natančnost meritev senzorja [13]:
- ± 2 °C v območju med -25 °C in 85 °C in
- ±3 °C v območju med -55 °C in 125 °C.
Tabela 8.1 prikazuje porabo časa za opravljeno meritev, ki jo senzor potrebuje pri določeni
resoluciji.
Tabela 8.1: Poraba časa pri določeni resoluciji. Povzeto po [12].
Resolucija [bit] Čas [ms]
Tipično Max
9 40 75 10 80 150 11 160 300 12 320 600
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 37
Tabela 8.2 prikazuje naslov senzorja glede na povezavo nožic ADD1 in ADD0. Število 0
pomeni, da je nožica povezana na linijo GND, število 1 pa, da je nožica povezana na linijo
V+.
Tabela 8.2: Naslov senzorja glede nožice ADD1 in ADD0. Povzeto po [13].
ADD1 ADD0 Naslov podrejene naprave
0 0 1001000 0 Nepovezana 1001001 0 1 1001010 1 0 1001100 1 Nepovezana 1001101 1 1 1001110 Nepovezana 0 1001011 Nepovezana 1 1001111
V našem primeru smo nožico ADD1 pustili nepovezano, nožico ADD0 pa smo povezali na
linijo GND. Tako je naš senzor dobil naslov 0b1001011 oziroma 0x4B. Po priključitvi
senzorja na ploščico BeagleBone Black smo z ukazom i2cdetect –r 1 preverili, ali je senzor
res priključen in ali mu je dodeljen pravilen naslov.
8.3.1 Izsek programske rešitve
Izsek programske kode metode main()
TMP100 senzor(1, 0x4b); //i2c1 na naslovu 0x4b senzor.nastaviResolucijo(12); //nastavitev resolucije na 12 bitov while(true){
cout
-
38 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
// Preverjanje predznaka števila. int predznak = MSB & 0x80;
if(predznak == 0){
temp = ((MSB > 4; } else{
temp = ((((MSB & 0x7f) > 4) - 2048; }
return temp * 0.0625;
} void TMP100::preberiStanjeSenzorja () { char buffer[64]; snprintf(buffer, sizeof(buffer), "/dev/i2c-%d", I2CBus); int file = open(buffer, O_RDWR) if(ioctl(file, I2C_SLAVE, I2CAddress) < 0) { cout
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 39
V primeru morebitnih težav naredimo kopijo prvotne datoteke, ki se nahaja v mapi boot.
cp am335x-boneblack.dtb am335x-boneblack.dtb.orig
Iz .dtb datoteke ustvarimo .dts datoteko.
dtc -I dtb -O dts -o am335x-boneblack.dts am335x-boneblack.dtb
Odpremo ustvarjeno .dts datoteko.
nano am335x-boneblack.dts
Vrstico clock-frequency = zamenjamo z clock-frequency = .
Iz urejene .dts datoteke ustvarimo .dtb datoteko in ponovno zaženemo napravo BeagleBone
Black.
dtc -I dts -O dtb -o am335x-boneblack.dtb am335x-boneblack.dts
Po spremembi smo s pomočjo logičnega analizatorja ponovno izmerili hitrost delovanja
senzorja, ki je znašala 390 kHz, kar je vidno na Sliki 8.3.
Slika 8.3: i2c izmerjena frekvenca 100 kHz
Slika 8.4: i2c izmerjena frekvenca 390 kHz
-
40 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
9 PRU
PRU oziroma realno-časovna programabilna enota je del procesorja, ki deluje s frekvenco
200 MHz (5 ns na instrukcijo) in je ločena od operacijskega sistema. PRU enota je
optimizirana za opravljanje realno časovno omejenih vgradnih opravil. Za delovanje enote
je izjemno pomembna knjižnica purssdrv, ki se naloži z ukazom modprobe uio_pruss [10].
Enota vsebuje dve 32-bitni jedri, 8 KB podatkovnega spomina, 8 KB pomnilnika za
instrukcije, 12 KB deljenega delovnega spomina ter majhen nabor instrukcij. PRU ne
podpira cevovodov in ima za uporabo na voljo 29 (r1 – r30) registrov [7].
Ploščica BeagleBone Black ima eno enoto PRU z dvema jedroma, PRU0 in PRU1. Vsako
jedro lahko deluje samostojno ali pa v sodelovanju z drugim. Prav tako lahko deluje v
sodelovanju z gostujočo centralno procesno enoto. V primerjavi z mikrokrmilniki, kot je na
primer PIC32, dodatna PRU jedra tečejo na veliko večjih frekvencah (200 MHz), zato
velikokrat zunanja logična vezja niso potrebna. Enota PRU je primerna za aplikacije, kjer je
visoka hitrost pomembna, na primer hitra A/D pretvorba, zajem slike pri kameri, paralelna
komunikacija, nadziranje širine impulzov, kontrola motorjev in LED ali LCD zasloni [7].
9.1 Zgradba PRU aplikacije
Aplikacija PRU je sestavljena iz zbirne kode, ki se nahaja v datoteki s končnico .p, in
programa, napisanega v programskem jeziku C, ki ga poganja glavni procesor. Zbirna koda
se prevede v datoteko .bin, katero nato poganjamo iz programa, napisanega v programskem
jeziku C.
Za pravilno delovanje je v program, napisanem v programskem jeziku C, treba vključiti
razreda prussdrv.h in pruss_intc_mapping.h. Nato sledi inicializacija strukture
tpruss_intc_initdata, alokacija in inicializacija spomina, mapiranje PRU, nalaganje in
izvajanje .bin na enoti PRU, čakanje na zaključek izvajanja PRU in onemogočitev enote
PRU. Koda za naštete rutine je prikazana v nadaljevanju. Več metod s pripadajočimi opisi,
ki jih lahko uporabimo za delo s PRU, lahko najdemo na [23].
Inicializacija strukture:
tpruss_intc_initdata pruss_intc_initdata = PRUSS_INTC_INITDATA;
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 41
Alokacija in inicializacija spomina:
prussdrv_init (); prussdrv_open (PRU_EVTOUT_0);
Mapiranje PRU:
prussdrv_pruintc_init(&pruss_intc_initdata);
Nalaganje in izvajanje .bin na enoto PRU:
prussdrv_exec_program (PRU_NUM, "./PRU_example.bin");
Čakanje na zaključek izvajanja PRU:
prussdrv_pru_wait_event (PRU_EVTOUT_0); prussdrv_pru_clear_event (PRU0_ARM_INTERRUPT);
Onemogočitev enote PRU:
prussdrv_pru_disable(PRU_NUM); prussdrv_exit ();
9.2 Set instrukcij
Skoraj vse instrukcije, z izjemo dostopa do pomnilnika, se izvedejo v enem ciklu, torej v 5
ns, ko procesor deluje s frekvenco 200 MHz.
Obstajajo štirje razredi instrukcij [7]:
- aritmetični (12 instrukcij),
- logični (6 instrukcij),
- kontrola preklopa (17 instrukcij) in
- register za nalaganje in shranjevanje (10 instrukcij).
V naslednjem seznamu lahko vidimo set instrukcij s pripadajočimi opisi, povzeto po [22].
- Aritmetični:
• ne predznačeno celoštevilsko seštevanje (ADD); • ne predznačeno celoštevilsko seštevanje s prenosom (ADC); • ne predznačeno celoštevilsko odštevanje (SUB); • ne predznačeno celoštevilsko odštevanje s prenosom (SUC); • obratno ne predznačeno celoštevilsko odštevanje (RSB); • obratno ne predznačeno celoštevilsko odštevanje s prenosom (RSC); • kopiranje minimuma (MIN); • kopiranje maksimuma (MAX); • čiščenje bita (CLR); • bit za nastavitev (SET);
-
42 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
• branje polja registra (SCAN); • zaznavanje najbolj levega bita (LMBD).
- Logični:
• logični pomik levo (LSL); • logični pomik desno (LSR); • bitni in (AND); • bitni ali (OR); • bitni ekskluzivni ali (XOR); • bitna negacija (NOT).
- Register za nalaganje in shranjevanje:
• kopiranje vrednosti (MOV); • takojšnje nalaganje (LDI); • posredno premikanje datoteke registra (MVIx); • nalaganje bloka podatkov iz spomina v register (LBBO); • shranjevanje bloka podatkov iz registra v spomin (SBBO); • nalaganje bloka podatkov iz spomina v register s konstantnim odmikom (LBCO); • shranjevanje bloka podatkov iz registra v spomin s konstantnim odmikom (SBCO); • nalaganje iz soprocesorja (LFC); • shranjevanje na soprocesor (STC); • čiščenje registra (ZERO).
- Kontrole preklopa:
• brezpogojni skok (JMP); • brezpogojni skok in povezava (JAL); • klic procedure (CALL); • vračanje iz procedure (RET); • hiter skok, če je večje kot (QBGT); • hiter skok, če je večje ali enako kot (QBGE); • hiter skok, če je manjše kot (QBLT); • hiter skok, če je manjše ali enako kot (QBLE); • hiter skok, če je enako (QBEQ); • hiter skok, če ni enako (QBNE); • hiter skok vedno (QBA); • hiter skok, če je bit nastavljen (QBBS); • hiter skok, če je bit prazen (QBBC); • čakanje, dokler je bit nastavljen (WBS); • čakanje, dokler je bit prazen (WBC); • zaustavitev (HALT); • spanje (SLP).
Sintaksa instrukcij je sledeča: najprej napišemo ustrezen mnemonik, kateremu sledijo
parametri, ki so ločeni z vejico. Parametri so lahko registri, vrednosti ali konstantni vstopi
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 43
tabel. Na primer instrukcija SUB r3, r3, 10 ima sledeč pomen: od vrednosti v registru r3
odštejemo vrednost 10 in novo vrednost shranimo v register r3.
9.3 Priprava sistema
Najprej smo na napravo morali prenesti ter namestiti paket, ki vsebuje vse potrebne knjižnice
za inicializacijo in zagon enote PRU. Prenos in namestitev omogoča zaporedje naslednjih
ukazov:
git clone [email protected]:beagleboard/am335x_pru_package.git
cd am335x_pru_package/pru_sw/utils
mv pasm pasm_2
echo BB-BONE-PRU-01 > $SLOTS
V naslednjem koraku smo morali s pomočjo uporabe drevesa naprav želenim vmesnikom
določiti, kaj predstavljajo. V datoteko BB-BONE-PRU-00A0.dts smo dodali naslednje
vrstice:
exclusive-use =
"P8.12";
pinctrl-single,pins = <
0x30 0x06
>;
Pri tem »P8.12« pomeni vmesnik 12 na priključku P8, 0x30 predstavlja odmik od naslova
vmesnika, 0x06 pa njegovo vrednost oziroma kaj je njegova naloga. Možnih imamo 8 (0–7)
vrednosti predstavitev vmesnika. Pravilne odmike in vrednosti oziroma nastavitve lahko za
vsak vmesnik pridobimo s pomočjo programa Pin Mux Utility, podjetja Texas Instruments.
Datoteko smo pretvorili v datoteko s končnico .dtbo ter pravilno nastavili vmesnike z
naslednjimi ukazi:
dtc -@ -O dtb -o BB-BONE-PRU-00A0.dtbo BB-BONE-PRU-00A0.dts
export PINS=/sys/kernel/debug/pinctrl/44e10800.pinmux/pins
export SLOTS=/sys/devices/bone_capemgr.8/slots
cd /lib/firmware
echo BB-BONE-PRU > $SLOTS
-
44 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
O enoti PRU na spletu nismo našli veliko, zasledili pa smo, da je na voljo prevajalnik za
programski jezik C (Code Composer Studio podetja Texas Instruments). Ker primerov in
pomoči nismo našli, smo programske rešitve implementirali s kombinacijo zbirnega jezika
in programskega jezika C.
Za preizkus delovanja enote PRU smo s pomočjo [16] na ploščici BeagleBone Black trikrat
zapored po vrsti vklopili in izklopili USR svetleče diode.
Izsek programske rešitve:
EACH: QBEQ DO_IT_3, r1, 3 DO_IT: LBCO r2, CONST_PRUDRAM, r1, 1 QBNE SET_IT, r2.b0, 0 CLEAR_IT: MOV r5, 1 LSL r5, r5, r1 LSL r5, r5, LED_OFFSET OR r6, r6, r5 ADD r1, r1, 1 QBA EACH SET_IT: MOV r5, 1 LSL r5, r5, r1 LSL r5, r5, LED_OFFSET DO_IT_3: MOV r4, GPIO1 | GPIO_CLEARDATAOUT SBBO r6, r4, 0, 4 MOV r4, GPIO1 | GPIO_SETDATAOUT SBBO r7, r4, 0, 4 QBA BLINK
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 45
9.4 Digitalno vhodno/izhodni vmesniki
Podobno kot v četrtem poglavju, smo se odločili preizkusiti digitalne vhodno/izhodne
vmesnike s pomočjo prižiganja in ugašanja svetleče diode. Ker smo uporabili enako diodo
kot v četrtem poglavju, smo za priklop svetleče diode lahko uporabili enak upor, in sicer
upor z upornostjo 68 Ω. Pri pripravi sistema smo omogočili vmesnik P8.12 ter mu dodelili
nalogo digitalnega izhoda, zato smo svetlečo diodo priklopili na ta izhod. Napisali smo
programsko rešitev, v kateri 10-krat s kratko pavzo prižgemo in ugasnemo svetlečo diodo
na izhodu P8.12.
Izsek programske rešitve:
BLINK: // r30.t14 predstavlja vmesnik P8_12. SET r30.t14 MOV r0, 0x00f00000 PAVZA: SUB r0,r0,1 QBNE PAVZA, r0,0 CLR r30.t14 MOV r0, 0x00f00000 PAVZA2: SUB r0, r0, 1 QBNE PAVZA2, r0, 0 SUB r1, r1, 1 QBNE BLINK, r1, 0
9.4.1 Merjenje hitrosti
Po uspešni implementaciji programske rešitve za utripanje svetleče diode nas je zanimalo, s
kakšno hitrostjo lahko prižigamo in ugašamo svetlečo diodo. Tako kot v prejšnjih primerih
smo frekvenco utripanja izmerili z logičnim analizatorjem. Po opravljeni meritvi smo videli,
da je frekvenca utripanja svetleče diode 50 MHz, kar je približno 8223-krat hitreje kot v
četrtem poglavju, ko smo svetlečo diodo prižigali in ugašali z zapisovanjem enic in ničel v
sistemsko datoteko, in približno 18-krat hitreje kot z uporabo neposrednega dostopa do
registrov. Izmerjena frekvenca je prikazana na Sliki 9.1.
-
46 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
Slika 9.1: Frekvenca utripanja svetleče diode z enoto PRU
Izsek programske rešitve:
START: LBCO r0,C4,4,4 LBCO r0, C4, 4, 4 CLR r0, r0, 4 SBCO r0, C4, 4, 4 MOV r1, 1000000000 // zanka 1000000000x BLINK: SET r30.t14 SUB r1, r1, 1 CLR r30.t14 QBNE BLINK, r1, 0 MOV r31.b0, PRU0_ARM_INTERRUPT+16 HALT
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 47
9.5 A/D pretvorba
A/D pretvornik smo, kot v petem poglavju, tudi tokrat preizkusili s pomočjo termistorja.
Najprej smo s pomočjo spodnjih dveh ukazov omogočili in preizkusili analogni vhod, nato
pa smo implementirali programsko rešitev, kjer smo iz analognega vhoda AIN1 prebirali
vrednost A/D pretvorbe ter jo izpisovali.
S spodnjo vrstico omogočimo gonilnik za analogne vmesnike, kjer je cape-bone-iio datoteka
vrste .dtbo, v kateri so opisani analogni vmesniki in njihove naloge. V datoteki slots je
seznam vseh omogočenih naprav.
echo cape-bone-iio > /sys/devices/bone_capemgr.*/slots
Z naslednjim ukazom izpišemo vrednost datoteke AIN1, v kateri je zapisan rezultat A/D
pretvorbe:
cat /sys/devices/ocp.3/helper.12/AIN1
Za komunikacijo med enoto PRU in A/D pretvornikom smo uporabili knjižnico libpruio za
programski jezik C, ki smo jo prenesli z [21]. Knjižnica libpruio je bila razvita na napravi
BeagleBone in se uporablja za analogne ter digitalne vhodno/izhodne vmesnike. Zasnovana
je bila za enostavno konfiguracijo in manipulacijo s podatki pri visoki hitrosti. Knjižnica
nadzoruje podsisteme, kot so PRUSS, A/D pretvornik, kontrolne module ter GPIO s
programsko opremo, ki se izvaja na PRU [21].
Po končani namestitvi knjižnice smo v programskem jeziku C z uporabo nameščene
knjižnice napisali program, v katerem smo 100.000-krat prebrali in izpisali vrednost A/D
pretvorbe.
Izsek programske rešitve:
int main(int argc, const char *argv[]){ PruIo *io = pruio_new(0, 0x98, 0, 1);
if(pruio_config(io, 0, 0x1FE, 0, 4, 0)){
printf("Config failed (%s)\n", io->Errr); return 1;
}
-
48 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
int vrednost, i;
for(i = 0; i < 100000; i++){
// Preberemo vrednost iz analognega vhoda AIN1. vrednost = io->Value[3]; printf("%d\n", vrednost); fflush(STDIN_FILENO); usleep(1000);
}
Pruio_destroy(io); return 0;
}
9.5.1 Merjenje hitrosti
Po uspešni implementaciji programa za branje A/D pretvornika nas je zanimala hitrost
prebiranja vrednosti A/D pretvorbe. Tako kot v petem poglavju, smo tudi tokrat frekvenco
prebiranja izmerili programsko, ki je znašala 10,85 kHz, kar je skoraj 12-krat hitreje kot
uporaba A/D pretvorbe s centralno procesno enoto, kjer smo do vrednosti A/D pretvorbe
dostopali preko sistemske datoteke.
Izsek programske rešitve:
int main(int argc, const char *argv[]){ PruIo *io = pruio_new(0, 0x98, 0, 1); if(pruio_config(io, 0, 0x1FE, 0, 4, 0)){ printf("Config failed (%s)\n", io->Errr); return 1; } int i, vrednost; time_t cas = time(NULL) + 60; int stevec = 0; while(time(NULL) < cas){ vrednost = io->Value[3]; fflush(STDIN_FILENO); stevec++; } printf("Frekvenca AD %d HZ\n", (stevec/60)); pruio_destroy(io); return 0;
}
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 49
10 SKLEP
Diplomsko delo se nanaša na uporabo vhodno/izhodnih vmesnikov na platformi BeagleBone
Black. Med izdelavo diplomskega dela smo se seznanili s ploščico BeagleBone Black,
operacijskim sistemom Ubuntu Bone in proučili delovanje digitalnih vhodno/izhodnih
vmesnikov, A/D pretvornika, vmesnikov UART, SPI in I2C ter enote PRU.
Naučili smo se veliko novih stvari s področja delovanja različnih vmesnikov. Spoznali smo,
da je za hiter prenos podatkov najbolje uporabiti vmesnik SPI, ki dosega hitrosti prenosa
podatkov do 10 MHz. Z našo programsko rešitvijo smo se s 6,25 MHz uspeli približati
maksimalni frekvenci uporabljenega temperaturnega senzorja, ki znaša 7 MHz. V kolikor pa
hitrost prenosa podatkov ni tako pomembna in želimo na vodilu imeti več nadrejenih naprav,
je najbolje uporabiti vmesnik I2C, ki za prenos podatkov potrebuje le dve signalni liniji. Tudi
s programsko rešitvijo za vmesnik I2C smo se s frekvenco 390 kHz uspeli približati
maksimalni frekvenci senzorja, ki je 400 kHz.
Pravo zmogljivost in uporabnost enote PRU smo spoznali ob primerjavi rezultatov hitrosti
podatkovnih prenosov, ki smo jih dosegli z uporabo digitalnih izhodnih vmesnikov in A/D
pretvorbe na centralno procesni enoti, z rezultati, dobljenimi z uporabo enote PRU. Z
uporabo enote PRU smo opazili veliko višje podatkovne hitrosti. Z našo programsko
rešitvijo za vklop in izklop svetleče diode na digitalnem izhodnem vmesniku smo na
centralno procesni enoti dosegli frekvenco 2,78 MHz, na enoti PRU pa smo to frekvenco
izboljšali za skoraj 18-krat in dosegli frekvenco 50 MHz. Prav tako nam je uspelo izboljšati
rezultate hitrosti A/D pretvorbe, kjer smo s programsko rešitvijo na centralno procesni enoti
dosegli frekvenco 934 Hz, na enoti PRU pa 10,85 kHz, kar je skoraj 12-krat hitreje.
-
50 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
11 VIRI, LITERATURA
[1] AM335x Sitara Processors, Technical Reference Manual. Texas Instruments.
Dostopno na: http://www.ti.com/lit/ug/spruh73k/spruh73k.pdf [14.08.2014]
[2] BeagleBoard. Wikipedia. Dostopno na
http://en.wikipedia.org/wiki/BeagleBoard#BeagleBone_Black [23.04.2014]
[3] BeagleBoardUbuntu. Embedded Linux Wiki. Dostopno na:
http://elinux.org/BeagleBoardUbuntu#BeagleBone.2FBeagleBone_Black
[27.04.2014]
[4] BeagleBone: open-hardware expandable computer. BeagleBoard. Dostopno na
http://beagleboard.org/Support/bone101/#headers [20.04.2014]
[5] BeagleBone and the 3.8 Kernel. Embedded Linux Wiki. Dostopno na
http://elinux.org/BeagleBone_and_the_3.8_Kernel#The_trouble_with_Device_Tree
[05.08.2014]
[6] BeagleBone Black. BeagleBoard. Dostopno na:
http://beagleboard.org/Products/BeagleBone+Black [20.04.2014]
[7] BeagleBone Black: Introduction to PRU-ICSS. ADLab. Dostopno na:
http://analogdigitallab.org/articles/beaglebone-black-introduction-pru-icss
[28.06.2014]
[8] BeagleBone Black Enable SPIDEV. Embedded Linux Wiki. Dostopno na:
http://elinux.org/BeagleBone_Black_Enable_SPIDEV#SPI0 [24.05.2014]
[9] BeagleBone Black System Reference Manual. Farnell. Dostopno na
http://www.farnell.com/datasheets/1685587.pdf [22.04.2014]
-
Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black 51
[10] BeagleBone PRU Notes. Embedded Linux Wiki. Dostopno na:
http://elinux.org/BeagleBone_PRU_Notes [16.06.2014]
[11] Change i2c bus frequency on Beaglebone Black. Xiaojing Ma. Dostopno na:
http://randymxj.com/?p=538 [15.06.2014]
[12] DeviceTree. FTDIWiki. Dostopno na http://devicetree.org/Main_Page [05.08.2014]
[13] Digital Temperature Sensor with I2C Interface. Burr-BrownProducts from Texas
Instruments. http://www.ti.com/lit/ds/sbos231g/sbos231g.pdf [13.06.2014]
[14] Enable serial/UART/tty on BeagleBone Black. Hipstercircuits.
http://hipstercircuits.com/enable-serialuarttty-on-beaglebone-black/ [10.05.2014]
[15] Evaluation Board To Start With. Nirvana, Embedded. Dostopno na
http://wiki.embeddednirvana.org/Development/Evaluation_Board_To_Start_With
[23.04.2014]
[16] First steps with the BeagleBone PRU. Sean McIntyre. Dostopno na:
http://boxysean.com/blog/2012/08/12/first-steps-with-the-beaglebone-pru/
[01.07.2014]
[17] I2C. SparkFun Electronics. Dostopno na:
https://learn.sparkfun.com/tutorials/i2c/all#why-use-i2c [11.06.2014]
[18] I2C-Bus: What's that? Imprint. Dostopno na: http://www.i2c-bus.org/ [10.06.2014]
[19] Introducing the all-new Logic16. Saleae LLC. Dostopno na:
https://www.saleae.com/logic16 [05.05.2014]
[20] Introduction to the BeagleBone Black Device Tree. Justin Cooper. Dostpono na
https://learn.adafruit.com/downloads/pdf/introduction-to-the-beaglebone-black-
device-tree.pdf [06.08.2014]
-
52 Uporaba vhodno/izhodnih vmesnikov na platformi BeagleBone Black
[21] Libpruio. Thomas Freiherr. Dostopno na: http://users.freebasic-