POD란?
각 제조회사들마다 다른 CA(Conditional Access → 사용허가권한)와 Security function 을 지원하는 PCMCIA 형태의 module. 쉽게 말해서, 사람들이 허용되지 않은 채널을 볼 수 없게 하거나, 불법적인 도청 막고 또는 인터넷을 사용하게끔 해주는 PCMCIA 형태의 모듈 혹은 장치라고 생각하면 된다.
POD 인터페이스
OpenCable STB(또는 Host)가 POD와 결합할 때, POD와 Host 사이에는 3개의 채널이 형성된다. 이는 MPEG transport stream을 전송하는 MPEG Transport Stream Chnnel, 둘 사이에 command를 주고받기위한 Data Chnnel 및 SI(사업자) data 와 같은 OOB(out of chnnel)를 통해 받은 데이터를 Host로 전송하기 위한 Extended Chnnel 이다.
Transport Stream Interface
Demodulation(복조) 칩에서 받은 MPEG transport stream 을 POD로 보내고, POD 내에서 CAS(conditional access) 와 CP(Copy protection:불법 복사방지) processing 을 한 MPEG transport stream 을 Host로 다시 보내는 채널을 'MPEG transport stream 채널' 이라고 한다.
MPEG transport stream 채널은 상위 layer 에 대해서는 MPEG 규격(ISO13818)을 사용함으로서 시스템에서는 단지 physical layer 만 구성하면 된다.
POD에서 Host로 stream 데이터를 보내는 bus 중에 clock은 어드레스 bus와 공용으로 사용하기 때문에 mux 또는 tri-state buffer 를 사용하여 설계해야 한다.
다음은 Transport Stream Interface Layer 의 계층구조이다.
Uppper layer |
Transport layer |
PC Card Link layer |
PC Card Physical layer |
Data Channel Interface
POD와 Host간에 규격에서 정의한 layer object를 주고 받기 위한 채널로 6개의 layer로 구성되어 있다. 각각의 layer는 task로 구성되어 있으며, task 간에는 message queue 를 사용하여 통신한다. 다음은 data 채널의 계층구조이다.
Application layer |
Resource layer |
Session layer |
Transport layer |
PC Card Link layer |
PC Card Physical layer |
Extended Channel Interface
POD와 Headend는 OOB 라는 채널을 이용하여 통신을 하는데, 이때 POD가 headend에서 받은 데이터중에서 host로 보내야 하는 데이터를 받을 경우 , Extended channel을 통해서 Host로 전달한다. 반면에 host의 데이터가 hedaend로 전송될 필요가 있을 경우에도 이 채널을 사용하여 POD로 데이터를 보낸다.
이와 같이 Extended Channel은 상호 communication 보다는 data 전달을 주목적으로하는 data channel의 보조적인 channel 이다. 또한 Extended channel로 전달되는 data format은 application 마다 다를수 있으며 이는 data channel interface를 통해 미리 상호간에 define 되어야 한다.
Extended channel은 physical 적으로는 data channel 과 동일한 interface를 사용한다. 다만 chip select pin(CE1,CE2)를 사용하여 channel 을 구분한다.
Attribute Memory Interface
PCMCIA 형태를 가진 모든 card는 card interface를 가지고 있는 긱에 삽입되었을 경우, 기기는 그 card의 종류와는 상관없이 모두 하나의 memory로 생각하고 access 한다. memory에서 읽은 데이터를 기반으로 그 card가 어떤 용도의 card인지를 구별할 수 있는데, 그 때문에 이를 attribute memory 라고 한다. POD도 마찬가지로 Host에 의해 처음에는 memory로 인식되어, card의 identification 및 configuration 을 결정하게 된다. 이러한 과정을 수행하기 위하여 Host는 attribute memory interface 를 제공해야 한다.
Physical Layer
Physical layer 는 POD와 STB 사이에 data를 주고받기 위한 인터페이스, 삽입된 POD의 identification, POD power management, personality change, POD initialization, buffer negotiation 등을 수행한다.
Command 채널을 위한 POD와 STB사이의 interface 는 PC Card Standard Volume 2 를 따르며, OpenCable STB에서 사용하고 있는 CXD1959 에서 그 스펙을 지원하고 있다.
STB가 POD 삽입여부를 알기위한 수단으로, interface pin 중에서 CD1 과 CD2 를 사용하게 되는, POD 삽입시 이 두 pin 이 low로 전환되고, 이때 POD interface chip에서는 interrupt를 발생시킨다. interrupt handler 는 CImain이라는 task에 message를 보냄으로써, POD의 삽입을 알린다. Message queue를 기다리고 있는 Cimain task는 POD의 삽입과 제거에 따라 start_ci()/close_ci() 함수를 호출하고, 다시 interrupt handler의 message를 기다린다.
다음은 start_ci()에서 수행하는 부속루틴에 대한 간단한 설명이다.
- POD 삽입시 초기 동작으로 STB는 POD를 reset 시키고, POD자체의 초기화 작업이 종료되었는지를 관찰하기 위하여 ready signal을 검사한다. ready signal이 발생하면,
- 물리적으로 연결된 interface를 이용하여, STB는 POD의 attribute memory를 읽어 POD identification을 수행하게 되는데, 그 과정은 삽입된 카드의 attribute memory를 읽어 PC Card Standard Volume 4를 기준으로 해석하여, 그 카드가 POD 스펙을 만족시키는지를 확인하는 것이다.
- Tuple 중에는 POD power 와 관련된 tuple도 있어, 그 tuple에서 제시한 power management 를 STB에서 수행해주어야 한다. POD power management chip 으로 MIC2650 을 사용한다. 이 칩은 입력을 3.3V , 5V 받고, control에 따라 3.3V, 5V 혹은 두 전압의 출력이 가능하다. POD는 3.3V only 혹은 3.3V & 5V 을 요구 할 수 있다.
- POD identification 이 정상적으로 수행이 되면, STB는 STB 자신을 OpenCable 대응모드(MPEG transport stream을 POD 경로로 변경, OOB pass open 및 address line close)로 전환하는 동시에 POD도 attribute memory 에서 I/O mode로 전환하도록 명령한다.(Personality Change)
- Personality Change 를 끝낸 STB와 POD는 상호간에 data를 주고받을 공간의 크기를 공유하기위하여 buffer negotiation 이라는 일련의 작업을 하게 된다. buffer의 크기의 data 교환시 overflow를 방지하기 위하여 쌍방간에 제시한 buffer 크기 중에서 작은 것을 buffer 크기로 결정한다. buffer negotiation 은 command 채널뿐만아니라 extended channel 에 대해서도 행해진다.
- Buffer negotiation 이 끝나면, command 채널의 각 layer 를 형성하기 위하여 각 layer에 해당하는 task들을 생성시킨다. 각각의 task들은 message queue 을 이용하여 상호간의 data를 주고 받을 수 있으며, POD가 제거될 경우, OS와 관련된 모든 자원을 반납하고, layer 관련 모든 task가 소멸하게 된다.