Consumer Electronics Control (CEC) is a feature ofHDMI designed to control HDMI connected devices[1][2] by using only oneremote controller; so, individual CEC enabled devices can command and control each other without user intervention, for up to 15 devices.[3]: §CEC-3.1 For example, a TV remote can also control adigital video recorder and aBlu-ray player.
It is a single-wire bidirectionalserial bus that is based on theCENELEC standardAV.link protocol to performremote control functions.[4] CEC wiring is mandatory, although implementation of CEC in a product is optional.[3]: §8.1 It was defined in HDMI Specification 1.0 and updated in HDMI 1.2, HDMI 1.2a and HDMI 1.3a (which added timer and audio commands to the bus).[3]: §§CEC-1.2,CEC-1.3,CEC-3.1,CEC-5 USB-to-CEC adapters exist that allow a computer to control CEC-enabled devices.[5]
Trade names for CEC include:[6][7][8][9][10][11][12]
The following is a list of the most commonly used HDMI-CEC commands:
CEC[3] is a separate electrical signal from the other HDMI signals. This allows a device to disable its high-speed HDMI circuitry insleep mode, but be woken up by CEC. It is a single shared bus, which is directly connected between all HDMI ports on a device, so it can flow through a device which is completely powered off (not just asleep).
The bus is electrically identical to theAV.link protocol, but CEC adds a detailed higher-level message protocol.
The bus is anopen-collector line, somewhat likeI²C,passively pulled up to +3.3 V, and driven low to transmit a bit.
Similarities to I²C include:
Differences from I²C:
Each bit begins with the line pulled low (falling edge), a delay indicating the bit value, a rising edge, and further delay until the start of the following bit.
Normal data bits are2.4±0.35 ms long. A logic 1 is held low for0.6±0.2 ms, while a logic 0 is held low for1.5±0.2 ms. The receiver samples the line at1.05±0.2 ms after the falling edge, then begins watching for the following bit1.9±0.15 ms after the falling edge.
A receiver can convert a transmitted 1 bit to a 0 bit by pulling the line low within 0.35 ms of the falling edge, and holding it until the 0 bit time. The transmitter observes the bus during its own transmissions to detect this condition. This is used toacknowledge a transmission.
Each frame begins with a specialstart bit, held low for3.7±0.2 ms and then allowed to rise, for a total duration of4.5±0.2 ms. Any device may send a start bit after observing the bus idle for a suitable number of bit times. (Normally, 5 bit times, but 7 bit times immediately after a successful transmission to facilitate fair sharing of the bus, and 3 bit times between a failed transmission and its retransmission.)
This is followed by up to 16 bytes. Each byte consists of ten bits: eight data bits (transmitted msbit-first, inbig-endian order), an "end of message" bit (set to 1 after the last byte of a frame), and an "acknowledge" bit.
For single-recipient messages, the acknowledge bit operates similarly to I²C: it is transmitted as a 1 bit, and the receiver pulls it down to a 0 bit to acknowledge the byte.
For broadcast messages, the acknowledge bit is inverted: it is still transmitted as a 1 bit, but is pulled down to a 0 bit by any receiver whichrejects the byte.
The first byte of each CEC frame is a header containing the 4-bit source and destination addresses. If the addressed destination exists, it acknowledges the byte. A frame consisting of nothing but the header is aping which simply checks for the presence of another device.
The address 15 (1111) is used for the broadcast address (as a destination) and unregistered devices (as a source) which have not yet chosen a different address. Some devices do not need to receive non-broadcast messages and so may use address 15 permanently, notably remote control receivers and HDMI switches. Devices which need to receive addressed messages need their own address. A device obtains an address by attempting to ping it. If the ping is unacknowledged, the device claims it. If the ping is acknowledged, the device tries another address.
The second byte is an opcode which specifies the operation to be performed, and the number and meaning of following parameter bytes. For example, a user press on a remote control will generate a 3-byte frame: a header byte, a<User Control Pressed>
opcode (0x44), and an operand byte identifying the button. Including the initial idle time and extra-long start bit, this takes 88.5 ms (37 bit times). A later<User Control Released>
opcode (0x45) has no operands.