도1은 NFC 호스트와 NFC 칩 셋 또는 NFC 디바이스 간의 다양한 인터페이스 구조의 예를 나타낸 도면
도2는 NFC 호스트와 NFC 칩 셋 또는 NFC 디바이스 간의 서로 다른 인터페이스 구현에 따른 문제점을 설명하기 위한 도면
도3은 본 발명에 따른 호스트 컨트롤러 인터페이스의 개념을 설명하기 위한 도면
도4는 본 발명에 따른 호스트 컨트롤러 인터페이스를 준수할 경우의 잇점을 설명하기 위한 도면
도5는 본 발명의 실시예에 따른 NFC 호스트와 NFC 디바이스의 구조의 예를 나타낸 도면
도6은 본 발명의 실시예에 따른 리더/라이터(Reader/Writer) 모드에서의 인터페이스 컨트롤 프로세스의 예를 나타낸 도면
도7은 본 발명의 실시예에 따른 피어 모드(Peer Mode)에서의 인터페이스 컨트롤 프로세스의 예를 나타낸 도면
도8은 본 발명의 실시예에 따른 정보 전송 방법의 예를 나타낸 도면
도9는 본 발명의 실시예에 따른 NFC 호스트와 NFC 디바이스 간의 인터페이스 컨트롤 프로세스의 예를 나타낸 도면
도10은 본 발명의 실시예에 따른 NFC 호스트와 NFC 칩셋 (또는 NFC 디바이스) 간의 인터페이스 구조의 예를 나타낸 도면
도11은 본 발명의 실시예에 따른 NFC 호스트와 NFC 칩셋 (또는 NFC 디바이스) 간의 인터페이스 구조의 다른 예를 나타낸 도면
도12는 본 발명의 실시예에 따른 메시지 포맷의 예를 나타낸 도면
도13은 본 발명의 실시예에 따른 메시지 포맷에서 메시지 디스크립터 필드(MDESC: Message Descriptor Field)의 예를 나타낸 도면
도14는 본 발명의 실시예에 따른 메시지 포맷에서 노드 어드레스 필드(NAD: Node Address Field)의 예를 나타낸 도면
도15는 본 발명의 실시예에 따른 메시지 포맷에서 명령 메시지 포맷의 예를 나타낸 도면
도16은 본 발명의 실시예에 따른 메시지 포맷에서 응답 메시지 포맷의 예를 나타낸 도면
도17은 본 발명의 실시예에 따른 메시지 포맷에서 이벤트 메시지 포맷의 예를 나타낸 도면
도18은 본 발명의 실시예에 따른 메시지 포맷에서 데이터 메시지 포맷의 예를 나타낸 도면
도19는 본 발명의 실시예에 따른 명령 메시지 종류의 예를 나타낸 도면
도20은 본 발명의 실시예에 따른 응답 메시지 종류의 예를 나타낸 도면
도21은 본 발명의 실시예에 따른 명령 및 응답 메시지 종류의 예를 나타낸 도면
도22는 본 발명의 실시예에 따른 이벤트 메시지 종류의 예를 나타낸 도면
도23은 본 발명의 실시예에 따른 명령 및 응답 메시지에서 디바이스 관리 명령(Device Management Functionality)의 예를 나타낸 도면
도24는 본 발명의 실시예에 따른 명령 및 응답 메시지에서 데이터 통신 명령(NFC Data Communication Functionality)의 예를 나타낸 도면
도25는 본 발명의 실시예에 따른 명령 및 응답 메시지에서 보안 요소 지원 명령(Secure Element Support Functionality)의 예를 나타낸 도면
도26은 본 발명의 실시예에 따른 명령 및 응답 메시지에서 에러 메시지(Error Code Message)의 예를 나타낸 도면
도27은 본 발명의 실시예에 따른 이벤트 메시지의 예를 나타낸 도면
발명의 실시를 위한 최선의 형태
도3은 본 발명에 따른 호스트 컨트롤러 인터페이스(HCI)의 개념을 보여준다. NFC 호스트와 NFC 칩셋 또는 NFC 디바이스가 본 발명에서 정하고 있는 포맷과 프로세스를 준수한다. NFC 호스트와 NFC 칩 셋(이하, NFC 디바이스를 포함한다)이 본 발명을 따르면, 다양한 종류의 드라이버에 대응하는 각각의 인터페이스(112, 122, 132)에 대하여 임의의 NFC 호스트(NFCH)(100)가 공통의 인터페이스 드라이버(120)를 갖추고 있으며, 임의의 NFC 칩 셋(200)은 HCI를 포함하는 공통의 디바이스 드라이버(130)와 통신 선로, 여기서는 하나의 실시예로서 직렬 버스(Serial Bus)로 연결된다. 또한, 더 나아가, 확장성을 부여하기 위하여 공통의 디바이스 드라이버를 위한 확장 인터페이스(125)를 제공하며, 이는 벤더(Vendor)가 자유롭게 정의하여 사용할 수 있는 드라이버 영역(135)을 포함하고 있음을 보여주고 있다.
도3에 나타낸 바와 같이 NFC 호스트와 NFC 칩 셋 간의 인터페이스에 관하여 정해지는 포맷과 프로세스를 준수하도록 함으로써, 이종 기기 간의 정보 전송을 포함하는 일련의 컨트롤에서 상호 호환성과 범용성을 보장할 수 있게 되는 것이다.
도4는 본 발명에 따른 호스트 컨트롤러 인터페이스를 준수할 경우의 잇점을 표현하고 있다. 모바일 핸드 셋(Mobile Handset)이나 디지털 TV 수신기 등의 호스트 측면에서 본 발명의 NFC HCI를 준수하면 어떠한 NFC 칩 셋(NFC IC)에 대해서도 디바이스 드라이버(Device Driver)나 미들웨어(MW:Middle Ware), 어플리케이션 수정(Application Modification) 없이 자유롭게 호환성, 범용성이 보장되는 상태로 사용할 수 있음을 보여주고 있다. 또한, NFC 칩 셋(NFC IC) 측면에서 본 발명의 NFC HCI를 준수하면 호스트 드라이버(Host Driver)에 대한 고민없이도 어떠한 NFC 호스트에 대해서 호환성, 범용성이 보장되는 상태로 사용할 수 있음을 보여주고 있다.
도5는 본 발명의 실시예에 따른 NFC 호스트와 NFC 디바이스의 구조의 예를 보여주고 있다. 호스트(500), NFC 디바이스(600), 보안 요소(Secure Element)(700)의 내부 구조를 보여주고 있다. 호스트(NFCH)(500)는 디바이스 디스커버리 및 모드 스위치 스택(Device Discovery & Mode Switch Stack) 위에 LLCP(Logical Link Control Protocol), 리더/라이터, NDEF, 카드 에뮬레이션 모듈(예: NFCIP-1, ISO 14443B 참조) 및 RTD를 포함하고 있다. 또한, 보안 요소 입출력부(Secure Element I/O F/W 및 Secure Element I/O H/W), 그리고 각각의 직렬 입출력부(Serial I/O F/W 및 Serial I/O H/W)를 포함하고 있으며, NFC HCI를 토대로 NFC 디바이스(600) 및 보안 요소(Secure Element)(700)와 연결된다.
NFC 디바이스(600)는 NFC HCI를 토대로 호스트(500) 및 보안 요소(700)와 연결되며, 직렬 입출력부(Serial I/O F/W 및 H/W, SE I/O F/W 및 H/W)를 토대로 호스트(500) 및 보안 요소(700)와 연결된다. NFC 디바이스(600)는 또한 디바이스 디스커버리 및 모드 스위치 스택, 카드 에뮬레이션 모듈을 포함하며, 나아가 NFC RF H/W를 포함한다.
보안 요소(Secure Element)(700)는 카드 어플리케이션, NFC HCI, 보안 요소 입출력부(Secure Element I/O F/W 및 H/W)를 포함하여 호스트(500) 및 NFC 디바이스(600)와 연결된다.
여기서, 직렬 I/O 펌웨어(Serial I/O F/W)는 UART나 USB 등과 같은 직렬 포트를 컨트롤한다. 도5에서 HCI 경로(HCI Path)와 물리적인 직렬 I/O 경로(Physical Serial I/O Path), 보안 요소를 위한 물리적인 경로(Physical Path for Secure Element)를 각각 점선과 실선으로 나누어 표현하였다.
도5에 나타낸 호스트-디바이스-보안요소의 구조는 하나의 예에 불과하며, 여기에 나타낸 실시예로 본 발명에 따른 NFC 시스템이 제한되지는 않는다. 이러한 호스트나 디바이스, 카드 기반의 보안 시스템에 대한 각각의 내부 구조나 그 물리적인 구조, 탑재되는 모듈을 비롯하여 통신 방식은 보다 더 자유롭게 설계되고 변형될 수 있으며, 당업자에 의해서 용이하게 구현될 수 있을 것이다.
도6은 본 발명의 실시예에 따른 리더/라이터(Reader/Writer) 모드에서의 인터페이스 컨트롤 프로세스의 예를 보여주고 있다. 여기서는 호스트 A(Host A)와 NFC 디바이스 간에 이루어질 수 있는 프로세스, 즉 호스트 컨트롤러 인터페이스(HCI)를 보여준다. 호스트로부터 디바이스로 디바이스 스캔(Device Scan) 프로세스가 수행되고(S110), 이에 따라 디바이스 디스커버리(Device Discovery), SDD(Single Device Detection) 등이 이루어진다. 이에 대한 카드 검출 응답(Card_Detected)이 호스트로 전달된다(S120). 카드 검출에 따라 호스트는 카드 리드 프로세스(Read_Card)를 수행하고(S130), 이 때 데이터 변환 프로토콜(Data Exchange Protocol)이 적용될 수 있다. NFC 디바이스로부터 데이터가 NFC 호스트로 수신되고(Data_Received)(S140), 데이터 수신이 완료되면 호스트로부터 카드 해제프로세스(Deselect_Card)가 수행된 후 카드 해제가 완료되면 NFC 디바이스로부터 NFC 호스트로 해당 응답(Deselect_Card)을 수행하게 된다(S150, S160).
도6에서 살펴보았듯이, 본 발명에 따른 호스트 컨트롤러 인터페이스는 명령과 응답이 하나의 쌍으로 작동한다. 이에 대해서는 후에 더욱 상세하게 설명할 것이다.
도7은 본 발명의 실시예에 따른 피어 모드(Peer Mode)에서의 인터페이스 컨트롤 프로세스의 예를 보여준다. 즉, 피어 대 피어(Peer to Peer) 통신에서 NFC 호스트 컨트롤러 인터페이스가 어떻게 작동하는가를 보여준다. 호스트 A(Host A)와 호스트 B(Host B)는 각각의 NFC A, NFC B를 토대로 통신한다. 호스트 A로부터 호스트 B(Host B)로 세션 오픈(LLC_Opne_Session) 프로세스가 NFC A, NFC B를 토대로 수행된다(S210 ∼ S230). 호스트 B로부터 호스트 A(Host A)로 세션 오픈 인식(LLC_Open_Session_Ack) 프로세스가 NFC B, NFC A를 토대로 수행된다. 즉, 피어 대 피어(Peer to Peer) 통신 또한 본 발명에 따른 NFC HCI를 준수함으로써 범용성, 호환성이 보장되는 상태에서 자유롭게 이루어질 수 있음을 보여주는 것이다.
도8은 본 발명의 실시예에 따른 정보 전송 방법의 예를 보여준다. 여기서는 데이터 전송시에 오버플로우(overflow)를 방지함으로써 이로 인한 데이터 손실(data loss)이 없도록 데이터를 전송하는 방법을 보여주고 있다. 즉, 데이터를 송신하는 측에서 수신하는 측으로 디바이스 버퍼(Device Buffer)의 크기를 고려하여 데이터를 분할(segmentation)하여 전송하고, 이에 관련된 정보를 함께 전송해 주며, 수신하는 측에서는 분할되어 전송되는 데이터들을 수신하여 재구성함으로써 원래의 데이터를 손실없이 받아 볼 수 있도록 한다. 데이터를 분할(segmentation)하여 전송할 때 관련된 정보로는 데이터의 크기와 관련된 정보를 들 수 있으며, 데이터 전송 단계에서 디바이스 측의 버퍼 크기에 관련된 정보를 구해와서 이를 활용하는 방법으로 데이터를 전송한다.
도9는 본 발명의 실시예에 따른 NFC 호스트와 NFC 디바이스 간의 인터페이스 컨트롤 프로세스의 예를 나타낸 도면으로서, 디바이스 버퍼의 크기를 고려하여 데이터를 분할 전송하고, 이로써 데이터 손실을 방지할 수 있는 일련의 프로세스를 보여주고 있다.
NFC 호스트(NFC Host)로부터 NFC 디바이스(HFC Device)로 디바이스 버퍼의 크기를 요청하는 명령(HCI_GET_BUFFER_SIZE command message)이 전달된다(S310). 디바이스 버퍼 크기를 요청하는 명령에 응답하여 NFC 디바이스로부터 NFC 호스트로 바이트로 표현되는 버퍼 크기 정보(m bytes)가 전달된다(HCI_GET_BUFFER_SIZE response message)(S320). HFC 호스트는 디바이스 버퍼의 크기 정보를 토대로 전송할 데이터의 크기(N bytes)를 해당 버퍼의 크기(m bytes)에 대응하여 분할한 첫번째 데이터를 전송한다(Command Protocol Message)(S330). NFC 디바이스는 해당 데이터 수신 완료를 응답한다(HCI_SIZE_COMPLETE_DATA event)(S340). 이 응답은 m bytes를 리턴함으로써 이루어질 수 있다. 다음 단계(S350, S360, S370)는 나머지 데이터를 같은 방법으로 전송하고 또 그 응답을 받는 프로세스를 표현하고 있다. 이와 같이 하여 NFC 호스트로부터 NFC 디바이스로 전송할 모든 데이터의 전송이 완료되면 NFC 디바이스로부터 NFC 호스트로 데이터 수신이 완료되었음을 알리는 메시지를 전송하고 종료한다(Response Protocol Message). 이 응답은 필요한 파라미터를 리턴함으로써 이루어질 수 있다.
도10은 본 발명의 실시예에 따른 NFC 호스트와 NFC 칩셋 (또는 NFC 디바이스) 간의 인터페이스 구조의 예를 나타낸 도면이다. NFC 호스트(10)와 NFC 디바이스(20) 간에는 명령(Command)(30)과 응답(Response)(40), 그리고 이벤트 (Event)(50)를 토대로 통신을 수행한다. 명령(30)은 NFC 호스트(10)로부터 NFC 디바이스(20)로 전달된다. 응답(40)은 NFC 디바이스(20)로부터 NFC 호스트(10)로 전달된다. 이벤트(50)는 NFC 디바이스(20)로부터 NFC 호스트(10)로 전달되며 명령이나 응답에 대해서 독립적이다. 명령(30)과 응답(40)은 하나의 쌍(Pair)을 이루어 진행되며, 이벤트 프로세스의 경우는 비동기 메시징(Asynchronous Messaging)으로 수행된다.
도11은 본 발명의 실시예에 따른 NFC 호스트와 NFC 칩셋 (또는 NFC 디바이스) 간의 인터페이스 구조의 다른 예를 나타낸 도면이다. NFC 호스트(10)와 NFC 디바이스(20) 간에는 명령(Command)(30)과 응답(Response)(40), 그리고 이벤트(Event)(50)를 토대로 통신을 수행하며, 더 나아가 데이터(Data)(60) 전송 프로세스가 포함된다. 명령(30)은 NFC 호스트(10)로부터 NFC 디바이스(20)로 전달된다. 응답(40)은 NFC 디바이스(20)로부터 NFC 호스트(10)로 전달된다. 이벤트(50)는 NFC 디바이스(20)로부터 NFC 호스트(10)로 전달되며 명령이나 응답에 대해서 독립적이다. 명령(30)과 응답(40)은 하나의 쌍(Pair)을 이루어 진행되며, 이벤트 프로세스의 경우는 비동기 메시징(Asynchronous Messaging)으로 수행된다. 데이터(Data)(60)는 NFC 호스트(10)로부터 NFC 디바이스(20)로 전달되거나, NFC 디바이스(20)로부터 NFC 호스트(10)로 전달된다. 즉, 양방향 통신을 기반으로 한다. 도11 및 도12에 나타낸 인터페이스 프로세스 및 그 구조는 하나의 예일 뿐이며, 본 발명에 따른 호스트 컨트롤러 인터페이스 프로세스는 이에 제한되지 않는다.
도12는 본 발명의 실시예에 따른 메시지 포맷의 예를 나타낸 도면으로서, 이 는 하나의 실시예이며, 본 발명에 따른 메시지 포맷은 이에 제한되지 않는다. 도12를 참조하면 본 발명의 실시예에 따른 메시지의 일반적인 포맷은 메시지 디스크립터 필드(MDESC: Message Descriptor Field), NAD 필드(Node Address Field), 페이로드 필드(Payload Field)로 이루어진다. MDESC 필드와 NAD 필드는 필수요소(Mandatory Part)로 간주될 수 있으며, 페이로드 필드는 선택적인 요소(Optional Part)로 간주될 수 있다. 도12의 실시예에 따른 메시지 포맷에서 MDESC는 1바이트, NAD는 1바이트 또는 2바이트, 페이로드는 0 내지 255바이트를 갖는 것으로 표현하고 있으나, 이는 하나의 예일 뿐이다.
도13은 본 발명의 실시예에 따른 메시지 포맷에서 메시지 디스크립터 필드(MDESC: Message Descriptor Field)의 예를 나타낸 도면이다. 여기서는 1바이트로 MDESC가 표현될 때 MDESC 필드에 기록되는 각각의 값들이 어떤 의미인지를 예를 들어 나타내고 있다. MDESC 필드는 메시지 타입(Message Type), NAD, 길이 정보(Length), 플래그(Flag), RFU(Reserved for future use)가 기록된다. 메시지 타입(Message Type)은 2비트로 표현될 수 있으며, 그 값에 따라 명령(Command), 응답(Response), 이벤트(Event), 데이터(Data)를 표현할 수 있다. NAD는 그 값에 따라 4비트 NAD인지 혹은 8비트 NAD인지를 표현할 수 있다. 길이 정보(Length)는 그 값에 따라 길이 정보가 없는 경우(No length), 1바이트 길이인 경우, 2바이트 길이인 경우, RFU인 경우 각각을 표현할 수 있다. 플래그(Flag)는 연이은 메시지가 있는 경우(Following Message present)와 없는 경우(No Following Message)를 각각 표현할 수 있다. 그리고 RFU는 항상 특정 값으로 표현될 수 있다.
도14는 본 발명의 실시예에 따른 메시지 포맷에서 노드 어드레스 필드(NAD: Node Address Field)의 예를 나타낸 도면이다. NAD는 8비트 NAD인 경우와 4비트 NAD인 경우 각각을 고려하였다. 8비트 NAD인 경우는 2바이트로 표현될 수 있으며, 상위 1바이트에 소스 NAD(Source NAD), 하위 1바이트에 데스트네이션 NAD(Destination NAD)를 각각 표현한다. 4비트 NAD인 경우에는 1바이트로 표현될 수 있으며, 상위 4비트에 소스 NAD(Source NAD), 하위 1바이트에 데스트네이션 NAD(Destination NAD)를 각각 표현한다.
도15는 본 발명의 실시예에 따른 메시지 포맷에서 명령 메시지 포맷의 예를 나타낸 도면이다. 1바이트의 MDESC, 1바이트 또는 2바이트의 NAD, 1바이트의 CMD(Command), 그리고 1바이트의 길이 정보(Length), 0바이트 내지 255바이트의 파라미터/데이터(Parameter/Data)를 포함하며, 명령 코드(Command Code)는 해당 필드(CMD)에 기록되며, 길이 정보 필드(Length Field)에는 파라미터나 데이터가 존재하는 경우에 그 길이 정보를 표현한다. 길이 정보 필드는 2바이트로 표현될 수도 있으며, 이러한 경우에는 파라미터나 데이터 필드의 길이는 0바이트 내지 65535 바이트가 될 수 있다. 명령 코드 필드(CMD)는 이 메시지가 표현하는 명령이 어떤 명령인지를 표현하는 코드가 기록된다. 명령의 종류와 사용될 수 있는 코드 값의 예에 대해서는 후에 상세히 설명할 것이다.
도16은 본 발명의 실시예에 따른 메시지 포맷에서 응답 메시지 포맷의 예를 나타낸 도면이다. 1바이트의 MDESC, 1바이트 또는 2바이트의 NAD, 1바이트의 RESP(Response), 그리고 1바이트의 길이 정보(Length), 0바이트 내지 255바이트의 파라미터/데이터(Parameter/Data)를 포함하며, 응답 코드(Response Code)는 해당 필드(Resp)에 기록되며, 길이 정보 필드(Length Field)에는 파라미터나 데이터가 존재하는 경우에 그 길이 정보를 표현한다. 길이 정보 필드는 2바이트로 표현될 수도 있으며, 이러한 경우에는 파라미터나 데이터 필드의 길이는 0바이트 내지 65535 바이트가 될 수 있다. 응답 코드 필드(RESP)는 이 메시지가 표현하는 응답이 어떤 응답인지를 표현하는 코드가 기록된다. 또한, 응답의 성공(Success)이나 실패(Fail)를 표현하는 1비트 플래그가 결과 값(Result)으로 표현되며, 어떤 에러(Error)인지를 표현하는 7비트의 에러 코드(Error Code)가 기록된다. 응답의 종류와 사용될 수 있는 코드값, 그리고 에러의 종류와 사용될 수 있는 값에 대해서는 후에 상세히 설명할 것이다.
도17은 본 발명의 실시예에 따른 메시지 포맷에서 이벤트 메시지 포맷의 예를 나타낸 도면이다. 1바이트의 MDESC, 1바이트 또는 2바이트의 NAD, 1바이트의 EVENT, 그리고 1바이트의 길이 정보(Length), 0바이트 내지 255바이트의 파라미터/데이터(Parameter/Data)를 포함하며, 이벤트 코드(Event Code)는 해당 필드(EVENT)에 기록되며, 길이 정보 필드(Length Field)에는 파라미터나 데이터가 존재하는 경우에 그 길이 정보를 표현한다. 길이 정보 필드는 2바이트로 표현될 수도 있으며, 이러한 경우에는 파라미터나 데이터 필드의 길이는 0바이트 내지 65535 바이트가 될 수 있다. 이벤트 코드 필드(EVENT)는 이 메시지가 표현하는 이벤트가 어떤 이벤트인지를 표현하는 코드가 기록된다. 이벤트의 종류와 사용될 수 있는 코드 값의 예에 대해서는 후에 상세히 설명할 것이다.
도18은 본 발명의 실시예에 따른 메시지 포맷에서 데이터 메시지 포맷의 예를 나타낸 도면이다. 1바이트의 MDESC, 1바이트 또는 2바이트의 NAD, 1바이트의 길이 정보(Length), 0바이트 내지 255바이트의 파라미터/데이터(Parameter/Data)를 포함하며, 길이 정보 필드(Length Field)에는 파라미터나 데이터가 존재하는 경우에 그 길이 정보를 표현한다. 길이 정보 필드는 2바이트로 표현될 수도 있으며, 이러한 경우에는 파라미터나 데이터 필드의 길이는 0바이트 내지 65535 바이트가 될 수 있다.
도19는 본 발명의 실시예에 따른 명령 메시지 종류의 예를 나타낸 도면이다. 여기서 사용되는 명령 메시지의 종류나 해당 명령을 표현하는 코드 값은 하나의 예에 불과하며, 이에 제한되지 않는다. 'Get Device Information' 명령은 NFC 디바이스의 정보를 읽어오는 명령으로서, NFC 디바이스의 S/N(Serial Number)라던가 제조 관련 정보(Manufacturer)라던가, 제조일(Data) 등의 정보를 읽어온다. 여기서는 그 코드 값의 예로 '0x01'을 표현하였다. 'Set Device Status' 명령은 NFC 디바이스의 상태 값(Status Variable)을 설정하는 명령으로서, RF 관련 정보(RF Calibration)이라던가 레지스터(Registers) 정보 등을 설정한다. 여기서는 그 코드 값의 예로 '0x02'를 표현하였다. 'Get Device Status' 명령은 NFC 디바이스의 상태 값(Status Variable)을 읽어오는 명령이며, 그 코드 값으로 '0x03'을 표현하였다. 'Control Device Power' 명령은 NFC 디바이스의 RF 전송 전력을 제어하는 명령이며, 그 코드 값으로 '0x04'를 표현하였다. 'Turn On/Off Device' 명령은 NFC 디바이스의 전기적인 전원을 온 또는 오프시키는 명령이며, 그 코드 값으로 '0x05'를 표현하였다.
'Reset Device' 명령은 NFC 디바이스를 초기화 시키는 명령이며, 그 코드 값으로 '0x06'을 표현하였다. 'Set Device Mode' 명령은 NFC 디바이스 모드를 설정하는 명령으로서, 예를 들면 NFC 디바이스의 관리 모드(Device Management Mode)라던가 피어 모드(Peer Mode)를 설정하며, 그 코드 값으로 '0x07'을 표현하였다. 'Get Device Mode' 명령은 NFC 디바이스의 현재 모드를 읽어오는 명령이며, 그 코드 값으로 '0x08'을 표현하였다.
한편, 명령 메시지에서 벤더에 의해서 정의될 수 있는 명령 코드 영역(Vendor Specific: 0x09-0x0F)을 할당하였으며, 'Reserved Code Area'로 0x10-0x1F를 할당하였다.
도20은 본 발명의 실시예에 따른 응답 메시지 종류의 예를 나타낸 도면이다. 여기서 사용되는 응답 메시지의 종류나 응답을 표현하는 코드 값은 하나의 예에 불과하며, 이에 제한되지 않는다. 'Get Device Information Response'는 'Get Device Information Command'에 대한 응답이며,그 코드 값으로 '0x01'을 표현하였다. 'Get Device Status Response'는 'Get Device Status Command'에 대한 응답이며, 그 코드 값으로 '0x02'를 표현하였다. 그리고 명령을 성공적으로 수행한 경우에는 이를 알리는 응답(Command Successful)을 해당 코드 값(0x03)으로 표현하여 응답한다.
이외에도 여러가지 에러 응답(Error Response)을 수행하는데, 'Get Device Information Command'에 대한 에러 발생시 디바이스 정보 실패(Device Information Fail)를 알리는 응답 메시지를 그 코드 값(0x04)으로 표현하여 응답하고, 'Get Device Status Command'에 대한 에러 발생시 디바이스 상태 실패(Device Status Fial)를 알리는 응답 메시지를 그 코드 값(0x05)을 표현하여 응답하고, 'Control Device Power'에 대한 에러 발생시 디바이스 파워 컨트롤 실패(Device Power Control Fial)를 알리는 응답 메시지를 그 코드 값(0x06)을 표현하여 응답하며, 'Set/Get Device Mode'에 대한 에러 발생시 디바이스 모드 실패(Device Mode Fial)를 알리는 응답 메시지를 그 코드 값(0x07)을 표현하여 응답한다.
도21은 본 발명의 실시예에 따른 명령 및 응답 메시지 종류의 예를 나타낸 도면이다. 여기서 사용되는 명령 및 응답 메시지의 종류나 명령 및 응답을 표현하는 코드 값은 하나의 예에 불과하며, 이에 제한되지 않는다. 여기서 'Deliver'는 LLCP 패킷의 전달 명령(Command that Deliver LLCP Packet)임을 표현하며 코드 값으로 '0x20'을 사용할 수 있다. 'Deliver Response'는 유효한 버퍼 크기 정보를 갖는 명령의 전달을 위한 응답이며 코드 값으로 '0x21'을 사용할 수 있다. 'Data Receive'는 NFC 디바이스로부터 데이터를 읽어오기 위한 명령이며 코드 값으로 '0x22'를 사용할 수 있다. 'Data Receive Response'는 데이터 수신 명령에 대한 응답이며 NFC 디바이스 데이터를 포함하고, 코드 값으로 '0x23'을 사용할 수 있다.
도22는 본 발명의 실시예에 따른 이벤트 메시지 종류의 예를 나타낸 도면이다. 이벤트 메시지는 명령과 응답에 대해서 독립적이며, NFC 디바이스에서 데이터 수신(data reception)이나 중요한 에러(critical error)가 발생하는 경우와 같이 이를 NFC 호스트에 알려야 하는 경우 사용한다. 여기서는 몇 가지의 대표적인 경우에 대해서 표현하고 있는데, 'HCI Bus Driver Fail', 'NFC IC Has Data', 'Buffer Available' 등 3가지 정도의 이벤트 메시지를 표현하고 있다. 각각의 경우마다 해 당 이벤트를 표현하는 코드(0x01, 0x02, 0x03)를 사용하고 있다. HCI 버스 드라이버에 문제가 발생한 경우라던가, NFC 디바이스가 RF 모듈로부터 데이터를 수신한 경우라던가, 버퍼 사이즈의 변경이 일어난 경우 등에 관련된 정보를 제공하는데 사용할 수 있다. 각각의 경우에 대한 설명은 도22에 상세히 기술하였다.
도23은 본 발명의 실시예에 따른 명령 및 응답 메시지에서 디바이스 관리 명령(Device Management Functionality)의 예를 나타낸 도면으로서, 이는 디바이스 관리 카테고리에 해당한다. 'HCI_GET_DEVICE_INFO' 명령은 NFC 디바이스 정보를 읽어오는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 파라미터로서 명령 파라미터 값과 리턴 파라미터 값이 기록된다.
'HCI_TURNON_DEVICE' 명령은 NFC 디바이스의 전원을 온시키는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 파라미터로서 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
다. 'HCI_TURNOFF_DEVICE' 명령은 NFC 디바이스의 전원을 오프시키는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_SLEEP_DEVICE' 명령은 NFC 디바이스를 슬립(sleep) 상태로 이행시키는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_RESUME_DEVICE' 명령은 NFC 디바이스를 슬립 상태에서 웨이크업(wake-up)시키는 명령며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또 는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_START_DEVICE_DISCOVERY' 명령은 NFC 디바이스 디스커버리를 시작하라는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_STOP_DEVICE_DISCOVERY' 명령은 NFC 디바이스 디스커버리를 중단하라는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_RESET_DEVICE' 명령은 NFC 디바이스를 초기화시키는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_FLUSH_DEVICE' 명령은 NFC 디바이스 버퍼를 플러쉬(flush)시키는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_GET_BUFFER_SIZE' 명령은 NFC 디바이스의 버퍼 사이즈를 읽어오는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값과 성공 또는 실패를 표현하며 버퍼의 크기를 표현하는 리턴 파라미터 값이 기록된다.
도24는 본 발명의 실시예에 따른 명령 및 응답 메시지에서 데이터 통신 명령(NFC Data Communication Functionality)의 예를 나타낸 도면으로서, NFC 데이터 통신 카테고리에 해당한다.
'HCI_SEND_DATA' 명령은 NFC 호스트로부터 NFC 디바이스로 LLCP 패킷을 전달 하는 명령이다. 이 명령의 메시지 타입은 명령이며, 해당 명령에 대한 코드 값이 기록되고, LLCP 패킷을 표현하는 명령 파라미터와 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_RECEIVE_DATA' 명령은 NFC 디바이스로부터 NFC 호스트로 LLCP 패킷을 전달하는 명령이다. 이 명령의 메시지 타입은 명령이며, 해당 명령에 대한 코드 값이 기록되고, LLCP 패킷을 표현하는 명령 파라미터와 성공 또는 실패를 표현하는 리턴 파라미터 값이 기록된다.
'HCI_READ_TAG' 명령은 NFC 디바이스의 태그(NFC Forum Tag)로부터 NDEF(NFC Data Exchange Format) 데이터를 읽어오는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값이 기록되며, 성공 또는 실패를 표현하는 리턴 파라미터가 기록된다. 또한, read_data 파라미터(명령 파라미터)가 기록되는데, 이 read_data 파라미터는 NFC forum tag로부터 읽고, 따라서 이 데이터 포맷은 NDEF를 따른다.
'HCI_WRITE_TAG' 명령은 NFC 디바이스의 태그에 NDEF 데이터를 기록하는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값이 기록되며, 성공 또는 실패를 표현하는 리턴 파라미터가 기록된다. 또한, write_data 파라미터(명령 파라미터)가 기록되는데, 이 write_data 파라미터는 태그에 기록될 NDEF 데이터를 포함한다.
'HCI_SET_CARD_DATA' 명령은 카드 에뮬레이션을 위해서 NDEF 데이터를 NDEF 디바이스 카드 메모리에 기록하는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값이 기록되며, 성공 또는 실패를 표현하는 리턴 파라미터가 기록된다. 또한, 명령 파라미터로 card_data 파라미터가 기록되는데, 이 card_data 파라미터는 카드 에뮬레이션 메모리에 저장될 데이터를 표현한다.
'HCI_GET_CARD_DATA' 명령은 NFC 디바이스 카드 메모리에 있는 데이터를 읽어오는 명령이며, 메시지 타입은 명령이고, 해당 명령에 대한 코드 값이 기록되며, 성공 또는 실패를 표현하는 리턴 파라미터가 기록된다. 또한, 여기에도 card_data 파라미터가 기록된다.
앞서, 지금까지 설명한 메시지 포맷에서 실패를 표현하는 파라미터 값은 해당 에러 코드값을 동반할 수도 있다.
도25는 본 발명의 실시예에 따른 명령 및 응답 메시지에서 보안 요소 지원 명령(Secure Element Support Functionality)의 예를 나타낸 도면으로서, 보안 요소(secure element)로부터 데이터를 읽어오는 명령인 'HCI_READ_SECURE', 보안 요소(secure element)에 데이터를 기록하라는 명령인 'HCI_WRITE_SECURE'를 나타내고 있다.
도26은 본 발명의 실시예에 따른 명령 및 응답 메시지에서 에러 메시지(Error Code Message)의 예를 나타낸 도면이다. 여기에 나타낸 에러의 종류와 그 에러를 표현하는 코드 값은 하나의 예에 불과하며, 이에 제한되지 않는다. 본 발명의 실시예에 따른 에러 코드 값과 그 의미를 살펴보면, '0x00'은 에러가 없는 경우이고, '0x01'은 정의되지 않은 명령임을 표현하며, '0x02'는 기기간 접속이 이루어지지 않은 경우를 표현하고, '0x03'은 하드웨어 실패를 표현한다.
그리고, '0x04'는 메모리 풀 상태를 표현하며, '0x05'는 명령 불인정 (command disallowed)을 표현하고, '0x06'는 파라미터 값이 지원되지 않는 경우를 표현하고, '0x07'은 유효하지 않은 명령 파라미터를 표현한다.
그리고, '0x08'은 규정되지 않은 에러를 표현하고, '0x09'는 보안 요소의 액세스가 거부된 것을 표현하고, '0x0A'는 보안 요소의 액세스가 실패한 경우를 표현하며, 나머지 코드 값은 RFU로 두었다.
도27은 본 발명의 실시예에 따른 이벤트 메시지의 예를 나타낸 도면이다. 여기에 나타낸 이벤트 메시지의 종류는 하나의 예에 불과하며, 이에 제한되지 않는다.
'HCI_DETECT_DEVICE'는 디바이스 디스커버리를 하였을 때, 어떤 타입의 디바이스나 태그(Tag)가 어떤 수만큼 검출되었는지를 호스트에 알려주는 이벤트 메시지이며, 메시지 타입은 이벤트이고, 해당 메시지 코드가 기록된다.
'HCI_RECEIVE_DATA_EVENT'는 NFC 디바이스가 에어 인터페이스(air interface)로부터 데이터를 받았을 때 이 데이터를 호스트에 전달해 주는 이벤트 메시지이며, 메시지 타입은 이벤트이고, 해당 메시지 코드가 기록되며, receive_data 파라미터가 리턴 파라미터로 기록된다. receive_data 파라미터는 NFC 프로토콜 프로세싱에 요구되는 NFC forum 태그나 디바이스로부터의 데이터이다.
'HCI_SIZE_OF_COMPLETED_DATA'는 플로우 컨트롤(Flow Control)을 위해서 NFC 디바이스가 NFC 호스트에게 완전히 처리된 데이터의 크기를 알려주는 이벤트 메시지이며, 얼마나 자주 이 이벤트 메시지를 보낼지는 특별히 정하지 않기로 한다. 이 메시지 타입은 이벤트이고, 해당 메시지 코드가 기록되며, data_size 파라미터가 리턴 파라미터로 기록된다. data_size 파라미터는 NFC 디바이스에 의해서 프로세싱 완료된 데이터의 크기를 표현한다.
'HCI_MODE_SWITCH_INTERRUPT'는 모드 스위치(Mode Switch)에서 NFC 태그나 디바이스를 발견했을 때 이를 호스트에 알리는 인터럽트 이벤트이며, 메시지 타입은 이벤트이고, 해당 메시지 코드가 기록되며, devce_type 파라미터가 리턴 파라미터로 기록된다. device_type 파라미터는 NFC 디바이스 또는 카드가 발견되었을 때 이를 표현하는 파라미터로서, 예를 든다면, '0x00'은 ISO14443-A card only, '0x01'은 ISO14443-B card only, '0x02'는 Felica card only, '0x03'은 ISO14443-A and B, '0x04'는 ISO14443-A and Felica, '0x05'는 Felica and ISO14443-B, '0x06'은 ISO14443-A and B and Felica를 표현하고, RFU를 위한 코드 값을 할당한다.
'HCI_SECURE_INSERTED'는 보안 요소가 설치(inserted)되었음을 표현하며, 'HCI_SECURE_EXTRACTED'는 보안 요소가 제거(extracted)되었음을 표현하며, 'HCI_SECURE_READ'는 보안 요소 읽기를 표현하며, 'HCI_SECURE_WRITTEN'은 보안 요소 기록을 표현한다.
지금까지 본 발명의 실시예에 따른 NFC 호스트 컨트롤러 인터페이스에 대해서 설명하였다. 여기서 설명하고 또 도면에 의해서 표현된 호스트 컨트롤러 인터페이스 시스템의 메시지들의 종류나 그 포맷, 코드값들, 그리고 메시지를 전송하는 프로세스는 본 발명의 이해를 돕기 위하여 예로 든 실시예일 뿐이며, 본 발명의 기술사상에 의하여 상기 실시예들을 기반으로 메시지들의 종류나 그 포맷, 코드값들, 메시지를 전송하는 프로세스의 변경이나 변형은 다양하게 구현될 수 있으며, 본 발 명의 실시예에서 사용하였던 용어들 또한 이해를 돕기 위한 것일 뿐, 여기에 사용되는 용어에 의해서 본 발명이 구속되지 않는다.