POD 가 어떻게 동작하는지에 관한 대략적인 설명을 정리한 것이다.
POD 삽입부터 Personaliy Change 전까지
STB 의 PCMCIA 슬롯에 POD 를 꼽으면 가장 먼저 하는 것이 꽂혀졌다는 것을 알리는 것이다. 가장 많이 사용하는 방법으로 폴링방식과 인터럽트 방식이 있다.
나의 경우 폴링 방식으로 체크를 했었다.
POD 가 꼽히면, 슬롯에 연결된 PIO 핀에 의해 PCMCIA 카드가 들어왔다는 것을 인식한다. 여기서는 총 3개의 태스크가 서로 실행된다.
VS1 Check 와 Reset 후에 Ready 신호를 통해 정상적인 POD 카드인지를 하드웨어적으로 판단한다. 만일 이때, 앞에서의 검사를 통과하지 못한다면 오류를 발생한다.
그 후에 POD 의 Attribute Memory 상태에서 Cis Read 를 한다. 각각의 튜플들이 POD 의 표준에 맞는지 여부를 통해 다시한번 POD 인지 여부를 판단한다.
이때 특정 튜플을 통해 현재 꼽혀진 POD 의 정보를 알 수 있다.(전압 3.3v, 5v, 제조사)
Personaliy Change 부터 Buffernego 까지
Cis 튜플 검사가 끝나면, COR Write 를 통해 POD 를 IO 모드로 변경한다. 또한 STB 도 Personality Change 를 통해 POD 대응모드로 변경한다.
이때부터 IORD, IOWR 신호가 사용된다. (TS 경로를 변경한다.)
POD 와 STB 간의 통신을 위한 사전 작업인 Buffernego 를 한다. 여기서는 서로간의 통신 버퍼 크기 조정과 통신통로인 Command 채널(명령)과 Extended 채널(Headend 와의 통신)을 초기화 한다.
각 Layer 초기화
Buffernego 가 끝나면, 각 통신 Layer 들이 초기화 된다.
Link, Session, Resource, Application Layer 가 초기화 된다. POD 와 STB 가 통신할 때는 각 Layer 를 거치게 된다.
각 레이어를 거칠 때마다, 특정 값들이 헤더에 붙거나, 파싱된다.
Link | POD 로 보내려는 또는 받으려는 데이터의 크기가 앞에서 약속한 크기보다 큰지 작은지 판단해서, 분할하는 일을 한다. 이 때, 만일 분할하면, 분할된 데이터라는 bit 를 설정하여 보낸다. |
Transport | 링크 계층과 세션 계층 사이에 존재하는 계층, 각각의 POD 에 대응하도록 transport ID 를 부여해서 자신에게 전달된 데이터인지 구별하여 진로를 결정한다. 최소 300MS 마다 polling message 를 통해 pod 와 host 가 서로 죽었는지 살았는지 확인한다. |
Session | resource 사용에 대한 허가 및 중개 역할을 한다. 트랜스포트 계층과 마찬가지로 여러가지 오브젝트를 제공한다. |
Resource | 리소스 계층은 유사한 목적을 위한 object 집합이며 또 그 사용법에 대한 프로토콜을 말한다. 호스트는 opencable 에서 규정한 기본적인 function set(resource) 을 반드시 가지고 있어야 하며 POD는 host 가 보유한 resource 의 종류를 미리 알고 필요에 따라 그사용을 요청한다. 각 resource 는 resource id 로 구분된다. session layer 로 부터 받은 data 는 byte 단위의 array 이다. 이 array byte 데이터를 규격에서 제시한 resource object 의 데이터 구조로 바꿔서 application layer 로 보내는 역할이다. |
Application | Resource Manager, MMI, Application Info, Conditional Access Support, Copy Protection, Host Control 등이 있다. |