CFSection9's Studio.

CEC(Consumer Electronics Control)

字数统计: 2.1k阅读时长: 9 min
2018/10/21 Share

CEC是提供给用户的一种用于各种视听设备之间的高级控制功能协议,条件是视听设备必须有HDMI信号接口,消费电子控制,也就是设备之间的通信协议.

词汇表

Broadcast Message:送到logcal address 15,所有device都可以收到
Clear: 设为empty/undenfined state, physical address则为F.F.F.F,logical address为15
Destination: 收cec message的device
Follower: 收到cec message且需做response
Initiator: 送cec message且等待response
Source Device: 正在提供av streaming的device

CEC基本概念

CEC命令的结构

Start + Header block(谁发给谁的)+Opcode(命令是什么)+Operand(带了什么参数)

Block Name Description Value
Start Special Start ‘bit’ N/A
Header (谁发给谁的) Source/Destination Logical address 见Logical Addresses
opcode (命令是什么) 命令的操作码(可选) 见Message Descriptions
operand (带了什么参数) 命令的操作码的参数(可选) 见Operand Descriptions

Start

Start Bit Timing
Data Timing

logical 0
logical 1

Header Block

Header Block Details
Header[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
3 2 1 0 3 2 1 0 - -
Initiator[0] I[1] I[2] I[3] Destination[0] D[1] D[2] D[3] EOM ACK
  • Initiator Logical address:该字段由4 Bit组成,位于Header Block的0-3 Bit,用于标识当前帧的发起方的逻辑地址字段.
  • Destination Logical address:该字段由4 Bit组成,位于Header Block的4-7 Bit,用于标识当前帧的目的地的地逻辑地址字段.
  • End Of Message(EOM):该字段在每个10bit的block里面都会存在,代表结束位.当EOM为1的时候代表这个Frame结束.而位于Header Block的Bit 8的EOM为1的时候,代表ping某个device,即”polling message”.
  • Acknowledge(ACK):该字段位于Header Block的Bit 9,TV利用枚举的方式,向所有LA送 Null cmd, 当某个LA存在时,它会将 ACK bit set to 0, chip有reg去获得这个ACK, 当收到 ACK 为 0 时, 就验证了此 Device 的存在.而如果是broadcast的msg,其他device不要把ACK置0,不然Initiator会认为msg被reject了.

比如, TV发”Polling Message”给Tuner 2的Header Block Frame如下(ACK的置取决于对Tuner2):

Header[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
0 0 0 0 0 1 1 0 1 -
Initiator[0] I[1] I[2] I[3] Destination[0] D[1] D[2] D[3] EOM ACK
Physical Address(PA)

在一个固定的 CEC 网络中,每一台 CEC device 的唯一标识,它是 device 通过 DDC 读 EDID 得到的,由 2个byte 组成。

PhysicallAddress Device
0.0.0.0(0x00) TV
  • 物理地址的分配(Physical Address Allocation)
    HDMI SPEC提供的伪代码
    The following algorithm is used to allocate the physical address of each device whenever HPD is
    de-asserted or upon power-up:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Disable assertion of HPD to all source devices
    If I am CEC root
    Set my_address to 0.0.0.0
    Else
    Wait for HPD from sink
    Query sink for my_address of my connection (Section 8.7.4)
    The device shall retain this physical address until HPD is
    removed (or the device is powered off).
    End if
    If device has connections for source devices then
    Label all possible connections to source devices uniquely starting
    from connection_label = 1 to the number of source input connections
    If device has separate EDIDs for each source connection then
    If my_address ends with 0 then
    Set each source_physical_address to my_address with the
    first 0 being replaced with connection_label.
    Else (i.e. beyond the fifth layer of the tree)
    Set each source_physical_address to F.F.F.F
    End if
    Else
    Set each source_physical_address to my_address
    End if
    Write source_physical_address to HDMI VSDB in EDID for each source
    connection
    End if
    Allow HPD to be asserted for source devices
Logical Address(LA)

每个设备还有一个唯一的逻辑地址, 它定义了设备类型. 它出现在 CEC Bus 每条 CEC cmd 的 signal line 上, 用以标识每条 cmd 到达的目的地.
一个设备通过一个逻辑地址来表示一个功能, 如果一个物理设备包含有超过一个设备类型的功能, 它将给每个功能分配一个逻辑地址. 比如当一个可以录像的DVD设备, LA=4 or 8 那么它录像功能将无法通过CEC来使用, 必须用LA=1 or 2才行.
LA由 4 bit 组成,spec规定只有如下几种 LA 的 device:

LogicalAddress Device
0 TV
1 Recording Device 1
2 Recording Device 2
3 Tuner 1
4 Playback Device 1
5 Audio System
6 Tuner 2
7 Tuner 3
8 Playback Device 2
9 Recording Device 3
10 Tuner 4
11 Playback Device 3
12 Reserved
13 Reserved
14 Specific Use
15 Unregistered(as Initator address) / Broadcast(as Destination address)
  • 逻辑地址的分配(Logical Address Allocation)
    只有当设备具有有效的物理地址(即不是F.F.F.F)时,才应该分配逻辑地址,在其他所有时间,设备LA应该设置为15(Unregistered(as Initator address)).
    只有物理地址为0.0.0.0的设备可以采用LA=0(TV),任何其他PA的TV应采用LA=14(Specific Use)。如果14已经被分配,就设置LA=15.
    在对于给定设备类型(例如,调谐器1,调谐器2等)可用的多于一个可能的逻辑地址的情况下,将由新连接的设备执行地址分配过程。设备获取该设备类型的第一个分配地址,并向同一个地址(例如Tuner 1→Tuner 1)发送”Polling Message”。如果未确认”Polling Message”,则设备停止过程并保留该地址。
    如果第一个地址被确认,则设备获取该设备类型的下一个地址,并重复该过程(例如,Tuner 2→Tuner 2)。再次,如果消息未被确认,则设备保留该地址。
    该过程继续,直到所有可能的“类型特定”地址被检查;如果没有“类型特定”地址可用,则设备应该取得LA=15。请注意,多个物理设备可能共享此地址。
    设备断开或关闭时可能会丢失其逻辑地址。然而,它可以记住其先前的逻辑地址,使得下次重新连接或打开它时,它可以在其先前逻辑地址开始轮询过程,并在获取未注册地址之前依次尝试每个其他可允许的逻辑地址。
    例如,如果先前分配了地址Tuner 2的STB被重新连接,则它将在获取Unregistered之前轮询Tuner 2,Tuner 3,Tuner 4和Tuner 1。
    如果设备在任何时间丢失其物理地址(例如,其被拔出),则其LA=15(Unregistered).

通过LA和PA可以唯一确定一台CEC device的物理空间位置,并实现控制该CEC device

opcode Block

CEC常用的opcode如下表:

Category Opcode value Description
One Touch Play <Active Source> 1 0x82 被一个新接入的设备所使用,表示它已开始传输流或者用于响应<Resquest Active Source>
Routing Control <Active Source> 2 0x82 同上?
Routing Control <Request Active Source> 0x85 TV告诉设备需要切换source
Routing Control <Routing Change> 0x80 从non-HDMI source切到HDMI source或HDMI source之间互切需要发送给设备
Routing Control <Routing Information> 0x81 TV询问设备当前活动的route是哪一个
Standby <Standby> 0x36 TV告诉设备需要待机
System Information <Give Physical Address> 0x83 请求某个设备的物理地址
System Information <Polling Message> - 用于TV发现是否存在设备,类似于ping等其他协议
System Information <Report Physical Address> 0x84 用于告诉其他所有其他设备它自己的物理地址
Deck Control <Play> 0x41 用于TV控制设备的播放行为
Vendor Specific Commands <Device Vendor ID> 0x87 报告本设备的供应商ID
Device Menu Control <User Control Pressed> 10 0x44 用于表示用户按下远程控制按钮或从一个远程控制按钮切换到另一个远程控制按钮,也可以作为一个不直接由用户发起的命令
Device Menu Control <User Control Released> 11 0x45 表示用户松开了一个远程控制按钮(最后一个被User Control Pressed发出的按钮),也可以用在作为一个不直接由用户发起的命令之后
Power Status <Give Device Power Status> 0x8F 设备报告自己的电源状态
Power Status <Report Power Status> 0x90 TV请求设备报告电源状态,一般有Standby、On等状态
System Audio Control <Give Audio Status> 0x71 TV请求设备报告音量的大小
System Audio Control <Give System Audio Mode Status> 0x7D TV请求设备报告当前声音模式的状态
System Audio Control <Report Audio Status> 0x7A 设备报告自己音量大小是多少
System Audio Control <System Audio Mode Request> 0x70 TV请求特定物理地址的功放报告:系统声音模式
System Audio Control <System Audio Mode Status> 0x7E 活动的功放回应它当前的系统声音模式是什么,有S/PDIF、ARC

TIF CEC:

1.LA需要提前设置:

1
2
3
4
5
device manufacturers need to set ro.hdmi.device_type in device.mk
forHdmiControlService to work correctly.
For HDMI sink devices, like panel TVs, set:
device/mstar/muskmelon_tif/device.mk:
PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=0

CATALOG
  1. 1. 词汇表
  2. 2. CEC基本概念
    1. 2.1. CEC命令的结构
      1. 2.1.1. Start
        1. 2.1.1.1. Start Bit Timing
        2. 2.1.1.2. Data Timing
      2. 2.1.2. Header Block
        1. 2.1.2.1. Header Block Details
        2. 2.1.2.2. Physical Address(PA)
        3. 2.1.2.3. Logical Address(LA)
      3. 2.1.3. opcode Block
  3. 3. TIF CEC: