890 likes | 1.06k Views
Bluetooth: HCI, L2CAP, Rfcomm. Tietoliikennetekniikan seminaari 23.04.2002. 1. HCI-rajapinta. Host Controller Interface (HCI). Joissakin laitteissa on yhdistetty prosessorin peruskaista (baseband) ja Link Manager ylempien kerrosten palvelujen (L2CAP, SDP, RFCOMM) kanssa
E N D
Bluetooth: HCI, L2CAP, Rfcomm Tietoliikennetekniikan seminaari 23.04.2002 Mari Tuominen (Tite01)
1. HCI-rajapinta Mari Tuominen (Tite01)
Host Controller Interface (HCI) • Joissakin laitteissa on yhdistetty prosessorin peruskaista (baseband) ja Link Manager ylempien kerrosten palvelujen (L2CAP, SDP, RFCOMM) kanssa • Tarvitaan HCI-rajapinta, jotta voidaan ajaa protokollapinon ylemmät kerrokset isäntälaitteen prosessorin kautta ja alemmat Bluetooth-laitteen kautta • Bluetooth-standardi määrittelee HCI:n • Standardi mahdollistaa ylempien ja alempien kerrosten yhteensovittamisen ja erottamisen Mari Tuominen (Tite01)
...HCI • Laite voi käyttää HCI:tä mm. seuraavista syistä: • Hostilla on rajattu kapasiteetti ylempien kerrosten käsittelyä varten • Host voi ”nukkua” ja se herätetään Bluetooth-yhteyden vuoksi • HCI-rajapintaa voidaan käyttää Bluetooth-laitteiden tyyppi- ja muutakin testausta varten Mari Tuominen (Tite01)
Ylemmät kerrokset Audio L2CAP Kontrolli HCI Ajuri (HCI Driver) Fyysinen väyläajuri (Physical Bus Driver) HOST HCI-paketit HCI-rajapinnan asema Bluetooth-protokollapinossa BLUETOOTH MODUULI Fyysinen väyläajuri (Physical Bus Driver) HCI Ajuri Link Manager Link Controller Radio Mari Tuominen (Tite01)
...HCI • Miksi koko protokollapinoa ei siirretä isäntäprosessorille? • Syy: Bluetoothin aikaviipalointi • Aiheuttaa: hostin pitäisi kyetä vastaamaan millisekunneissa keskeytyksiin, mitä se voi saada Bluetooth-radiopinnalta • Vaikka host käyttäisi MIPS:iä (millions instructions per second), ei voida taata hostin käytettävissä olemista, kun sitä tarvitaan • Ratkaisu: kerrokset, joilla on pieni (kriittinen) aika, pidetään omalla prosessorillaan • …ja saadaan taattua nopeat vastaukset Mari Tuominen (Tite01)
...HCI • Standardoitu rajapinta sallii myös ajurien kirjoittamisen • …takaa sen, että voidaan käyttää eri valmistajien Bluetooth-moduuleita • Rajapinnan standardointi sallii myös vakioidun testauksen radiopintaa ja pinon alempia kerroksia varten Mari Tuominen (Tite01)
...HCI • …ja ”poikkeus” edelliseen: myös sellaiset Bluetooth-systeemit ovat mahdollisia, joissa protokollapinon kerrokset ajetaan yhden prosessorin kautta • Tälläisen laitteen on oltava kuitenkin: • pieni • halpa • kevyt • vähän virtaa vievä • Laitteen tuettava HCI-rajapintaa testausta varten Mari Tuominen (Tite01)
HCI-pakettityypit Mari Tuominen (Tite01)
...HCI • Bluetooth-standardi määrittelee HCI:tä varten: • Host – käsittelee käskypaketit kontrolloidakseen moduulia • Moduulit – käsittelevät tapahtumapaketit antaakseen tietoa hostille alempien kerrosten muutoksista • Datapaketit – siirtävät ääntä ja dataa moduulin ja hostin välillä • Kuljetuskerrokset – HCI-pakettien siirto Mari Tuominen (Tite01)
HOST Komentopaketit Datapaketit Tapahtumapaketit BLUETOOTH-LAITE HCI-pakettityypit ja niiden siirto HCI-kuljetuskerroksen kautta Mari Tuominen (Tite01)
HCI-käskypaketit • Käsitellään hostin kautta • Siirretään HCI-käskypakettien avulla • Käskypaketin rakenne: Bitti 0 - 32 0 16 24 32 OpCode Parametri total Parametri 0 Parametri 1 Parametri 2 Parametri N-1 Parametri N Mari Tuominen (Tite01)
HCI-datapaketit • Paketteja on kahta tyyppiä • Käyttö: äänen ja datan siirtoon HCI:n kautta • Dataa siirretään ACL-paketteina • Ääntä siirretään SCO-paketteina • Erityyppiset paketit molemmille • Seuraavassa kuvassa pakettien rakenteen esittely Mari Tuominen (Tite01)
Data Connection handle Reserved Datan kok.pituus 0 12 16 32 Connection handle PB Flag BC Flag Datan kokonaispituus Data HCI ACL-paketti 0 12 16 24 32 HCI SCO-paketti Mari Tuominen (Tite01)
HCI-tapahtumapaketit • Rakenne samankaltainen kuin käskypakettien • Kuljettavat tapahtumakoodia ja tunnistavat tapahtumat • Toiminta samantyyppistä kuin OpCode-kentän, joka identifioi HCI-käskyt • Myös tapahtumapaketeissa on parametrien kokonaispituuden kuvaava kenttä ja sitä seuraa parametrien lista Mari Tuominen (Tite01)
HCI-kuljetuskerros Mari Tuominen (Tite01)
HCI-kuljetuskerros • Tarvitaan, jotta host voi vastaanottaa paketteja Bluetooth-moduulilta • Bluetooth määrittelee kuljetuskerroksen 3 kerrosta: • USB (Universal Serial Bus) ~universaali sarjaväylä • RS-232 (Serial Interface) ~rajapinta, sisältää virheenkorjauksen • UART (Universal Asynchronous Receiver Transmitter) ~rajapinta, ei virheenkorjausta Mari Tuominen (Tite01)
USB • USB niputtaa erilaiset HCI-paketit USB-standardin mukaan USB-päätepisteiden avulla seuraavasti: • HCI-käskyt USB conrol endpoint ~kontrollipäätepiste • HCI ACL data USB bulk endpoint ~massapäätepiste • HCI SCO data USB isochronous endpoint ~isokroninen päätepiste • HCI tapahtumat USB interrupt endpoint ~keskeytyspäätepiste Mari Tuominen (Tite01)
...USB • Bulk-päätepiste • Käytetään ACL-dataan, koska: • takaa tarpeeksi nopean siirron ko. datalle • virheenkorjaus • Isokroninen päätepiste • Siirtää SCO-datan suoraan Hostin SCO-FIFO-puskurille • viritettävä 1 ms:n intervallille; yht.sop. USB:n kanssa • ei virheenkorjausta • Keskeytys-päätepiste • Tapahtumia varten • 1 ms intervalli: tapahtumat siirretään välittömästi USB-rajapinnan kautta Mari Tuominen (Tite01)
...USB • Jotta USB-ajuri pystyy lataututumaan oikein USB-luokkakoodi on kiinnitetty Bluetooth-laitteita spesifioivaan luokkaan, alaluokkaan ja protokollakoodeihin seuraavasti: • bbDeviceClass = 0*E0 (wireless controller) • bbDeviceSubClass = 0*01 (RF controller) • bbDeviceProtocol = 0*01 (Bluetooth programming) • Bluetooth-protokolla on tarkoitettu akkupohjaisille laitteille. USB:n host-controller tarkistaa alituiseen muistia nähdäkseen, pitääkö esim. jokaisen ms:n aikana tapahtua jotain. • Seuraus: Hostin virtaa säästyy. Mari Tuominen (Tite01)
RS-232 ja UART • Molemmissa kehystys, jotta voidaan tunnistaa eri pakettityypit • luokitus: • 0*01 – HCI käskypaketti • 0*02 – HCI ACL datapaketti • 0*03 – HCI SCO datapaketti • 0*04 – HCI tapahtumapaketti. • RS-232 käsittelee virheitä / siirto linkityskonfiguraation kanssa, joten ed. lisäksi: • 0*05 – virheenkorjauspaketti • 0*06 – negotiation ~sovittelu- tai siirtopaketti. Mari Tuominen (Tite01)
…RS-232 ja UART • UART-kerroksella paketin indikaattori lähetetään välittömästi ennen pakettia • UART-kuljetuskerros käyttää null-modem –tyyppisiä yhteyksiä • UART-rajapinnoissa on mahdollista, että UART puskureilta loppuu vapaa tila • RS-232 linkit ovat jonkin verran monimutkaisempia kuin UART-linkit Mari Tuominen (Tite01)
…RS-232 ja UART 0 8 16 32 HCI-paketti tai Virheenkorjauspaketti tai Sovittelupaketti Pakettityypin indikaattori Sekvenssi- Numero RS-232-HCI-paketin kehysrakenne Mari Tuominen (Tite01)
…RS-232 ja UART • Bluetooth HCI kuljetuskerroksen oletusparametrit: • Baud Rate (baudi arvo) = 9600 bps • Ei pariteettia. • 8 databittiä. • 1 pysäytysbitti. • Protokolla moodi = 0 * 13 (HDLC kuten kehystyksessä, mutta mukana (COBS / CCITT-CRC). Mari Tuominen (Tite01)
Flow Control ~ Vuokontrolli(tapahtumavirran kontrolli) Mari Tuominen (Tite01)
Vuokontrolli, yleistä • Host voi lähettää dataa nopeammin, kuin Bluetooth-moduuli kykenee työstämään sitä • Bluetooth-moduulin “tyydyttävä” datan puskurointiin • Ellei Bluetooth-moduuli pysty • käsittelemään / lähettämään eteenpäin • varastoimaan • ...dataa sillä vauhdilla, kun se vastaanottaa sitä, mikä neuvoksi? • Ratkaisu: tarjotaan Hci-rajapinnalle vuokontrolli, joka voi olla käskyjä, hostin sekä Bluetooth-moduulin vuota kontrolloivaa Mari Tuominen (Tite01)
HCI-Command-complete HCI-Command-complete H O S T HCI-käsky BT- Laite Käsky suoritetaan heti H O S T HCI-käsky Käskyä ei voida suorittaa heti BT- Laite HCI-command-status Käsky suoritetaan viipeellä HCI-käskyn vuokontrolli Mari Tuominen (Tite01)
Hostin vuota kontrolloiva data • Miten HCI:n kautta kulkeva vuo kontrolloidaan datan avulla? • Host lähettää HCI:n kautta Bluetoothille sen verran SCO ja ACL-paketteja, kuin BT pystyy käsittelemään • BT-moduuli kertoo Hostille, kun sen puskurissa on tilaa • moduuli ei puskuroi paljoakaan sco-dataa • SCO-data on synkronista; joka kerta kun SCO-slot vapautuu, SCO-paketti voidaan lähettää / hylätä • Bluetooth tarjoaa HCI_Write_SCO_Flow_Control_Enable –käskyn; tarkoitus informoida Hostia, kun BT:n SCO-datapuskurissa on tilaa Mari Tuominen (Tite01)
BT-moduulin vuota kontrolloiva data • Yleensä Host hyväksyy kaiken BT-moduulin lähettämän datan • Joillakin Hosteilla on kuitenkin rajattu prosessointikapasiteetti • Esim. Mobilephone-handset • Tällöin dataa ei pystytä hyväksymään “täydellä nopeudella” • Ratkaisu: vuokontrolli BT-moduulilta Mari Tuominen (Tite01)
….BT-moduulin vuota kontrolloiva data • Bluetooth moduulin vuokontrolli kytkeytyy päälle HCI_Set_Host_Controller_To_Host_Flow_Control –käskyllä • Tämän jälkeen HCI_Host_Buffer_Size –käsky ilmoittaa moduulille hostin puskurointikyvystä • Sisältää tiedon ACL ja SCO –pakettien määrästä, jonka host voi maksimissaan puskuroida ja HCI_SCO- ja HCI_ACL –datapakettien maksimikoon. • Host taas käyttää HCI_Host_Number_Of_Completed_Packet –käskyä kertomaan Bluetooth moduulille, montako puskuria on vapautunut • Voidaan lähettää milloin tahansa eikä sillä ole vaikutusta tavanomaiseen vuokontrolliin Mari Tuominen (Tite01)
Moduulien muodostus(configuring) Mari Tuominen (Tite01)
Moduulit • HCI tarjoaa konfigurointikäskyjä, jotta voitaisiin asettaa paikallisen moduulin piirteet kohdalleen • Koska nämä käskyt eivät sisällä Bluetooth-linkkiä, ne palautetaan välittömästi HCI_Command_Comlete–tapahtuman kanssa • Moduulien konfiguroinnissa huomioitava: • Versio- ja piirretieto • nimipyyntö (paikallinen ja kaukohaku) • Laitteiden luokitus • Ääniasetukset • Tuetut piirteet • Maakoodi • HCI-BD-ADDR (käskyllä haetaan BT-laitteen osoite). Mari Tuominen (Tite01)
...Moduulit: versio / piirteet • Ennen kuin moduulia voidaan käyttää, on tiedettävä sen : • Kapasiteetti • Toimintamahdollisuus • Standardi. • HCI_Read_Local_Version_Information-käsky palauttaa: • Status-tavun (jossa 0 = komento suoritettu onnistuneesti; ei nollaa = virhe) • HCI- version • HCI-tarkistuksen • LMP-version • Valmistajan nimen • LMP:n alaversion numeron. • HUOM!Ennen versiota 0.7. parametrit olivat toiset! Mari Tuominen (Tite01)
...Moduulit: nimihaku • Jokaisella BT-laitteella on ”ystävällinen” nimi, joka on: • UTF-enkoodattu • String-muotoinen • Maksimikoko: 248 tavua. • Moduulin nimi voidaan muuttaa HCI_Change_Local_Name –käskyllä • Nimeä siirrettäessä lähetetään nimestä 1. tavu • VStavanomainen käytäntö nimiä lähetettäessä (vähiten merkitsevä ensin) • Yleisin häiriö yhteyden aikana: käytössä max yhteyksien määrä Mari Tuominen (Tite01)
HCI-Read_Class_of_Device HCI-Command-complete ...Moduulit: Laitteiden luokka • Laitteen luokka pitää selvittää, ennen kuin voidaan ottaa yhteys toiseen BT-laitteeseen • Luokka on sisällytetty FHS-pakettiin • FSH-pakettia käytetään kysely- ja hakutoiminnoissa • Laitetyypin asetukset saadaan selville HCI_Read_Class_Of_Device –pyynnöllä (Hostin tekemä) H O S T BT- Laite Mari Tuominen (Tite01)
...Moduulit: ääniasetukset • Bluetoothissa sallitaan LHCI_Write_Voice_Command –käskyllä sallii sekä input-koodausformaatin ja ilmakoodausformaatin asetukset • Käsky sallii myös Hostin itsensä valita joko ensimmäisen tai toisen täyden (complement) input-data-formaatin • BT-laitteet eivät tue kaikkia muunnoksia, jotka on spesifioitu • Ei-tuetuissa tapauksissa palautetaan virhe HCI_Command_Complete –tapahtuman yhteydessä • Ääniasetukset voidaan tarkistaa HCI_Read_Voice –käskyllä Mari Tuominen (Tite01)
...Moduulit: Tuetut piirteet • Bluetooth sisältää monia vaihtoehtoisia, tuettuja piirteitä • Hostin pitää tietää BT-moduulin käyttämät ominaisuudet sekä tunnistaa laite, mikä sijaitsee toisessa päässä linkkiä. • Bluetooth tarjoaakin käskyjä, joilla voidaan lukea sekä lokaalin että kaukana olevan laitteen tukemat piirteet • HCI_Read_Local_Supported_Feature: piirteet paikallista moduulia varten • HCI_Read_Remote_Supported_Feature: piirteet kaukana olevaa laitetta varten Mari Tuominen (Tite01)
...Moduulit: Tuetut piirteet • Bluetoothissa optionaalisesti tuettuja piirteitä ovat: • Multi-slot datapaketit • Enkryptaus ja luotettavuuden (authentication) tuki • Master / Slave –vaihto ja slot-offset • Ajastuksen täsmällisyys • SCO-kanava • HV2 JA HV3 -paketit SCO-kanavilla • Erilaiset ääniCODEC:it • Vaihtoehtoiset sivutusteemat • Virransäästö ja RSSI (Receive Signal Strength Indication). Mari Tuominen (Tite01)
...Moduulit: Maakoodi • Ranska: osa BT:n käyttämästä ISM (industrial, scientific, medical) kaistasta varattu armeijan käyttöön: normaalia rajoitetumpi taajuusalue • Maakoodi identifioi, käyttääkö moduuli koko taajuutta vai Ranskan rajoitettua taajuutta • Maakoodi voidaan lukea käyttämällä HCI_Read_Country_Code –käskyä • BT-versio 0.8:aan asti voidaan kirjoittaa / lukea hostin puolesta • HCI_Write_Country_Code –käsky katoaa versiossa 0.9. Jotkut valmistajat sen lisäävät laajennusosana HCI-käskykokoelmaan. Mikään standardi-OpCode ei kuitenkaan pysty identifioimaan sitä. Mari Tuominen (Tite01)
HCI-BD-ADDR • BT-laitteen osoitetta ei voida muuttaa • Jokainen laite on valmistettu omalla uniikilla osoitteellaan • Mikäli voitaisiin muuttaa: 2 samaa osoitetta? • Osoite voidaan lukea: mahdollistaa pääsyn kaukaisen laitteen sovelluksiin käsiksi ja voidaan ottaa yhteys kaukaisiin laitteisiin kaukohakemalla BT-laiteosoite. • HCI_Read_BD_ADDR –käsky sallii hostille BT-laitteen osoitteen saamisen moduulilta Mari Tuominen (Tite01)
Miten löydetään toinen BT-laite? Mari Tuominen (Tite01)
Kyselyn aloittaminen / vastausten käsittely / lopettaminen • Kaikki kyselyprosessin vaiheet voidaan kontrolloida HCI:n kautta • HCI_Inquiry –käsky aloittaa kyselyn. Sillä on 3 parametria: • Inquiry LAP (Kyselyn pääsykoodi) • Inquiry Length (Kyselyn kokonaispituus) • Num_responses (Odotettavissa olevien kyselyn tulosten määrä) • Vastaanotetut vastaukset raportoidaan Hostille HCI_Inquiry_Result –tapahtumalla • Se sisältää informaatiota, jota tarvitaan yhteydensaamiseksi vastaanottavaan laitteeseen Mari Tuominen (Tite01)
…Kyselystä • Host käyttää vastausten kontrollointiin HCI_Set_Event_Filter –käskyä, jolla asetetaan filtteri kyselyn tuloksia varten • Filtteröinnistä johtuen raportoidaan vain: • uusista laitteista, joista ei ole ennen tietoa • laitteista, joilla on spesifi laitetyyppi • laitteista, joilla on spesifioitu BT-laiteosoite • Ei voida tehdä suoraan sovellustasolla; BT- laitteet eivät käytä moduulitason filtteröinnin tulosten ilmoittamiseen HCI:n rajattua kaistanleveyttä ilmoittaakseen tiedoista, jolla ei ole käyttöarvoa • Kysely loppuu, kun Num_Responses –laitteet ovat vastanneet kyselyyn tai kun kyselyn ajan pituus on kulunut umpeen Mari Tuominen (Tite01)
GIAC GIAC GIAC Kyselyn aloitus H O S T HCI_Inquiry(GIAC,2,3) BT- Laite HCI_Command_Status Laite 1 vastaa HCI_Inquiry_Result 1 HCI_Inquiry_Result 2 Laite 2 vastaa HCI_Inquiry_Complete Kysely suoritettu (Success 2) Normaalisti onnistunut kysely BT- Laite Kyselyn aloitus H O S T HCI_Inquiry (GIAC,2,1) HCI_Command_Status HCI_Inquiry_Complete Kysely suoritettu (Success 0) Kyselyn aika loppuu ennen vastausta Mari Tuominen (Tite01)
Kyselyn ajastus • Hostin jatkuva päivitystila huono, koska: • akku loppuu • rajoitetutun hyppelysekvenssin käyttö voi olla kielletty • Ratkaisu: lyhyet kyselyt jaksottaisesti • HCI: Bluetooth moduuli ”inquiry-moodiin”, jossa kyselyt automaattisesti. Host asettaa BT-moduulin moodiin HCI_Periodic_Inquiry_Mode –käskyllä ja moodi käyttää HCI_Exit_Periodic_Inquiry_Mode –käskyä. • Kyselyt aloitetaan satunnaisin tauoin; minimi- ja maksimitauon pituus on spesifioitu HCI_Periodic_Inquiry_Mode –käskyssä. Mari Tuominen (Tite01)
Kyselyn skannaus ~löytyminen • Kun BT-laite alkaa kysellä: • IAC (Inquiry Access Code) • GIAC (General Inquiry Access) • LIAC (Limited Inquiry Access) • Kyselyä skannaava laite käyttää korrelaattoria kuunnellakseen IAC:ta • Skannaus suoritetaan lyhyillä purskeilla • GAP (General Access Profile) suositus: • Skannattaisiin vain 10,625 ms pituisen ikkunan • Kyselyn kesto: 10,24 s • Useimmat laitteet suorittavat skannausta satunnaisesti Mari Tuominen (Tite01)
Kaukohaku: yhteyksien aloittaminen Mari Tuominen (Tite01)
Kaukohaku • Lähetetään BT-osoite ID-paketissa • Kaukohaku:HCI_Create_Connection –käsky (Host) • Sisältää moduulin tarvitseman tiedon yhteyden perustamista varten. Parametrit: • BD_ADDR (laitteen osoite, johon otetaan yhteys) • Packet_Type (pakettityyppien setti) • Page_Scan_Repetition_Mode (antaa intervallin sekä tod.näk. yhteydenpitoajan) • Page_Scan_Mode (vastapuolella pakollinen vai optionaalinen sivunskannausmoodi) • Clock_Offset (kaukohakevan laitteen kellon suhde paikalliseen aikaan) • Allow_Role_Switch (Master / Slave –kytkentä yhteydenluomisen aikana?) Mari Tuominen (Tite01)
SCO • ACL-yhteyden jälkeen voidaan perustaa SCO-yhteys HCI_Add_SCO_Connection –käskyllä • Parametrit spesifioivat ACL-yhteyden Connection handle:in • Määrittelevät SCO-yhteyksissä liikkuvien pakettien tyypit (oltava SCO-tyyppiä eli HV1, HV2 tai HV3) • Yhteyden luomiseksi: HCI_Commannd_Status –tapahtuma palautetaan • Yhteys perustettu: HCI_Connection_Complete –tapahtuma palautetaan Conn.Handle:in kanssa SCO-yhteyttä varten. • Perustaminen epäonnistui: status-kentässä syy Mari Tuominen (Tite01)
Datan lähetys ja vastaanotto Mari Tuominen (Tite01)