STMicroelectronics Bluetooth Terza lezione: HCI e L2CAP.

Post on 01-May-2015

227 views 0 download

Transcript of STMicroelectronics Bluetooth Terza lezione: HCI e L2CAP.

STMicroelectronics

Bluetooth

Terza lezione: HCI e L2CAP

Corso Bluetooth

14-4-2003, 3 ore Bluetooth Phy e Baseband

5-5-2003, 3 ore Baseband LMP

12-5-2003 HCI +L2CAP

20-5-2003 RFCOM, SDP e profili (corso di Rossi)

Protocol stack

RadioBaseband

HW Analogico/RF

HW Digitale

Software layers

Link Controller

AudioLink Manager

L2CAP

TCP/IP HID RFCOMM

Applications

Data

Con

trol

HW Digitale/Analogico

BT device

Hosted vs. Host-less.

Baseband

Radio

Link manager

HCI

HCI

L2CAP

BluetoothDevice

BluetoothHost

E.g. RF Comm

Baseband

Radio

Link manager

L2CAP

E.g. RF Comm

BluetoothHostlessDevice

Architettura Hosted

Bluetooth device

HCI (host controller interface)

Il protocollo HCI trasporta– Comandi– Eventi– Dati ACL (bidirezionale)– Dati SCO (bidirezionale)

Tre Physical transports definiti:– UART– USB– PCMCIA/PCI

Rappresenta un’ interfaccia standard, indipendente dal produttoreConsente di sviluppare facilmente applicazioni senza conoscere nel dettaglio il protocollo

Bluetooth Host

Bluetooth Module

Host Drivers and Applications

Bluetooth HCI driver

Bluetooth Host Controller

Link Manager

Bluetooth Radio

Baseband & Link Controller

Dat

a

Ev

ents

Co

mm

an

ds

TransportInterfaccia fisica per connettere l’host all’host controllerTipicamente seriale:

– Piu’ semplice da collegare (meno pin)– Non occorrono throughput elevati

USB: – La piu’ diffusa in ambiente PC, sia interna che esterna– Autoconfigurante, banda sovradimensionata, supporto flusso isocrono– Maggiore complessita’

UART:– La piu’ usata in applicazioni ‘embedded’– Non autoconfigurante,banda appena sufficiente, no multiplex– Semplice da programmare

PCMCIA:– Definita ma poco utilizzata

Comandi HCI

Set di comandi con cui l’host richiede i servizi del link managerPacchetti HCI spediti dall’ host al dispositivo HC6 gruppi di comandi:

– Controllo connessione– Politiche di connessione– Controllo dispositivo– Parametri informativi– Parametri di stato– Comandi di test

Circa 100 comandi definiti nelle specifiche 1.1

Formato pacchetto comandi HCI

Eventi HCI

Pacchetti spediti dal dispositivo HC all’ Host

Servono al link manager per notificare all’ host:– Che e’ accaduto un evento significativo a livello

locale o remoto.– Per ritornate i parametri di ris– posta ad un comando.

32 eventi definiti nella v.1.1

Formato pacchetto eventi HCI

Evento ‘command complete’

Serve per restituire i parametri di risposta ad un comando.Event code=0x0EParametri:– HCI command packets (1Byte): numero di

comandi pendenti– Command opcode (2 bytes): Opcode (OGF+OCF)

del comando a cui l’evento corrisponde– Return parameters (N bytes): i parametri di

risposta al comando

Flusso dati (L2CAP)

Link Manager

Comandi Eventi Dati

LCH=11 LMP_PDU

LCH=01 Continuazione dati

LCH=10 Inizio dati L2CAP

Pacchetto max dati HCI dipende dall’ Host controller, solitamente e’ poco meno di un Kbyte

Il link manager opera una segmentazione

Connection handle

Parola di 12 bit da 0x000 a 0xEFF (0xF00-0xFFF riservati)

Identifica univocamente ogni singola connessione nel dialogo tra host e dispositivo.

Esiste solo a livello HCI, non ha alcun significato ad altri livelli.

Ad es., un master ha un C.H. per ogni slave

Formato pacchetto dati HCI

Voce

Interfaccia dedicata PCM

Trasporto HCI

Esempio transazione HCI Lettura da parte dell’ host del BD_address del

dispositivo locale

L’host invia al dispositivo un pacchetto comandi HCI_Read_BD_ADDR

– OGF=0x04, OCF=0x0009– Parametri di richiesta nessuno– Parametri di risposta: stato=1byte,BD_ADD=6 bytes

L’host controller risponde con un pacchetto eventi command_complete

– EV code=0x0E – Parametri: pending= 1 byte,opcode=2 bytes, returnpar=7bytes

Richiesta BD_address

OP Code

OCF=0x009

16

OGF=0x04

Length8

0

EV Code

0x0E

8

0x0A (10)

Status BD_ADD

0x00=OK

Pending8 16

Opcode

xxx

Comando

Evento

Par Length

8

OGF=0x0009 OCF=0x04

8 8 x 6

B_A (1) B_A (2) B_A (3) B_A (4) B_A (5) B_A (6)

Controllo connessioni

Comando HCI_Create_Connection (BD_ADDR,Packet_Type,Page_Scan_Repetition_Mode,Page_Scan_Mode,Clock_Offset,Allow_Role_Switch)

Evento Connection Complete (Status,Connection_Handle,BD_ADDR,Link_Type,Encryption_Mode)

Comando HCI_Disconnect (Connection_Handle,Reason)

Evento Disconnection Complete (Status,Connection_Handle, Reason)

Controllo inquiry

