Fill HDMI CEC electrical from HDMI Specification 1.3 (2.79.0).

27 kΩ pull-up, VOL/VOH, 200 pF device / 700 pF cable, 5 Ω interconnect. TMDS/FRL Zdiff stays UNKNOWN.
This commit is contained in:
2026-09-22 18:07:52 +02:00
parent d32af5627a
commit 25aa608052
6 changed files with 889 additions and 148 deletions
@@ -616,8 +616,12 @@ DOC_IEEE_OTHER = {
"10gbase-r": "IEEE 802.3 10GBASE-R clauses (not in 2012 Section Two)",
}
DOC_HDMI_ADOPTER = (
"HDMI Adopter specification (not on file; 1.4 vs 2.x vs FRL must not be mixed)"
"HDMI Adopter specification (not on file; 1.4 vs 2.x vs FRL must not be mixed). "
"HDMI Specification Version 1.3 on file is used only for CEC electrical, not TMDS/FRL Zdiff"
)
DOC_HDMI_13 = "High-Definition Multimedia Interface Specification"
REV_HDMI_13 = "Version 1.3, June 22, 2006"
ORG_HDMI = "HDMI Licensing, LLC"
DDR_CHECKS = [
"byte_lane_mapping",
"dq_to_dqs_skew",
@@ -1481,10 +1485,73 @@ def build_m0_catalog() -> dict[str, Any]:
return out
def _hdmi_cons(pid: str) -> list[dict[str, Any]]:
return [
_c(pid, p, "UNKNOWN", needed_document=DOC_HDMI_ADOPTER)
for p in HDMI_CHECKS
]
out = []
for p in HDMI_CHECKS:
if p == "cec":
out.append(_num(
pid, p, 27000.0, "ohm",
document=DOC_HDMI_13, organization=ORG_HDMI,
revision=REV_HDMI_13, section="Supplement 1 CEC 4",
table="CEC Table 2", page="CEC-6",
source_type="PCB",
conditions=[
"internal device pull-up when CEC protocol is implemented",
"27 kΩ ± 5% or equivalent (e.g. current source)",
"not TMDS / FRL differential impedance",
],
))
continue
out.append(_c(pid, p, "UNKNOWN", needed_document=DOC_HDMI_ADOPTER))
out.append(_num(
pid, "cec_device_capacitance", 200.0, "pF",
document=DOC_HDMI_13, organization=ORG_HDMI,
revision=REV_HDMI_13, section="4.2.10",
table="Table 4-27", page="54",
source_type="PCB",
conditions=[
"maximum capacitance load of a device excluding cable",
"all HDMI products including those that do not implement CEC protocol",
],
))
out.append(_num(
pid, "cec_cable_capacitance", 700.0, "pF",
document=DOC_HDMI_13, organization=ORG_HDMI,
revision=REV_HDMI_13, section="4.2.10",
table="Table 4-27", page="54",
source_type="CABLE",
conditions=["maximum capacitance load of a cable assembly"],
))
out.append(_num(
pid, "cec_vol_max", 0.6, "V",
document=DOC_HDMI_13, organization=ORG_HDMI,
revision=REV_HDMI_13, section="Supplement 1 CEC 4",
table="CEC Table 2", page="CEC-6",
source_type="PCB",
conditions=["maximum output voltage logic 0 when CEC is implemented"],
))
out.append(_num(
pid, "cec_voh_min", 2.5, "V",
document=DOC_HDMI_13, organization=ORG_HDMI,
revision=REV_HDMI_13, section="Supplement 1 CEC 4",
table="CEC Table 2", page="CEC-6",
source_type="PCB",
conditions=[
"minimum output voltage logic 1 (maximum 3.63 V)",
"when CEC protocol is implemented",
],
))
out.append(_num(
pid, "cec_interconnect_resistance", 5.0, "ohm",
document=DOC_HDMI_13, organization=ORG_HDMI,
revision=REV_HDMI_13, section="4.2.10",
table="Table 4-27", page="54",
source_type="PCB",
conditions=[
"maximum resistance of interconnected CEC line between any two HDMI connectors",
"inputs shall be interconnected to a single output except listed Table 4-27 exceptions",
],
))
return out
def _dvi_cons(pid: str) -> list[dict[str, Any]]:
out = []
@@ -1698,7 +1765,7 @@ def build_m0_catalog() -> dict[str, Any]:
))
for hid, lid, conn, note in (
("hdmi-1.4-tmds-type-a", "hdmi-1.4", "HDMI-A",
"HDMI 1.4 TMDS on Type A. Mini is a connector, not a protocol. UNKNOWN until Adopter spec."),
"HDMI 1.4 TMDS on Type A. Mini is a connector, not a protocol. TMDS UNKNOWN until Adopter spec. CEC electrical from HDMI 1.3."),
("hdmi-1.4-tmds-type-c-mini", "hdmi-1.4", "HDMI-C-mini",
"Mini HDMI is CONNECTOR only. Electrical protocol remains HDMI 1.4 TMDS, not MINI-HDMI."),
("hdmi-2.0-tmds-type-a", "hdmi-2.0", "HDMI-A",
File diff suppressed because it is too large Load Diff
@@ -2,6 +2,13 @@
What's new in Periscope.
## 2.79.0 — 2026-09-22 — HDMI CEC electrical from HDMI Specification 1.3
`CEC_HDMI_Specification.pdf` is High-Definition Multimedia Interface Specification Version 1.3 (22 June 2006), not a CEC-only pamphlet. CEC pull-up 27 kΩ, VOL 0.6 V, VOH 2.5 V, device 200 pF / cable 700 pF, interconnect 5 Ω are packed. TMDS/FRL Zdiff/skew stay UNKNOWN (Adopter spec still required). DDC/HPD not packed.
- [Changed] `protocol_catalog.py` + `catalog.json`.
- [Changed] pytest `tests/pcb/test_protocol_pdf_pack.py`, `test_protocol_m6_m7.py`.
## 2.78.0 — 2026-09-22 — 1000BASE-T from IEEE 802.3-2012 Section Three
IEEE Std 802.3-2012 Section Three Clause 40 fills 1000BASE-T: 1000 Mb/s, 100 m Class D link, cable 100 Ω, MDI return loss 16 dB (140 MHz), pair skew 50 ns, isolation 2 MΩ / 1500 V rms, MDI peak 0.67 V, link delay 570 ns. Cable 100 Ω is **CABLE**; L2 PCB Zdiff stays UNKNOWN. Clause 36 fills 1000BASE-X 1000 Mb/s (optical Zdiff N/A). Insertion-loss formula not packed as a single dB.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "periscope-web",
"version": "2.78.0",
"version": "2.79.0",
"private": true,
"scripts": {
"sync-version": "node scripts/sync-version.mjs",
+4
View File
@@ -218,6 +218,10 @@ def test_ethernet_hdmi_skeletons_unknown_needed_document():
assert all(p.incomplete for p in ifaces)
for p in ifaces:
for c in p.constraints:
if lid.startswith("hdmi") and (
c.parameter == "cec" or c.parameter.startswith("cec_")
):
continue
assert c.value is None
assert c.value_kind != "NUMERIC"
if c.value_kind in {"UNKNOWN", "MISSING_SOURCE"}:
+23
View File
@@ -152,6 +152,29 @@ def test_dvi_not_hdmi_numeric_from_dvi_10():
hdmi = next(p for p in cat.physical_interfaces if p.id == "hdmi-1.4-tmds-type-a")
hz = next(c for c in hdmi.constraints if c.parameter == "differential_impedance")
assert hz.value_kind == "UNKNOWN"
assert hz.value is None
hby = {c.parameter: c for c in hdmi.constraints}
_cite_ok(hby["cec"])
assert hby["cec"].value == 27000.0
assert hby["cec"].source.table == "CEC Table 2"
assert "1.3" in hby["cec"].source.revision
assert hby["cec"].source_type == "PCB"
_cite_ok(hby["cec_device_capacitance"])
assert hby["cec_device_capacitance"].value == 200.0
assert hby["cec_device_capacitance"].source.table == "Table 4-27"
_cite_ok(hby["cec_cable_capacitance"])
assert hby["cec_cable_capacitance"].value == 700.0
assert hby["cec_cable_capacitance"].source_type == "CABLE"
_cite_ok(hby["cec_vol_max"])
assert hby["cec_vol_max"].value == 0.6
_cite_ok(hby["cec_voh_min"])
assert hby["cec_voh_min"].value == 2.5
_cite_ok(hby["cec_interconnect_resistance"])
assert hby["cec_interconnect_resistance"].value == 5.0
frl = next(p for p in cat.physical_interfaces if p.id == "hdmi-frl-pcb")
fz = next(c for c in frl.constraints if c.parameter == "differential_impedance")
assert fz.value_kind == "UNKNOWN"
assert fz.value is None
g = DesignGraph(
components={
"J3": Component(