CEC
简介
消费电子控制 (CEC) 是 HDMI(高清晰度多媒体接口)标准的一部分。它包含一种协议,可在各种视听产品之间提供高级控制功能。CEC 运行速度较低,处理和内存开销最小。HDMI-CEC 控制器为此协议提供了硬件支持。
主要特性
符合HDMI-CEC v1.4规范
独立的 32 kHz CEC 内核(请参阅 RCC 内核时钟分配部分)
在停止模式下工作,适用于超低功耗应用
可配置的传输开始前无信号时间 -C 根据 CEC 状态由硬件自动设置 以及传输历史 -C 由软件固定(7 种定时选项)
可配置外设地址 (OAR)
支持监听模式 -C 允许接收发送到不同于 OAR 的目标地址的 CEC 消息 不干扰CEC线路
可配置的Rx容差裕量 -C 标准容差 -C 扩展容差
接收错误检测 -C 位上升错误 (BRE),可选停止接收 (BRESTP) -C 短位周期 错误(SBPE)-C 长位周期错误(LBPE)
可配置的错误位生成 -C 在 BRE 检测中(BREGEN)-C 在 LBPE 检测中(LBPEGEN)-C al-在SBPE检测上生成的方式
传输错误检测 (TXERR)
仲裁丢失检测 (ARBLST) -C 带自动变速器重试
传输欠载检测 (TXUDR)
接收溢出检测 (RXOVR)
功能描述
HDMI-CEC 框图
CEC架构
消息描述
CEC线上的所有事务都由一个发起者和一个或多个追随者组成。发起者负责发送消息结构和数据。追随者是任何数据的接收方,并负责设置任何确认位。
一条消息通过一个帧进行传输,该帧由一个起始位、一个头块以及可选的操作码和可变数量的操作数块组成。
所有这些块均由 8 位有效载荷组成——最高有效位首先传输——随后是消息结束 (EOM) 位和确认 (ACK) 位。
EOM位在消息的最后一个块中被置位,而在其他所有块中保持复位状态。如果消息在已指示EOM之后还包含额外的块,则必须忽略这些额外的块。EOM位可在头块中置位,以“ping”其他设备,确保它们处于活动状态。
EOM位在消息的最后一个块中被置位,而在其他所有块中保持复位状态。如果消息在已指示EOM之后还包含额外的块,则必须忽略这些额外的块。EOM位可在头块中置位,以“ping”其他设备,确保它们处于活动状态。
报头由源逻辑地址字段和目标逻辑地址字段组成。请注意,特殊地址0xF用于广播消息。
消息结构描述符
消息块
位时序
起始位的格式是唯一的,用于标识消息的开始。它必须通过其低持续时间和总持续时间进行验证。
消息中除起始位外的所有剩余数据位具有一致的时序。数据位结束时从高电平到低电平的跳变是下一个数据位的开始,但最后一个数据位除外,此时CEC线保持高电平。
位时序
仲裁
消息中除起始位外的所有剩余数据位具有一致的时序。数据位结束时从高电平到低电平的跳变是下一个数据位的开始,但最后一个数据位除外,此时CEC线保持高电平。
信号空闲时间
由于一次只允许一个发起者,因此提供了一种仲裁机制,以避免多个发起者同时开始传输时发生冲突。
CEC线路仲裁从起始位的前沿开始,一直持续到报头块中发起者地址位的末尾。在此期间,发起者必须监控CEC线路;如果在将线路驱动为高阻态时读回0,则表明它已失去仲裁,于是停止发送并成为跟随者。
仲裁阶段
显示了三个标称位周期的 SFT 示例。.. _SFT_of_three_nominal_bit_periods:
三个标称位周期的SFT
在开始传输之前,会计算一个可配置的时间窗口。
在SFT = 0配置中,HDMI-CEC执行自动SFT计算,以确保符合HDMI-CEC标准:
2.5 数据位周期,如果 CEC 是最后一个总线发起者且传输失败
4 数据位周期,如果 CEC 是新的总线发起方
6 如果 CEC 是最后一个成功传输的总线发起者,则数据位周期
这样做是为了确保失败的传输具有最高优先级,而成功完成传输的最后一个发起者具有最低优先级。
否则,可以将 SFT 位配置为计数固定的时间值。可能的值为 0.5、1.5、2.5、3.5、4.5、5.5 和 6.5 个数据位周期。
在 SFTOPT = 0 配置的情况下,当软件设置传输开始命令 (TXSOM = 1) 时,SFT 开始计数。
如果 SFTOPT = 1,当检测到总线空闲或线路错误状况时,SFT 将由 HDMI-CEC 设备自动开始计数。如果在设置 TXSOM 命令时 SFT 定时器已结束,则传输将立即开始,无延迟。如果 SFT 定时器仍在运行,则系统会等待定时器结束后再开始传输。
如果 SFTOPT = 1,则在以下情况下检测到启动 SFT 定时器的总线事件条件:
在正常传输/接收结束时,当TXEND/RXEND位在消息中最后一个比特(ACK比特)的最小标称数据位持续时间内被置位时。
如果检测到传输错误,SFT 定时器将在 TXERR 时启动
检测到传输错误(TXERR = 1)。
如果 CEC 跟随者未确认,SFT 定时器将在以下情况下启动:
TXACKE 位已设置,即在 ACK 位的标称采样时刻。
如果发生传输欠载错误,SFT 定时器会在 TXUDR 时启动位是设置在ACK位的末尾。
如果接收到错误检测表明接收中止,则SFT定时器启动于同时检测到错误。如果生成了错误位,则在错误位结束时开始计数SFT。
如果起始位错误或空闲状态出现任何未编码的低阻抗总线状态,则一旦总线恢复到高阻抗空闲状态,SFT 定时器就会重新启动。
错误处理
位错误 如果一个数据位(不包括起始位)被视为无效,则从机应通过在CEC线上产生低电平周期来通知该错误,该低电平周期为标称数据位周期的1.4至1.6倍(标称值为3.6毫秒)。
错误位时序
消息错误 消息被视为丢失,因此在以下条件下可能会重新传输:
在直接寻址的消息中未收到确认
在广播消息中收到否定确认
在预期不存在时检测到 CEC 线路上的低阻抗(线路错误)
当CEC接口接收数据时,可以检测到七种错误标志。
位上升错误 (BRE) :当检测到位上升沿位于预期窗口之外时,将设置 BRE(位上升错误)。如果 BREIE = 1,则 BRE 标志还会生成 CEC 中断。
在检测到 BRE 的情况下,可以根据 BRESTP 位值停止消息接收,如果设置了 BREGEN 位,则可生成错误位。
当在广播消息中检测到 BRE 且 BRESTP = 1 时,即使 BREGEN = 0,也会生成错误位,以强制发起方重试失败的传输。可通过将 BREGEN = 0、BRDNOGEN = 1 进行配置来禁用错误位的生成。
长位周期错误 (LBPE) :当在有效窗口中未检测到位下降沿时,会设置 LBPE(参见图 849)。如果 LBPEIE = 1,则 LBPE 标志还会生成 CEC 中断。
LBPE 始终停止接收,当 LBPEGEN 位设置时,线路上会生成一个错误位。 长位周期错误 (LBPE) 当在有效窗口中未检测到位下降沿时,会设置 LBPE(参见图 849)。如果 LBPEIE = 1,则 LBPE 标志还会生成 CEC 中断。
注意: 必须避免 BREGEN = 1、BRESTP = 0 的配置。
错误处理
时间参数 |
信号电平状态 |
毫秒 |
描述 |
|---|---|---|---|
Ts |
x |
0 |
位起始事件。 |
T1 |
1 |
0.3 |
当表示逻辑 1 时,低到高转换的最早时间。 |
T1 |
0 |
0.4 |
当表示逻辑 1 时,低到高转换的最晚时间。 |
Tn1 |
x |
0.6 |
当表示逻辑 1 时,低到高转换的标称时间。 |
T2 |
0 |
0.8 |
当表示逻辑 1 时,低到高转换的最晚时间。 |
T2 |
1 |
0.9 |
当表示逻辑 1 时,低到高转换的最晚时间。 |
Tns |
x |
1.05 |
标称采样时间。 |
T3 |
1 |
1.2 |
设备被允许返回高阻态(逻辑 0)的最早时间。 |
T3 |
0 |
1.3 |
设备被允许返回高阻态(逻辑 0)的最早时间。 |
Tn0 |
x |
1.5 |
设备被允许返回高阻态(逻辑 0)的标称时间。 |
T4 |
0 |
1.7 |
设备被允许返回高阻态(逻辑 0)的最晚时间。 |
T4 |
1 |
1.8 |
设备被允许返回高阻态(逻辑 0)的最晚时间。 |
T5 |
0 |
1.85 |
下一位开始的最早时间。 |
T5 |
1 |
2.05 |
下一位开始的最早时间。 |
Tnf |
x |
2.4 |
标称数据位周期。 |
T6 |
0 |
2.75 |
下一位开始的最晚时间。 |
T6 |
1 |
2.95 |
下一位开始的最晚时间。 |
传输错误检测 (TXERR): 如果在 CEC 线上检测到低阻抗,而此时 CEC 主动方正在发送高阻抗且未预期从属方发出有效位,则 CEC 主动方会设置 TXERR 标志。如果 TXERRIE = 1,TXERR 标志还会生成 CEC 中断。
TXERR 断言会停止消息传输。应用程序负责最多重试五次失败的传输。
根据 CEC 线的不同状态以及 RX 容差配置,执行 TXERR 检查的方式也有所不同。
TX错误检测
时间参数 |
信号电平状态 |
毫秒 |
描述 |
|---|---|---|---|
Ts |
x |
0 |
位起始事件。 |
T1 |
1 |
0.3 |
当表示逻辑 1 时,低到高转换的最早时间。 |
T1 |
0 |
0.4 |
当表示逻辑 1 时,低到高转换的最晚时间。 |
n1 |
x |
0.6 |
当表示逻辑 1 时,低到高转换的标称时间。 |
T2 |
0 |
0.8 |
当表示逻辑 1 时,低到高转换的最晚时间。 |
T2 |
1 |
0.9 |
当表示逻辑 1 时,低到高转换的最晚时间。 |
Tns |
x |
1.05 |
标称采样时间。 |
T3 |
1 |
1.2 |
设备被允许返回高阻态(逻辑 0)的最早时间。 |
T3 |
0 |
1.3 |
设备被允许返回高阻态(逻辑 0)的最早时间。 |
Tn0 |
x |
1.5 |
设备被允许返回高阻态(逻辑 0)的标称时间。 |
T4 |
0 |
1.7 |
设备被允许返回高阻态(逻辑 0)的最晚时间。 |
T4 |
1 |
1.8 |
设备被允许返回高阻态(逻辑 0)的最晚时间。 |
T5 |
0 |
1.85 |
下一位开始的最早时间。 |
T5 |
1 |
2.05 |
下一位开始的最早时间。 |
Tnf |
x |
2.4 |
标称数据位周期。 |
T6 |
0 |
2.75 |
下一位开始的最晚时间。 |
T6 |
1 |
2.95 |
下一位开始的最晚时间。 |
寄存器
寄存器偏移及简单描述列表
偏移地址 |
寄存器名称 |
功能描述 |
|---|---|---|
0x0 |
IP_VER |
IP 版本号 |
0x4 |
GIT_VER |
Git 版本号 |
0x8 |
CEC_CR |
CEC 控制寄存器 |
0xC |
CEC_CFGR |
该寄存器用于配置 HDMI-CEC 控制器。当 CECEN = 0 时,必须写入 CEC_CFGR |
0x10 |
CEC_TXDR |
CEC 发送数据寄存器 |
0x14 |
CEC_RXDR |
CEC 接收数据寄存器 |
0x18 |
CEC_ISR |
CEC 中断和状态寄存器 |
0x1C |
CEC_IER |
CEC 中断使能寄存器 |
寄存器详细说明
IP_VER
Address offset: 0x0.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
IP_VER |
23:0 |
RO |
24’h010002 |
IP 版本号 |
Reserved |
31:24 |
/ |
0x0 |
保留位 |
GIT_VER
Address offset: 0x4.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
GIT_VER |
31:0 |
RO |
32’h0 |
Git 版本号 |
CEC_CR
Address offset: 0x8.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
CECEN |
0 |
RW |
0 |
CEC 使能 CECEN 位由软件设置和清除。CECEN = 1 启动消息接收并启用 TXSOM 控制; CECEN = 0 禁用 CEC 外设,清除 CEC_CR 寄存器的所有位,并中止任何正在进行的接收或传输。
|
TXSOM |
1 |
RW |
0 |
消息起始位 TXSOM 由软件置位以命令发送 CEC 消息的第一个字节。如果 CEC 消息仅包含一个字节,则必须在 TXSOM 之前设置 TXEOM。 在 SFT 计数后,起始位将在 CEC 总线上有效启动。如果在消息接收过程中设置 TXSOM,则传输将在接收结束后开始。 TXSOM 在以下情况下由硬件清除:
当仲裁丢失(ARB_LST = 1)时,TXSOM 也会被清除,并自动重试传输。 TXSOM 也可用作状态位,告知应用程序是否有待处理或正在执行的传输请求。 应用程序可通过清除 CECEN 位随时中止传输请求。
注意:当 CECEN = 1 时,必须设置 TXSOM。 当 TXDR 中有数据可用时,必须设置 TXSOM。 |
TXEOM |
2 |
RW |
0 |
消息结束位 TXEOM 由软件置位以命令发送 CEC 消息的最后一个字节。 TXEOM 与 TXSOM 相同条件和时间下由硬件清除。
注意:当 CECEN = 1 时,必须设置 TXEOM。 在向 TXDR 写入传输数据前,必须设置 TXEOM。 如果 TXEOM 被设置而 TXSOM = 0,则发送的消息仅包含 1 字节(HEADERS),即 PING 消息。 HEADER 的前四位(来自 TXDR[7:4])包含本外设地址,而非 CEC_CFGR.OAR(仅用于接收) |
Reserved |
31:3 |
/ |
0x0 |
保留位 |
CEC_CFGR
Address offset: 0xC.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
SFT |
2:0 |
RW |
0 |
信号空闲时间 SFT 位由软件设置。在 SFT = 0x0 配置下,传输前等待的名义数据位周期数由硬件根据传输历史决定;其他配置下由软件决定。
|
RXTOL |
3 |
RW |
0 |
接收容忍度 RXTOL 位由软件设置和清除。
|
BRESTP |
4 |
RW |
0 |
接收停止位上升错误 BRESTP 位由软件设置和清除。
|
BREGEN |
5 |
RW |
0 |
在位上升错误时生成错误位 BREGEN 位由软件设置和清除。
注意:如果 BRDNOGEN = 0,在广播消息中检测到 BRE 时仍会生成错误位,即使 BREGEN = 0 |
LBPEGEN |
6 |
RW |
0 |
在长位周期错误时生成错误位 LBPEGEN 位由软件设置和清除。
注意:如果 BRDNOGEN = 0,即使 LBPEGEN = 0,在广播消息中检测到 LBPE 时也会生成错误位 |
BRDNOGEN |
7 |
RW |
0 |
广播中避免错误位生成 BRDNOGEN 位由软件设置和清除。
|
SFTOP |
8 |
RW |
0 |
SFT 选项位 SFTOP 位由软件设置和清除。
|
Reserved |
15:9 |
/ |
0x0 |
保留位 |
OAR |
30:16 |
RW |
0 |
自身地址配置 OAR 位由软件设置,用于选择接收模式下需要考虑的目标逻辑地址。每一位对应一个 CEC 逻辑地址,置位后启用该地址。 在接收到 HEADER 后,接收到的目标地址会与已启用的地址进行比较。若匹配,则消息被确认并接收;若不匹配,则仅在监听模式(LSTN = 1)下接收,但不发送确认。 广播消息始终被接收。 示例:OAR = 0b000 0000 0010 0001 表示 CEC 确认地址 0x0 和 0x5。因此,发往这两个地址的消息都会被接收。 |
LSTN |
31 |
RW |
0 |
监听模式 LSTN 位由软件设置和清除。
|
CEC_TXDR
Address offset: 0x10.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
TXD |
7:0 |
WO |
0 |
|
Reserved |
31:8 |
/ |
0x0 |
保留位 |
CEC_RXDR
Address offset: 0x14.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
RXD |
7:0 |
RO |
0 |
|
Reserved |
31:8 |
/ |
0x0 |
保留位 |
CEC_ISR
Address offset: 0x18.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
RXBR |
0 |
RW |
0 |
接收长位周期错误 RXBR 由硬件置位,当检测到数据位波形存在长位周期错误时。LBPE 在最大位扩展容差(由 RXTOL 决定)结束时置位,若下降沿仍持续。LBPE 总是停止 CEC 消息接收。LBPE 在 CEC 线上生成错误位(如果 LBPEGEN = 1)。在广播情况下,即使 LBPEGEN = 0 也会生成错误位。LBPE 通过软件写 1 清除。 |
RXEND |
1 |
RW |
0 |
接收结束 RXEND 由硬件置位,通知应用程序 CEC 消息的最后一个字节已从 CEC 线接收并存储到 RXD 缓冲区。RXEND 与 RXBR 同时置位。RXEND 通过软件写 1 清除。 |
RXOVR |
2 |
RW |
0 |
接收溢出 RXOVR 由硬件置位,如果 RXBR 尚未清除而接收到新字节并存储到 RXD。RXOVR 使能会停止消息接收,因此不发送确认。在广播情况下,发送否定应答。RXOVR 通过软件写 1 清除。 |
BRE |
3 |
RW |
0 |
接收位上升错误 BRE 由硬件置位,当检测到数据位波形存在位上升错误时。BRE 可在错位上升沿发生时或最大 BRE 容差(由 RXTOL 决定)结束时置位(若上升沿仍持续)。如果 BRESTP = 1,BRE 会停止消息接收。如果 BREGEN = 1,BRE 会在 CEC 线上生成错误位。BRE 通过软件写 1 清除。 |
SBPE |
4 |
RW |
0 |
接收短位周期错误 SBPE 由硬件置位,当检测到数据位波形存在短位周期错误时。SBPE 在预期下降沿发生时置位。SBPE 在 CEC 线上生成错误位。SBPE 通过软件写 1 清除。 |
LBPE |
5 |
RW |
0 |
接收长位周期错误 LBPE 由硬件置位,当检测到数据位波形存在长位周期错误时。LBPE 在最大位扩展容差(由 RXTOL 决定)结束时置位,若下降沿仍持续。LBPE 总是停止 CEC 消息接收。LBPE 在 CEC 线上生成错误位(如果 LBPEGEN = 1)。在广播情况下,即使 LBPEGEN = 0 也会生成错误位。LBPE 通过软件写 1 清除。 |
RXACKE |
6 |
RW |
0 |
接收缺失应答 在接收模式下,RXACKE 由硬件置位,通知应用程序未收到应答。RXACKE 仅适用于广播消息,以及监听模式下目标地址未在 OAR 中启用的消息。RXACKE 会中止消息接收。RXACKE 通过软件写 1 清除。 |
ARBLST |
7 |
RW |
0 |
仲裁丢失 ARBLST 由硬件置位,通知应用程序由于仲裁丢失事件(在 TXSOM 命令后),CEC 设备正在切换到接收模式。ARBLST 可能由于竞争设备更早启动或同时启动但具有更高 HEADER 优先级导致。ARBLST 置位后,TXSOM 位保持置位以等待下次传输尝试。ARBLST 通过软件写 1 清除。 |
TXBR |
8 |
RW |
0 |
发送字节请求 TXBR 由硬件置位,通知应用程序下一个传输数据需要写入 TXDR。TXBR 在当前传输字节的第 4 位发送时置位。应用程序必须在六倍名义数据位周期内将下一个字节写入 TXDR,否则会发生发送欠载错误(TXUDR)。TXBR 通过软件写 1 清除。 |
TXEND |
9 |
RW |
0 |
发送结束 TXEND 由硬件置位,通知应用程序 CEC 消息的最后一个字节已成功发送。TXEND 会清除 TXSOM 和 TXEOM 控制位。TXEND 通过软件写 1 清除。 |
TXUDR |
10 |
RW |
0 |
发送缓冲区欠载 在传输模式下,TXUDR 由硬件置位,如果应用程序未能及时加载 TXDR 以进行下一个字节传输。TXUDR 会中止消息传输并清除 TXSOM 和 TXEOM 控制位。TXUDR 通过软件写 1 清除。 |
TXERR |
11 |
RW |
0 |
发送错误 在传输模式下,TXERR 由硬件置位,如果 CEC 发起者在释放 CEC 线时检测到低阻抗。TXERR 会中止消息传输并清除 TXSOM 和 TXEOM 控制位。TXERR 通过软件写 1 清除。 |
TXACKE |
12 |
WIC |
0 |
发送缺失应答错误 在传输模式下,TXACKE 由硬件置位,通知应用程序未收到应答。在广播传输中,TXACKE 通知应用程序收到了否定应答。TXACKE 会中止消息传输并清除 TXSOM 和 TXEOM 控制位。TXACKE 通过软件写 1 清除。 |
Reserved |
31:13 |
/ |
0x0 |
保留位 |
CEC_IER
Address offset: 0x1C.
字段 |
位域 |
访问属性 |
复位值 |
描述 |
|---|---|---|---|---|
RXBRIE |
0 |
RW |
0 |
接收字节接收中断使能 RXBRIE 位由软件设置和清除。
|
RXENDIE |
1 |
RW |
0 |
接收结束中断使能 RXENDIE 位由软件设置和清除。
|
RXOVRIE |
2 |
RW |
0 |
接收缓冲区溢出中断使能 RXOVRIE 位由软件设置和清除。
|
BREIE |
3 |
RW |
0 |
位上升错误中断使能 BREIE 位由软件设置和清除。
|
SBPEIE |
4 |
RW |
0 |
短位周期错误中断使能 SBPEIE 位由软件设置和清除。
|
LBPEIE |
5 |
RW |
0 |
长位周期错误中断使能 LBPEIE 位由软件设置和清除。
|
RXACKIE |
6 |
RW |
0 |
接收缺失应答错误中断使能 RXACKIE 位由软件设置和清除。
|
ARBLSTIE |
7 |
RW |
0 |
仲裁丢失中断使能 ARBLSTIE 位由软件设置和清除。
|
TXBRIE |
8 |
RW |
0 |
发送字节请求中断使能 TXBRIE 位由软件设置和清除。
|
TXENDIE |
9 |
RW |
0 |
发送结束中断使能 TXENDIE 位由软件设置和清除。
|
TXUDRIE |
10 |
RW |
0 |
发送欠载中断使能 TXUDRIE 位由软件设置和清除。
|
TXERRIE |
11 |
RW |
0 |
发送错误中断使能 TXERRIE 位由软件设置和清除。
|
TXACKIE |
12 |
RW |
0 |
发送缺失应答错误中断使能 TXACKIE 位由软件设置和清除。
|
Reserved |
31:13 |
/ |
0x0 |
保留位 |