Comando HCI_Inquiry (length,Num resp): L’host chiede di fare un inquiry per un tempo ‘length’ e di trovare al massimo ‘Num resp’ unita’.

Evento Inquiry Result (Num_Responses,BD_ADDR[i],Page_Scan_Repetition_Mode[i],Page_Scan_Period_Mode[i],Page_Scan_Mode[i],Class_of_Device[i],Clock_Offset[i])

Evento Inquiry Complete (Status)– Indica che e’ trascorso il tempo di inquiry specificato.

Connessione (lato slave)

Evento Connection Request (BD_ADDR, Class_of_Device,Link_Type)

Comandi: – HCI_Accept_Connection(BD_ADDR,Role)– HCI_Reject_Connection(BD_ADDR, Reason)

Gestione sicurezza

Comandi:– HCI_Authentication_Requested(Connection_Handle)– HCI_Set_Connection_Encryption(Connection_Handle,E

ncryption_Enable)– HCI_Link_Key_Request_Reply (BD_ADDR, Link_Key)– HCI_PIN_Code_Request_Reply(BD_ADDR,PIN_Code_

Length,PIN_Code)

Eventi– PIN Code Request (BD_ADDR)– Link Key Request (BD_ADDR)

Link Control commands OGF=1

HCI_Add_SCO_Connection (Connection_Handle,Packet_Type)

– Se ha successo ritorna un Connection_complete event

HCI_Change_Connection_Packet_Type(Connection_Handle,Packet_Type)

HCI_Remote_Name_Request(BD_ADDR,Page_Scan_Repetition_Mode,Page_Scan_Mode,Clock_Offset)

HCI_Read_Remote_Supported_Features (Connection_Handle)

HCI_Read_Clock_Offset (Connection_Handle)

Link policy commands (OGF=2)

HCI_Hold_Mode (Connection_Handle,Hold_Mode_Max_Interval,Hold_Mode_Min_Interval)

Sniff mode/Exit sniff, Park mode/ exit park

Role discovery, Switch role

Qos setup (Connection_Handle, Flags, Service_Type,Token_Rate, Peak_Bandwidth, Latency, Delay_Variation)

Host controller & BB, OGF=3

51 comandi per controllare i vari settaggi dell’HC:Reset

Change/read local name

Set/read timeouts (connessione, page, flush, supervision)

Read/write parametri di page_scan e inquiry_scan

Read/write Class of device locale

Read transmitted power(Conn_handle)

Read/write tabella delle Link keys

Parametri informativi OGF=4

HCI_Read_Local_Version_Information(Status,HCI Version,HCI Revision,LMP Version,Manufacturer_Name,LMP Subversion)

HCI_Read_Local_Supported_FeaturesHCI_Read_Buffer_Size (Status,HC_ACL_Data_Packet_Length,HC_SCO_Data_Packet_Length, HC_Total_Num_ACL_Data_Packets, HC_Total_Num_SCO_Data_Packets)

HCI_Read_Country_Code (obsoleto)

HCI_Read_BD_ADDR

Parametri di stato OGF=5

HCI_Read_Failed_Contact_Counter(Connection_Handle)– Legge il contatore dei pacchetti persi con una

particolare connessione)

HCI_Get_Link_Quality– Restituisce un byte 0=pessimo 255=ottimo

HCI_Read_RSSI– Restituisce un byte tra –128dbm e +128dbm

Comandi di test OGF=6

Read / write loop-back mode

HCI Flow control

Transmitter host

Receiver host

Transmitter host controller

Receiver host controller

HCI Flow control /2

Necessario sia da host a host controller che viceversaBasato si pacchetti dati HCIDipendente dalle dimensioni dei buffersSoggetto alla latenza del protocollo di trasporto: non sarebbe efficiente uno stop-and-go ad ogni pacchettoOccorre minimizzare le notifiche del controllo di flusso per non intasare il bus di trasporto

Flow control: Host to Host controller

L’host abilita il controllo di flusso col comando Set_Host_Controller_To_Host_Flow_Control

L’host valuta la grandezza del buffer del H.C. (in pacchetti) col comando Read_Buffer_Size

All’ inizio l’host assume il buffer HC vuoto, inizializza una variabile (B) dei buffers disponibii Ad ogni pacchetto inviato all’ HC, l’host decrementa BSe B diventa 0, l’host smette di inviare pacchetti.Periodicamente, l’HC invia un evento Number Of Completed Packets per notificare i pacchetti correttamente trasmessiL’host, somma a B il valore dei pacchetti inviati

Macchina a stati Flow control

B= buffer size

Wait B= B-1

Inviato pacchetto HCI

B= B+N

Evento: Trasmessi N pacchetti

StopEvento: Trasmessi N pacchetti

B=0

UART transport

Usata soprattuto in applicazioni ‘embedded’Richiede un protocollo aggiuntivo di multiplexing per distinguere i 4 flussiViene aggiunto un Byte prima di ogni pacchetto HCI:– 0x01= pacchetto comandi– 0x02= pacchetto dati ACL– 0x03= pacchetto dati SCO– 0x04= pacchetto eventi

USB transport

Perfetto in ambiente PC, spesso usato anche internamente su motherboardSfrutta il meccanismo delle pipes USB per multiplexare i flussi

– Comandi= endpoint 0x00 (Control)– Eventi= endpoint 0x81 (Interrupt)– Dati ACL input = endpoint 0x82 (bulk in)– Dati ACL output=endpoint 0x02 (bulk out)– Dati SCO= endpoints 0x83,0x03 (isoch I/O)

Autoconfigurante: – Class of device =0xE0, subclass=0x01, pcode=0x01