代码先锋网 代码片段及技术文章聚合

HDMI CEC协议

技术标签: HDMI音视频  音视频

1 前言

本文档仅作为本人记录使用,主要根据工作使用及《HDMI Specification 1.4a.pdf》进行终结得出,若有不足会后续补充。

2 CEC简介

CEC(Consumer Electronics Control)是一套完整的单总线协议,电子设备可以借着CEC信号让使用可控制HDMI接口上所连接的装置,比如单键播放(One Touth Play),系统待机(System Standby),可以实现由单一遥控器控制所有HDMI连接的装置。最多可以控制15个设备。允许HDMI设备在没有用户干扰情况下互相命令控制。CEC在HDMI座子上的14引脚,可用示波器或逻辑分析仪抓取。

2.1 CEC关键词

英文中文描述
Audio System音频系统,soundbar或其他AVR设备非电视设备,但具有解码播放音频的能力
Boradcast Message广播消息,下文中的广播物理地址等广播消息广播消息,发送的目的地址为F,表示所有的设备都能收到
Deck播放或录像设备具有媒体播放能力的一种设备,姑且认为是碟机
InitiatorCEC帧头的组成代表起始方,下文中帧头有0~F的起始方CEC帧头的起始方,等待回应
Follower相应对应CEC消息的设备刚接收到CEC消息并要求对其作出响应的设备
DestinationCEC帧头的组成代表接收方,下文中帧头有0~F的接收方CEC帧头的接收方,作出回应
Menu Providing Device菜单提供设备一种可以在电视上显示菜单的非显示设备。
Playback Device播放设备一种能播放媒体的设备,如DVD播放器。
Recording device录播设备类似与DV的录播设备
Tunner Device调谐设备暂时无法描述

2.2 CEC特性

  • One Touch Play:一键播放,通俗的讲电视遥控器可以一键播放碟机,反之亦然。
  • System Standby:系统待机,通俗的讲电视遥控器可以控制碟机待机,反之亦然。
  • One Touch Record:选项标记,通俗的讲电视遥控器可以控制碟机特定选项,开启设置等,反之亦然。
  • Deck Control:碟机控制,通俗的讲电视遥控器可以控制碟机暂停、播放、快进等。
  • Device Menu Control:菜单控制,通俗的讲电视遥控器可以控制碟机的菜单等。
  • Sysstem Audio Control:音频控制,,通俗的讲电视遥控器可以控制碟机的音量等 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IqJfsrLE-1648478556687)(images/End-User Features.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5k5y1lLg-1648478556690)(images/Supporting Features.png)]

2.3 CEC时序及组成

每个位从线拉低(下降沿)开始,保持时间表示位值,之后拉高,直至后续位开始正常数据位长为2.4±0.35ms。保持低电平0.6±0.2ms为逻辑1;保持低电平1.5±0.2ms表示逻辑0。接收器在下降沿后1.05±0.2ms对线路进行采样,然后在下降沿1.9±0.15ms开始观察下一位。接收者可以将传输的传输的1bit转换为0通过在下降沿后0.35s拉低总线并保持直到表示逻辑0的电平时间。这个通常用于确认传输。每个帧都有起始位,通过拉低总3.7±0.2ms,然后允许上升,总持续时间为4.5±0.2ms。在观察总线空闲之后,任何设备都可以发送起始位。(通常5位时间,但成功后立即传输7位时间,以促进总线的公平共享,以及传输失败和重传之间的3位时间。)
对于单接收消息,应答位类似于IIC:以1位发送,接收器将其下拉至0以确认该位字节。
对于广播消息,应答位被反转:仍然作为1位发送,但被拒绝该字节的任何接收器下拉到0位。
每个CEC帧的第一个字节包含4位源和目标地址头。如果寻址目标存在,则它确认该字节。由除标题之外的任何内容组成的帧是ping,它只检查另个设备的存在。

CEC的简单消息组成为:Initiator+Destination+Opcode

(Init:5 | Dest:f |  Opcode:84) -  5f 84 10 00 05 [Report Physical Address]

如上述指令描述为:AVR播放设备(Audio System)向外广播0x84操作码,0x84的操作码向外广播自己的逻辑物理地址1000及设备类型Audio System描述为Report Physical Address:Physical Address+Device Type
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XRRXpGO-1648478556698)(images/CEC Frame Description.png)]

3 CEC消息组成

3.1 CEC帧头描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2hAjf0m-1648478556701)(images/Header Data Block.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1YhKO0vc-1648478556713)(images/Header Data Block Details.png)]

根据上图所有的块都是10Bit,有效位为8bit。
Start(bit)+ Header Block + Data Block 1(opcode block) + Data Block 2 (operand blocks)
Block定义:Data(8 bit) + EOM(1 bit) + ACK(1 bit)
Header Block定义:Initiator(4 bit) + Destination(4 bit) + EOM(1 bit) + ACK(1 bit)

EOM表示:是否为该数据块是否最后一位。
“0”:指定后面紧接着一个或多个数据。
“1”:表示消息已经完成。
假如数据块后面的EOM为“0”,那么接收者需要忽略其后数据;假如EOM为“0”,并且后续没有接收到数据,这整个消息将被接受者忽略。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UErk4bit-1648478556715)(images/EOM.png)]

