こんにちはドルフィンシステムの笹生です。
今日はUSRP X310系 (2954等) に搭載の GPSDO がバージョンアップしていたというお話です。
単純に性能が向上してくれただけなら良かったのですが、USRP 上の FPGAにわたってくる NMEA の仕様が少し変わったらしく、新しい USRP で弊社のパースする関数が正しく動作しなくなってしまうという現象が御座いました。
一応、対策が取れて問題なくパースできるようにはなりましたが、ネット上にドキュメントが無さそうなので記事として残しておきたいと思います。
事の発端は USRP の GPSDO 故障と勘違い
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起動時に流れてくる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[^RIRc?
するとこちらはUBX-M8030というシリーズの GPSDO のようで、明らかに違うことが分かります。また文字列のヘッダ部の $GP~ の表示も $GN~ になっていて、これは GPS 以外の GNSS 衛星も補足できるような意味合いだそうです。
しかも以前の USRP の GPSDO では、途中バイナリが挟まれても、正しく $GPRMC ~ が文字列として読めたのですが、新しい USRP の GPSDO は引用した上記の $GNVTG の後は全てバイナリのようにになってしまい読み取ることができませんでした。なんとなく$GNRMC なども含まれていそうな感じもしたのですが、どうやっても読み取れませんでした。
0 件のコメント :
コメントを投稿