前言
产品需要带ARC功能, ARC是由CEC发送指令与显示设备握手,从设备端回传音频信息。
学习下CEC通信流程。本文借鉴已公开HDMI1.3a规范相关信息,详细信息请参考HDMI规范。
正文
1. CEC Address
所有CEC设备都有一个物理地址和逻辑地址
1.1 物理地址
所有设备都必需有一个物理地址(动态分配),物理地址是通过DDC/EDID来识别。
地址长度是4位,设备深度为5。
1.2 逻辑地址
在CEC总线上每一台设备都有一个逻辑地址,定义了设备类型而且是唯一的识别码。
逻辑地址 | 设备类型 |
---|---|
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 | Free Use |
15 | Unregistered (as initiator address) / Broadcast (as destination address) |
2. CEC Format
遵循Av.ink要求,每一个CEC事务都是由 一个起始位、一个10位标头、和最多14个10位数据块的序列组成,一个完整的CEC指令可能由1-10个CEC事务组成。
2.1 Start Command (起始位)
Start Command 标识着CEC开始传输,这是独一无二的,
可以通过低电平a和总电平b的时间来验证是否为起始位。(虚线为允许的公差范围)
逻辑0和逻辑1电平变化(虚线为允许的公差范围)
2.2 CEC Block
CEC块都是由10位bit组成,基本结构也相同
information bits: 可能是数据、操作码或地址,这取决于是什么块
EOM(End of Message):指示这块是否为最后一块
=1,这个是最后一块
=0,后面还有块
ACK (Acknowledge) :应答头和数据块
=0,有应答
2.2.1 CEC Header Block 1
2.2.2 CEC Data Block
typedef enum // CEC Messages
{
CECOP_FEATURE_ABORT