ZED-F9Pモジュール | u-blox
F9Pは高精度測位が可能なGNSS受信機モジュールのひとつです。ボードにもよりますが電子工作が容易になる状態まで作られた既製品は大体2-3万円強と決して安くない値段をしており、壊れた場合に買い直しより修理を試みたくなります。最近よくF9Pを壊しているのでファームウェアを安全な状態まで持っていくやり方をまとめます。
フローチャートは次の図の通りです。各ノードにおける詳細な作業を後述します。
問題が起きていることを確認
直す必要があるのかどうか確認します。自分はu-centerからの設定変更を受け付けるか否かで判断しています。よくある異常な状態は次のようなメッセージを出力し続け設定変更に応じない、というものです。他にもレジスタ回りの致命的エラーはまずファームウェアのリセットが必要になるでしょう。
$GNTXT,01,01,01,ldr no pld buf*02
$GNTXT,01,01,01,exception 0x00130905 has occurred*20
$GNTXT,01,01,01,NMEA unknown msg*46
この時、$GNTXT内もきっちり読んでおくとお得な時が多いです。
$GNTXT,01,01,01,Reboot reason: V_IO supply undervoltage*59
の様なソフトウェア上では解決できない回路構成上のエラーも教えてくれる時があります。
USBで接続できる?
文字通りです。シリアルポートに接続できるかできないかです。u-centerが特にわかりやすいです。デバイスとして認められるが接続できない、という状態です。接続できれば問題の解決はすぐです。
U Center Port Connection Errorより引用
UART1で接続できる?
USB側で接続できない場合、UART1でF9Pと通信することを試みます。経験則ですがUART1はかなり頑強でUSBより信頼できます。余談ですがF9PのUART2は通信こそできますが操作命令のプロトコルに対応していません。測位結果を得られるのみです。
ボードによってはUART1でPC上のu-centerとボード上のF9Pをつなぐために新たに回路を構築する必要があります。この時USB-シリアル変換モジュールを使うと楽です。ボード上のTX, RXとUSB-シリアル変換モジュールのRX, TXを接続(この手のことをやるのが稀な人は一方のTXともう一方のRX、一方のRXともう一方のTXで繋ぐ必要があることに注意)、電源はUSB経由で供給すると過剰にも不足にもなり難いです。
ファームウェアアップデートを実行して成功しそう?
大体この段階で正常動作ができる様になります。
この手順ではu-centerの配布しているファームウェアをF9Pにインストールすることによって正常な状態にしようと試みます。ファームウェアは次のリンクのファームウェアのアップデートからダウンロードできます。
ZED-F9Pモジュール | u-blox#ドキュメントと資料
ファームウェアの更新はu-centerのTools->Firmware Updateから実行できます。Update画面左下にあるGoボタンを押した後に画像の様な進捗状況やら何やらが出ていれば成功です。この時、Enter safeboot before updateとSend training sequenceにチェックをしておくと失敗しにくいです。
Use this baudrate for updateの値は大きくする程、処理が早くなり体感失敗しやすくなります。進捗状況が出ていれば大体大丈夫です。再現性のある失敗の仕方をしていない限り、リトライし続ければそのうち成功します。
残念ながら進捗状況が見えない場合、安定して失敗する場合は手動でセーフブートを実行する必要があります。
手動でセーフブートを実行
UART1を通して特定の信号を送ることでセーフブートを実行させます。UART1にbaudrate9600で0x55 0x55を送ればOKです。自分の場合、UART1とシリアルを変換してRealtermからシリアル経由で送信することが多いです。
ZED-F9P – Integration Manualの3.3.6にセーフブートを実行する正式な方法が載っています。自分の場合なんやかんや成功するのでしていませんが正式にはSAFEBOOTピンをlowにしてから0x55 0x55を送信します。