Baud
プロトコル一覧

HDMI

1 本のケーブルに、映像と音声と会話を。TMDS の画素、EDID、InfoFrame。

画素が TMDS シンボルになる

8 ビットの色の値が入り、10 ビットのシンボルが出ます。画素クロックごとに、チャンネルあたり 1 つ。

TMDS: 3 画素、1 行 = 1 画素クロック・10 ビットのシンボル03610001000000001800110000000200100000000037F110111111137F110111111137F1101111111200100000000018001100000001000100000000画素 0 ・チャン…画素 0 ・チャン…画素 0 ・チャン…画素 1 ・チャン…画素 1 ・チャン…画素 1 ・チャン…画素 2 ・チャン…画素 2 ・チャン…画素 2 ・チャン…フィールドをクリックして中身を見る

フレーム全体

画素クロックごとに、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: 3 つのデータチャンネル上の期間・1 行 = 1 画素クロック映像は行末まで続き、データアイランドが音声と InfoFrame を運ぶ036912153541101010100354110101010035411010101000AB00101010113541101010100354110101010035411010101000AB001010101135411010101002CC101100110013301001100112CC101100110010001000000001800110000000200100000000037F110111111137F110111111137F1101111111制御期間: アイドル制御期間: HSYNCビデオプリアンブルビデオガードバンド画素 0(オレンジ)画素 1(グレー)フィールドをクリックして中身を見る

フレーム全体

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)を運びます。
制御期間: HSYNC3–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 1000000000R = 255、G = 128、B = 0 を 3 つの TMDS シンボルに符号化したものです(前のシーンを参照)。累積ディスパリティは、映像期間の頭ごとに 0 から始まります。
画素 1(グレー)15–17 ワード目1101111111 1101111111 1101111111R = G = B = 128。3 チャンネルが同じ値なら、各チャンネルのシンボルも同じになりますが、累積バランスによって、あとの画素では変わることがあります。

AVI InfoFrame

データアイランドの小さなパケットで、絵を説明するもの。チェックサムは実計算です。

AVI InfoFrame・1080p60・17 バイト0481216821000001002000000100D00001101A7101001111000010000A81010100000000000001000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000パケット種別バージョン長さチェックサムデータ 1: フォー…データ 2: 色域と…データ 3: 範囲と…VICデータ 5バー情報フィールドをクリックして中身を見る

フレーム全体

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 InfoFrameInfoFrame は、データアイランドで送る小さな説明用パケットです。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拡張色域、量子化範囲(フル / リミテッド)、拡大縮小の有無。ここではすべて既定値です。
VIC7 バイト目16 = 1080p60Video Identification Code。CTA-861 の表で、映像フォーマット全体を 1 バイトで名指しします。16 = 1920×1080 プログレッシブ 60 Hz。ほかに 4 = 720p60、5 = 1080i60、31 = 1080p50、97 = 3840×2160p60。
データ 58 バイト目0YCC の量子化範囲、コンテンツ種別、画素の繰り返し(低解像度のモードは画素を繰り返して送る)。0 = なし。
バー情報9–16 バイト目none黒い帯がある場合、その位置です(最初のバイトで「あり」としたとき)。ここでは未使用。

EDID: ディスプレイの身分証明

つないだとき、テレビが DDC 線でソースに伝える内容。

EDID ブロック・128 バイトのうち先頭 54このあと、ディスクリプタ 4 つ、拡張数、チェックサム0816243240480000000000FF11111111FF11111111FF11111111FF11111111FF11111111FF1111111100000000001000010000AD101011013400110100120001001001000000010000000000000000000000000000000C00001100220010001001000000010300000011801000000033001100111D0001110178011110000600000110EE111011109110010001A31010001154010101004C01001100991001100126001001100F0000111150010100005401010100210010000108000010000000000000D111010001400100000081100000014001000000010000000101000000010100000001010000000101000000010100000001010000000101000000010100000001010000000101000000010100000001ヘッダメーカー ID製品コードシリアル番号製造週製造年EDID バー…EDID リビ…映像入力横幅高さガンマ機能色度座標既定のタイミング標準タイミングフィールドをクリックして中身を見る

