USRP X310系 (2954等) に搭載の GPSDO がバージョンアップ

こんにちはドルフィンシステムの笹生です。

今日はUSRP X310系 (2954等) に搭載の GPSDO がバージョンアップしていたというお話です。

単純に性能が向上してくれただけなら良かったのですが、USRP 上の FPGAにわたってくる NMEA の仕様が少し変わったらしく、新しい USRP で弊社のパースする関数が正しく動作しなくなってしまうという現象が御座いました。

一応、対策が取れて問題なくパースできるようにはなりましたが、ネット上にドキュメントが無さそうなので記事として残しておきたいと思います。

事の発端は USRP の GPSDO 故障と勘違い

いつものように弊社で USRP の開発をしていて、弊社所有の USRP では FPGA での GPS NMEA の取得が出来ていたのですが、納品用の新しい USRP ではまったく NMEA の取得がうまく行きませんでした。それ以外の送受信の機能などは問題なく動作しており、もしかして GPSDO が故障しているのではないか?という想定の下、 NI のサポートへ連絡する寸前まで行っていました。
しかし、もう一台の新しい USRP も同じ現象であることが判明し、さすがに2台連続で GPSDO の故障は考えにくいため、詳細に調べることになりました。

また、AI に聞いたところ、
NIのUSRP RIO(IDL)では Get GPS NMEA String.vi(GPRMC/GPGGA選択)を使うのが推奨フローです。これが内部でレジスタ読み出し・パースを面倒見ます。
• 古い個体=自前でレジスタを読んでも偶然うまく見えていた
• 新しい個体=レジスタ配置/読み出し幅/境界条件の差で、同じ自前コードだと破綻
…というパターンがかなりあります。
もし「自前でレジスタ直読み」しているなら、まず Get GPS NMEA String.vi を挟んだ時に正常に読めるかで分岐できます。

ということだったので確認したところ、新旧両方とも正しく読めたので、やはり故障ではないなという結論に至りました。 

公式のホストで GPS NMEA を取得する方法のリンクはこちらです。「Fetching NMEA Sentences Using LabVIEW Instrument Design Libraries for NI USRP RIO」

GPSDO のアップデートが判明

弊社福島の方で、以前の記事「USRP RIOに搭載されているGPSの世代とその実力」にあります。引用します。

で、USRP起動時に流れてくるNMEAにはGPSDOのバージョン情報が含まれています。

それが以下。

$GPTXT,01,01,02,u-blox ag - www.u-blox.com*50
$GPTXT,01,01,02,HW  UBX-G60xx  00040007 FF5FFFFFp*51
$GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar
$GPTXT,01,01,02,u-blox ag - www.u-blox.com*50
$GPTXT,01,01,02,HW  UBX-G60xx  00040007 FF5FFFFFp*51
$GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar 17 2011 16:18:34*59
$GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*20
$GPTXT,01,01,02,ANTSTATUS=DONTKNOW*33
$GPRMC,,V,,,,,,,,,,N*53

ログを見るとGPSDOに搭載されているGPSコントローラーは、u-blox製の2011年のものだと言うことが分かります。

世代的にはu-blox NEO-6かNEO-5と思われます。2021年現在の最新は第9世代なので、3~4世代前のGPSが搭載されているようですね。

 弊社の所有している USRP はまさにこの GPSDO のバージョンで、UBX-G60xx 系の GPSDO でした。

新しい USRP も同じように USRP 起動時のログを取ってみました。

$GNTXT,01,01,02,u-b$GNTXT,01,01,02,u-blox AG - www.u-blox.com*4E

$GNTXT,01,01,02,HW UBX-M8030 00080000*60

$GNTXT,01,01,02,ROM CORE 3.01 (107888)*2B

$GNTXT,01,01,02,FWVER=SPG 3.01*46

$GNTXT,01,01,02,PROTVER=18.00*11

$GNTXT,01,01,02,GPS;GLO;GAL;BDS*77

$GNTXT,01,01,02,SBAS;IMES;QZSS*49

$GNTXT,01,01,02,GNSS OTP=GPS;GLO*37

$GNTXT,01,01,02,LLC=FFFFFFFF-FFFFFFED-FFFFFFFF-FFFFFFFF-FFFFFF6D*5E

$GNTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*3E

$GNTXT,01,01,02,ANTSTATUS=DONTKNOW*2D

$GNTXT,01,01,02,PF=3FF*4B

$GNRMC,,V,,,,,,,,,,N*4D

$GNVTG,,,,,,,,,N*2?ホ:b_NIRc?ホJJJJJKVBPu゙?-:b_IRc?ホJJJJJKVBu゙?-笆JツラロラR[^RIRc?

するとこちらはUBX-M8030というシリーズの GPSDO のようで、明らかに違うことが分かります。また文字列のヘッダ部の $GP~ の表示も $GN~ になっていて、これは GPS 以外の GNSS 衛星も補足できるような意味合いだそうです。

しかも以前の USRP の GPSDO では、途中バイナリが挟まれても、正しく $GPRMC ~ が文字列として読めたのですが、新しい USRP の GPSDO は引用した上記の $GNVTG の後は全てバイナリのようにになってしまい読み取ることができませんでした。なんとなく$GNRMC なども含まれていそうな感じもしたのですが、どうやっても読み取れませんでした。

GPS NMEA 端子→ GPS Data In 端子で解決

結局解決できたのは、これまでパースしていた GPS NMEA 端子ではなく、GPS Data In 端子に変更することで、$GPRMC と、$GPGGA が取得できるようになったのでひとまず対策が取れました。
しかし、GPS Data In 端子はその2種類の NMEA 情報しか取れないようです。通常の用途ではまぁ問題は無いと思いますが、公式ドキュメントなどはない(と思う)のでたまたま見つけてラッキーでした。

ホスト側の公式関数 Get GPS NMEA String.vi も$GPRMC と、$GPGGA しか取得しないので恐らくこの端子と元は同じなんだと思います。

まとめ

今回は、USRP-RIO (X310系 2954とか)に搭載されている GPSDO のアップデートによって、FPGA からアクセスできる GPS NMEA 端子の振る舞いが変わってしまったことについての記事となりました。
結果的に GPS Data In 端子が使用可能だったのでよかったですが、この辺りのドキュメントについてドキュメントがありましたら是非教えてください。
GPS Data Out という端子もあり、こちらは FPGA から GSPDO 側への出力なので、何か設定を変更したりできるかもしれないのですが、全く分かりません。(もしかしたら取得頻度を 1Hz から 10Hz への変更ができたり。。。)

またこの辺りは福島にも時間のある時に調べてもらおうかと思います。

0 件のコメント :

コメントを投稿