POD 역시 하나의 메모리라고 기존의 문서들에서 언급했었다. POD 는 호스트(STB) 와 서로 통신을 주고 받기 때문에, 하나의 호스트로 봐도 무방할 정도다. POD 는 초기화 상태에서 부터 특정 주소에 값을 R/W 한다.
가장 먼저, 호스트에서 POD 로 WRITE 하는 것은 COR 이다. CIS 튜플을 읽은 값(0x41) 을 0x70000000 에 쓴다. 이 후에 POD 는 진정한(?) POD 로 거듭난다. 아마도 COR WRITE 엑세스가 뭔가 POD 프로그램의 발동을 거는 역할을 하는가보다.
POD 는 알다시피, EMI BANK3, BANK4 을 사용한다. 각각 Command 채널과 Extended 채널이라고 불린다. COR WRITE 이전까지는 Command 채널만 사용한다.
일단 COR WRITE 를 거치고 나면, Command 채널과 Extended 채널을 둘 다 사용한다. 이 후부터는 각각의 채널의 레지스터를 R/W 함으로써 통신한다.
혼동될 수 있으니, 확실히 기억하고 있도록 한다.
CE1(Command Channel) | CE2(Extended Channel) | ||
Data 레지스터 | 0x70000000 | 0x7f000000 | |
Control/Status 레지스터 | 0x70000001 | 0x7f000001 | |
Size 레지스터(LS) | 0x70000002 | 0x7f000002 | |
Size 레지스터(MS) | 0x70000003 | 0x7f000003 |
위의 표를 보면 알겠지만, 각각의 채널마다 레지스터들이 포진되어 있다. 이 각각의 레지스터는 성격에 따라서 POD 와 HOST 간의 통신시에 사용된다.
이제부터는 각각의 레지스터에 대해서 알아보도록 한다.
실질적인 데이터를 읽고, 쓰는 레지스터이다. 주로 buffernego 와 link layer 에서 사용된다.
buffernego 시에 사용된다. 주로 reset 이나, buffer size 세팅시 사용된다.
DAIE | pod 가 da 에 대한 interrup 가 가능하도록 허용하는 bit |
FRIE | pod 가 fa 에 대한 interrup 가 가능하도록 허용하는 bit |
R | 관련없음 |
R | 관련없음 |
RS | interface reset |
SR | module 의 최대허용 buffer size 를 request |
SW | host 와 module 사이에 사용하기로 약속한 buffer size 전송시 |
HC | data write sequence 를 시작할 때 set |
POD 의 상태를 체크하는 레지스터로서, buffernego 시에 사용된다.
DA | module 이 보낼 data 를 가지고 있을 때 set |
FR | reset 후 또는 module 이 data 를 받을 준비가 되었을 때 set |
R | 관련없음 |
IIR | data channel 과 extended channel 의 재 초기화를 요구할때 |
R | 관련없음 |
R | 관련없음 |
WE | 정상적으로 data 를 read / write 하고 있을 때 set |
RE | 관련없음 |
데이터 사이즈를 세팅할 때, 건드리는 레지스터로서, buffernego 와 link layer 에서 사용된다.