HDMI
1 本のケーブルに、映像と音声と会話を。TMDS の画素、EDID、InfoFrame。
画素が TMDS シンボルになる
8 ビットの色の値が入り、10 ビットのシンボルが出ます。画素クロックごとに、チャンネルあたり 1 つ。
フレーム全体
画素クロックごとに、3 つの 10 ビットのシンボルが並列に出ていきます。色チャンネルごとに 1 つ。8 ビットが入り、10 ビットが出ます。増えた 2 ビットで、遷移が少なく(干渉が減る)、1 と 0 が釣り合った(AC 結合できる)信号を手に入れます。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| 画素 0 ・チャンネル 0(青) | 0 ワード目 | 0x00 → 0100000000 | 入力 0x00 = 00000000 は 1 が 0 個。手順 1(遷移を減らす): ビットを XOR でつなぎ、9 ビットの値 100000000 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットはそのまま送り、10 ビット目にその印を付けます。結果は 0100000000。このチャンネルの累積ディスパリティは -8 になりました。 |
| 画素 0 ・チャンネル 1(緑) | 1 ワード目 | 0x80 → 0110000000 | 入力 0x80 = 10000000 は 1 が 1 個。手順 1(遷移を減らす): ビットを XOR でつなぎ、9 ビットの値 110000000 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットはそのまま送り、10 ビット目にその印を付けます。結果は 0110000000。このチャンネルの累積ディスパリティは -6 になりました。 |
| 画素 0 ・チャンネル 2(赤) | 2 ワード目 | 0xFF → 1000000000 | 入力 0xFF = 11111111 は 1 が 8 個。手順 1(遷移を減らす): 1 が 4 個より多いので、ビットを XNOR でつなぎ、9 ビットの値 011111111 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットを反転して、線の累積バランスを 0 の近くに保ち、10 ビット目にその印を付けます。結果は 1000000000。このチャンネルの累積ディスパリティは -8 になりました。 |
| 画素 1 ・チャンネル 0(青) | 3 ワード目 | 0x80 → 1101111111 | 入力 0x80 = 10000000 は 1 が 1 個。手順 1(遷移を減らす): ビットを XOR でつなぎ、9 ビットの値 110000000 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットを反転して、線の累積バランスを 0 の近くに保ち、10 ビット目にその印を付けます。結果は 1101111111。このチャンネルの累積ディスパリティは +0 になりました。 |
| 画素 1 ・チャンネル 1(緑) | 4 ワード目 | 0x80 → 1101111111 | 入力 0x80 = 10000000 は 1 が 1 個。手順 1(遷移を減らす): ビットを XOR でつなぎ、9 ビットの値 110000000 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットを反転して、線の累積バランスを 0 の近くに保ち、10 ビット目にその印を付けます。結果は 1101111111。このチャンネルの累積ディスパリティは +2 になりました。 |
| 画素 1 ・チャンネル 2(赤) | 5 ワード目 | 0x80 → 1101111111 | 入力 0x80 = 10000000 は 1 が 1 個。手順 1(遷移を減らす): ビットを XOR でつなぎ、9 ビットの値 110000000 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットを反転して、線の累積バランスを 0 の近くに保ち、10 ビット目にその印を付けます。結果は 1101111111。このチャンネルの累積ディスパリティは +0 になりました。 |
| 画素 2 ・チャンネル 0(青) | 6 ワード目 | 0xFF → 1000000000 | 入力 0xFF = 11111111 は 1 が 8 個。手順 1(遷移を減らす): 1 が 4 個より多いので、ビットを XNOR でつなぎ、9 ビットの値 011111111 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットを反転して、線の累積バランスを 0 の近くに保ち、10 ビット目にその印を付けます。結果は 1000000000。このチャンネルの累積ディスパリティは -8 になりました。 |
| 画素 2 ・チャンネル 1(緑) | 7 ワード目 | 0x80 → 0110000000 | 入力 0x80 = 10000000 は 1 が 1 個。手順 1(遷移を減らす): ビットを XOR でつなぎ、9 ビットの値 110000000 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットはそのまま送り、10 ビット目にその印を付けます。結果は 0110000000。このチャンネルの累積ディスパリティは -4 になりました。 |
| 画素 2 ・チャンネル 2(赤) | 8 ワード目 | 0x00 → 0100000000 | 入力 0x00 = 00000000 は 1 が 0 個。手順 1(遷移を減らす): ビットを XOR でつなぎ、9 ビットの値 100000000 を得ます(最上位ビットが使った方式の印)。手順 2(DC バランス): 下位 8 ビットはそのまま送り、10 ビット目にその印を付けます。結果は 0100000000。このチャンネルの累積ディスパリティは -8 になりました。 |
概要
HDMI は、非圧縮の映像と音声を、ソースからディスプレイへ運びます。画素は 3 本の差動 TMDS データチャンネルとクロックで流れ、画素クロックごとに各チャンネルで 10 ビットのシンボルを 1 つ送ります。行やフレームの合間には、同じ線が制御シンボルと、音声や InfoFrame という小さな説明パケットを運ぶ「データアイランド」を運びます。
高速な線の横には、会話を担当する低速な線があります。DDC(I2C バス)でソースがディスプレイの EDID を読み、HPD でディスプレイの存在を知らせ、CEC でリモコンを連携し、HDCP でコピー保護の認証を行います。HDMI 2.1 は TMDS を Fixed Rate Link に置き換え、最大 48 Gbit/s を実現します。
基本情報
- 映像リンク
- TMDS データ 3 レーン + クロック(2.1 は FRL)
- 符号化
- TMDS、画素クロックごとに 8 ビット→10 ビット
- 速度
- 1.4: 10.2G · 2.0: 18G · 2.1: 48G bit/s
- サイドチャンネル
- DDC (I2C), CEC, HPD, +5V
- EDID
- I2C 0x50 の 128 バイトのブロック
- 互換性
- DVI と互換の映像(同じ TMDS)
制御、プリアンブル、ガード、映像
受信側が、画素の始まりをどう知るか。プリアンブルで予告され、ガードバンドで挟まれた期間。
フレーム全体
HDMI は同じ線の上に、制御(同期)、データアイランド(音声・InfoFrame)、映像の 3 種類の期間を混ぜます。それぞれがプリアンブルで予告され、ガードバンドで挟まれるので、受信側は今どの期間にいるかを常に知っています。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| 制御期間: アイドル | 0–2 ワード目 | HSYNC=0 VSYNC=0, CTL=0000 | 画素の合間、TMDS はデータの代わりに制御シンボルを送ります。2 ビットの値 00・01・10・11 に対応する 4 つの特別な 10 ビット符号です。遷移をわざと多くしてあり、画素データと間違えられることがありません。チャンネル 0 が HSYNC と VSYNC(ここでは両方 0)を、チャンネル 1・2 がさらに 4 つの制御ビット(CTL0〜3)を運びます。 |
| 制御期間: HSYNC | 3–5 ワード目 | HSYNC=1 | 水平同期は別の線ではなく、チャンネル 0 の制御シンボルに符号化されます。HSYNC = 1 のとき、チャンネル 0 は 1101010100 の代わりに 0010101011 を送ります。 |
| ビデオプリアンブル | 6–8 ワード目 | CTL0-3 = 1000 | 映像が始まる直前に、8 画素クロックのあいだ CTL0〜3 = 1000(チャンネル 1 の制御シンボルが変わる)にします。「このあとビデオデータ期間」の予告です。データアイランドなら代わりに 1010 で予告します。ここでは 1 回だけ描いていますが、実際のプリアンブルは 8 クロック続きます。 |
| ビデオガードバンド | 9–11 ワード目 | guard band | 固定パターンを 2 画素クロック(ここでは 1 回だけ)。1011001100 / 0100110011 / 1011001100。プリアンブルが乱れても、最初の画素がちょうどどこから始まるかを示します。実際の HDMI は、映像の前にガードを 2 クロック送ります。 |
| 画素 0(オレンジ) | 12–14 ワード目 | 0100000000 0110000000 1000000000 | R = 255、G = 128、B = 0 を 3 つの TMDS シンボルに符号化したものです(前のシーンを参照)。累積ディスパリティは、映像期間の頭ごとに 0 から始まります。 |
| 画素 1(グレー) | 15–17 ワード目 | 1101111111 1101111111 1101111111 | R = G = B = 128。3 チャンネルが同じ値なら、各チャンネルのシンボルも同じになりますが、累積バランスによって、あとの画素では変わることがあります。 |
AVI InfoFrame
データアイランドの小さなパケットで、絵を説明するもの。チェックサムは実計算です。
フレーム全体
82 02 0D A7 10 A8 00 10 00 00 00 00 00 00 00 00 00: 絵が何であるかをテレビへ伝える、17 バイトのメモです。RGB、BT.709、16:9、フォーマット番号 16。テレビは毎フレームこれを読むので、モード変更にすぐ追従します。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| パケット種別 | 0 バイト目 | 0x82 = AVI InfoFrame | InfoFrame は、データアイランドで送る小さな説明用パケットです。0x82 = AVI(Auxiliary Video Information)、0x84 = 音声、0x81 = ベンダー固有。 |
| バージョン | 1 バイト目 | 2 | このパケットのレイアウトのバージョン。AVI では 2 が一般的です。 |
| 長さ | 2 バイト目 | 13 | チェックサムの後ろのデータのバイト数: 13。 |
| チェックサム | 3 バイト目 | 0xA7 (sum ≡ 0) | InfoFrame のすべてのバイト(ヘッダ・チェックサム・データ)の合計が 256 を法として 0 になるように決めます。ここでは実際に計算した値で、合計は 0 です。合計が 0 でない InfoFrame は、シンクが無視します。 |
| データ 1: フォーマット | 4 バイト目 | RGB, active format valid | 色形式と、絵に縁(バー)があるか。 |
| データ 2: 色域とアスペクト | 5 バイト目 | BT.709, 16:9 | 色の解釈の仕方と、絵の形。 |
| データ 3: 範囲とスケーリング | 6 バイト目 | defaults | 拡張色域、量子化範囲(フル / リミテッド)、拡大縮小の有無。ここではすべて既定値です。 |
| VIC | 7 バイト目 | 16 = 1080p60 | Video Identification Code。CTA-861 の表で、映像フォーマット全体を 1 バイトで名指しします。16 = 1920×1080 プログレッシブ 60 Hz。ほかに 4 = 720p60、5 = 1080i60、31 = 1080p50、97 = 3840×2160p60。 |
| データ 5 | 8 バイト目 | 0 | YCC の量子化範囲、コンテンツ種別、画素の繰り返し(低解像度のモードは画素を繰り返して送る)。0 = なし。 |
| バー情報 | 9–16 バイト目 | none | 黒い帯がある場合、その位置です(最初のバイトで「あり」としたとき)。ここでは未使用。 |
EDID: ディスプレイの身分証明
つないだとき、テレビが DDC 線でソースに伝える内容。
フレーム全体
テレビの身分証明書。誰が作ったか、どれだけの大きさか、どんな色を出せるか、昔のどのモードを理解するか。ブロックはチェックサムのバイトで終わり、128 バイト全体の合計が 0 になります。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| ヘッダ | 0–7 バイト目 | 00 FF FF FF FF FF FF 00 | 固定の 8 バイトのパターン: 00、FF が 6 個、00。EDID ブロックだと見分けるための目印です。 |
| メーカー ID | 8–9 バイト目 | "DEM" | 3 文字を 5 ビットずつ(A = 1)詰めたもの。ここでは作例の 'DEM'。実際の ID は UEFI が割り当てます(SAM = Samsung、DEL = Dell、GSM = LG など)。 |
| 製品コード | 10–11 バイト目 | 0x1234 | メーカーの型番。EDID の複数バイトの数値はリトルエンディアンです。34 12 は 0x1234。 |
| シリアル番号 | 12–15 バイト目 | 1 | 32 ビットの数値(リトルエンディアン)。使われないことも多い。 |
| 製造週 | 16 バイト目 | 12 | その年の第 1〜54 週。 |
| 製造年 | 17 バイト目 | 34 → 2024 | 1990 年からの経過年数。 |
| EDID バージョン | 18 バイト目 | 1 | ここでは EDID 1.3(1.4 でさらに増える)。バージョンとリビジョンで 2 バイト。 |
| EDID リビジョン | 19 バイト目 | 3 | 3 = リビジョン 3。 |
| 映像入力 | 20 バイト目 | 0x80 = digital | ビット 7 = 1 はデジタル入力(HDMI / DVI / DisplayPort)。下位ビットはインタフェースの種別。 |
| 横幅 | 21 バイト目 | 51 cm | 画面の物理的な幅(センチメートル)。 |
| 高さ | 22 バイト目 | 29 cm | 画面の物理的な高さ(センチメートル)。解像度と合わせて、ソフトが DPI を計算します。 |
| ガンマ | 23 バイト目 | 2.20 | (ガンマ × 100) − 100 として格納。0x78 = 120 → 2.20。 |
| 機能 | 24 バイト目 | sRGB, preferred timing | 省電力モード、色の種類、「sRGB が既定の色空間」、「最初の詳細タイミングが推奨モード」など。 |
| 色度座標 | 25–34 バイト目 | sRGB primaries | 赤・緑・青の原色と白色点の CIE xy 座標を、10 ビットずつ 10 バイトに詰めたもの。ここは sRGB の値で、ソースが色を正しく写せます。 |
| 既定のタイミング | 35–37 バイト目 | VGA, SVGA, XGA | 対応する、昔からの標準モードのビットマップ。ここでは 640×480@60、800×600@60、1024×768@60。 |
| 標準タイミング | 38–53 バイト目 | 1080p60, 720p60 | 2 バイトの項目が 8 個。各項目は、横画素数を (値+31)×8、アスペクト比、リフレッシュレートの差で表します。D1 40 = (209+31)×8 = 横 1920、16:9、60 Hz で 1920×1080@60。81 40 = 1280×720@60。01 01 は未使用。 |
EDID: 推奨の映像モード
18 バイトのディスクリプタ 1 つで、1080p60 のモードがまるごと決まります。
フレーム全体
02 3A 80 18 71 38 2D 40 58 2C 45 00 FD 1E 11 00 00 1E: 148.5 MHz ÷ (2200 × 1125) = 60.00 Hz。映像モード全体が数個の数値で表され、この 18 バイトが、テレビが「いちばん好きなモード」として申告する内容です。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| ピクセルクロック | 0–1 バイト目 | 14850 × 10 kHz = 148.50 MHz | 10 kHz 単位、リトルエンディアン。0x3A02 = 14,850 → 148.50 MHz。ブランキングも含む、フレーム全体のすべての画素が、この速度で送られます。 |
| 水平の有効 / ブランキング | 2–4 バイト目 | 1920 + 280 = 2200 | 2 つの 12 ビットの数を 3 バイトに詰めたもの。それぞれの下位 8 ビット、そして上位 4 ビットずつを 3 バイト目に。有効 = 0x780 = 1920 画素、ブランキング = 0x118 = 280 画素。1 行あたり合計 2200 クロック。 |
| 垂直の有効 / ブランキング | 5–7 バイト目 | 1080 + 45 = 1125 | 行についての同じ詰め方。有効 = 0x438 = 1080 行、ブランキング = 0x02D = 45 行。1 フレーム合計 1125 行。 |
| 同期タイミング | 8–11 バイト目 | H 88/44 · V 4/5 | ブランキングの中で、同期パルスがどこにあるか。水平フロントポーチ 88、パルス幅 44(クロック)、垂直フロントポーチ 4、パルス幅 5(行)。それぞれの上位 2 ビットは最後のバイトに入っています。 |
| 画像サイズ | 12–14 バイト目 | 509 × 286 mm | 物理的な大きさ(ミリメートル)。509 × 286 mm(23 インチのパネル)。下位バイトが先、そのあと上位 4 ビットずつを入れたバイト。 |
| ボーダー | 15–16 バイト目 | 0, 0 | オーバースキャンの縁(水平・垂直、画素): 0。 |
| フラグ | 17 バイト目 | 0x1E | 0x1E: デジタル別体同期、垂直・水平同期ともに正極性、プログレッシブ。 |
つないだとき
最初の 1 画素の前の会話。
やり取りの全体
1 画素も動く前に、HDMI は会話です。検出、「何が映せる?」の質問、モードの合意、そして送信。「信号なし」の問題の多くは、最初の 3 ステップで起きます。
1ホットプラグ検出
テレビが Hot Plug Detect 線を上げます(ソースが供給する 5 V を使って)。ソースには「ディスプレイがつながっていて準備できた」の意味になります。
2EDID を読む
ソースが DDC 線(普通の I2C バス。I2C のページを参照)で 128 バイト以上を読みます。テレビの EDID メモリはアドレス 0x50 にあり、読み出すのは上の EDID のシーンのバイト列です。
3リンクの設定(HDMI 2.0)
高速なモードでは、ソースが I2C アドレス 0x54(Status and Control Data Channel)でシンクを設定します。スクランブルの有効化とクロック比の設定。低速なモードでは省略します。
4映像が流れ始める
ソースは両方が対応するいちばん良いモード(多くは EDID の推奨タイミング)を選び、TMDS クロックを出して映像を送り始めます。フレームごとのデータアイランドで、AVI InfoFrame が絵の内容を伝えます。
5コピー保護の握手
保護されたコンテンツでは、ソースが同じ DDC 線でシンクを認証し、そのあと映像を暗号化します。これが失敗すると、通常のモードは映るのに、黒や砂嵐の画面になります。
6リモコンのメッセージ
別の 1 本の線で、CEC(Consumer Electronics Control)により機器どうしが互いを操作できます。0x36 は「スタンバイ」で、1 つのリモコンでシステム全体の電源を切る仕組みです。
使われる場面
- テレビ、モニタ、プロジェクタ、ゲーム機、セットトップボックス、ノート PC
- 配信環境でのキャプチャカードや、HDMI-USB / HDMI-NDI 変換器
- 同じケーブルでテレビからサウンドバーへ戻す音声(ARC / eARC)
つまずきやすい点
- つないだ直後の黒画面は、ケーブル不良ではなく EDID や HDCP の問題であることが多いです。別のポート、別のケーブル、EDID エミュレータを試します。
- 帯域は予算です。4K60 4:4:4 の 8 ビットは HDMI 2.0 の 18 Gbit/s が必要で、4K120 や 10 ビットには 2.1 かクロマサブサンプリング(4:2:0)が要ります。
- 長い受動ケーブルは、低速より先に高速で失敗します。同じケーブルが 1080p では動くのに 4K では動かないことがあります。
- 切替器や分配器は HDCP と EDID の間に入ります。安価な分配器が最小公倍数の EDID しか見せないと、最も弱いディスプレイに全体が制限されます。
出典・規格
- HDMI Specification 1.4b / 2.0 / 2.1 (HDMI Forum)
- DVI 1.0 (Digital Display Working Group): TMDS
- VESA E-EDID 1.4
- CTA-861 (InfoFrames, VICs)