Bluetooth
Terza lezione: HCI e L2CAP
STMicroelectronics
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
Applications
TCP/IP HID RFCOMM
Data
Audio
L2CAP
Link Manager
Link Controller
BT device
Baseband
Radio
Software layers
HW Digitale
HW Digitale/Analogico
HW Analogico/RF
Hosted vs. Host-less.
E.g. RF Comm
L2CAP
Bluetooth
Host
HCI
E.g. RF Comm
L2CAP
HCI
Bluetooth
Device
Link manager
Link manager
Baseband
Baseband
Radio
Radio
Bluetooth
Hostless
Device
Architettura Hosted
Bluetooth device
HCI (host controller interface)
Bluetooth Host
–
–
Tre Physical transports definiti:
–
–
–
UART
USB
PCMCIA/PCI
Rappresenta un’ interfaccia standard,
indipendente dal produttore
Consente di sviluppare facilmente
applicazioni senza conoscere nel
dettaglio il protocollo
Bluetooth HCI driver
Data
–
Comandi
Eventi
Dati ACL (bidirezionale)
Dati SCO (bidirezionale)
Events
–
Host Drivers and Applications
Commands
Il protocollo HCI trasporta
Bluetooth Host Controller
Link Manager
Baseband & Link Controller
Bluetooth Radio
Bluetooth Module
Transport
Interfaccia fisica per connettere l’host all’host controller
Tipicamente 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
manager
Pacchetti HCI spediti dall’ host al dispositivo HC
6 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=0x0E
Parametri:
–
–
–
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)
Comandi Eventi
Link
Manager
Dati
LCH=10
Inizio dati L2CAP
LCH=01
Continuazione dati
LCH=11
LMP_PDU
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 (0xF000xFFF 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
Comando
16
8
Length
OP Code
OCF=0x009
0
OGF=0x04
Evento
8
8
EV Code
Par Length
8
Pending
0x0E
0x0A (10)
xxx
8
OGF=0x0009 OCF=0x04
8x6
BD_ADD
Status
0x00=OK
16
Opcode
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_Repetiti
on_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_Sca
n_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,H
CI Version,HCI Revision,LMP Version,Manufacturer_Name,LMP
Subversion)
HCI_Read_Local_Supported_Features
HCI_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(Connect
ion_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
viceversa
Basato si pacchetti dati HCI
Dipendente dalle dimensioni dei buffers
Soggetto alla latenza del protocollo di
trasporto: non sarebbe efficiente uno stopand-go ad ogni pacchetto
Occorre 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 B
Se B diventa 0, l’host smette di inviare pacchetti.
Periodicamente, l’HC invia un evento Number Of Completed
Packets per notificare i pacchetti correttamente trasmessi
L’host, somma a B il valore dei pacchetti inviati
Macchina a stati Flow control
Evento: Trasmessi
N pacchetti
B= B+N
B= buffer size
Inviato
pacchetto HCI
Wait
B=0
Evento: Trasmessi
N pacchetti
Stop
B= B-1
UART transport
Usata soprattuto in applicazioni ‘embedded’
Richiede un protocollo aggiuntivo di
multiplexing per distinguere i 4 flussi
Viene 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 motherboard
Sfrutta 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
Scarica

HCI e L2CAP