Topic
HCI spec study.
Contents
-HCI: Host Controller Interface
-HCI는 interface시에 총 4 type의 packet을 사용하여 통신함.
1. packets: there are 4 types of packet.
-HCI command packet (host -> controller)
-HCI ACL data packet (bi-directional)
-HCI synchronous data packet (bi-directional)
-HCI event packet (controller -> host)
1)HCI command packet
1)HCI command packet
-format: OpCode(16 bit) + Parameter length(16 bit) + Parameter + ....
-OpCode is consist of OGF, OCF.
.OGF(OpCode Group Field): upper 6 bits
.OCF(OpCode Command Field): remaining 10 bits
=> OpCode (16bits) = OCF(10bits) + OGF(6bits)
so, Command packet = OCF(10bits) + OGF(6bits) + Para length(16bits) 로 구성됨.
.OGF라는 category안에 여러개의 OCF가 존재하는 형태.
-OGF=0x01: HCI Link Control Commands
-Inquiry Command
-Inquiry Cancel Command
-Periodic Inquiry Mode Command
-Exit Periodic Inquiry Mode Command
-Create Connection Command .... and so on..
-OGF=0x02: HCI Link Policy Commands:
-Hold Mode Command
-Sniff Mode Command ... and so on
-OGF=0x03: HCI Host Controller & BB Commands
-Set Event Mask Command
-Reset Command
-Set Event Filter Command
-Flush Command
-Read Pin Type Command .... and so on
-OGF=0x04: HCI Informational Parameters
-Read Local Version Information Command
-Read Local Supported Commands Command
-.....
-Read BD_ADDR Command
-OGF=0x05: HCI Status Parameters
-Read Failed Contact Counter Command
-Reset Failed Contact Counter Command
-Read Link Quality Command
-Read RSSI Command ....... and so on
-OGF=0x06: HCI Testing Commands.
-Read Loopback Mode Command
-Write Loopback Mode Command
-Enable Device Under Test Mode Command
-Write Simple Pairing Debug Mode Command
-OGF=0x3e: TCI-L2CAP
-OGF=0x3f: HCI Vendor Commands
> Read_BD_ADDR is in 'Information Parameters' Group. so, OGF: 0x04(0000 0100)
> and its OCF: 0x0009(0000 0000 0000 1001)
> 따라서 전체 OpCode의 상위 6bits를 구성하는 OGF는 => 00 0100 (0x04)
remaining 10bits 인 OCF는 => 00 0000 1001(0x009)
combining above 2 terms(OGF+OCF), total OpCode is "0001 0000 0000 1001"(0x1009)
> 즉, 총 16bit의 OpCode이며, upper 6bits는 0x04(means "Information Parameters"Group),
remaining 10bits는 0x0009(means "Read_BD_ADDR")
> 이를 command packet 형식에 맞게 mapping하면
OpCode packet = OCF + OGF 이므로
= 0x09 + 0x10 = 0000 1001 0001 0000 의 형태로 mapping
> and its OCF: 0x0009(0000 0000 0000 1001)
> 따라서 전체 OpCode의 상위 6bits를 구성하는 OGF는 => 00 0100 (0x04)
remaining 10bits 인 OCF는 => 00 0000 1001(0x009)
combining above 2 terms(OGF+OCF), total OpCode is "0001 0000 0000 1001"(0x1009)
> 즉, 총 16bit의 OpCode이며, upper 6bits는 0x04(means "Information Parameters"Group),
remaining 10bits는 0x0009(means "Read_BD_ADDR")
> 이를 command packet 형식에 맞게 mapping하면
OpCode packet = OCF + OGF 이므로
= 0x09 + 0x10 = 0000 1001 0001 0000 의 형태로 mapping
> 위의 예에서 보면, "09(1 byte) 10(1 byte) 00(1byte)"의 총 3byte의 command packet이 전달됐으며
09 10:(2byte) Opcode를 나타내고,
00: (1byte) Length(뒤에 parameter가 아무것도 없으므로 0)를 의미
[Event packet]
> [Event Code] + [Length] + [Parameter]로 구성(refer to above figure)
> 위의 예에서
0E: Command Complete Event (1byte Event Code)
0A: Length(1byte, 뒤에 총 10 byte가 따라오므로 0x0A)
또한 Command Complete Event의 경우에는 다음과 같은 parameter가 따라온다.
1)Num_HCI_Command_Packets: 1byte. HCI Command packet의 갯수
2)Command_Opcode: 2byte. Opcode of the Command which caused this event.
3)Return Parameters: xbyte(Depends on Command) Opcode Command에 따른 return para.
> 따라서 위의 경우를 예로 하여 계속 살펴보면..
01: (1byte)Num_HCI_Command_Packets, 'Read_BD_ADDR' command 하나이므로. 0x01
09 10: (2byte) Command Opcode."Read_BD_ADDR"를 의미
00: (1byte) Status?? 왜 Command Complete Event진행중에 느닷없이 Status event가 끼어들지?
2A 01 DE A4 01 00: (6byte) BD_ADDR. Return parameter에 해당하며 spec에 나와 있는대로
HCI는 "Little Endian" Format을 사용하므로
이를 제대로 translate하기위해서는 순서를 뒤집어 줘야함
PS)
1. 'Portmon', 즉 port monitor라는 프로그램을 통해 실제 serial port를 monitoring할수가 있는데
이를 통해 관찰해 보면 Command packet의 경우 '01'이, Event packet의 경우 '04'가 맨 앞에 출력됨.
즉, 위의 경우(Read BD_ADDR)를 예로 들면,
Command: 01 09 10 00
Event: 04 0E 0A 01 09 10 00 2A 01 DE A4 01 00
각각 위와 같은 data가 monitoring됨. but i dont know what these are............
BT spec을 찾아봐도 안보이고..
RS-232 spec인가??
2010.03.10)Answers is..
"01" means HCI Command Packet
"02" means HCI ACL Data Packet
"03" means HCI Sync. Data Packet
"04" menas HCI Event Packet.
2. Little Endian
MSB가 큰 메모리 번지에 저장되는 방식이며 Intel CPU계열에서 역시 이를 사용함.
반대로 Big Endian방식은 MSB가 작은 메모리번지에 저장되는 방식.
Q) 왜 Command Complete Event진행중에 느닷없이 Status event가 끼어들지?
Command Complete Event 다음에는 위의 1),2),3)에서 적은바와 같이
Num_HCI_Command_Packets -> Command_Opcode -> Return parameter순으로
오게 되어 있는데 "09 10" 다음의 "00"이 Status event라면
Command event + Status event + return parameter의 순이라는 말인가..
댓글 없음:
댓글 쓰기