STMicroelectronics Bluetooth Terza lezione: HCI e L2CAP.
-
Upload
leonzio-morandi -
Category
Documents
-
view
227 -
download
0
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