71
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

UPORABA VHODNO/IZHODNIH VMESNIKOV NA ...-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

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • 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-