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:
@@ -616,8 +616,12 @@ DOC_IEEE_OTHER = {
|
|||||||
"10gbase-r": "IEEE 802.3 10GBASE-R clauses (not in 2012 Section Two)",
|
"10gbase-r": "IEEE 802.3 10GBASE-R clauses (not in 2012 Section Two)",
|
||||||
}
|
}
|
||||||
DOC_HDMI_ADOPTER = (
|
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 = [
|
DDR_CHECKS = [
|
||||||
"byte_lane_mapping",
|
"byte_lane_mapping",
|
||||||
"dq_to_dqs_skew",
|
"dq_to_dqs_skew",
|
||||||
@@ -1481,10 +1485,73 @@ def build_m0_catalog() -> dict[str, Any]:
|
|||||||
return out
|
return out
|
||||||
|
|
||||||
def _hdmi_cons(pid: str) -> list[dict[str, Any]]:
|
def _hdmi_cons(pid: str) -> list[dict[str, Any]]:
|
||||||
return [
|
out = []
|
||||||
_c(pid, p, "UNKNOWN", needed_document=DOC_HDMI_ADOPTER)
|
for p in HDMI_CHECKS:
|
||||||
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]]:
|
def _dvi_cons(pid: str) -> list[dict[str, Any]]:
|
||||||
out = []
|
out = []
|
||||||
@@ -1698,7 +1765,7 @@ def build_m0_catalog() -> dict[str, Any]:
|
|||||||
))
|
))
|
||||||
for hid, lid, conn, note in (
|
for hid, lid, conn, note in (
|
||||||
("hdmi-1.4-tmds-type-a", "hdmi-1.4", "HDMI-A",
|
("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",
|
("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."),
|
"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",
|
("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.
|
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
|
## 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 (1–40 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.
|
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 (1–40 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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "periscope-web",
|
"name": "periscope-web",
|
||||||
"version": "2.78.0",
|
"version": "2.79.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"sync-version": "node scripts/sync-version.mjs",
|
"sync-version": "node scripts/sync-version.mjs",
|
||||||
|
|||||||
@@ -218,6 +218,10 @@ def test_ethernet_hdmi_skeletons_unknown_needed_document():
|
|||||||
assert all(p.incomplete for p in ifaces)
|
assert all(p.incomplete for p in ifaces)
|
||||||
for p in ifaces:
|
for p in ifaces:
|
||||||
for c in p.constraints:
|
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 is None
|
||||||
assert c.value_kind != "NUMERIC"
|
assert c.value_kind != "NUMERIC"
|
||||||
if c.value_kind in {"UNKNOWN", "MISSING_SOURCE"}:
|
if c.value_kind in {"UNKNOWN", "MISSING_SOURCE"}:
|
||||||
|
|||||||
@@ -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")
|
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")
|
hz = next(c for c in hdmi.constraints if c.parameter == "differential_impedance")
|
||||||
assert hz.value_kind == "UNKNOWN"
|
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(
|
g = DesignGraph(
|
||||||
components={
|
components={
|
||||||
"J3": Component(
|
"J3": Component(
|
||||||
|
|||||||
Reference in New Issue
Block a user