2012년 3월 21일 수요일

H4/HCI Protocol 이란 ?

"H4"는 HCI  commnads(Bluetooth chip과 host 사이의 event와 data)를 전송하기 위해 사용되는 UART protocol을 지칭하는 용어이다.

H4는 아주 간단한 프로토콜로 Bluetooth 스펙에 정의되어 있기 때문에 Bluetooth 엔지니어가 아니라면 UART H4란 용어를 만났을 때 뒤에 붙은 "H4"를 이해할 수 없다.  H4라 불리는 이유는 Bluetooth specification의 section 번호가 H4이기 때문이다.

H2는 HCI USB Transport Layer
H3는 HCI RS232 Transport Layer
H4는 HCI UART Transport Layer

H4와 유사한 프로토콜로 CSR사의 BCSP(BlueCore Serial Protocol)등이 있으며, BCSP는 "H4" 프로토콜에 bit error checking, wakeup중 drop된 data를 처리하기 위한 재전송, flow control 등의 기능이 추가 되었다. 즉,  H4는 Bluetooth데이터를 UART로 전송하는 "표준" 방법이고, BCSP는 CSR사가 소유한 기술이다.
BCSP도 기본적으로 UART를 사용하는데, RTS/CTS(HW flow control)은 선택 사양이다.

Bluetooth 스펙의 최신 버전에는, 3-wire 프로토콜 이라고 불리는 Section H5가  추가되었는데, 따라서 이 프로토콜을 "H5"라고도 하며, H4에는 없는 bit errors, overrun errors, burst errors checking등이 추가 되어 있다. 즉, H4와 동일하게 UART를 사용하는데,  3-wire라는 이름에서 알 수 있듯이  TXD/ RXD/ GND 3선만 연결한다.   반면에 "H4" 에서는 TXD/ RXD/ RTS/ CTS/ GND를 연결한다. RTS/ CTS를 연결한다는 것은 UART의 HW flow control을 사용한다는 말씀.

HCI(Host Controller Interface) protocol은 transports 프로토콜(H4,H5, BCSP, USB...) 위에 정의되며, Bluetooth chip과 host사이의 기본적인 commands, events 와 data packets 전송을 위해 사용된다.  HCI 역시 Bluetooth 스펙(Vol 2, Part E in BT4.0)의 일부다.

예를들어 SPP(Serial Port Profile)은 Bluetooth전송을 통하여 기존의 RS-232 serial 전송을 simulation하는 Bluetooth profile이다. 이를 구현하기 위한 프로토콜 계층 구조는 아래와 같다.

RFCOMM
-------------------------
L2CAP
-------------------------
ACL                            :BT chip간 무선으로 전송될 데이터
-------------------------
HCI                             : host와 BT chip사이
-------------------------
H4 or H5 or BCSP...   : host와 BT chip사이
-------------------------
UART ...

HCI protocol을 사용하여 아래 4가지 종류의 데이터가 전달된다.
 - Command packet : host -->  Bluetooth chip . Bluetooth chip 제어용
 - Event packet : Bluetooth chip --> host. 특정 event발생 시 BT chip이 host에 알림.
 - ACL data packet :  실제 무선으로 전송될 user 데이터
 - Synchronous data packet : 무선 으로 전송될 audio data.


참고 자료
- UART HOST transport summary (구글 검색으로 쉽게 찾을 수 있음. )