フレーム全体

テレビの身分証明書。誰が作ったか、どれだけの大きさか、どんな色を出せるか、昔のどのモードを理解するか。ブロックはチェックサムのバイトで終わり、128 バイト全体の合計が 0 になります。

フィールド位置例の値意味
ヘッダ0–7 バイト目00 FF FF FF FF FF FF 00固定の 8 バイトのパターン: 00、FF が 6 個、00。EDID ブロックだと見分けるための目印です。
メーカー ID8–9 バイト目"DEM"3 文字を 5 ビットずつ(A = 1)詰めたもの。ここでは作例の 'DEM'。実際の ID は UEFI が割り当てます(SAM = Samsung、DEL = Dell、GSM = LG など)。
製品コード10–11 バイト目0x1234メーカーの型番。EDID の複数バイトの数値はリトルエンディアンです。34 12 は 0x1234。
シリアル番号12–15 バイト目132 ビットの数値(リトルエンディアン)。使われないことも多い。
製造週16 バイト目12その年の第 1〜54 週。
製造年17 バイト目34 → 20241990 年からの経過年数。
EDID バージョン18 バイト目1ここでは EDID 1.3(1.4 でさらに増える)。バージョンとリビジョンで 2 バイト。
EDID リビジョン19 バイト目33 = リビジョン 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, 720p602 バイトの項目が 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 のモードがまるごと決まります。

EDID 詳細タイミングディスクリプタ・1080p60・18 バイト061202000000103A0011101080100000001800011000710111000138001110002D00101101400100000058010110002C0010110045010001010000000000FD111111011E000111101100010001000000000000000000001E00011110ピクセルクロック水平の有効 / ブランキング垂直の有効 / …同期タイミング画像サイズボーダーフラグフィールドをクリックして中身を見る

フレーム全体

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 MHz10 kHz 単位、リトルエンディアン。0x3A02 = 14,850 → 148.50 MHz。ブランキングも含む、フレーム全体のすべての画素が、この速度で送られます。
水平の有効 / ブランキング2–4 バイト目1920 + 280 = 22002 つの 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 バイト目0x1E0x1E: デジタル別体同期、垂直・水平同期ともに正極性、プログレッシブ。

つないだとき

最初の 1 画素の前の会話。

ソースconsole / PCテレビ(シンク)HDMI inputHPD high+5V pinDDC readI2C 0x50, EDIDSCDCI2C 0x54TMDS video148.5 MHz, 1080p60HDCPDDC, 0x3ACECopcode 0x36standbysink detectedshowing 1080p60standby

やり取りの全体

1 画素も動く前に、HDMI は会話です。検出、「何が映せる?」の質問、モードの合意、そして送信。「信号なし」の問題の多くは、最初の 3 ステップで起きます。

  1. 1ホットプラグ検出

    テレビが Hot Plug Detect 線を上げます(ソースが供給する 5 V を使って)。ソースには「ディスプレイがつながっていて準備できた」の意味になります。

  2. 2EDID を読む

    ソースが DDC 線(普通の I2C バス。I2C のページを参照)で 128 バイト以上を読みます。テレビの EDID メモリはアドレス 0x50 にあり、読み出すのは上の EDID のシーンのバイト列です。

  3. 3リンクの設定(HDMI 2.0)

    高速なモードでは、ソースが I2C アドレス 0x54(Status and Control Data Channel)でシンクを設定します。スクランブルの有効化とクロック比の設定。低速なモードでは省略します。

  4. 4映像が流れ始める

    ソースは両方が対応するいちばん良いモード(多くは EDID の推奨タイミング)を選び、TMDS クロックを出して映像を送り始めます。フレームごとのデータアイランドで、AVI InfoFrame が絵の内容を伝えます。

  5. 5コピー保護の握手

    保護されたコンテンツでは、ソースが同じ DDC 線でシンクを認証し、そのあと映像を暗号化します。これが失敗すると、通常のモードは映るのに、黒や砂嵐の画面になります。

  6. 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)

関連するプロトコル