ソフトウェア制御のUSRPでマイクロ秒単位の送受信制御を行う

PCIeバス経由でのUSRP-RIOの認識がおかしい

こんにちはドルフィンシステム福島です。
早いものでもう5月末。ようやくなれた「2018年」ももう半分を過ぎようとしています。

新しい年度も始まったことで、今年度後半の開発予定も徐々に話が入ってきています。

SDRの開発を考えている・無線機を開発したい、とお考えの方は、お早めにご連絡ください


また色々と手が足りないこともありますので、一緒にSDRのお仕事をしたい!という方は、是非問い合わせページからご連絡ください。

特に年齢などのこだわりはありませんが、一芸に秀でていて柔軟性がある方は是非。


今回の内容

今回は、またまたですが、USRP-RIOとの接続トラブルのお話です。

USRP-RIOをPXIシャーシで接続する場合はほとんど問題が発生したことはありませんが、USRP-RIOをデスクトップPCで接続するPCIe接続はたまにトラブルが発します。

いつもPXIシャーシにUSRP-RIOを接続して開発を行い、最終段階で実機のPC上で動作確認をしようとすると「何故か動作しない」という事が起きるので、気が抜けませんね。

前回のトラブル事例

・2018/03/26 : PCIe接続のUSRP-2954でInvalid Parameter??
・2018/04/09 問題解決しました。→USRP-RIOのInvalid Parameterエラーが解決

はWindows高速スタートアップに起因するデバイスドライバ読み込みの問題でしたが、今回はBIOSの問題です。


先日納品直前に発生したトラブルは以下の通りです。


=====ここから=====

○○様

毎度お世話になっております。ドルフィンシステムの○○です。

納品用デスクトップPCについてご報告です。

開発が完了した制御ソフトウェアを納品用デスクトップPCで動作させたところ、USRP-RIOがうまく認識されないという問題が発生しました。

PC 2台とも同じ症状で、PCIe x16 スロットにインターフェースカードを刺した場合、ドライバをインストールしても、USRP が
「pci データ取得およびシグナル処理コントローラー」
という表記になってしまい、制御できません。

インターフェースカードのスロットを PCIe x4 に変更したところ、「?」マークがついた状態でなんとか USRP と認識はするのですが、作成した制御ソフトウェアはエラーして動作しませんでした。

これまでは弊社のPXIシャーシで開発を進めておりまして、納品用デスクトップPCでの確認が遅くなってしまいました。大変申し訳ございません。

今、調査しておりますが、お手元の環境でも動作確認して頂ければ幸いです。

宜しくお願いいたします。

=====ここまで=====


現象を確認する

まず現象を確認します。

あるメーカ製デスクトップPCの PCI Express x16スロットに、USRP-RIOをPCIe MXIカードを使って接続すると・・・。

clip_image001

このように認識がおかしいです。

clip_image002

プロパティで詳細を見ても原因は特定できませんが、なんらかのハードウェアが原因でドライバが読み込まれていないようです。

clip_image003

clip_image004

ナショナルインスルツメンツ製デバイス管理ソフトウェア "NI-MAX"で見ても正しいデバイスとして読み込まれていませんが、PCIe MXIカードは認識しているのでカード自体が原因であると言うより、カードに接続されたUSRP-RIOがおかしい事が分かります。

clip_image005


接続するスロットを変えてみる

こういう時のトラブルシューティングの定石通り、PCIe MXIカードを接続するスロットを変えてみます。PCIe x16スロットではなくx4スロットに挿入してみます。

すると!

NI-MAXではデバイスが認識しています。

clip_image006

ですが、デバイスマネージャでは「はてなマーク」がついていて、正常に動作していません。

clip_image007

プロパティでは「正常に動作しています」と書かれていますが、アプリケーションを動作させるとエラーが発生しているので、正常動作ではありません。

clip_image008


解決策

結局のところ、解決いたしました。
お客様がとても熱心に担当されて、直接ナショナルインスルツメンツの間でやりとりがあり、解決に至りました。


原因-1

PCIe MXIカードは、PCI Expressスイッチとして動作してUSRP-RIOと接続しますが、Windowsがこのスイッチの初期状態を誤解してスイッチが無効と判断してしまうようです。
この現象は他のPCでは発生しませんでしたので、このPCとの相性問題です。

以下のページの「エラー1の回避策」の通りに、レジストリにHackFlags = 400を設定しました。


Windows Vista または Windows Server 2008 を実行しているコンピュータに PCI Express 拡張シャーシを接続すると、エラー メッセージ "コード 12" または "コード 31" が表示される
https://support.microsoft.com/ja-jp/help/942959/error-message-when-you-attach-a-pci-express-expansion-chassis-to-a-com

具体的なステップは、


  1. [スタート] をクリックし、[検索の開始] ボックスに 「regedit」 と入力し、[プログラム] リストの [regedit] をクリック します。
    管理者パスワードまたは確認を求めるメッセージが表示された場合は、パスワードを入力するか、[続行] を クリックします。
  2. 次のレジストリ サブキーを見つけてクリックします。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PnP\Pci
  3. HackFlags レジストリ エントリが存在しない場合は、次の手順を実行します。
    1. [編集]メニューの [新規] をポイントし 、[DWORD (32 ビット) の値] をクリックします。
    2. 「HackFlags」と入力し、Enter キーを押します。
    3. [編集] メニューの [変更] をクリックします。
    4. [値の データ] ボックス に「400」と入力し、[基本] 領域の [16 進数] をクリックし 、[OK] をクリックします。
    5. レジストリ エディターを終了します。
  4. HackFlags レジストリ エントリが存在する場合は、次の手順を実行します。
    1. [HackFlags] を右クリックし、[ 変更] を クリックします。
    2. [値の データ] ボックス に「400」と入力し、[基本] 領域の [16 進数] をクリックし 、[OK] をクリックします。
    3. レジストリ エディターを終了します。

原因-2

デスクトップPCのBIOSとPCIe MXIカードとの互換性に問題がありました。

PCIe-8371のディップスイッチをモード1に切替え、
BIOS Compatibility Softwareをインストールすることで
USRPと認識してくれるようになりました。


MXI-Express BIOS Compatibility Software 1.5 - Windows 8/7/Vista/XP 32-bit
http://www.ni.com/download/mxi-express-bios-compatibility-software-1.5/3764/en/


clip_image010


まとめ

多くの場合PCIe MXIカードを使用すれば、デスクトップPCとUSRP-RIOは問題なく接続できます。
ですが今回の件のように、BIOSなどPC側に起因した相性問題も発生することがあります。


今回は、

・Windowsのレジストリを変更すること。
・PCIe MXIカードのDIPSWを変更し、MXI-Express BIOS Compatibility Softwareをインストールすること。

で解決いたしました。


私たちドルフィンシステムは、今回ご紹介したようにお客様やナショナルインスルツメンツ様にも助けて頂きながらSDRシステムの開発を行っております。

SDRを用いた無線システムのご要望はドルフィンシステムへ。


※文中の「お客様に出したメール」は、ブログ用の演出です。

コメント