19

オンボード メモリのないカスタム PCI Express デバイスを読み書きできる Windows ドライバを作成できるように、PCI Express の仕組みを理解しようとしています。

PCIE 構成空間のベース アドレス レジスタ (BAR) が、PCI Express が応答するメモリ アドレスを保持し、書き込みが許可されていることを理解しています。(それは正しく理解されていますか?)

私の質問は次のとおりです。

  • PCIEについて話すとき、物理アドレスと比較した「バス固有のアドレス」とは何ですか?
  • BAR にはいつ、どのようにアドレスが入力されますか? ドライバは、メモリの割り当てとアドレスのペリフェラル BAR への書き込みを担当していますか?
  • ペリフェラルからホスト メモリにデータを転送するときに DMA は使用されますか?

お時間をいただきありがとうございます。

よろしくお願いします、

4

3 に答える 3

17

クエリから、PCIe スレーブ デバイス用のドライバーを作成する必要があることは明らかです。PCIe転送の背後で起こっていることのスキームを理解するために、インターネット上で多くのものを利用できます(PCIeバス列挙、メモリへの周辺アドレスマッピングなど)。

はい、PCIeレジスタのメモリへのマッピングに関する理解は正しく、それらを読み書きできます(たとえば、Linux PCIeデバイスドライバの場合、「ioremap」を使用してこれを行うことができます)。

アドレスバスは、物理アドレスを指定するために使用されます。プロセッサまたは DMA 対応デバイスがメモリ位置の読み取りまたは書き込みを行う必要がある場合、アドレス バス上でそのメモリ位置を指定します。それに追加するものは何もありません。「PCIe バス列挙」トピックは、2 番目の質問に答えます。

3 番目の質問はあいまいです。スレーブ PCIe デバイスを意味します。そうであると仮定すると、はい、DMAコントローラーを使用してスレーブPCIeデバイスとホストの間でデータを転送できます。PCIeバスを介してホストに接続された「PCIe-DMA」を含むプロジェクトに取り組んでいます。本当にあなたの設計と実装に依存します。したがって、私の場合、PCIe-DMA 自体は、PCIe 経由でホストに接続されたターゲット ボード上のスレーブ PCIe デバイスです。

于 2014-01-11T18:04:01.983 に答える