들어가기 전에
업무상 필요해서 CEC에 대한 매뉴얼을 그대로 번역하고자 했지만 CEC의 구조가 부족한 하드웨어 리소스에 비해 많은 일을 하려다 보니 기능에 대한 서술이 간단 명료 하지 않고 복잡해서 짧은 영어로는 독해하는데 다소 문제가 있어 보이고 귀차니즘이 마구 용솟음쳐서 적당히 1차는 마무리 합니다. 행여 이 문서를 보시는 분은 대충 챙겨서 읽으시기를 바랍니다.
이 카테고리 내용은 누가 봐주길 바래서 쓴 내용이 아니고 일하다가 제가 필요하고 잊어 버리지 않기 위해 쓴 내용이므로 적당히 참조만 하시길....
또한 CEC spec의 모두들 여기다 적어 놓은것이 아니기 때문에 더 필요하신 분은 hdmi1.3 spec sheet의 170 page부터 읽어 보시길 바랍니다.
차후 틀린 부분에 대해서는 보완을 해갈 예정입니다.
여기에 제시하는 모든그림의 출처는 High-Definition Multimedia Interface Specification Version 1.3 입니다
한눈에 보는 CEC연결도
출처>http://www.hdmi.org/pdf/whitepaper/DesigningCECintoYourNextHDMIProduct.pdf
1. CEC란
- 유저 환경에서 다양한 오디오 비디오 제품 사이에서 고 수준의 제어 기능을 제공하기위한 protocol이다.
1.1 End-Users Features
- One touch play : button하나로 device가 play되고 active source가 되게 한다
- System standby : button하나로 모든 device들이 standby 가 되도록 할 수 있다.
- One Touch Record :What you see is What you Record(WYSIWYR)기능 제공. TV screen에 보여 지는 게 무엇이든 간에 선택된 recording device에 record된다는 의미
- Deck control : play, fast forward, etc ..
- Tuner control :
- Device Menu Control
- Remote control Pass Through
1.2 Supporting Features
- Device OSD Name Transfer : device들의 OSD Name을 TV로 upload할 수 있다. 그때 TV는 이 Name을 그 Device와 관련 있는 Menu에 사용할 수 있다.
- Device Power Status :Device의 현재 power status를 알아볼 수 있다.
- OSD Display : 하나의 device가 TV의 OSD를 사용하고자 한다면 text string을 display할 수 있다.
- Routing Control : 새로운 source device의 streaming에 대한 CEC control switch를 허용한다
- System Information : device의 address와 language를 결정하기 위해 system을 조회한다
- Vendor Specific commands : 해당 vendor device간의 vendor가 정의한 command set을 허용한다.
2. Signaling and Bit Timings
CEC line에 대한 모든 interaction은 하나의 initiator와 한 개 이상의 followers로 구성되어 있다 initiator는 message structure와 data를 전송하는 역할을 하고 followers는 data를 수신하고 acknowledge bit를 설정하는 역할을 한다.
2.1 CEC line의 사용.
하나의 message는 하나의 single frame으로 control signal line을 통해 전달된다. 여기서 하나의 frame이란 start bit와 그 뒤를 따르는 여러 개의 data bit로 구성된다.
Initiator는 첫번째로 사용할 signal line이 free인지 검사해야 한다. CEC line에서 high에서 low로 transition이 발생한 후 그 뒤로 data가 따른다.
Initiator는 bit time과 bit leading edge를 제공한다. 오직 하나의 initiator만이 동시에(언제나) 허용된다. Control line의 arbitration mechanism은 동시에 하나이상의 initiator가 송신을 시작했을 시 충돌을 피하게 해준다.
2.2 Bit Timing
2.2.1 start bit timing
2.2.2 Data Bit Timing
start bit이후의 모든 data bit들은 일관된 timing을 갖고 있다. 하지만 두 가지 bit type이 있는데 initiator asserted bit와 follower asserted bit이다 acknowledge bit를 제외한 모든 bit들은 initiator에 의해 assert된다. 위 그림도 initiator에 의해 assert된 logical 0과 1이다.
1 bit전송이 끝나고 다음 bit가 있으면 high에서 low로 transition이 발생하고 다음 bit없으면 high를 유지 한다.
위 그림은 acknowledge에 대한 파형이다. Initiator 는 0.6 mec 에서 active high(high impedance)상태가 되고 만약 follow가 있다면 follower가 low상태를 1.5 msec까지 유지 한다. initiator는 위 그림의 safe sample상태에서 CEC line을 읽어서 low면 follower의 acknowledge가 있음을 인지 한다.
3. Frame Description
3.1 Header/Data Block description
3.1.1 EOM(End of Message)
0 : 하나 이상 data block이 따라옴
1 : data전송 끝
3.1.2 ACK(Acknowledge)
Ack bit는 follower들이 data 혹은 head block에 대한 acknowledge를 하기 위해 사용된다.
Initiator에서의 이 bit는 항상 1 이다. 이 ack신호는 두 가지 중의 한 mode로 사용된다.
Follower는 destination addr에 자신은 addr가 있으면 0 으로 Ack
다른 device들은 1 로 ack.
Broadcast message는 위와는 반대로 message를 reject하지 않는다면 1 이고 0 인경우는 하나 이상의 device가 reject했다는 것을 의미.
3.1.3 Header Block Detail
- initiator와 Destination의 logical address는 아래 Table5와 같다.
- Destination field가 (0b1111)이면 broadcast message로 사용됨을 의미.
- header block에서 EOM bit를 1로 set한 메시지는 다른 device가 active되어
있는가를 확인하는 ‘ping’으로 사용 될 수 있다
4. Reliable Communication Mechanisms
4.1 Frame 재전송
- directly addressed message에 대해 acknowledge가 없을 때..
- broadcast message에 대해 low acknowledge가 왔을 때
- initiator가 CEC line에서 high impedance전송중에 low impedance를 detect했을때
재전송은 최소 한번은 해야 하고 5번까지 시도 할 수 있고 재시도는 signal free time이 지난 후에 시도한다
4.2 Flow Control
flow control을 제공하기 위해 현재 process를 unable하려면 data나 header block의
acknowledge를 0 으로 할 수 있다. 이것은 initiator에 대한 재전송을 시도 하게끔 할것이다.
4.3 Frame Validation
follower는 operand의 수가 그 opcode에서 지정한수보다 적으면 frame을 무시한다.
4.4 CEC line Error Handling
- error는 falling edge사이에 minimum data bit period보다 작으면 알수 있다. Start bit는 제외
- follower의 신호가 정상 low bit period보다 1.4~1.6배 크면 error임을 알 수 있다. Error를 인식하면 original initiator는 현재 frame의 전송을 중단하고 재시도 한다
5. CEC Arbitration
5.1. Signal Free Time : 위의 CEC Table 4
5.2. Message Time Constraints :application level에서 준수 해야 하는 메시지에 대한
시간 제약을 말한다. Desired maximum 응답 시간은 200msec 이고 required
maximum 응답시간은 1sec
6. Device Connectivity and Addressing
6.1 physical address 검출 알고리즘
이 알고리즘은 HPD가 de-asserted되거나 혹은 power-up될 때마다 각device의
physical address를 할당하는데 사용된다.
if 내가 CEC root라면
나의 CEC address는 0.0.0.0
else 내가 CEC root가 아니라면
Sink로부터 HPD를 기다린다
Sink로부터 연결에 대한 나의 physical address를 얻어온다. 4,5번째 byte
(http://blog.daum.net/climb95/5309567 )
HPD가 제거 될 때까지 physical address는 유지된다.
endif
if 만약 내게(device) Source들이 연결되어 있다면
모든 가능한 연결에 대해 1 부터 input 만큼 label을 한다.
if Device가 각각의 source connection에 대해 분리된 EDID를 가지고 있다면
if 만약 my address가 0 이 존재한다면
각 source의 physical address를 my address의 첫번째 0 이 존재하는
위치에 label값을 대치하여 기록한다.
else 만약 my address가 0 이 없다면
각 source의 physical address를 F.F.F.F로 설정한다.
endif
else Device가 각각의 source connection에 대해 분리된 EDID를 가지고
있지 않다면
Source의 physical address는 my_address로 설정
endif
EDID의 VSDB영역에 위에서 계산한 source_physical_address를 write
endif
Source device에 대한 HPD를 assert하여 EDID를 읽어 가게 끔 한다.
새로운 physical address를 발견할때마다(F.F.F.F는제외) CEC device는
- logical address를 할당한다.
- Broadcasting<Report Physical address>으로 logical address와 physical address사이의 관계를 공표한다.
6.2. Logical Addressing
control signal line에 보이는 각각의 device는 하나의 유일한 logical address를 갖고 있다.
이 address는 유일한 인식자가 될 뿐 아니라 device type을 정의한다.
6.2.1 Logical Address 할당
유효한 physical address(F.F.F.F제외)를 갖고 있을 때 만 logical address를 할당할 수 있다. 그외 다른 경우는 Unregistered(15)를 할당한다.
Physical address 0.0.0.0 만이 logical address TV(0)이 될수 있다. TV가 0.0.0.0이 아닌 다른 physical address를 갖고 있을때는 Free Use(14)가 될수 있다. Free Use(14)가 이미 할당 되어 있으면 Unregistered(15)를 할당한다.
주어진 device type에 대해 하나 이상의 가능한 logical address(e,g STB1,STB2..)가 있다면 address 할당 절차는 새로 연결된 device에 의해 수행된다. Device는 첫번째 할당된 address를 취한 후 그 address(STB1->STB1)로써 polling message를 보낸다. 만약 polling 메시지에 대해 응답이 없으면(no ack) 절차를 멈추고 해당 address를 유지한다.
첫번째 address(STB1)에 대해 acknowledge가 있으면 다음 address(STB2)를 취한 후 이전절차를 반복한 후 acknowledge가 없으면 해당 address를 유지한다. Type지정이 끝날 때까지 이 절차는 반복된다.
Device는 disconnect되거나 switch off되면 logical address를 잃는다. 하지만 이전 address를 기억해 두었다가 재연결이 되었을 때 이전 address로 polling절차를 수행하여 logical address를 얻는다. Unregistered address를 얻기 전에 허용 가능한 logical address를 얻는 sequence를 반복한다. 예를 들어 이전에 STB2였다면 STB2,STB3,STB1, Unregistered순으로 address를 얻고자 한다.
만약 device가 physical address를 잃는다면(예: unplug) 그때에 logical address는
Unregistered(15)를 할당
7. Switch Requirement
7.1 CEC Switch
CEC switch는 switch이하의 모든 connection에 대해서 유일한 child_address를 할당한다.
이것은 switch에 연결된 모든 device가 항상 유효한 physical address를 갖고 있음을 의미한다. 그러므로 switch이후에 모든 device는 logical address를 취할 수 있고 정상적인 방법으로 CEC message에 반응 할 수 있다.
CEC complaints switch들에 대해, <Active Source>와 <Set Stream Path> message에 반응하기 위한 요구사항이 있다. 이러한 두 가지 메시지는 switch가 CEC 메시지에 나타난 physical AV stream에 따라 연결된 소스 디바이스를 바꾸도록 요구한다. 이러한 메커니즘은 소스 디바이스가 TV에 대해 주어진 디바이스로부터 출력을 받도록 하거나 출력을 display하는 것을 보증하기 위한 자신과 TV사이의 switch들을 configure하는 것을 허용한다. à 무지 어렵네;;
CEC complaints switch는 logical address가 필요 없는 유일한 switch이고 통신 시 unregistered address를 사용한다.
유저가 CEC switch를 매뉴얼로 바꾸는 게 가능하다. 예를 들어 CEC switch는 change에 대해 다른 device에게 <Routing Change>라는 메시지 정보를 보내야 한다.
7.2 Non-CEC Switch
non-CEC switch는 두 가지 형태가 있는데 하나는 모든 소스에 대해 오직하나의 EDID만 가지고 있는 경우와 또 다른 하나는 모든 소스에 대해 별도의 EDID를 갖고 있는 경우이다.
이두가지에 대한 운용은 차이가 있다.
7.2.1 Switches with one EDID
하나의 non-CEC compliant switch는 하나의 child_address를 갖고 있고 그것은 항상 현재 Switched device에게 선점 당하고 있다. 그 외 다른 모든 연결된 device들은 hot plug signal을 갖고 있지 않고 그러므로 physical address가 할당되지 않을 것이다. (즉 unregistered logical address로만 사용가능). 하지만 이러한 device는 여전히 CEC line에 연결되어 있으므로 CEC 메시지를 볼 수 있고 몇몇 broadcast명령에 정상적으로 반응할 수 있다.
위 그림은 switch가 select되거나 de-select되었을 때 state를 보여준다.
7.2.2. Switches with Multiple EDIDs
이것은 message를 전송하지 않는다는 것만 제외하고 CEC switch처럼 동작한다.
8. High Level Protocol
8.1. Source Declaration
하나의 device가 하나의 source가 되기 전에 <Active Source>메시지 보내야 한다.
8.2. Protocol General Rule
- direct로 address 될 때만 유효하도록 정의된 메시지는 broadcast메시지로서 받게 되면 무시 해야 한다. 반면 broadcast로 받을 때 만 유효한 메시지는 direct로 받으면 무시한다.
- 1 byte보다 큰 수의 메시지는 big endian 으로 전송된다.
- 모든 bit는 MSB first이다.
- Follower는 0~14사이의 모든 유효한 logical address를 가진 메시지에 응답 해야 한다.
- Follower는 logical address 15(unregistered)의 메시지는 다음과 같은 경우 아니면 무시 한다.
l broadcast응답을 호출할 경우(예:<Get Menu Language>)
l CEC switch에 의해 보내지는 메시지( <Routing Change> or <Routing Information>)
l 메시지가 <standby>일 때
8.3 Feature Abort
모든 device들은 < Feature Abort> 메시지를 지원 해야 한다.
이것은 device가
l device에게 보내어지는 opcode를 지원 하지 않거나
l 현재 상태에서 메시지를 다룰 수 없거나
l high-level protocol layer에서 전송되는 frame이 어떤 문제가 있거나 할 때
이를 나타내기 위해 사용된다.
Feature Abort는 두 가지 parameter가 있는데 opcode와 frame거절 이유를 담고 있다.
Follower에 의한 잘못된 메시지에 대한 응답은 direct와 broadcast 메시지에 따라 다르다
Broadcast 메시지에 대해서는
l 지원하지 않는 broadcast 메시지를 받은 follower는 받은 메시지를 무시하고 <Feature Abort>를 보내지 않는다.
Direct 메시지에 대해서는
l 모든 실패에 대한 응답으로 <Feature Abort>를 사용한다.
Initiator가 <Feature Abort>를 받은 후 재전송 하려면 200msec기다린 후 전송한다. <Feature Abort>는 test시 <Abort>메시지에 대한 응답으로 사용된다.
8.4. Abort
<Abort> 메시지는 CEC switch를 제외한 모든 device들이 follower로서 동작 시 적용 될수 있고 test시에만 사용된다. 지정된 device에 direct로 address될 수 있고 <Feature Abort>로 응답한다. 예를 들어 유효한[Abort Reason] operand가 return될 수 있다.
l broadcast로 <Abort>메시지가 오면 무시한다
9. CEC Features Description
9.1. one Touch Play
이 기능에는 <Active Source>,<Image View on>,<Text View on> 메시지가 사용된다.
device는 TV로 screen상에 자신의 출력을 보여 주기 위해 <image View on>전송한다. 만약 Text Display상태(예:Teletext)이면 image display상태로 전환 한다. 만약 메뉴를 보여주고 있으면 현상태 유지.
TV가 non-hdmi입력이나 내부Tuner 혹은 scart로 입력이 되어 있다면 이 경우 TV는 <Active Source>메시지를 address 0.0.0.0과 함께 broadcast한다.
하나의 소스가 <Image View on>혹은<Text View on> 중의 하나는 반드시 적용해야 한다.
9.2 Routing Control
9.2.1. Messages
<Active Source>, <Request Active Source>, <Set Stream Path>, <Routing Change>, <Routing Information>가 사용된다.
9.2.2. Feature Description
CEC switch들을 제어함으로써 HDMI network routing을 이룰 수 있다. 일반적으로 하나의 device는 TV로 stream을 보낼 때 마다 <Active Source>메시지를 보내야 한다.
<Active Source>메시지를 받았을 때 그 device와 TV사이에 있는 CEC switch들은 (필요하다면)standby에서 깨어나고 active path상에 지정된 physical address로 그device를 안전하게 switch한다.
만약 device가 active source라면 <Active Source>메시지를 받게 되면 active source지위를 잃어 버린다. 예를 들어 그것이 playing media라면 pause가 될 것 이다.
하나의 device가 standby 나 off 상태에서 나올 때 어떤 device가 현재 active device로 동작하고 있는지를 알기 위해 broadcast 메시지인 <Request Active Source>를 보낼 수 있다. <Request Active Source>를 받았을 때 active source는 <Active Source>를 broadcasting함으로써 응답해야 한다. 이것의 예로는 Source가 깨어난 후에 TV가 standby에서 빠져 나오는 경우 이다.
사용자는 TV의 user interface를 보고자 device를 선택할 수 있다. 현재 active source가 TV로 보내는 <Active Source>메시지와는 달리 <Set Stream Path>는 TV가 source device로 보내는데 그것은 <Active Source>메시지를 이용해 path를 broadcast할 것을 요구하기 위한 것이다. 이 경우 TV는 device의 physical address를 포함한 <Set Stream Path>메시지를 broadcast 해야 한다. 하나의 parameter로서 display하고자..
TV와 device사이에 있는 모든 CEC switch들은 active AV path상에 존재하는 해당 device들을 확실하게 switch해야 한다. 이러한 기능은 network상에 있는 non-cec-compliant device들에 대해서도 switch 되도록 보증한다.(예를 들어 TV menu에서 매뉴얼로 setup되었다면). <Set Stream Path>에 의해 지정된 위치에 있는 하나의 device는 <Active Source>메시지를 broadcast해야 하고 stream출력을 시작 한다.
Note> TV가 내부 Tuner나 기타 다른 non-hdmi 소스(scart,Y/C …)로 switch할 시에는 TV는 0.0.0.0 을 가진 <Active Source>를 broadcast한다.
사용자가 매뉴얼로 CEC switch를 바꿀 경우 <Routing Change>메시지를 broadcast해야 한다. 이것은 네트웍상의 모든 device들에게 현재 active route가 바뀌었다고 정보를 주는 것이다. 이것이 enable되면, deselect된 device가 play중이라면 pause가 될 것이다.
만약 <Routing Change>메시지에 의해 지정된 새로운 위치에 CEC switch가 위치해 있다면 CEC switch는 자신의 active path의 physical address와 함께 <Routing Information>을 broadcast해야 한다.
해당 address의 CEC switch가 <Routing Information>메시지를 받으면 그때 그 CEC switch는 자신의 active path를 포함한 <Routing Information>을 broadcast 해야 한다.
이런 식으로 TV는 switch가 발생한 후의 현재 active path를 알 수 있다.
TV는 active source device가 switch를 바꿈으로써 de-select된 것을 검출했다면 그것은 아마 내부 digital service로 바꾸었거나 <Set Stream Path>를 전송해 새로운 active source를 찾을 것이다.
TV는 <Routing Change>나<Routing Information>메시지가 반응 하기 전에 최소 7 nominal data bit를 기다린다.
9.3. System Standby
여기에 필요한 메시지는 <Standby>
recording device에 대한 주의 사항이 있는데 … skip
9.4. one Touch Record
여기에 필요한 메시지는 <Record Off>,<Record on>,<Record Status>,<Record TV Screen>
9.5. System Information.
여기에 필요한 메시지는 <Get Menu Language>, <Give Physical Address>, <Polling Message>, <Report Physical Address>, <Set Menu Language>.이다.
l 이 기능은 device들이 자동적으로 TV와 같은 language를 설정하기 위함이다.
l TV상의 메뉴 언어를 바꾸고자 할 때는 <Set Menu Language>를 보낸다.
9.6. Deck Control
사용되는 메시지는 <Deck Status>, <Give Deck Status>, <Deck Control>, <Play>
9.7. Tuner Control
<Give Tuner Device Status>, <Select Digital Service>. <Tuner Step Decrement>, <Tuner Step Increment>,<Tuner Device Status> 가 사용된다.
이것은 하나의device(예:TV)가 다른 CEC tuner device를 제어하기 위함.
9.8 Vendor Specific Command
<Device Vendor ID>, <Give Device Vendor ID>, <Vendor Command>, <Vendor Remote Button Down>,<Vendor Remote Button Up>가 사용된다.
Single Vendor device들이 통신하기 위해 vendor가 지정한 command들을 말한다.
9.9. OSD Status Display
9.10. Device OSD Name Transfer
9.11. Device Menu Control.
9.12. Remote Control Pass Through
9.13. Give Device Power Status
추가로 마이크로 프로세서에서 GPIO를 통해 CEC 읽어들이는 코드 첨부합니다.
compare timer 써서 150us마다 call 해주면 됩니다. 그냥 참조하세요
'먹고살기 > -- HDMI' 카테고리의 다른 글
hdmi로 3D 즐기기(2010/3/5) (0) | 2010.03.05 |
---|---|
HDCP Authentication State Diagram (0) | 2009.08.20 |
HDMI 1.3a 와 HDMI 1.3b의 차이점 (0) | 2008.11.11 |
Dolby TureHD,MAT encoding/decoding (0) | 2008.01.23 |
Dolby TrueHD 송수신을 위한 조건 (0) | 2008.01.22 |