1

私は助けを求めています。最も重要なのはVMEbusの専門家です。

私は、vxWorks 6.8を実行しているリアルタイムpowerpcコントローラー(Emerson MVME4100)から、カーネル2.6.32でDebian6を実行しているLinuxIntelコンピューター(Xembedded XVME6300)への通信チャネルをセットアップすることを目的としたプロジェクトに取り組んでいます。このチャネルはVMEバス上で実行されます。両方のコンピューターはVMEエンクロージャー内にあり、両方ともTundraTsi148チップセットを使用しています。Intelコンピューターはシステムコントローラーとして明示的に構成されていますが、リアルタイムコンピューターは明示的に構成されていません。

セットアップ:Intelコンピューター用に、4MBのカーネルバッファーを作成し、スレーブウィンドウを使用してVMEバス上で共有するカスタムドライバーを作成しました。リアルタイムコンピューターの場合、正確に48640バイトのブロックを繰り返し転送するようにDMA転送を設定します。テストデータのバイト(0、1、2など)をすばやく連続して(可能であれば32ミリ秒ごとに1回)入力します。Intelコンピューターの場合、ドライバーからカーネルバッファーを読み取り、データが正しく到着するかどうかを確認します。手動で起動したPythonプログラム。

期待:Pythonプログラムから同じデータ(ゼロ、1など)が表示されることを期待しています。選択したバス速度(通常、バス速度に応じて290usまたは145us)にほぼ対応する送信時間と、妥当なDMAセットアップオーバーヘッド(最大10us?数百usecsなどのより大きな数を受け入れる用意があります)を期待しています。それがバスが通常必要とするものである場合)

結果:

  • データがまったく届かない場合があり、「送信」時間は約2000usです。
  • データが確実に到着する場合もありますが、送信時間は、選択したバス速度に応じて、約98270usまたは98470usです。

質問:どうすれば送信の信頼性を高め、これらの恐ろしい遅延を減らすことができますか?次に検索する一般的な方向は何ですか?

(できればVMEbusでタグ付けしたい)

どうもありがとう

4

1 に答える 1

1

質問に対する私のコメントは、バスをどのように機能させたかを説明しています。-バスの両側で2eSST320を確認します-DMAトランザクションが有効なブロックサイズを使用していることを確認します(有効な最大値は4096バイトでした)

150MBytes / sの実効速度を達成しました(バスは320MBytes / sを達成できますが、tsi148チップはかなりのオーバーヘッドを引き起こすことが知られています)。これで十分です。

于 2012-09-19T10:56:48.357 に答える