

Low Pin Count ( LPC ) バスは、IBM 互換パーソナルコンピュータで使用されるコンピュータバスで、BIOS ROM (BIOS ROM は2006 年にシリアル周辺インターフェース(SPI) バスに移行されました[ 1 ] )、「レガシー」I/O デバイス (スーパー I/O、組み込みコントローラ、CPLD 、および/またはIPMIチップに統合)、およびTrusted Platform Module (TPM) などの低帯域幅デバイスを CPU に接続するために使用されます。[ 2 ] 「レガシー」I/O デバイスには通常、シリアルポートとパラレルポート、PS/2キーボード、PS/2マウス、およびフロッピーディスクコントローラ が含まれます。
LPCバスを搭載したほとんどのPCマザーボードには、ホストとして機能しLPCバスを制御するプラットフォームコントローラハブ(PCH)またはサウスブリッジチップが搭載されています。LPCバスの物理的な配線に接続されているその他のデバイスはすべて周辺機器です。

LPCバスは、 1998年にインテルによって、ソフトウェア互換のIndustry Standard Architecture(ISA)バスの代替として導入されました。物理的にはかなり異なりますが、ソフトウェア的にはISAに似ています。ISAバスは、16ビットのデータバスと24ビットのアドレスバスを備えており、16ビットのI/Oポートアドレスと24ビットのメモリアドレスの両方に使用できます。どちらも最大8.33MHzの速度で動作します。LPCバスは、4倍のクロック速度(33.3MHz)で動作する、高度に多重化された4ビット幅のバスを使用して、同様のパフォーマンスでアドレスとデータを転送します。
LPC の主な利点は、基本バスに必要な信号が 7 つだけで、周辺チップに必要なピンの数を大幅に削減できることです。LPC を使用する集積回路は、ISA の同等品よりも 30 ~ 72 ピン少なくて済みます。これにより、混雑した最新のマザーボードでもバスの配線が容易になります。クロックレートは、統合をさらに容易にするためにPCIのクロックレートに合わせるように選択されました。また、LPC はマザーボード専用のバスとなることを意図しており、一般的に使用されている標準化されたコネクタはありませんが、Intel はデバッグ モジュールで使用するためのコネクタを定義しています。[ 3 ]ピン配置がマザーボード ベンダー独自の 少数の LPC 周辺ドーターボードが利用可能です。トラステッド プラットフォーム モジュール (TPM)、[ 2 ] BIOS 診断コードを表示するPOST カード、 [ 4 ]および産業用途向けのISA 互換シリアル ポート周辺機器。 [ 5 ]デバイス検出はサポートされていません。マザーボード上のデバイスまたは特定のモデルのTPMのみが接続されるため、ホストファームウェア(BIOS、UEFI)イメージには、特定のマザーボード上に存在すると想定されるデバイスとそのI/Oアドレスの静的な説明が含まれます。
LPC制御信号は、名前に含まれる「#」記号が示すように、アクティブローです。信号は3つのカテゴリに分類されます。
LPC仕様では、双方向データ転送に必要な7つの必須信号が定義されています。
定義済みの信号は6つあり、これらの機能は必要としないLPCデバイスにとってはオプションですが、最初の2つの信号のサポートはホストにとって必須です。
LPCバスは、従来のPCIバスの電気的な仕様を踏襲しています。特に、バス信号を切り替えて別のデバイスが通信できるようにするには、2回のアイドルサイクルが必要となるという制約を共有しています。最初のサイクルでは、バスはアクティブにハイレベルに駆動されます。2回目のサイクルでは、バスは駆動されず、プルアップ抵抗によってハイレベルに保持されます。新しいデバイスは、3回目のサイクルでバスを介してデータの送信を開始できます。LPCの動作時間の大部分は、このような切り替え処理に費やされます。
前述のとおり、LPCバスはISAバスと同様のパフォーマンスを実現するように設計されています。正確なデータ転送速度は、実行されるバスアクセスの種類(I/O、メモリ、DMA、ファームウェア)とホストおよびLPCデバイスの速度によって異なります。すべてのバスサイクルは、データ転送ではなくオーバーヘッドに多くの時間を費やしますが、16バイトおよび128バイトのファームウェア読み取りサイクルは例外で、オーバーヘッドは17サイクルですが、データ転送はそれぞれ32サイクルおよび256サイクルで、スループットは10.88と15.63 MB/s 。[ 7 ] 標準で定義されている次に速いバスサイクルである32ビットISAスタイルのDMA書き込みサイクルは、合計20クロックサイクルのうち8サイクルのみをデータ転送に費やし(残りの12サイクルはオーバーヘッド)、最大6.67 MB/sの速度を実現します。[ 7 ]
最も遅いバスサイクルの1つは、単純なメモリの読み書きであり、17クロックサイクル(デバイスによって課される待機状態を含む)のうち、わずか2サイクルのみがデータ転送に使用され、転送速度は1.96MB /秒です。
LPCトランザクションは、LFRAME#がローからハイに遷移した時点で開始されます。LFRAME#がローの間、ホストはLADラインに4ビットのSTARTコードを出力します。LFRAME#がハイに遷移する直前のサイクルで送信されるコードによって、次のバス・トランザクションが定義されます。
通常、ホストは効率化のため、LFRAME#を1クロックサイクルだけローに保持します。ただし、例外として、他の操作の途中でも開始される可能性のあるアボート処理があります。この場合、ホストはLFRAME#を最低4クロックサイクルローに保持し、その間、すべてのデバイスはLADバスの駆動を停止する必要があります。4サイクル目に、ホストはLADをハイ(1111)に駆動します。LFRAME#がハイからローに遷移すると、バスはアイドル状態にリセットされます。
それ以外のほとんどすべての場合において、LPCトランザクションは以下の一般的な構造を使用します。
DMA転送は多少異なります。§ ISA 互換DMAは複数のSYNCフェーズとデータフェーズを持つ場合があります。§ バスマスターDMAはSTARTコードの直後にバスターンアラウンドがあり、最終ターンアラウンドはありません。
SYNCフェーズでは、デバイスがトランザクションに待機状態を挿入できます。SYNC値には6種類あり、すべて偶数パリティ(偶数ハミング重み)を持ちます。そのうち3つはSYNCフェーズを終了させ、残りの3つはホストが次のSYNCニブルを待つように促します。
Intelは、システムBIOSイメージをLPCバスに直接接続された単一のフラッシュメモリチップに格納できるようにLPCバスを設計しました。Intelはまた、パラレルATAポートの代替として、オペレーティングシステムイメージとソフトウェアアプリケーションをLPCバスに直接接続された単一のフラッシュメモリチップに格納できるようにしました。[ 8 ]
CPLDまたはFPGAはLPCホストまたは周辺機器を実装できる。[ 9 ]
初代Xboxゲーム機には、Xboxに新しいコードを起動させるために使用できるLPCデバッグポートがあります。 [ 10 ] [ 11 ]
ISA互換のLPCバストランザクションはすべて、STARTコード0000を使用します。[ 7 ] LFRAME#が再びハイになる最初のサイクル中に、ホストは「サイクルタイプ/方向」(CTDIR)フィールドを駆動します。これは、転送のタイプ(I/O、メモリ、またはDMA)を示す2ビットと、続く転送の方向(デバイスからの読み出し、またはデバイスへの書き込み)を示す1ビットで構成されます。これに続いて転送アドレスフィールドが続きますが、そのサイズはサイクルのタイプによって異なります。
メモリおよびI/Oアクセスは、シングルバイトアクセスとしてのみ許可され、§ トランザクション構造::アドレス、書き込みの場合はホストからのデータ、ターンアラウンド、SYNC、読み取りの場合はデバイスからのデータで説明されているように動作します。
ホストが未使用のアドレスへの転送を試みると、どのデバイスもSYNCサイクルを駆動せず、ホストはLADバス上で1111を検出します。1111が3サイクル検出された後(低速デバイスがアドレスをデコードしてSYNCパターンの駆動を開始するための2サイクルに加え、2回のターンアラウンドサイクルも許容されます)、ホストは操作を中止します。
プラットフォームコントローラハブ(PCH)チップまたはサウスブリッジチップはホストとして機能し、LPCバスを制御します。メモリコントローラがチップセット内にある場合は、そのバス上のデバイスの中央DMAコントローラとしても機能します。独自のメモリコントローラを内蔵するCPUでは、DMAコントローラはCPU内にあります。ISAバスを使用するシステム向けに作成されたソフトウェアとの互換性を確保するため、DMAコントローラには、IBM PC/ATアーキテクチャの「レガシー」オンボード周辺機器(2つのプログラマブル割り込みコントローラ、プログラマブルインターバルタイマー、2つのISA DMAコントローラなど)の回路相当物が含まれており、これらはすべて「ISAスタイルのDMA」に関与しています。
ISA互換DMAは、ホスト上のIntel 8237互換DMAコントローラを使用し、メモリバッファの位置と長さ、および転送方向を管理します。デバイスは指定されたDMAチャネル番号にサービスを要求するだけで、ホストはLPCバス上でDMAアクセスを実行します。
要求は、仮想ISA互換DMA要求(DRQ)ラインによって行われます。このラインは、デバイスのLDRQ#信号を使用してエミュレートされ、エミュレートされたDRQライン上の遷移を示します。これは、LDRQ#信号上の6ビット要求によって行われます。0のスタートビット、3ビットのDMAチャネル番号(最上位ビットから)、1ビットの新しい要求レベル(ほとんどの場合1で、DMA転送が要求されていることを示します)、および最後の1ストップビットです。ホストは、次に利用可能な機会にDMAサイクルを実行することで応答します。DMAサイクルは、メモリへのアクセス方向に基づいて命名されるため、「read」はLPCデバイスへの転送、「write」はLPCデバイスからの転送となります。
「アドレス」は、2つのニブルとして送信される6ビットで構成されます。3ビットのチャネル番号と1ビットの端末カウント表示(ISAバスのTCピン、または8237のEOP#出力)、それに続く2ビットの転送サイズです。
デフォルトでは、DMAチャネル0 ~ 3は8ビット転送を実行し、チャネル5 ~ 7は16ビット転送を実行します。ただし、LPC固有の拡張機能により、どのチャネルでも1バイト、2バイト、または4バイトの転送が可能です。複数バイトの転送を実行する場合、各バイトには以下で説明するように独自のSYNCフィールドがあります。
通常のSYNC「準備完了」パターン0000(またはエラーパターン1010)も、対応するエミュレートされたDMA要求信号の解除を引き起こします。ホストは、デバイスがLDRQ#信号を介して別のDMA要求を行うまで、直後のバイトの後にDMAを停止します。SYNCパターン1001は、ホストがデバイスのDMA要求がまだアクティブであるとみなすべきであることを示します。ホストは、LDRQ#による別の要求なしに、この転送の残りのバイトを続行するか、必要に応じて別の転送を開始します。
DMA書き込みの場合、デバイスからデータが転送される際、SYNCフィールドに続いて8ビットのデータと別のSYNCフィールドが送信され、ホストが指定した転送長に達するか、デバイスが転送を停止するまでこの処理が繰り返されます。2サイクルのターンアラウンドフィールドでトランザクションが完了します。DMA読み出しの場合、デバイスにデータが転送される際、SYNCフィールドに続いてターンアラウンドが送信され、データ、ターンアラウンド、SYNC、ターンアラウンドのシーケンスが転送されるバイトごとに繰り返されます。
割り込みは、PCIバス用に開発された「PCI用シリアル化割り込み」プロトコルを使用して、単一の共有SERIRQラインを介して送信されます。[ 6 ]ホストは定期的に割り込みパケットを送信し、そのパケット内で各割り込み要求には1クロックのタイムスロットが割り当てられ、2クロックのターンアラウンドサイクルで区切られます。初期同期はホストによって行われます。簡略化した例を以下に示します。
デバイスはフレームの開始を認識できます。なぜなら、ホストのみが1サイクル以上ラインをローレベルに駆動するからです。ホストはクロックサイクル数をカウントすることで割り込みを識別します。18クロック目でSERIRQラインがローレベルに駆動されている場合、IRQ 18/3=6がアサートされます。
割り込みスロットの数はシステム固有であり、17 が一般的な数です。16 の ISA 互換割り込み (IRQ0 ~ IRQ15) とNMIが含まれます。
最後の割り込みスロットの後、ホストは2つまたは3つのローサイクルとそれに続く2つのターンアラウンドサイクルからなる「停止」信号を付加します。
「連続」モードでは、ホストが定期的に新しいパケットを開始します。「静音」モードでは、デバイスがSERIRQを1クロックサイクルローにすることで新しいパケットを要求します。その後、ホストは残りの7クロックサイクルの間、ラインをローに駆動し続けます。この時点から、プロトコルは同じです。
モードは、各パケットの最後にホストから送信されるストップ信号の長さによって制御されます。ストップ信号が3クロック分のロー信号で構成されている場合は、連続モードとなり、ホストのみが新しいパケットを開始できます。ストップ信号が2クロック分のロー信号で構成されている場合は、静音モードとなり、どのデバイスでも割り込みパケットを開始できます。
STARTフィールドの値が0000または1111以外の場合は、ISA非互換のさまざまな転送を示すために使用されます。[ 7 ] サポートされている転送は次のとおりです。
これにより、ファームウェア(BIOS)を通常の周辺機器アドレス空間の外に配置することが可能になります。これらの転送はISA互換転送と似ていますが、以下の点が異なります。
LPCバス上の最大2つのデバイスは、LDRQ#信号を使用して予約済みのDMAチャネル4の使用を要求することで、バスマスター転送を要求できます。この場合、ホストはバスマスター0の場合は0010、バスマスター1の場合は0011という特別なSTARTフィールドで転送を開始し、その後すぐに2回のターンアラウンドサイクルを実行して、バスをバスマスターDMAサイクルを要求したデバイスに渡します。ターンアラウンドサイクルの後、転送は役割が逆転したホスト開始ISA互換転送と非常によく似た形で進行します。
これは 16 ビット ISA バス マスタリングとは異なり、LPC バス マスタリングではメモリ転送時に 32 ビットのメモリ アドレスが必要で、ISA スタイルの DMA チャネルを使用せず、8、16、または 32 ビットの転送をサポートできます。一方、16 ビット ISA バス マスタリングではメモリ転送時に 24 ビットのメモリ アドレスが必要で、ISA スタイルの DMA チャネルの使用が必要で、32 ビットの転送は実行できません。[ 12 ]
Trusted Platform Module 2.0 仕様では、I/O 読み取りサイクルと I/O 書き込みサイクルに基づいた特別な TPM 読み取りサイクルと TPM 書き込みサイクルが定義されています。[ 13 ]これらのサイクルでは、以前は予約されていた値 0101 を持つ START フィールドを使用し、その後に CTDIR ニブルと 16 ビットの I/O アドレスが続きます。これは ISA 互換の書き込みと同様です。[ 13 ]これらのサイクルは、TPM のローカリティ機能を使用するときに使用されます。[ 13 ]
LPCバス仕様では、接続できる周辺機器の種類が制限されています。接続できるのは、スーパーI/Oデバイス、不揮発性BIOSメモリ、ファームウェアハブ、オーディオデバイス、組み込みコントローラといったデバイスクラスに属するもののみです。さらに、各クラスごとに使用できるバスサイクル数も制限されています。[ 7 ]
スーパー I/O デバイスとオーディオ デバイスは、I/O サイクルを受け入れ、ISA スタイルのサードパーティ DMA サイクルを受け入れ、バス マスタ サイクルを生成することができます。不揮発性 BIOS メモリや LPC フラッシュ デバイスなどの汎用アプリケーション メモリ デバイスは、メモリ サイクルを受け入れることができます。ファームウェア ハブは、ファームウェア メモリ サイクルを受け入れることができます。組み込みコントローラは、I/O サイクルを受け入れ、バス マスタ サイクルを生成することができます。これらのクラスには役に立たないと判断された一部の ISA サイクルは削除されました。これには、ホスト開始の 2 バイト メモリ サイクルとホスト開始の 2 バイト I/O サイクルが含まれます。これらの削除された転送タイプは、ISA バスではホストによって開始できますが、LPC バスでは開始できません。ホストは、2 バイト サイクルを 2 つの 1 バイト サイクルに分割してシミュレートする必要があります。ISA バスも同様の概念です。元の 8 ビット ISA バスでは、16 ビット サイクルを分割する必要がありました。そのため、16 ビット ISA バスは、16 ビット メモリまたは I/O サイクルのターゲットとなる ISA デバイスが、ISA サイクル スプリッタの支援なしに要求された 16 ビット転送を受け入れることができることをバスに伝える信号をアサートしない限り、8 ビット ISA 周辺機器の便宜のために 16 ビット サイクルを自動的に 8 ビット サイクルに分割します。[ 12 ] ISA スタイルのバス マスタリングは、LPC バスでは ISA スタイルの DMA コントローラにまったく依存しないバス マスタリング プロトコルに置き換えられました。これは、デバイスがどの DMA チャネルで開始できるバス マスタ サイクルの種類に関する ISA の制限を取り除くために行われました。LPC が ISA から継承した ISA スタイルのバス サイクルは、1 バイトのホスト開始 I/O バス サイクル、1 バイトのホスト開始メモリ サイクル、および 1 バイトまたは 2 バイトのホスト開始 ISA スタイルの DMA サイクルです。[ 7 ]
しかし、ISA 以外のバス サイクルもいくつか追加されました。ファームウェア ハブ以外のデバイスのパフォーマンスを向上させるために追加されたサイクルには、LPC スタイルの 1、2、4 バイトのバス マスタ メモリ サイクル、1、2、4 バイトのバス マスタ I/O サイクル、および 32 ビット転送を実行できるという点を除いて ISA スタイルのサードパーティ DMA のすべての制限に準拠する 32 ビット サードパーティ DMA が含まれます。従来の ISA スタイルの DMA を受け入れることが許可されているデバイスは、この 32 ビット ISA スタイルの DMA も使用できます。ホストは 32 ビット ISA スタイルの DMA サイクルを開始でき、周辺機器はバス マスタ サイクルを開始できます。ファームウェア ハブは、ファームウェア アドレスと通常のメモリ マップド I/O アドレスが競合せずに重複できるように、ファームウェア ハブ専用に設計されたファームウェア サイクルを消費します。ファームウェア メモリの読み出しは、一度に 1、2、4、16、または 128 バイトを読み取ることができます。ファームウェアのメモリ書き込みでは、一度に1バイト、2バイト、または4バイトを書き込むことができます。[ 7 ]
LPCバスはISA拡張カードをサポートしていません。