ACK表示:发送方总是置1,接受方用来确认数据及帧头。
对于单个设备:
“0”:接受方上报自己的逻辑物理地址结束以“0”ACK结束,发送方检测到接收方时以此判断发送结束。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMCtZ6nJ-1648478556718)(images/ACK.png)]

3.2 CEC逻辑地址

CEC时序及组成一章中,我们如何知道0x5f是AVR设备发出的广播呢?结合CEC帧头描述我们根据如下进行CEC码值解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOiXtkDi-1648478556719)(images/CEC Logical Adressess.png)]

3.3 CEC码值解析

00:02:38 kernel: CEC:NET Rx (Init:5 | Dest:0 |  Opcode:90) -  50 90 00
00:02:38 kernel: CEC:    Tx (Init:5 | Dest:0 |  Opcode:90) -  50 90 00 [Report Power Status]
00:02:38 kernel: CEC:    Rx (Init:0 | Dest:f |  Opcode:87) -  0f 87 9d 19 00 [Device Vendor ID]
00:02:38 kernel: CEC:NET Tx (Init:0 | Dest:f |  Opcode:87) -  0f 87 9d 19 00
00:02:39 kernel: CEC:    Rx (Init:0 | Dest:f |  Opcode:87) -  0f 87 9d 19 00 [Device Vendor ID]
00:02:39 kernel: CEC:NET Tx (Init:0 | Dest:f |  Opcode:87) -  0f 87 9d 19 00
00:02:39 kernel: CEC:    Rx (Init:4 | Dest:5 |  Opcode:9f) -  45 9f [Get CEC Version]
00:02:39 kernel: CEC:NET Tx (Init:0 | Dest:5 |  Opcode:9f) -  05 9f

根据上述知识,以打印为例我们很容易可以看出CEC的发送方及操作码。操作码对应的参数值在《HDMI Specification 1.4a.pdf》中的Message Descriptions中有详细描述。

4 总结

CEC虽然有接触但是没有实际去跟踪CEC具体流程,目前只接触到CEC的码值对应部分。后续有补充在完善。

5 参考资料

HDMI CEC协议

C的码值对应部分。后续有补充在完善。

5 参考资料

HDMI CEC协议

版权声明:本文为weixin_44143206原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44143206/article/details/123808695

智能推荐

HDMI之EDID

edid-decode 工欲善其事,必先利其器。edid-decode是一个很好的edid分析工具。 edid-decode commit : b00755e34eb12aa92416aaf1bb7b02603131afe0 编译 Linux环境,直接make。 Windows Msys2环境,需要稍作修改。将edid-decode-msys2.patch复制到当前目录。edid-decode-m...

Linux HDMI使用

系统:Manjaro with NVIDIA RX2060 安装好Manjaro并安装好显卡驱动程序;此时插上HDMI双显示器,下面为使能HDMI双屏显示步骤: 1. 命令行输入: 此时相关软件都安装好之后会有如下输出: 注意eDP-1及HDMI-1-0为"connected",此时eDP-1后面的“primary 1920x1080+0+0”及HDMI...

Windows HDMI 监控

EnumDisplayDevices EnumDisplayDevices功能可让您获取有关系统中显示设备的信息。 BOOL EnumDisplayDevices( LPCTSTR lpDevice,//设备名称 DWORD iDevNum,//显示设备 PDISPLAY_DEVICE lpDisplayDevice,//设备信息 DWORD dwFlags //保留 ); 参数 lpDevice...

猜你喜欢

FPGA实现HDMI显示

 Hdmi_Out.v  Hdmi_Ctrl.v Par_To_Ser.v Encoder.v Hdmi_Data_Gen.v...

rk3566 HDMI 热插拔HDMI显示无信号

环境: rk3566 android11 kernel 内核版本,4.19.172 问题描述:         hdmi热插拔相关的问题,当插入HDMI 系统开机启动,并正常运行,HDMI有显示且显示正常,进行热插拔也是没有问题的,当不插入HDMI接口系统启动后,再将HDMI显示接口插入HDMI显示无信号,也无法进行热...

surfaceflinger增加hdmi显示设备

转载地址:http://blog.csdn.net/u010865783/article/category/6677819 1:当hdmi插入的时候,hdmi驱动会上报一个中断上来,在驱动中会发送一个Uevent给上层。  “/sys/class/switch/hdmi/state” 这个节点会由0变成1 2:在HWC中,启动的时候就开启一个hdmi状态监听的线程...

笔记本接HDMI

笔记本接HDMI后,过2~3分钟,笔记本就直接睡眠,屏幕变黑,乱按一阵鼠标键盘后,需要输入密码才能登陆,电源选项里的睡眠都已经设置在30分钟以上,或者从不,都不管用。 在网上找了一下,修改注册表就不会睡眠了。将原本的Attributes值从1改为2。...

树莓派4 HDMI显示

树莓派4直接上电,试过诸多参数,HDMI在我的显示器上(LG27M35)无法显示。 但是改电脑USB3.0供电,HDMI工作正常。 相关参数如下: /boot/config.txt...