通信仕様v1.1原資料の各ページ

対象:IMU600-V2/FW 0.11.2/GUI v1.6.1。

表紙、目次、改訂履歴(ある場合)、本文、図表を含む全ページを掲載しています。原文は繁体字中国語です。画像をクリックすると拡大でき、その下のテキストを展開するとコピーできます。表の列の対応は元の画像で確認してください。

資料の章対応と相違点

ここでは元の文章と画像をそのまま掲載しています。資料間の違いや操作上の補足は、上の対応表と各セットアップガイドで確認できます。

1 · 2 · 3 · 4 · 5 · 6 · 7 · 8 · 9 · 10 · 11 · 12 · 13 · 14 · 15 · 16 · 17 · 18 · 19 · 20 · 21 · 22 · 23 · 24 · 25 · 26 · 27 · 28 · 29 · 30 · 31 · 32 · 33

1ページ

原資料1ページ

ページ文字を展開(コピー可)
SparkNavi
向成電子有限公司             XIANG CHENG Electronic Co., Ltd.




InertiaX core




IMU600-V2
通訊協定說明
Communication Protocol Specification


使用者版

資料格式、指令與系統整合說明


對應韌體                 Firmware 0.11.2

發行日期                 2026 年 10 月 16 日

文件版號                 1.1



XIANG CHENG Electronic Co., Ltd. (向成電子有限公司)

No. 41, Wenxian 1st Rd., North Dist., Tainan City 704, Taiwan (R.O.C.)

Tel +886-6-3586207       Fax +886-6-3581363

ethan@robotlab.com.tw        ·   sparknavi.com

© 2026 XIANG CHENG Electronic Co., Ltd. All rights reserved.

2ページ

原資料2ページ

ページ文字を展開(コピー可)
目錄
1. 基本規則 ................................................................................................................................................................... 4
2. 資料輸出 ................................................................................................................................................................... 4
     2.1 $SPNVIMURAW — 單顆 IMU 資料(每批 3 行) ............................................................................................. 5
     2.2 $SPNVIMU — 三顆 IMU 的合併資料(每批 1 行) .......................................................................................... 7
     2.3 $SPNVBARO — 氣壓計資料 ..................................................................................................................................... 8
     2.4 $SPNVAHRS — 姿態資料 .......................................................................................................................................... 9
     2.5 輸出模式與頻寬 ...........................................................................................................................................................10
3. 狀態與統計資料 .................................................................................................................................................... 10
     3.1 $SPNVSTAT — 每顆 IMU 統計 (每顆一行) ............................................................................................................11
     3.2 $SPNVFUS — 合併統計 ..............................................................................................................................................13
     3.3 $SPNVSYS — 系統統計 ..............................................................................................................................................13
     3.4 $SPNVHB — 診斷心跳..............................................................................................................................................14
4. 開機資訊與事件訊息 ............................................................................................................................................ 14
5. 操作指令(主機送給裝置) ................................................................................................................................ 16
     5.1 校正流程 (fw 0.5.0) .....................................................................................................................................................20
6. 典型輸出序列 ........................................................................................................................................................ 20
7. 校驗計算範例 (Python) ...................................................................................................................................... 21
8. Binary 模式 (D6 44) ............................................................................................................................................ 21
     8.1 封包結構.........................................................................................................................................................................21
     8.2 訊息表 .............................................................................................................................................................................22
     8.3 二進位輸出的資料量與頻寬......................................................................................................................................25
     8.4 鮑率設定與實際誤差 ...................................................................................................................................................26
     8.5 主機端工具 ....................................................................................................................................................................26
9. 韌體更新 ................................................................................................................................................................ 26
10. GPS PPS 時間對齊(fw 0.8.0) ...................................................................................................................... 26
11. UART2 第二輸出埠(fw 0.8.0)..................................................................................................................... 27
12. EXT_TRIGGER 外部觸發(fw 0.9.0) ............................................................................................................ 28
13. SPI3 從機輸出(fw 0.10.0 起) ...................................................................................................................... 29
     13.1 SPI 封包結構(128 bytes,little-endian).....................................................................................................29
     13.2 飛控讀取建議 .............................................................................................................................................................30
     13.3 實機驗證結果 (Blue2 + ArduPilot 4.7.1,2026-10-15) ..............................................................................31
     13.4 $SPNVSPI 欄位 ..........................................................................................................................................................31
14. ArduPilot 4.7.1 驅動 (AP_InertialSensor_SparkNavi) ......................................................................... 31




                                                         SparkNavi-IMU600-V2 通訊協定說明                                    第2頁

3ページ

原資料3ページ

ページ文字を展開(コピー可)
修訂紀錄

版號        日期                                內容              編輯者


                   建立使用者版通訊協定文件,對應韌體 0.11.2;新增封面、目錄與修訂
1.0   2026-10-16                                            Ethan
                   紀錄。


                   修飾全文說明,統一用語並拆解長句;釐清時間戳、狀態旗標及設定保
1.1   2026-10-16                                            —
                   存方式,更新目錄。




                         SparkNavi-IMU600-V2 通訊協定說明   第3頁

4ページ

原資料4ページ

ページ文字を展開(コピー可)
SparkNavi-IMU600-V2 $SPNV* 通訊協定說明 (使用者版,

fw 0.11.2,2026-10-16)
  本文件說明 IMU600-V2 的資料格式、操作指令,以及與主機或飛控連接時需要注意的事項。對應韌體
  版本為 0.11.2。


1. 基本規則
  第 2–7 節介紹 ASCII 文字格式,第 8 節介紹 D6 44 二進位格式(binary)。兩種格式的對應欄位代表相
  同資料,實際排列方式請看各節欄位表。可用 $SPNVCMD,MODE,binary 切換輸出格式;主機送給裝置
  的指令一律使用 ASCII 文字。

項目      規格

介面      UART1,預設 460800 bps;8 個資料位元、無同位檢查、1 個停止位元(8N1),無流量控制。
        $<body>*<XX>\r\n
行格式

校驗 XX   將 $ 與 * 之間的所有字元逐位元組做 XOR 運算,再寫成 2 位大寫十六進位數字。計算方式與
        NMEA 0183 相同。

分隔      各欄位用逗號 , 分隔。body 的第一欄是訊息名稱,名稱都以 SPNV 開頭。

數值      數值以十進位文字表示。浮點數保留固定的小數位數(見各欄位表),負數前加 -,整數不帶小數
        點。

單位      角速度 °/s、比力 m/s²、溫度 °C、Δθ rad、Δv m/s、氣壓 hPa (= mbar,同 ArduPilot)、時間 µs 或 s

座標      採用機體 FRD 座標:+X 向前、+Y 向右、+Z 向下。裝置水平靜置時,az 約為 −9.79 m/s²。

時間戳     從開機開始計時,開機時為 0,單位為微秒(µs),以 64-bit 無號整數表示。對 IMU 資料而言,
ts_us
        ts_us 是這一筆資料所涵蓋時段的結束時間,不是資料送到主機的時間。同一批三顆 IMU 的 RAW
        資料與 FUSED 合併資料,ts_us 完全相同。氣壓計的時間定義另見第 2.3 節。

行長      每行少於 320 字元。傳送緩衝區滿時會丟棄整行,不會只送半行;累計丟棄數可查看 $SPNVSYS
        第 1 欄。

解析建議    先找 $ 作為一行的起點,再以 * 分開資料與校驗碼。校驗失敗就丟棄整行;校驗通過後,依第一欄
        的訊息名稱處理。新版韌體可能在行尾新增欄位,解析程式應允許多出的欄位。


2. 資料輸出
連續模式依 RATE 定時輸出 IMU 資料,預設為 50 Hz,也就是每 20 ms 一批。本文的「輸出週期」指每批資料
所涵蓋的取樣時段,原文件也稱為時間格或視窗。RAW 是三顆 IMU 各自的資料(已套用校正);FUSED 是將
可用 IMU 資料合併後的結果。外部觸發模式的第一個 EXT_TRIGGER 上升緣只建立起點,之後每個上升緣產生一
批,見第 12 節。




                           SparkNavi-IMU600-V2 通訊協定說明   第4頁

5ページ

原資料5ページ

ページ文字を展開(コピー可)
2.1 $SPNVIMURAW — 單顆 IMU 資料(每批 3 行)
    $SPNVIMURAW,<id>,<ts_us>,<gx>,<gy>,<gz>,<ax>,<ay>,<az>,<temp>,<n>,<status>,<dthx>,<dthy>,<dthz>,<dvx>,<
    dvy>,<dvz>,<dt>*XX


                      型別 / 小
     #         欄位        數           單位                                說明
          id
1                     整數         –        IMU 編號 1、2、3
          ts_us
2                     整數 u64     µs       這筆資料所涵蓋時段的結束時間。
          gx gy gz
3–5                   浮點 4 位     °/s      將本次輸出週期內的原始取樣值(1475 Hz)演算處理後,得到三軸角
                                          速度。
          ax ay az
6–8                   浮點 4 位     m/s²     本次輸出週期內的平均比力,即加速度計量到的值,包含重力的影響。
          temp
9                     浮點 2 位     °C       這顆 IMU 的內部溫度。
          n
10                    整數         –        這筆資料包含的原始樣本數。100 Hz 時約 14–15 筆,50 Hz 時約 29–
                                          30 筆,5 Hz 時約 295 筆。
          status
11                    整數 (bit)   –        記錄本次輸出週期內曾出現的狀態。所有樣本的狀態旗標會逐位元合併
                                          (OR);任一次出現的旗標都會保留。0 表示未偵測到錯誤,也沒有
                                          PPS 標記。見第 2.1.1 節。
          dthx dthy
12–14                 浮點 7 位     rad      這段時間累積的旋轉向量 Δθ,採梯形積分,並加入二階圓錐運動
          dthz
                                          (coning)補償。
          dvx dvy
15–17                 浮點 6 位     m/s      這段時間累積的速度變化量 Δv,包含旋轉與划槳運動(sculling)補
          dvz
                                          償。靜置時 dvz ≈ −9.79 × dt。
          dt
18                    浮點 6 位     s        這筆資料實際積分的時間長度,約為 1/輸出率。以 dth/dt、dv/dt 可
                                          換算出對應的平均角速度與比力。


2.1.1 如何判讀 status

status 記錄的是「這一段取樣時間內,曾經出現哪些狀態」。每個原始樣本要讀取 7 個 SPI 回應封包(frame);
50 Hz 輸出時,一筆資料約包含 30 個樣本、共約 210 個回應封包。韌體會把它們的狀態逐位元合併(OR):只
要其中一次出現某個旗標,輸出的對應位元就會是 1。
因此,status 反映整段時間的紀錄,不只代表最後一個樣本。status = 0 表示這段時間內未偵測到 CRC 或位址
錯誤,感測器均回報正常狀態 S[1:0] = 00,也沒有 CE、IDS 或 PPS 旗標。




                                       SparkNavi-IMU600-V2 通訊協定說明    第5頁

6ページ

原資料6ページ

ページ文字を展開(コピー可)
位元         值        名稱        來源                 意義            資料可信度           常見原因 / 處置

bit0   1       SPI_CRC   裝置端檢查           48-bit SPI 回應封包的     受影響的暫存 檢查線路雜訊、SCK 速度及
                                         CRC-8 校驗失敗,或回 器值以 0 代           CS 時序;$SPNVSTAT 的
                                         應的暫存器位址與請求           入,會使平均 crc_err 也會增加。正常應為
                                         不符。                  值偏離實際      0。
                                                              值。

bit1   2       CE        感測器 frame       命令錯誤(Command         資料本身仍有     正常操作不應出現。若出
                         CE 位            Error):感測器收到無 效                 現,請回報原廠檢查韌體指
                                         效請求,例如寫入唯讀                      令。
                                         暫存器、使用未定義位
                                         址,或在 EOI 後寫入。

bit2   4       IDS       感測器 frame       內部資料狀態               可疑         通常與 bit3 同時出現
                         IDS 位           (Internal Data
                                         Status):感測器回報
                                         內部錯誤,與 S=01 表
                                         示的錯誤狀態相互對
                                         應。

bit3   8       S_ERROR   感測器 frame       感測器自我診斷發現異           不可信        若持續出現,先用
                         S[1:0] = 01     常,可能涉及電源、時                      $SPNVCMD,REINIT,1 重新
                                         脈、溫度或自我測試。                      初始化;仍未恢復時,檢查
                                                                         該顆 IMU 的硬體。

bit4   16      S_SAT     感測器 frame       超出量測範圍(飽             超出量程的部 常見於劇烈運動、撞擊或振
                         S[1:0] = 10     和):任一軸角速度超           分無法完整量 動過大。正常靜置或一般飛
                                         過 ±300 °/s,或加速度 到,可能使           行時不應出現。
                                         超過 ±156.9 m/s²。感     Δθ/Δv 偏
                                         測器內部濾波前的瞬間           小。
                                         峰值也會觸發。

bit5   32      S_INIT    感測器 frame       感測器尚未完成初始            不可信        只應在開機或 REINIT 後的前幾
                         S[1:0] = 11     化,通常出現在上電或                      筆出現

                                         重置後約 250 ms 內。

bit7   128     PPS       (fw 0.8.0) 裝置   PPS 時間標記:這筆          此位元本身不 判斷錯誤時,請先以 status
                                         ts_us 對應 GPS PPS 的   代表錯誤。      & 0x7F 排除 PPS 位元,再
                                         上升緣。對齊期間每秒                      檢查結果是否為 0。
                                         有一筆,見第 10 節。

  •        在單一 SPI 回應封包中,S[1:0] 一次只能表示一種狀態,因此對應的 bit3、bit4、bit5 最多只有一個為 1。
           但一筆輸出會合併多個回應封包;若這段時間先後出現不同狀態,輸出的 status 就可能同時包含這幾個
           位元。
  •        感測器同時遇到多種狀況時,回報優先順序為:初始化 11 > 錯誤 01 > 飽和 10 > 正常 00。例如,同時
           發生錯誤與飽和時,該次回應只回報錯誤。


                                   SparkNavi-IMU600-V2 通訊協定說明      第6頁

7ページ

原資料7ページ

ページ文字を展開(コピー可)
•    合併資料時,先檢查 (status & 0x7F) 是否為 0。若不為 0,該顆 IMU 的這筆資料會被排除,並在
          $SPNVIMU 的 flags 標示。bit7 的 PPS 標記不影響採用,因此 status = 128 不代表資料有錯。三顆都
          出現錯誤旗標時的處理方式,見第 3.1.1 節。
     •    常見數值:0 = 正常;1 = SPI 校驗或位址問題;16 = 超出量程;12(8+4)= 感測器錯誤;32 或 44 =
          開機初始化期間的狀態;128 = 只有 PPS 標記。
三顆 IMU 的取樣時脈可能略有差異,例如 1470 Hz 與 1461 Hz。因此,即使它們使用相同的輸出時間邊界,每
筆包含的樣本數 n 仍可能差 1。原始樣本所涵蓋的時間也可能略有差異,例如一顆以 30 個樣本涵蓋 20.4 ms,
另一顆以 29 個樣本涵蓋 19.8 ms。

以下為 50 Hz 輸出、裝置靜置時的格式範例:

    $SPNVIMURAW,1,12345680,0.0123,-0.0456,0.0089,0.0210,-0.0150,-9.7912,31.25,30,0,0.0000043,-0.0000159,0.0
    000031,0.000420,-0.000300,-0.195824,0.020000*0F



2.2 $SPNVIMU — 三顆 IMU 的合併資料(每批 1 行)
    $SPNVIMU,<ts_us>,<gx>,<gy>,<gz>,<ax>,<ay>,<az>,<temp>,<dthx>,<dthy>,<dthz>,<dvx>,<dvy>,<dvz>,<dt>,<n_us
    ed>,<flags>*XX


      #                  欄位               型別 / 小數       單位                        說明
              ts_us
1                                    整數 u64         µs       與同一批 RAW 資料的 ts_us 相同。
              gx gy gz
2–4                                  浮點 4 位         °/s      合併後角速度
              ax ay az
5–7                                  浮點 4 位         m/s²     合併後比力
              temp
8                                    浮點 2 位         °C       實際參與合併的 IMU 溫度平均值。
              dthx dthy dthz
9–11                                 浮點 7 位         rad      合併後 Δθ
              dvx dvy dvz
12–14                                浮點 6 位         m/s      合併後 Δv
              dt
15                                   浮點 6 位         s        實際參與合併的 IMU 之 dt 平均值。
              n_used
16                                   整數             –        這筆合併結果實際使用的 IMU 顆數,範圍為 1–
                                                             3。
              flags
17                                   整數 (bit)       –        合併狀態,見下表。0 表示三顆都正常且都參與
                                                             合併,也沒有 PPS 標記。
flags 的各位元代表以下狀態;多種狀態可同時出現:

 位元           值                名稱                                      意義

bit0      1          IMU1_REJECTED          本次未採用 IMU1。原因為 (status & 0x7F) ≠ 0,或量測值持續偏離比
                                            較基準、達到排除條件。

bit1      2          IMU2_REJECTED          本次未採用 IMU2,排除條件同 IMU1。

bit2      4          IMU3_REJECTED          本次未採用 IMU3,排除條件同 IMU1。

bit3      8          SPREAD_WARN            某顆 IMU 與比較基準的差距超過有效門檻的一半。這是提醒旗標;也
                                            包含已超過完整門檻、但持續時間尚不足以排除的情況。

bit4      16         DEGRADED               可用 IMU 少於 2 顆,這筆結果只使用 1 顆 IMU。

bit5      32         INCOMPLETE             本次未收到所有已就緒 IMU 的資料。
                                       SparkNavi-IMU600-V2 通訊協定說明    第7頁

8ページ

原資料8ページ

ページ文字を展開(コピー可)
位元        值              名稱                                      意義

bit6      64       SATURATED             (fw 0.5.0)至少一顆 IMU 超出量程,出現 S_SAT。超出量程的角速度
                                         及旋轉量無法完整量到;接收端的慣性導航系統(INS)應降低這段資
                                         料的權重,或提高估計誤差。

bit7      128      PPS                   (fw 0.8.0)這筆 ts_us 對應 GPS PPS 上升緣,見第 10 節。此位元是
                                         時間標記,不代表錯誤。


2.3 $SPNVBARO — 氣壓計資料

氣壓計預設每秒輸出 50 筆,可用 BRATE 修改。其量測時機與 IMU 的時間戳定義不同,說明如下。

     fw 0.5.0 起,氣壓計預設使用 Forced mode:由裝置按固定週期啟動一次量測,輸出率可設為 10、25、
     50 或 100 Hz。它與 IMU 使用相同時鐘及開機起點;50 Hz 時,每隔 20000 µs 啟動一次,ts_us 也落在
     這些時間點上。
     氣壓計的 ts_us 代表「觸發量測的時間」。量測在觸發後才開始,約經過一個轉換時間才完成;可查看
     $SPNVINIT,B 的 conv_us。因此,BARO 與 IMU 即使 ts_us 相同,代表的量測時段也不同。
     韌體會依輸出率自動選擇過取樣倍率(OSR),讓轉換時間不超過輸出週期減 3 ms:10/25 Hz 使用
     16x/2x、50 Hz 使用 8x/2x、100 Hz 使用 4x/1x。Forced mode 仍使用係數為 3 的 IIR 濾波。

    $SPNVBARO,<ts_us>,<press_hpa>,<temp_c>,<alt_m>,<status>*XX


     #     欄位       型別 / 小數         單位                             說明
          ts_us
1                  整數 u64      µs          Forced mode:啟動這次量測的時間。Normal mode:裝置偵測
                                           到新資料已準備好的時間。
          press_
2                  浮點 4 位      hPa (= mbar) 濾波後的氣壓值,IIR 係數為 3。單位與 ArduPilot 的
          hpa
                                           SCALED_PRESSURE.press_abs 相同,乘以 100 可換成 Pa。輸出
                                           解析度為 0.0001 hPa(0.01 Pa);目前 OSR 可查看 $SPNVINIT,B
                                           的 osr_p。
          temp_c
3                  浮點 2 位      °C          氣壓計晶片的內部溫度,較接近板上溫度,不是外界氣溫。
          alt_m
4                  浮點 2 位      m           依標準大氣公式 44330.77×(1−(p/1013.25)^0.190263) 換算的高
                                           度,適合觀察高度變化或繪圖。數值會受天氣影響,不宜直接當作
                                           準確海拔;氣壓較高時也可能出現負值。
          status
5                  整數 (bit)    –           0 = 正常;bit0(值為 1)= 取得這筆資料前曾遇到 I2C NACK 或匯
                                           流排衝突,但重試後已成功。
範例:

    $SPNVBARO,9651290,1017.3040,44.14,-33.69,0*XX


用 $SPNVCMD,BARO,0|1 關閉或開啟氣壓資料輸出;用 $SPNVCMD,BRATE,10|25|50|100 設定輸出率,預設
為 50 Hz。要檢查氣壓計狀態,可查看 $SPNVSYS 的 baro_samples、baro_i2c_err、baro_timeouts、
baro_stale;初始化結果則見 $SPNVINIT,B(第 4 節)。




                                     SparkNavi-IMU600-V2 通訊協定說明   第8頁

9ページ

原資料9ページ

ページ文字を展開(コピー可)
2.4 $SPNVAHRS — 姿態資料

此訊息提供姿態角、四元數及陀螺零偏估計,與同一批合併 IMU 資料使用相同的 ts_us。

    $SPNVAHRS,<ts_us>,<roll>,<pitch>,<yaw>,<q0>,<q1>,<q2>,<q3>,<align>,<flags>,<bgx>,<bgy>,<bgz>,<zb_s>*XX


                       型別 / 小
     #        欄位          數            單位                                說明
          ts_us
1                     整數 u64       µs        與同一批 $SPNVIMU 資料的 ts_us 相同。
          roll
2                     浮點 3 位       deg       滾轉角,向右傾斜為正,範圍 −180..180。使用 FRD/NED 座標與 ZYX 歐
                                             拉角順序。
          pitch
3                     浮點 3 位       deg       俯仰角,抬頭為正,範圍 −90..90。
          yaw
4                     浮點 3 位       deg       航向角,由上往下看,順時鐘為正,範圍 0..360。align=1 時為相對角
                                             度,從 0 起算,會隨時間產生漂移。
          q0 q1 q2
5–8                   浮點 6 位       –         將機體座標轉到 NED(北、東、下)座標的四元數,採 Hamilton 定義,
          q3
                                             q0 為純量部分:v_n = R(q)·v_b。
          align
9                     整數           –         對準狀態,見下表
          flags
10                    整數 (bit)     –         見下表
          bgx bgy
11–13                 浮點 4 位       °/s       運作中估計的三軸陀螺零偏,使用機體座標,供診斷使用。
          bgz
          zb_s
14                    浮點 1 位       s         (fw 0.9.2)目前已連續靜止的秒數,範圍 0–10。有移動就歸零,滿 10 s
                                             後套用零偏估計,並標示 BIAS_CAL。AZB,0 時固定為 0。GUI 可顯示
                                             「校正中 x / 10 s,請保持靜止」。
align 表示姿態與航向的對準進度:

    值      名稱              GUI 顯示建議                                       意義

0         INIT       "Aligning…"                  開機或執行 AHRS,reset 後的前 1 s。裝置收集靜置資料以判斷水平
                                                  姿態,此時 roll、pitch、yaw 尚不可用。

1         LEVEL      "Heading: NOT ALIGNED"       roll 與 pitch 已可使用。航向尚無外部參考,yaw 從 0 起算,靠陀
          ED                                      螺累積角度,因此會漂移。

2         ALIG       "Heading: aligned            已設定航向參考,來源由 flags 表示;目前僅支援透過 HDG 指令手
          NED        (manual)"                    動設定。
flags 表示姿態計算的目前狀態:

 位元           值            名稱                                            意義

bit0      1         HIGH_DYN                 偵測到較大動態:比力大小 |f| 與 g 的差超過 0.5 m/s²、|ω| 超過 50 °/s,
                                             或量測重力方向與估計方向相差超過 5°。此時 Kp 降為 0.2,減少加速度計
                                             對姿態修正的影響。

bit1      2         BIAS_FROZEN              暫停更新陀螺零偏。觸發條件為動態狀態、|ω| > 5 °/s,或 ||f|−g| > 0.2
                                             m/s²。此時姿態仍持續更新,只是暫停學習零偏。

bit2      4         HDG_MANUAL               目前航向由 $SPNVCMD,HDG 手動設定。


                                            SparkNavi-IMU600-V2 通訊協定說明   第9頁

10ページ

原資料10ページ

ページ文字を展開(コピー可)
位元        值            名稱                                  意義

bit3   8       ACC_REJECT        比力大小 |f| 與 g 的差超過 3 m/s²。這次姿態更新只使用陀螺,不使用加
                                 速度計修正。

bit4   16      INIT_MOVING       初始對準的 1 s 內偵測到移動,因此未取得零偏,水平姿態的準確度也會
                                 較差。請將裝置靜置後,再執行 AHRS,reset。

bit5   32      BIAS_CAL          (fw 0.9.1)已利用至少 10 s 的靜止資料估計三軸陀螺零偏,包含 Z 軸。
                                 這是完成狀態,不是警告;航向漂移規格以完成此步驟後為準。

bit6   64      STATIC            (fw 0.9.1)最近 10 s 判定為靜止,正在更新零偏估計。
靜止零偏估計:fw 0.9.1 起提供此功能,出廠預設開啟,可用 $SPNVCMD,AZB,0|1 控制。裝置每 10 s 檢查一次
靜止條件:各軸陀螺標準差 < 0.1 °/s、加速度判定值 < 0.1 m/s²,且沒有動態旗標。通過判定後,會用這段時間
的陀螺平均值估計零偏。第一次估計會直接套用,完成時 flags 出現 BIAS_CAL。

姿態計算方式:以 $SPNVIMU 的 Δθ 更新四元數,並以 Δv/dt 提供重力方向的觀測值。
相關指令為 AHRS 0|1|reset、HDG <deg> 與 AKP/AKI。ASCII 姿態資料每行約 120 B。


2.5 輸出模式與頻寬

用 $SPNVCMD,OUT,raw|fused|both|none 選擇輸出的 IMU 資料,預設為 both。UART1 設為 460800 bps 時,
每秒約可傳送 46 kB;各種設定的資料量如下。

                          設定                          流量               結果

50 Hz both (預設) + BARO 50 Hz + AHRS 50 Hz     ≈ 38 kB/s          OK

100 Hz fused + AHRS                           ≈ 26 kB/s          頻寬足夠,建議正式使用。

100 Hz raw                                    ≈ 45 kB/s          接近傳輸上限,偶爾會丟棄資料
                                                                 行。

100 Hz both                                   ≈ 59 kB/s          超出傳輸上限,會丟棄資料行。

  200、400、500、1000 Hz 的 binary 資料量見第 8.3 節,其中 200/400/500 Hz 自 fw 0.10.3 起支援。
  在這些較高輸出率下,460800 bps 無法負荷 ASCII 資料,請改用 binary 並提高鮑率。若只透過 SPI3 連
  接飛控,可設 OUT,none 關閉 UART 的 IMU 資料輸出,見第 13 節。


3. 狀態與統計資料
  預設每秒提供一組統計,包括 3 行 STAT、1 行 FUS 與 1 行 SYS。fw 0.4.3 起,裝置先在同一時間記錄全
  部數值,再於後續主迴圈逐行送出,順序為 STAT1、STAT2、STAT3、FUS、SYS、HB。雖然傳送時間
  不同,這組統計仍代表同一個時間點。




                               SparkNavi-IMU600-V2 通訊協定說明   第 10 頁

11ページ

原資料11ページ

ページ文字を展開(コピー可)
3.1 $SPNVSTAT — 每顆 IMU 統計 (每顆一行)
    $SPNVSTAT,<id>,<dry>,<out>,<crc_err>,<frame_err>,<spi_timeout>,<dropped>,<dcnt_skip>,<dry_timeout>,<dry
    _kicks>,<dry_pin>,<isr_us_max>,<isr_us_last>,<isr_cpu>,<resync>[,<read_retry>,<read_bad>]*XX


     #         欄位                                     說明                                          正常值
          id
1                     IMU 編號                                                                1~3
          dry
2                     從開機起累計的 DRY(資料就緒)中斷次數,對應原始樣本數。                                        每秒增加 ≈
                                                                                            1470
          out
3                     從開機起累計的資料輸出筆數。                                                        每秒增加 = 輸
                                                                                            出率
          crc_err
4                     SPI 回應 CRC 錯誤累計                                                       0
          frame_err
5                     SPI 回應中帶有感測器狀態旗標的封包數,旗標包括 S1:S0≠00、CE 或                               0 (正常使用下

                      IDS。此欄統計感測器回報的狀態;通訊問題則看 crc_err、spi_timeout。                          不增加)

                      見第 3.1.1 節。
          spi_timeo
6                     SPI 通訊逾時的累計次數。fw 0.10.6 的逾時設定為 100 µs,交換資料期間                          0
          ut
                      會暫時遮蔽中斷。
          dropped
7                     因緩衝區或輸出佇列已滿而丟棄的累計數。                                                   0
          dcnt_skip
8                     感測器樣本計數器不連續的累計次數,表示可能漏讀或重複讀取。                                         0
          dry_timeo
9                     目前是否已超過 100 ms 未收到 DRY:0 = 否,1 = 是。                                   0
          ut
          dry_kicks
10                    為解除 DRY 腳持續維持高電位而進行的額外讀取次數。                                           開機後固定 1
          dry_pin
11                    DRY 腳目前的電位:0 = 低,1 = 高。                                               多為 0
          isr_us_ma
12                    DRY 中斷處理程式(ISR)最長執行時間,單位 µs。                                          約 100 µs 以內
          x
          isr_us_la
13                    最近一次 DRY 中斷處理的執行時間,單位 µs。                                             同上
          st
          isr_cpu
14                    最近 1 s 內,這顆 IMU 的 DRY 中斷處理占用 CPU 的百分比,以整數表                            約 13

                      示。
          resync
15                    重新對齊輸出週期時間邊界的累計次數。                                                    0
          read_retr
16                    (fw 0.10.6,僅 ASCII)第一次讀取遇到 CRC 錯誤後,立即重讀的累計次                           0
          y
                      數。
          read_bad
17                    (fw 0.10.6,僅 ASCII)重讀仍失敗,因而丟棄的原始樣本數。                                  0


3.1.1 frame_err 增加時如何排查

GUI 將 frame_err 顯示為「感測器旗標」。它記錄 IMU 晶片在 SPI 回應中回報的狀態,不直接表示線路品質。
要檢查通訊是否異常,請看 crc_err、spi_timeout,或 GUI 的「SPI 錯誤」。

frame_err 的計數單位是「帶有旗標的 SPI 回應封包」,不是異常事件次數。讀取一個原始樣本需要 7 個封包,
分別取得三軸角速度、三軸加速度及溫度。感測器出現異常時,這 7 個封包通常都會帶有旗標,因此一次樣本可
能讓計數增加 7。下列實測中,約 5 ms 的劇烈甩動使計數增加 52,不代表發生了 52 次獨立事件。

在未超出量程、也沒有感測器異常的一般運動、振動與溫度變化下,這個計數不應持續增加。

                                  SparkNavi-IMU600-V2 通訊協定說明         第 11 頁

12ページ

原資料12ページ

ページ文字を展開(コピー可)
板上測試紀錄(fw 0.4.3,2026-10-08):

                   測試                     SPI 錯誤 (crc_err/spi_timeout)           感測器旗標 (frame_err)

靜置                                    0,不累加                                   0,不累加

緩和搖晃 (未超過量程)                          0,不累加                                   0,不累加

劇烈甩動 (角速度峰值 > 300 °/s)                0,不累加                                   三顆同時 +52 (飽和)

若計數增加,可依下表檢查原因:

         對應
         status                                                資料可
原因       位元        何時發生                          三顆同時?         信度        處置

量程飽 S_SAT          任一軸超出量程:角速度超過                 通常會,因         超出        撞擊、掉落或劇烈甩動時,可能因
和        (16)      ±300 °/s,或加速度超過 ±156.9        為三顆承受         量程        超出量程而觸發,這不一定是硬體
                   m/s²。判定包含內部濾波前的訊              相同運動。         的部        故障,但受影響的資料仍須留意。
                   號,因此即使輸出平均值未超                               分無        若一般運轉時持續增加,請檢查馬
                   標,瞬間峰值仍可能觸發。                                法完        達、螺旋槳或引擎的高頻振動及減
                                                               整量        振安裝。若角速度經常超過 300
                                                               到,        °/s,應評估較大量程的陀螺。
                                                               可能
                                                               使
                                                               Δθ/Δ
                                                               v偏
                                                               小。

初始化 S_INIT         上電、$SPNVCMD,REINIT,1 後約 250   是             不可信 若只在開機後短暫增加,之後固定
中        (32)      ms 內                                                  不變,通常屬正常初始化。運轉中
                                                                         再次出現時,請檢查是否因電源壓
                                                                         降造成感測器重置。

感測器 S_ERRO 感測器內部診斷發現供電電壓、                        三顆同時出         不可信 檢查 3.3 V / VDDIO 的電源雜訊、
自我診 R (8),         時脈、溫度或自我測試異常。                 現:先查共                   壓降及工作溫度。執行 REINIT,1 後
斷錯誤 常伴隨
                                                 用電源與溫                   若仍持續出現,請檢查該顆 IMU 的
         IDS (4)
                                                 度。只有一                   焊接與硬體狀況。
                                                 顆出現:先
                                                 查該顆元
                                                 件。

命令錯 CE (2)         感測器收到無效請求,例如寫入                —             資料仍 正常操作不應出現;請回報原廠檢
誤                  唯讀暫存器、使用未定義位址,                              有效        查韌體。
                   或在 EOI 後寫入。
排查步驟

    1.   先看 GUI 的「SPI 錯誤」。若它也持續增加,請先檢查通訊線路及時序。
    2.   再看是三顆一起增加,還是只有一顆增加。三顆一起出現時,先查運動、振動、共用電源與溫度。



                                 SparkNavi-IMU600-V2 通訊協定說明        第 12 頁

13ページ

原資料13ページ

ページ文字を展開(コピー可)
3.   設定 OUT,raw,查看 $SPNVIMURAW 的 status,確認是 16(飽和)、32(初始化),或 8/12(感測
          器錯誤)。位元定義見第 2.1.1 節。
     4.   合併時,有錯誤旗標的 IMU 會被排除,判斷式為 (status & 0x7F) ≠ 0;PPS 標記不算錯誤。若三顆同時
          出現錯誤旗標,韌體會退回使用三顆資料產生合併輸出。此時不能只因為仍有合併資料,就認定量測正
          常;請同時查看 RAW 的 status。


3.2 $SPNVFUS — 合併統計
    $SPNVFUS,<outputs>,<rej1>,<rej2>,<rej3>,<incomplete>,<degraded>,<gth>,<ath>*XX


     #          欄位                                              說明
          outputs
1                            合併輸出累計筆數
          rej1 rej2 rej3
2–4                          IMU1、IMU2、IMU3 各自被排除的累計輸出週期數。原因可能是錯誤旗標,或量測
                             偏差已達持續排除條件;PPS 標記不列入。正常使用,包括一般手持擺動,不應增
                             加。
          incomplete
5                            尚未收齊三顆 IMU 資料就產生合併結果的累計次數。
          degraded
6                            可用 IMU 少於 2 顆的累計次數。
          gth
7                            目前設定的陀螺排除門檻,單位 °/s,保留 3 位小數。
          ath
8                            目前設定的加速度排除門檻,單位 m/s²,保留 3 位小數。


3.3 $SPNVSYS — 系統統計
    $SPNVSYS,<uart_drop>,<loops_per_s>,<isr_cpu_total>,<rate_hz>,<out_mode>,<uart_resets>,<pps_cnt>,<baro_s
    amples>,<baro_i2c_err>,<baro_timeouts>,<baro_stale>,<baro_hz>,<proto_mode>,<baud>,<pps_state>,<u2_drop
    >,<trig_cnt>,<trig_rej>*XX


     #          欄位                                             說明
          uart_drop
1                          傳送緩衝區已滿,因而丟棄整行資料的累計數。持續增加通常表示輸出資料量超過
                           UART 頻寬。
          loops_per_s
2                          最近 1 s 內主迴圈的執行次數,約 77000 次。
          isr_cpu_total
3                          三顆 IMU 中斷處理合計占用 CPU 的百分比,以整數表示,約為 40%。
          rate_hz
4                          目前輸出率
          out_mode
5                          none / raw / fused / both
          uart_resets
6                          UART 傳送停止回應後,自動重置以恢復運作的次數,正常應為 0。
          pps_cnt
7                          PPS 上升緣的原始擷取次數,包含後續被排除的雜訊。通過條件檢查的次數請看
                           $SPNVPPS 的 edges。
          baro_samples
8                          成功讀到的氣壓樣本累計數;預設 50 Hz 時,每秒約增加 50。
          baro_i2c_err
9                          I2C 未收到確認(NACK)或匯流排衝突的累計次數,正常應為 0。
          baro_timeouts
10                         因 I2C 通訊逾時而重新初始化模組的累計次數,正常應為 0。
          baro_stale
11                         目前是否已超過 200 ms 沒有新氣壓資料:0 = 否,1 = 是。

                                       SparkNavi-IMU600-V2 通訊協定說明    第 13 頁

14ページ

原資料14ページ

ページ文字を展開(コピー可)
#           欄位                                                  說明
          baro_hz
12                          氣壓計目前輸出率
          proto_mode
13                          ascii / binary
          baud
14                          目前 UART1 鮑率
          pps_state
15                          (fw 0.8.0) 0 OFF / 1 NO_SIGNAL / 2 ACQUIRING / 3 LOCKED / 4 HOLDOVER (§10)
          u2_drop
16                          (fw 0.8.0)UART2 傳送緩衝區滿,因而丟棄整筆資料的累計數。
          trig_cnt
17                          (fw 0.9.0)外部觸發模式下,已接受的 EXT_TRIGGER 上升緣累計數。連續輸出模式
                            不累計。
          trig_rej
18                          (fw 0.9.0)被排除的 EXT_TRIGGER 邊緣累計數。原因包括與前一次間隔小於 0.5 ms
                            (視為毛刺或彈跳),或主迴圈忙碌造成觸發事件緩衝區溢位。


3.4 $SPNVHB — 診斷心跳

此訊息預設每秒輸出一次,以 key=value 格式提供原廠診斷資訊。一般應用的解析程式可直接略過;不需要時,
用 $SPNVCMD,HB,0 關閉。


4. 開機資訊與事件訊息
     出廠預設設定下,裝置開機後直接輸出資料,不主動輸出開機資訊。需要查看資訊時,可送出
     $SPNVCMD,INFO,1 取得精簡內容,或 $SPNVCMD,DBG,1 取得完整內容。
     例外情況會主動回報:裝置驗證失敗時送出 $SPNVHALT,IMU 或氣壓計初始化失敗時送出
     $SPNVINIT,n,FAIL,…。若已保存不同的 BAUD 或 MODE,開機時也會先送出救援提示,詳見下表
     $SPNVNVM,boot。

         訊息                            格式                                           說明
$SPNVBOOT             $SPNVBOOT,SparkNavi-IMU600-
                      V2,fw=<ver>,imus=3,frame=body-
                                                               產品名稱、韌體版本、座標系、通訊格式與鮑率。fw
                      FRD,proto=ascii-xor8|d644-               0.7.0 起增加建置旗標:rel = 出貨版、bl = 含
                      crc16,baud=<n>,build=rel=<0/1>,bl=<0/1
                      >,auth=<0/1>,halt=<0/1>,bind=<0/1>*XX    bootloader,auth / halt / bind 與裝置驗證有關;出
                                                               貨版皆為 1。請以 key=value 解析,例如
                                                               build=rel=1 的 key 是 build,值是 rel=1。新版可能
                                                               在尾端新增欄位。
$SPNVRESET            $SPNVRESET,rcon=0x<8hex>[,POR][,BOR][,
                      WDTO][,SWR][,EXTR(MCLR)][,CM(config      上次重置原因,由 RCON 暫存器解碼。正常上電通常
                      mismatch)]...*XX                         為 POR,BOR;EXTR(MCLR) 表示重置按鍵或燒錄器
                                                               造成的重置。
$SPNVDBG              $SPNVDBG,<自由文字>*XX                       只在 DBG 模式輸出,供原廠診斷。一般解析程式可
                                                               略過。

$SPNVAUTH /           $SPNVAUTH,auth=<0/1>,sn=<18hex>*XX;      裝置驗證資訊,執行 INFO 時也會回報。auth=1、
$SPNVBIND /           $SPNVBIND、$SPNVPUB 為 key=value 行         ok=1 表示正常;sn 是 18 位十六進位裝置序號,可
$SPNVPUB
                                                               作為產品序號。其他欄位供原廠診斷,一般應用可略
                                                               過。



                                       SparkNavi-IMU600-V2 通訊協定說明         第 14 頁

15ページ

原資料15ページ

ページ文字を展開(コピー可)
訊息                          格式                                         說明
$SPNVINIT
                精簡:$SPNVINIT,<id>,OK*XX;完整               各顆 IMU 的初始化結果,sn 是該顆 IMU 的序號。
                (DBG):                                   FAIL 時可查看 rc:−2 = 無回應(MISO 全為 0 或
                $SPNVINIT,<id>,OK,sn=<str>,…*XX;失敗
                                                         1)、−3 = CRC 錯誤、−4 = 位址錯誤、−5 = 寫入
                (一律印):
                $SPNVINIT,<id>,FAIL,rc=<rc>,crc_err=<n
                                                         驗證失敗、−6 = 啟動後狀態異常、−7 = 其他錯誤。
                >*XX                                     完整格式的其他欄位供原廠診斷。
$SPNVINIT,B
                精簡:                                      氣壓計初始化結果。conv_us 的實測值是從觸發到資
                $SPNVINIT,B,OK,odr=<hz>,mode=forced|no
                                                         料就緒(DRDY)的時間,包含 1 ms 輪詢間隔的影
                rmal*XX;完整:
                $SPNVINIT,B,OK,chip=0x..,rev=0x..,odr=   響。overruns 表示上次量測尚未完成、下次觸發時間
                <hz>,osr_p=<n>,osr_t=<n>,iir=3,i2c_err
                =0,bus_recover=0,heals=0,mode=forced,c   就已到達的次數;該次會跳過量測,正常應為 0。
                onv_us=<估計>/<上一筆實測>/<實測最大                rc:−1 = I2C NACK、−2 = I2C 逾時、−3 = 晶片識
                >,overruns=<n>*XX;失敗 (一律印):
                                                         別不符、−4 = NVM 錯誤、−5 = OSR/ODR 組合無
                $SPNVINIT,B,FAIL,rc=<rc>,chip=0x..,i2c
                _err=,timeouts=*XX                       效。
$SPNVNVM        $SPNVNVM,saved=1,baud=,mode=,rate=,out
                =,stat=,hb=,baro=,brate=,ahrs=,nvm_err   執行 INFO 或 DBG 時,回報非揮發性記憶體
                =*XX / $SPNVNVM,saved=0 (factory         (NVM)是否存有設定,以及保存的內容。
                defaults),nvm_err=*XX /
                $SPNVNVM,backend=none*XX
$SPNVCAL        $SPNVCAL,<imu>,ab=<bx>/<by>/<bz>,ak=<k
                                                         (fw 0.5.0)回應 CAL,1,INFO/DBG 也會提供。內
                x>/<ky>/<kz>*XX ×3 +
                $SPNVCAL,W,g=<w1>/<w2>/<w3>,a=<w1>/<w2   容包括各顆 IMU 六面加速度校正的零偏(m/s²,5
                >/<w3>,saved=<0/1>,lever=<0/1>*XX
                                                         位小數)、比例係數(6 位小數)、合併權重,以及
                                                         校正是否已保存至 NVM。lever=1 表示安裝位置差
                                                         補償正在作用。
$SPNVCFG        $SPNVCFG,baud=<n>,mode=ascii|binary,ra
                te=<hz>,out=<0-                          回應 $SPNVCMD,CFG,1,列出目前正在使用的設
                3>,stat=<0/1>,hb=<0/1>,baro=<0/1>,brat   定。out:0 = none、1 = raw、2 = fused、3 =
                e=<hz>,ahrs=<0/1>,gth=<f3>,ath=<f3>,ak
                p=<f3>,aki=<f4>,saved=<0/1>,fw=<ver>*X   both。saved=1 只表示 NVM 曾保存設定,不表示所
                X
                                                         有目前設定都已保存。fw 0.9.0 起附加 trig=0|1
                                                         (IMU 輸出模式);fw 0.9.1 起附加 azb=0|1(靜止
                                                         零偏估計)。GUI 參數頁利用此訊息讀回裝置設定
                                                         (fw 0.4.2 起)。
$SPNVNVM,boot   $SPNVNVM,boot,baud=<n>,mode=<m>,factor
                y_window_ms=500*XX                       若保存的 BAUD 或 MODE 與出廠值不同,開機會先
                                                         以 460800 bps、ASCII 格式送出此訊息,並等待 500
                                                         ms。此時可送 $SPNVCMD,FACTORY,1 恢復預設;
                                                         等待結束後才切到保存的格式與鮑率。未保存設定,
                                                         或保存值與預設相同時,不會送出此行,也不會等
                                                         待。
$SPNVHALT
                $SPNVHALT,<原因>*XX,之後每 2~3 s 重複           裝置驗證未通過時,IMU、氣壓計與 AHRS 不啟動,
                一行                                       也不輸出量測資料;仍接受 INFO、BOOT(更新韌
                                                         體)及 FACTORY。若只是暫時讀不到 IMU,例如飛
                                                         控 5 V 電源波動,裝置約每 3 s 自動重試,恢復後會
                                                         自動開始輸出。若持續出現,請洽原廠。


                                 SparkNavi-IMU600-V2 通訊協定說明        第 15 頁

16ページ

原資料16ページ

ページ文字を展開(コピー可)
訊息                           格式                                        說明
$SPNVHEAL             $SPNVHEAL,imu_reinit,mask=<bit0..2 =
                                                               (fw 0.10.1)自動恢復紀錄。若任一顆 IMU 的 SPI
                      IMU1..3>,n=<累計次數>*XX
                                                               錯誤(CRC 加逾時)連續 3 s 達到每秒 100 次以上,
                                                               或某顆初始化失敗,裝置會重新初始化三顆 IMU,作
                                                               用與 REINIT,1 相同。兩次自動初始化至少間隔 30
                                                               s。正常使用不應出現;飛控重開機或 5 V 電源波動後
                                                               可能觸發。
$SPNVSTALL            $SPNVSTALL,main stuck at
                      where=<w>(<name>) for >300ms*XX          DRY 中斷處理偵測到主迴圈超過 300 ms 未繼續執
                                                               行。正常運作不應出現。
$SPNVTRAP             $SPNVTRAP,code=<n>,<name>,INTCON3=0x…,
                      INTCON4=0x…,INTCON5=0x…,halted*XX        CPU 發生位址、堆疊或數學運算等例外錯誤
                                                               (trap);回報後停止運作。正常運作不應出現。


5. 操作指令(主機送給裝置)
     不論資料輸出使用 ASCII 或 binary,主機送出的指令都必須是 ASCII 格式的 $SPNVCMD。binary 模式
     的指令回覆會包在 0x7F TEXT 封包內。
     執行指令後,設定會先套用在 RAM;若未保存,重開機後會載入先前保存的設定,沒有保存紀錄時才使
     用出廠預設。要保留目前設定,請送 SAVE,1;要清除使用者設定並恢復出廠值,請送 FACTORY,1。

 $SPNVCMD,<key>,<value>[*XX]\r\n


     •    可省略校驗碼 *XX,方便用終端機手動輸入。若有附上校驗碼,裝置就會檢查;錯誤時回覆
          $SPNVNAK,CMD,checksum。
     •    key 與 value 不分大小寫。行尾可用 \r 或 \n;單行超過 127 字元時,整行指令會被丟棄。
     •    指令成功時回覆 $SPNVACK,<key>,<value>*XX,value 是實際套用的值;失敗時回覆
          $SPNVNAK,<key>,<reason>*XX,reason 說明原因。

 key                value                               作用                             ACK 回覆
RATE      5 10 25 50 100 200                                                $SPNVACK,RATE,100
          400 500 1000           設定 IMU 輸出率,單位 Hz;三顆 RAW 與合併
                                 資料會一起切換。200/400/500 Hz 自 fw
                                 0.10.3 起支援。連接 ArduPilot 時請設 1000
                                 Hz,見第 13、14 節。
OUT       raw fused both none                                               $SPNVACK,OUT,fused
                                 選擇 IMU 資料:raw = 三顆個別資料;fused =
                                 合併資料;both = 兩者皆輸出;none = 關閉
                                 這兩類輸出。
STAT      0 1 now                                                           $SPNVACK,STAT,1
                                 0 = 關閉每秒統計;1 = 開啟;now = 立即送出
                                 一組 STAT/FUS/SYS。
HB        01                                                                $SPNVACK,HB,0
                                 診斷心跳 $SPNVHB 關/開
BARO      01                                                                $SPNVACK,BARO,1
                                 $SPNVBARO 輸出關/開 (預設開)
AHRS      0 1 reset                                                         $SPNVACK,AHRS,reset
                                 0/1 = 關閉/開啟姿態資料輸出;reset = 重新進
                                 行初始對準,請保持靜止 1 s。


                                       SparkNavi-IMU600-V2 通訊協定說明      第 16 頁

17ページ

原資料17ページ

ページ文字を展開(コピー可)
key            value                      作用                               ACK 回覆
HDG
         浮點 deg            手動設定航向 heading,roll 與 pitch 保持不       $SPNVACK,HDG,123.5;尚未調平
                                                                 $SPNVNAK,HDG,not leveled yet
         (−360..360)       變。成功後 align=2,並設定 HDG_MANUAL
                           旗標。
                                                                 $SPNVACK,AKP,1.5
AKP /    浮點 0..50          設定 AHRS 演算法的 Kp / Ki,預設分別為 2.0 /
AKI
                           0.05。
SAVE     1
                           將目前使用者設定寫入 NVM,供下次開機載                 $SPNVACK,SAVE,1;
                                                                 $SPNVNAK,SAVE,nvm not
                           入。包含                                  available|write failed
                           RATE/OUT/STAT/HB/BARO/BRATE/AHRS/GT
                           H/ATH/AKP/AKI/MODE/BAUD,以及本表後
                           方列出的 UART2、PPS、觸發與 SPI 設定。寫
                           入期間 IMU 會短暫停止,再重新啟動。校正資
                           料另用 CALSAVE 保存。
FACTOR   1                                                       $SPNVACK,FACTORY,1
Y                          清除 NVM 的使用者設定,並立即恢復出廠值,
                           包含 MODE/BAUD。fw 0.5.0 起不會清除
                           ACAL/FWGT 校正資料。ACK 會先用原本的格
                           式與鮑率送出,主機收到後,請切回 460800
                           bps、ASCII。裝置在 HALT 狀態或開機救援等
                           待期間也接受此指令。
CFG      1
                           回報目前設定,主要訊息為 $SPNVCFG,見第              $SPNVACK,CFG,1 後接 $SPNVCFG,…

                           4 節。fw 0.4.2 起支援;附加訊息見表後說明。
INFO     1
                           索取精簡裝置資訊,包括 BOOT、RESET、               $SPNVACK,INFO,1 後接各行

                           AUTH 及 4 行 INIT。出廠預設開機不主動輸出
                           這些資訊。
DBG      1
                           索取完整裝置資訊。在 INFO 的內容之外,增加 $SPNVACK,DBG,1 後接各行
                           $SPNVDBG 診斷資料,以及 AUTH/INIT 的完
                           整欄位。
MODE     ascii binary                                            $SPNVACK,MODE,binary
                           切換資料輸出格式。ACK 先用原格式送出,之
                           後的訊息才改用新格式。
BAUD     460800 921600                                           $SPNVACK,BAUD,921600
         1500000 2000000   設定 UART1 鮑率。裝置先用原鮑率送出 ACK,
                           等待傳送完成,再切到新鮑率,間隔約 5 ms;
                           主機收到 ACK 後再調整自己的串列埠。要保留
                           請送 SAVE,1。若保存值不是預設,開機時會先
                           以 460800 bps 提供 500 ms 的 FACTORY 救援
                           等待時間。
BRATE    10 25 50 100
                           設定氣壓計輸出率,單位 Hz。重設感測器最多                $SPNVACK,BRATE,100;失敗
                                                                 $SPNVNAK,BRATE,osr/odr
                           占用 15 ms,IMU 不受影響。若原過取樣倍率             invalid|i2c error|i2c timeout
                           (OSR)來不及在新週期內完成,韌體會自動降
                           低倍率,例如 16x、8x、4x。


                               SparkNavi-IMU600-V2 通訊協定說明   第 17 頁

18ページ

原資料18ページ

ページ文字を展開(コピー可)
key            value                            作用                                 ACK 回覆
GTH                                                                      $SPNVACK,GTH,0.8
         浮點 0 < v ≤ 100        設定合併時判斷陀螺偏差的基本門檻,單位
                               °/s,預設 0.5;動態時的有效門檻見第 2.2 節。
ATH                                                                      $SPNVACK,ATH,1.0
         浮點 0 < v ≤ 100        設定合併時判斷加速度偏差的基本門檻,單位
                               m/s²,預設 0.5;動態時的有效門檻見第 2.2
                               節。
REINIT   1                                                               $SPNVACK,REINIT,1
                               停止取樣,重新初始化三顆 IMU,再恢復取
                               樣;會回報 3 行 $SPNVINIT。
PING                                                                     $SPNVACK,PING,<value>
         任意字串                  連線測試
ACAL     <imu>,<bx>,<by>,<b
         z>,<kx>,<ky>,<kz>     (fw 0.5.0)設定指定 IMU 的加速度校正,使用 $SPNVACK,ACAL,<原字串>;
                                                                         $SPNVNAK,ACAL,range (...)
                               機體座標:a = (a_raw − b) · k、Δv = (Δv −
                               b·dt) · k。範圍為 |b| ≤ 2 m/s²、0.95 ≤ k ≤
                               1.05。設定先套用於 RAM,需送 CALSAVE,1
                               才保存。RAW 與合併輸出都會套用此校正。
FWGT     g|a,<w1>,<w2>,<w3>                                              $SPNVACK,FWGT,g,1,1,2
                               (fw 0.5.0)設定三顆 IMU 的合併權重:g 用於
                               角速度與 Δθ,a 用於加速度與 Δv。權重為相對
                               值,範圍 0 < w ≤ 100。設定先套用於 RAM,
                               需送 CALSAVE,1 才保存。
CAL      1
                               以 $SPNVCAL 回報目前校正值與合併權重。                  $SPNVACK,CAL,1 後接 4 行

CALSAV   1
E                              將目前 ACAL/FWGT 寫入 NVM。校正資料與使 $SPNVACK,CALSAVE,1;
                                                                         $SPNVNAK,CALSAVE,nvm not
                               用者設定分開保存,不受 FACTORY 影響。寫入 available|write failed
                               期間 IMU 會短暫停止。
CALCLR   1                                                               $SPNVACK,CALCLR,1
                               清除 RAM 與 NVM 中的校正資料,恢復為無校
                               正、三顆等權重。
U2OUT    raw fused ahrs baro
                               (fw 0.8.0)選擇 UART2 輸出內容,出廠為               $SPNVACK,U2OUT,raw+baro (正規化後
         stat 用 + , | 組合;
                               raw。stat 包含 STAT×3、FUS、SYS 與 PPS;         的組合)
         none;all
                               一般統計每秒一組,PPS 的送出時機見第 10
                               節。
U2MODE   ascii binary                                                    $SPNVACK,U2MODE,binary
                               (fw 0.8.0) UART2 協定,格式與 UART1 相同。出廠
                               binary
U2BAUD   115200 230400                                                   $SPNVACK,U2BAUD,921600
                               (fw 0.8.0) UART2 鮑率,出廠 460800。UART2 只輸
         460800 921600
         1500000 2000000       出、不收指令
SPI      off ardupilot                                                   $SPNVACK,SPI,ardupilot
                               (fw 0.10.0)選擇 SPI3 功能,見第 13 節。off
         stream (或 0 1 2)
                               = 關閉、ardupilot = 飛控 IMU 封包、stream
                               = 資料串流。出廠為 off,此時 SDO 為高阻
                               抗。
SPIOUT                                                                   $SPNVACK,SPIOUT,fused+ahrs
         同 U2OUT               (fw 0.10.0)選擇 SPI stream 模式的輸出內
                               容,出廠為 none。
SPIMOD   ascii binary                                                    $SPNVACK,SPIMODE,binary
                               (fw 0.10.0) stream 模式的格式。出廠 binary
E

                                    SparkNavi-IMU600-V2 通訊協定說明      第 18 頁

19ページ

原資料19ページ

ページ文字を展開(コピー可)
key          value                            作用                                ACK 回覆
SPICK   30                                                            $SPNVACK,SPICK,3
                             (fw 0.10.0) SPI 時脈模式 (CPOL/CPHA)。出廠 3
PPS     01                                                            $SPNVACK,PPS,1
                             (fw 0.8.0)控制 IMU 輸出週期是否與 GPS
                             PPS 對齊,見第 10 節。出廠為 1;設為 0 時,
                             以開機時間為基準自行定時。
AZB     01                                                            $SPNVACK,AZB,1
                             (fw 0.9.1)控制 AHRS 的靜止零偏估計,包含
                             Z 軸航向零偏,見第 2.4 節。出廠為 1,可用
                             SAVE,1 保存。
TRIG                                                                  $SPNVACK,TRIG,1
        0 1 (別名 continuous   (fw 0.9.0)0 = 依 RATE 連續輸出,忽略
        trigger)             EXT_TRIGGER;1 = 由外部上升緣觸發輸出。
                             觸發模式的第一個上升緣只建立起點,之後才逐
                             次輸出,見第 12 節。出廠為 0,可用 SAVE,1
                             保存。
BOOT    1
                             (fw 0.6.0)進入韌體更新程式 bootloader。裝 $SPNVACK,BOOT,1;
                                                                      $SPNVNAK,BOOT,no bootloader (dev
                             置回覆 ACK 後重啟,在 460800 bps 等待更新            build)|use BOOT,1
                             工具的 HELLO 封包約 1.5 s;未收到時回到應用
                             韌體。見第 9 節。出貨韌體皆支援,HALT 狀態
                             也可使用。
NAK 原因字串:checksum、not SPNVCMD、missing value、unknown key、use 5|10|25|50|100|200|400|500|1000、
use raw|fused|both|none、use 10|25|50|100、range、osr/odr invalid、i2c error、i2c timeout、not leveled

yet、use ascii|binary、use 460800|921600|1500000|2000000、use raw+fused+ahrs+baro+stat|none|all、use

115200|230400|460800|921600|1500000|2000000、use 0|1。

SAVE,1 也會保存 U2OUT / U2MODE / U2BAUD / PPS / TRIG / AZB / SPI / SPIOUT / SPIMODE / SPICK;
FACTORY,1 會將這些設定恢復為出廠值。
執行 CFG,1 或 INFO,1 時,裝置會額外回報 UART2 狀態:$SPNVU2,out=<組合
>,mode=<ascii|binary>,baud=<n>,drop=<n>,pps=<0|1>,pps_state=<n>,pps_err_ppm=<x>。fw 0.10.0
起也會回報 $SPNVSPI,mode=…,out=…,fmt=…,ck=…,txn=…,ok=…,short=…,delivered=…,drop=…,詳見第
13.4 節。這些訊息的尾端可能新增診斷欄位,請用 key=value 方式解析。

裝置也支援不需要行尾的單字元指令:1–6 依序對應 5/10/25/50/100/1000 Hz,回覆為
$SPNVACK,RATE,<hz>;s 表示立即送出統計,r 表示重新初始化。200/400/500 Hz 必須使用完整的 RATE 指
令。




                                 SparkNavi-IMU600-V2 通訊協定說明      第 19 頁

20ページ

原資料20ページ

ページ文字を展開(コピー可)
5.1 校正流程 (fw 0.5.0)

                                                                                                    對應設
   項目                                                做法                                                  定

加速度六面       將板子分別以 +X、−X、+Y、−Y、+Z、−Z 朝上,各靜置數秒,順序不限。記錄三顆                                             ACAL (每
校正          IMU 的平均比力,再逐顆、逐軸計算:b = (a_up + a_down) / 2、k = 2g / (a_up −                             顆)

            a_down)。GUI「參數設定 → 校正」提供操作精靈,完成後會送出 3 組 ACAL 與
            CALSAVE。

Allan       將板子放在遠離鍵盤、風扇等振動源的位置,靜置至少 30 min。設定 RATE,100、                                            FWGT,g /
                                                                                                    FWGT,a
deviation   OUT,both 並錄製資料;分析必須有 RAW,both 可同時評估合併結果。原廠 Allan
加權
            deviation 工具支援 ASCII 與 binary 錄檔,會使用最長的連續資料段,計算各顆各軸的
            ARW/VRW(τ=1 s)與零偏不穩定性,再依 w = 1/σ² 正規化權重,產生建議的 FWGT
            指令。

安裝位置        三顆 IMU 中心相對參考點的位置 (x, y, z) 是出廠固定值,無法透過指令修改。                                            出廠設定

差補償
(lever-
arm)
六面校正只修正零偏與比例係數,不包含各軸之間的正交誤差。陀螺零偏由 AHRS 在運作中估計,不屬於這項六
面校正。


6. 典型輸出序列
使用出廠預設設定時,裝置上電後約 1 s 內開始輸出 50 Hz 資料,不先送出開機資訊。若要查看資訊,可送
$SPNVCMD,INFO,1;主要回覆順序為 $SPNVACK,INFO,1、$SPNVBOOT、$SPNVRESET、$SPNVAUTH、
$SPNVINIT,1..3、$SPNVINIT,B。

 $SPNVIMURAW,1,…*XX
 $SPNVIMURAW,2,…*XX
 $SPNVIMURAW,3,…*XX
 $SPNVIMU,…*XX
 $SPNVAHRS,…*XX
 $SPNVBARO,…*XX
 …(預設每 20 ms 輸出 5 行 IMU/AHRS;BARO 依自己的量測完成時間輸出,每秒 50 行)…
 $SPNVSTAT,1,…*XX   $SPNVSTAT,2,…   $SPNVSTAT,3,…   $SPNVFUS,…   $SPNVSYS,…   $SPNVHB,…   (每 1 s)




                                SparkNavi-IMU600-V2 通訊協定說明           第 20 頁

21ページ

原資料21ページ

ページ文字を展開(コピー可)
7. 校驗計算範例 (Python)
    def spnv_checksum(body: str) -> str:
        cs = 0
        for ch in body.encode('ascii'):
            cs ^= ch
        return f"{cs:02X}"

    def parse_line(line: str):
        line = line.strip()
        if not line.startswith('$') or '*' not in line:
            return None
        body, cs = line[1:].rsplit('*', 1)
        if spnv_checksum(body) != cs.upper():
               return None                  # 校驗錯,整行丟
        return body.split(',')              # f[0] = 'SPNVIMU' 等

    # 送指令
    cmd = "SPNVCMD,RATE,100"
    ser.write(f"${cmd}*{spnv_checksum(cmd)}\r\n".encode())



8. Binary 模式 (D6 44)
送出 $SPNVCMD,MODE,binary 後,裝置傳給主機的訊息會改用二進位封包。主機送出的指令仍使用 ASCII 格
式的 $SPNVCMD。送 MODE,ascii 可切回文字輸出;出廠預設為 ascii。


8.1 封包結構
    D6 44 | id(1) | len(1) | seq(1) | payload(len) | crc16(2)


偏移         欄位                                                說明

0–1       sync      0xD6 0x44

2         id        訊息類別

3         len       資料內容(payload)的長度,範圍為 0–255 bytes。

4         seq       各訊息類別 id 分別計數;每送一筆加 1,超過 255 後回到 0。GUI 可用序號判斷是否漏收封
                    包。

5…        paylo     多位元組數值採 little-endian(低位元組在前);f32 為 IEEE-754 32-bit 浮點數。ts_us 為
          ad        u64,單位 µs,數值與 ASCII 相同。

末2        crc16     CRC-16/CCITT-FALSE:poly 0x1021、init 0xFFFF、不反射、無 xorout。CRC 以低位元組在
                    前的順序存放。計算範圍從 byte 2 到 payload 最後一個位元組,包含 id、len、seq、
                    payload。測試字串 "123456789" 的結果為 0x29B1。




                                  SparkNavi-IMU600-V2 通訊協定說明       第 21 頁

22ページ

原資料22ページ

ページ文字を展開(コピー可)
8.2 訊息表

    id     名稱                                 對應 ASCII                            內容長度        總長度
                    $SPNVIMURAW
0x01     IMU_RAW                                                             68              75
                    $SPNVIMU
0x02     IMU                                                                 68              75
                    $SPNVBARO
0x03     BARO                                                                24              31
                    $SPNVAHRS
0x04     AHRS                                                                52              59

0x05     PPS        $SPNVPPS (fw 0.8.0)                                      24              31
                    $SPNVSTAT
0x10     STAT                                                                44              51
                    $SPNVFUS
0x11     FUS                                                                 32              39
                    $SPNVSYS
0x12     SYS                                                                 48 (fw 0.8.0:   55
                                                                             40;fw ≤
                                                                             0.7.0:36)

0x7F     TEXT       其他所有                                                     可變              ≤ 262
                    (BOOT/RESET/DBG/AUTH/INIT/HB/ACK/NAK/STALL/TRAP)

上表的長度單位為位元組(bytes)。各欄位的單位與狀態位元定義,與對應的 ASCII 訊息相同。下方列出欄位
偏移、型別與 Python struct 格式;參考程式見 tools/spnv_parser.py。

0x01 IMU_RAW (68) — <BBHQ3f3ff3f3ff

               偏移                           欄位                                型別

0                               imu_id                      u8

1                               status                      u8

2                               n                           u16

4                               ts_us                       u64

12                              gyro[3]                     f32×3 °/s

24                              acc[3]                      f32×3 m/s²

36                              temp                        f32 °C

40                              dth[3]                      f32×3 rad

52                              dv[3]                       f32×3 m/s

64                              dt                          f32 s




                                     SparkNavi-IMU600-V2 通訊協定說明     第 22 頁

23ページ

原資料23ページ

ページ文字を展開(コピー可)
0x02 IMU (68) — <Q3f3ff3f3ffBBBB

      偏移                       欄位                                            型別

0                  ts_us                           u64

8                  gyro[3]                         f32×3

20                 acc[3]                          f32×3

32                 temp                            f32

36                 dth[3]                          f32×3

48                 dv[3]                           f32×3

60                 dt                              f32

64                 n_used                          u8

65                 flags                           u8

66                 used_mask                       u8;bit0、bit1、bit2 分別表示是否採用 IMU1、IMU2、
                                                   IMU3。

67                 reserved                        u8


0x03 BARO (24) — <QfffB3x

           偏移                                            欄位                             型別

0                             ts_us                                               u64

8                             press_hpa                                           f32

12                            temp_c                                              f32

16                            alt_m                                               f32

20                            status                                              u8

21                            reserved[3]                                         u8


0x04 AHRS (52) — <Q4f3f3fBBH

     偏移                 欄位                                                  型別

0          ts_us                            u64

8          q[4]                             f32×4 (q0 q1 q2 q3, body➔NED)

24         roll, pitch, yaw                 f32×3 deg

36         gyro_bias[3]                     f32×3 °/s

48         align                            u8

49         flags                            u8

50         zb_ds                            u16;fw 0.9.2 起表示連續靜止時間,單位為 0.1 s;舊版固定為 0。




                                  SparkNavi-IMU600-V2 通訊協定說明           第 23 頁

24ページ

原資料24ページ

ページ文字を展開(コピー可)
0x10 STAT (44) — <BBBB9IHH

           偏移                                     欄位                                 型別

0                          imu_id                                            u8

1                          dry_timeout                                       u8

2                          dry_pin                                           u8

3                          isr_cpu_pct                                       u8

4                          dry                                               u32

8                          out                                               u32

12                         crc_err                                           u32

16                         frame_err                                         u32

20                         spi_timeout                                       u32

24                         dropped                                           u32

28                         dcnt_skip                                         u32

32                         dry_kicks                                         u32

36                         resync                                            u32

40                         isr_us_max                                        u16

42                         isr_us_last                                       u16


0x11 FUS (32) — <6Iff

          偏移                                      欄位                                 型別

0                          outputs                                           u32

4                          rej[3]                                            u32×3

16                         incomplete                                        u32

20                         degraded                                          u32

24                         gyro_thresh                                       f32

28                         acc_thresh                                        f32


0x05 PPS (24) — <QIIiBBH (fw 0.8.0)

    偏移                                            欄位                                       型別

0        ts_us:最近一次通過條件檢查的 PPS 上升緣時間,與 IMU 使用相同時間基準。                                      u64

8        edges:通過條件檢查的 PPS 邊緣累計數。                                                         u32

12       captures:原始擷取次數,包含雜訊。                                                            u32

16       err_ppb:本地晶振相對 PPS 的頻率偏差;正值表示本地時鐘較快。                                             i32

20       state (0 OFF / 1 NO_SIGNAL / 2 ACQUIRING / 3 LOCKED / 4 HOLDOVER)                u8

21       align:1 表示輸出週期的時間邊界已與 PPS 對齊。                                                    u8

22       age_ms:距離最近一次合格 PPS 邊緣的時間,上限為 65535 ms。                                          u16

                                    SparkNavi-IMU600-V2 通訊協定說明    第 24 頁

25ページ

原資料25ページ

ページ文字を展開(コピー可)
0x12 SYS (48) — <7IHBBBBBBIII (fw 0.8.0 為 40 byte、fw ≤ 0.7.0 為 36 byte,尾端欄位不存在)

     偏移                          欄位                                          型別

0            uart_drop                          u32

4            loops_per_s                        u32

8            uart_resets                        u32

12           pps_cnt                            u32

16           baro_samples                       u32

20           baro_i2c_err                       u32

24           baro_timeouts                      u32

28           rate_hz                            u16

30           isr_cpu_total_pct                  u8

31           out_mode                           u8 (0 none/1 raw/2 fused/3 both)

32           baro_stale                         u8

33           baro_hz                            u8

34           proto_mode                         u8 (0 ascii/1 binary)

35           pps_state                          u8 (fw 0.8.0;舊版為 reserved 0)

36           u2_drop                            u32 (fw 0.8.0)

40           trig_cnt                           u32 (fw 0.9.0)

44           trig_rej                           u32 (fw 0.9.0)

解析 SYS 時,請先依 len 判斷版本:可能為 36、40 或 48 bytes。各版本共用的前段欄位排列相同;只有長度足
夠時,才讀取後方新增的欄位。

0x7F TEXT

TEXT 的 payload 是 ASCII 訊息中 $ 與 *XX 之間的文字,不包含 $、*XX 或行尾 CRLF。例如,ACK 訊息的內容
為 SPNVACK,RATE,100。GUI 可直接顯示,也可用逗號分隔各欄位。


8.3 二進位輸出的資料量與頻寬

                      設定                         流量              460800 (46 kB/s)        921600 (92 kB/s)

50 Hz both + AHRS + BARO                    19 kB/s          OK                     OK

100 Hz both + AHRS + BARO                   37 kB/s          OK                     OK

200 Hz fused + AHRS                         27 kB/s          OK                     OK

400 Hz fused + AHRS                         54 kB/s          超過                     OK

500 Hz fused + AHRS                         67 kB/s          超過                     OK

1000 Hz 單顆 raw                              75 kB/s          超過                     OK

1000 Hz fused + AHRS                        134 kB/s         超過                     超出上限,請用 1.5M
                                                                                    或 2M。



                                  SparkNavi-IMU600-V2 通訊協定說明        第 25 頁

26ページ

原資料26ページ

ページ文字を展開(コピー可)
設定                              流量          460800 (46 kB/s)         921600 (92 kB/s)

1000 Hz 三顆 raw                                225 kB/s        超過                      超出上限,請改用
                                                                                      SPI3。


8.4 鮑率設定與實際誤差

用 $SPNVCMD,BAUD,<n> 設定 UART1 鮑率。設定值、實際鮑率與誤差如下:

                 鮑率                                      實際                               誤差

460800                               458716                                   0.45%

921600                               925926                                   0.47%

1500000                              1515152                                  1.0%

2000000                              2000000                                  0%



8.5 主機端工具

原廠參考解析器 tools/spnv_parser.py 可處理 ASCII 與 binary 資料,檢查校驗碼或 CRC,並統計漏收封包。

 python3 spnv_parser.py COM5 460800 --binary --cmd RATE,100 --cmd OUT,fused
 python3 spnv_parser.py --file capture.bin


程式介面 SpnvParser.feed(bytes) 會回傳一個列表,每筆結果的格式為 (kind, name, dict)。


9. 韌體更新
  •      在 SparkNavi IMU600 GUI 選擇「韌體更新」,並載入原廠發布、適用本產品的 .spfw 檔案。更新檔經
         過加密與驗證;格式或產品不符的檔案不會被接受。
  •      更新流程:GUI 送出 $SPNVCMD,BOOT,1;裝置回覆 ACK 後重新啟動,進入更新程式 bootloader;
         GUI 接著傳送並驗證檔案,完成後自動啟動新韌體。bootloader 不輸出文字訊息,會以 460800 bps、
         8N1 等待更新連線約 1.5 s;若沒有收到更新要求,就回到原有應用韌體。
  •      使用者設定與六面校正資料存放在獨立區域,更新韌體不會清除。
  •      若更新途中斷電、線材脫落或驗證失敗,裝置會停留在 bootloader 等待重新更新。請在 GUI 使用「救
         援更新」重新傳送。若開機時發現應用韌體異常,也會進入相同的等待狀態。
  •      韌體更新使用的通訊格式不在本文件公開。如需把更新功能整合到自有工具,請洽原廠。


10. GPS PPS 時間對齊(fw 0.8.0)
將 GPS 或其他準確的 1 Hz 參考訊號接到 GPS_PPS_IN,裝置就能讓 IMU 的輸出週期對齊 PPS 上升緣。這條訊
號只提供「整秒邊界」,不包含日期或 GPS 時間資料。

  •      鎖定後,相鄰兩個 PPS 上升緣之間會輸出 RATE 筆資料。其中一筆的 ts_us 等於 PPS 上升緣的時間,並
         在 RAW 的 status bit7、合併資料的 flags bit7 標記為 1。主機可將這筆資料與 GPS 提供的整秒時間配
         對。




                               SparkNavi-IMU600-V2 通訊協定說明          第 26 頁

27ページ

原資料27ページ

ページ文字を展開(コピー可)
•    裝置每秒量測實際 PPS 間隔,再將這段間隔分成 RATE 等份,作為下一秒的輸出時間點。這樣可補償本
          地 50 MHz 晶振數十 ppm 的頻率偏差,避免對齊誤差逐秒累積。$SPNVPPS 的 err_ppm 表示量到的晶
          振偏差。
     •    ts_us 仍以裝置的本地 50 MHz 時鐘計算,從開機起算,不會變成 GPS 或 UTC 時間。PPS 的作用是決定
          每筆 IMU 資料的取樣時段在哪個時間點結束。
     •    接線規格:3.3 V CMOS,上升緣有效,輸入端有內部下拉。脈衝寬度至少 1 µs;一般 GPS 約為 100
          ms。輸入電壓不可超過 3.3 V。
     •    PPS 的相鄰上升緣間隔須在 1 s ± 1000 ppm 內,也就是約 0.999–1.001 s。連續 2 次間隔合格後才進入
          鎖定。過短的間隔(小於 1 s − 1000 ppm)視為毛刺並忽略;其他不合格間隔會讓裝置回到
          ACQUIRING。若只是漏掉 1–9 個脈衝,而下一次間隔仍符合 k s ± k × 1000 ppm,則可沿用原本的對
          齊基準。擷取解析度為 20 ns。
          以 MCU 軟體延遲或一般訊號產生器產生的 1 Hz 訊號,可能達不到精度要求,請用示波器確認。例如標
          示 1 Hz、實測卻為 993.83 mHz 時,偏差約 6200 ppm;此時 pps_cnt 仍會增加,但無法進入 LOCKED。
     •    $SPNVPPS 只在接受合格邊緣,或 PPS 狀態改變時送出。若一直停在 ACQUIRING,且收到的間隔都不
          合格,不會每秒送一行。此時請查看 $SPNVSYS 的 pps_cnt(第 7 欄)與 pps_state(第 15 欄)。
PPS 狀態可從 $SPNVPPS 第 4 欄、$SPNVSYS 第 15 欄,或 $SPNVU2 的 pps_state 查看:

    值       狀態                                               說明

0         OFF       PPS 功能已關閉(PPS,0)。裝置從開機起,每隔 1/RATE 自行決定輸出時間。

1         NO_SIG    尚未收到合格的 PPS,例如未接線;輸出仍按裝置自己的時鐘運作。
          NAL

2         ACQUIRI   已收到邊緣,但尚未連續取得 2 個符合 1 s ± 1000 ppm 的間隔。
          NG

3         LOCKED    已鎖定 PPS,輸出時間邊界持續與 PPS 對齊。

4         HOLDOV 先前已鎖定,但超過 1.5 s 未收到 PPS。裝置暫時沿用最後量到的間隔繼續輸出。PPS 恢復
          ER        且符合整數秒間隔時,立即回到 LOCKED;若邊緣時間已偏離原本的整秒基準,則回到
                    ACQUIRING 重新對齊。
$SPNVPPS 格式如下。每接受一個合格邊緣或每次狀態改變時送出一行;UART1 須開啟 STAT,UART2 則須在
U2OUT 中包含 stat。

    $SPNVPPS,<ts_us>,<edges>,<captures>,<state>,<err_ppm>,<age_ms>,<align>*XX
    $SPNVPPS,1234000000,58,58,3,12.345,0,1*XX


     •    間隔小於 1 s − 1000 ppm 的邊緣視為雜訊或毛刺,直接忽略,不改變目前狀態。captures − edges 可
          用來查看未被採用的擷取次數。
     •    剛進入 LOCKED 時,輸出時間邊界會調整一次,幅度最多為一個輸出週期。因此,該筆 dt 可能較短或
          較長;完成調整後會持續連續輸出。


11. UART2 第二輸出埠(fw 0.8.0)
     •    UART2 使用 U2TX、U2RX 腳位,電氣規格為 3.3 V TTL、8N1。目前只透過 U2TX 輸出資料,U2RX 不
          接收指令。


                                  SparkNavi-IMU600-V2 通訊協定說明         第 27 頁

28ページ

原資料28ページ

ページ文字を展開(コピー可)
•   UART2 的設定都由 UART1 下指令:U2OUT 選擇資料內容、U2MODE 選擇格式、U2BAUD 設定鮑率,
     再用 SAVE,1 保存。出廠值為 binary、raw(三顆 IMU)、460800 bps。
 •   UART2 的資料格式與 UART1 相同,可選 ASCII 或 D6 44 binary;binary 的 seq 由 UART2 獨立計數。
     ACK、NAK、INFO 等文字回覆只從 UART1 送出。
 •   UART2 的輸出選項與 UART1 的 OUT、BARO、AHRS、STAT 互相獨立。例如,可讓 UART1 只送
     fused 給 GUI,同時讓 UART2 送 raw 給飛控。
 •   頻寬估算:binary 模式每批三顆 RAW 共 225 B。100 Hz 時約 22.5 kB/s,460800 bps 可負荷;1000
     Hz 時約 225 kB/s,已超過 2000000 bps 約 200 kB/s 的上限,請改為只送 fused 或降低輸出率。緩衝
     區滿時會丟棄整筆資料,累計數可查看 $SPNVSYS 第 16 欄或 $SPNVU2 的 drop。


12. EXT_TRIGGER 外部觸發(fw 0.9.0)
送出 $SPNVCMD,TRIG,1,或在 GUI 將「IMU 輸出模式」改為「外部觸發」後,裝置依下列規則運作:

 •   進入此模式後,裝置先等待 EXT_TRIGGER(J2 pin 15)的上升緣,不主動送出 $SPNVIMURAW、
     $SPNVIMU 或 $SPNVAHRS。若已保存此設定,開機後也會先等待觸發。
 •   第一個上升緣只用來建立起點,不輸出資料。之後每個上升緣結束一段取樣時間,並產生一批資料;實
     際送出的 RAW、合併及 AHRS 內容,仍依 OUT、AHRS、U2OUT 設定。持續輸入 100 Hz 觸發時,就
     以每秒 100 批的速度輸出。
 •   每筆 ts_us 記錄本次觸發上升緣的時間。EXT_TRIGGER 中斷的優先權高於取樣中斷,只讀取 50 MHz 計
     時器,以保留觸發時間。Δθ 與 Δv 累計的是前一次到本次觸發之間的資料,dt 表示這段積分時間。
     實際切分以原始樣本為單位,因此與精確觸發間隔的差小於 1 個樣本,約 0.68 ms。相鄰輸出的積分時
     段會接續,不重複也不漏掉樣本;觸發頻率不必是 RATE 的倍數。
 •   從觸發到輸出的延遲,約為等待 1 個原始樣本的時間(≤ 0.7 ms),再加上處理與傳輸時間。
 •   此模式的 IMU 輸出速度由觸發訊號決定,RATE 設定會保留,供切回連續模式時使用。氣壓計仍依
     BRATE 獨立輸出,統計資料仍每秒一組。PPS 對齊在此模式不作用,因為輸出時間邊界由
     EXT_TRIGGER 決定。
 •   建議觸發頻率為 1–1000 Hz。間隔小於 0.5 ms 的邊緣視為毛刺,會被忽略並累計至 trig_rej。若超過約
     10 s 沒有觸發,會放棄該段資料,下一個上升緣重新作為起點。若觸發間隔超過 1 s,仍輸出 RAW 與合
     併資料,但 AHRS 不更新。傳輸頻寬請依實際觸發頻率估算,見第 2.5、8.3 節。
 •   接線規格:3.3 V CMOS,上升緣有效,輸入端有內部下拉。觸發源請使用 3.3 V 推挽輸出,脈衝寬度至
     少 1 µs,電壓不可超過 3.3 V。
 •   送出 $SPNVCMD,TRIG,0 可回到連續模式,裝置改依 RATE 定時輸出,並忽略 EXT_TRIGGER 的邊緣。
 •   目前模式可查看 $SPNVCFG 的 trig;接受與忽略的觸發次數,分別查看 $SPNVSYS 的 trig_cnt、
     trig_rej(第 17、18 欄)。

 舊版差異:fw ≤ 0.8.0 仍持續輸出,EXT_TRIGGER 只會額外再送出最新一筆資料。觸發頻率與 RATE 不
 同時,可能重複或漏送同一筆,造成 Δθ/Δv 重複計算;當時腳位也沒有內部下拉。這項舊行為已移除。




                       SparkNavi-IMU600-V2 通訊協定說明   第 28 頁

29ページ

原資料29ページ

ページ文字を展開(コピー可)
13. SPI3 從機輸出(fw 0.10.0 起)
IMU600 作為 SPI 從機,由飛控(主機)按固定週期讀取。這版硬體沒有資料就緒訊號 DRDY,因此飛控須用封
包序號與時間戳判斷是否重複讀取或漏收。
本節的通訊行為以 fw 0.10.8 為基準,並於 2026-10-15 與 ArduPilot 4.7.1 完成實機驗證。

     J3                                                訊號

6             FC_SPI_CS,低電位有效。fw 0.10.1 起啟用內部上拉,避免飛控重開機或未上電時,CS 處於不確定
              電位。

8             SCK3IN

10            SDI3(MOSI);此介面不使用輸入資料,飛控送 0 即可。

12            SDO3(MISO);設為 SPI,off 時為高阻抗。

     •    SPI 預設為 Mode 3,也可用 SPICK 改為 Mode 0;每個位元組先送最高位元(MSB first)。建議飛控
          SPI 時脈設為 2 MHz,此設定已在 Blue2 + ArduPilot 4.7.1 驗證;8 MHz 尚未驗證。
     •    每次將 CS 拉低後,應完整讀取 128 bytes,再將 CS 拉高。讀滿 128 bytes 才算完成這個封包;若未讀
          滿,下次仍提供同一個封包。若讀取超過 128 bytes,多出的部分會回傳 0。
     •    CS 拉高後,IMU600 會準備下一個封包。飛控下次將 CS 拉低時,即可開始送出 SPI 時脈並讀取。
     •    連接 ArduPilot 時,請設 RATE,1000,原因見第 14 節。SPI3 本身也支援其他 RATE 值
          (5/10/25/50/100/200/400/500 Hz),但 ArduPilot 的主迴圈為 400 Hz 時,起飛前檢查要求陀螺資
          料更新率至少為 720 Hz。因此,200/400/500 Hz 都無法通過這項檢查。
     •    連接 ArduPilot 時,建議設 OUT,none、AHRS,0、U2OUT,none,關閉不需要的串列資料。三顆 IMU
          在 1000 Hz 的 ASCII 資料量遠超過 921600 bps;即使在 400 Hz,OUT,both 也會塞滿 UART1,讓
          uart_drop 持續增加。這會使 GUI 顯示的接收速率與「漏格」計數失準,但不影響 SPI3 輸出。


13.1 SPI 封包結構(128 bytes,little-endian)

offset    型別                                             內容

0         u8×2    0x53 0x4E ("SN")

2         u8      版本 = 1

3         u8      封包類型:0 = 空封包,沒有新資料;1 = IMU 資料;2 = 資料串流。

4         u16     seq:IMU 封包每產生一批輸出就加 1;串流封包則按分段計數。空封包沿用最後完成讀取的
                  seq。

6         u8      pending:本封包之後還有多少個封包等待讀取。大於 0 時,可立即再讀。

7         u8      IMU 封包:used_mask,bit0–2 分別表示 IMU1–3 是否參與合併。串流封包:payload 的有
                  效長度,範圍 0–118 bytes。

8..125    —       資料內容(payload),格式依封包類型而定。

126       u16     CRC-16/CCITT-FALSE,poly 0x1021、init 0xFFFF;計算範圍為 byte 0–125,演算法與
                  binary 模式相同。




                                     SparkNavi-IMU600-V2 通訊協定說明   第 29 頁

30ページ

原資料30ページ

ページ文字を展開(コピー可)
IMU 資料內容(類型 1,SPI,ardupilot):使用機體 FRD 座標,對應同一批 $SPNVIMU / $SPNVIMURAW 資
料。下表 offset 從整個封包的起點計算。

     offset          型別                                        內容

8              u64        ts_us:這批資料所涵蓋時段的結束時間;PPS 與外部觸發的時間規則和 UART 相
                          同。

16             f32        dt (s)

20             f32×3 /    合併 Δθ (rad) / Δv (m/s)
               f32×3

44 / 68 / 92   各 f32×6    依序為 IMU1、IMU2、IMU3 的 Δθ[3] 與 Δv[3]。若本次缺少某顆資料,該顆數值
                          全為 0,status 為 0xFF。

116            i16×3      IMU1..3 溫度 (0.01 °C)

122            u8×3       IMU1..3 status (同 $SPNVIMURAW,bit7 = PPS 標記)

125            u8         合併 flags (同 $SPNVIMU)

串流資料內容(類型 2,SPI,stream):從 byte 8 起讀取 len 個有效位元組,再將各封包內容依序接起來。得到
的格式與 UART2 相同,可直接交給既有的 ASCII 或 D6 44 解析程式。內容由 SPIOUT 選擇,格式由 SPIMODE
設定。


13.2 飛控讀取建議

     •    建議讀取間隔為輸出週期的 0.9 倍。例如 RATE,1000 時,每 0.9 ms 讀取一次。若 pending > 0,立即
          繼續讀取,但一次最多連讀 5 個封包。
     •    每次先檢查固定識別碼 magic、版本與 CRC。類型 0 表示沒有新資料,可略過。若 seq 與上次相同
          (gap = 0),也應略過,避免重複使用資料;fw 0.10.8 起,疑似未正常完成的交易可能重送同一個序
          號。IMU 封包的 seq 應依序加 1;若 gap > 1,表示中間可能因佇列已滿或讀取失敗而漏收。
     •    佇列最多保存 16 個封包,RATE,1000 時約相當於 16 ms 的資料。佇列滿時會丟棄最舊封包,累計至
          $SPNVSPI 的 drop。飛控尚未開始讀取前,drop 增加屬於等待期間的結果;開始正常讀取後,就不應
          持續增加。
     •    若 CRC 檢查失敗,請丟棄這次讀到的內容,並在下次重新讀取。若此次未讀滿 128 bytes,裝置不會移
          到下一個封包,下次仍會提供同一包資料。




                                   SparkNavi-IMU600-V2 通訊協定說明      第 30 頁

31ページ

原資料31ページ

ページ文字を展開(コピー可)
13.3 實機驗證結果 (Blue2 + ArduPilot 4.7.1,2026-10-15)

            項目                                                  結果

SPI 時脈 / 模式                2 MHz,Mode 3 (SPICK,3),飛控 SPI6 + 外部 CS

輸出率                        1000 Hz;每秒完成讀取約 1000 個資料封包(delivered),SPI 交易約 1190 次/s
                           (txn)。

資料正確性                      靜置時 Accel Z 約 −1000 mG,X/Y 約 0,與飛控 IMU1/2 一致。轉動方向一致,使
                           用 ROTATION_NONE;EKF3 啟用三顆 IMU(EK3_IMU_MASK=7)。

起飛前檢查                      1000 Hz 通過陀螺資料更新率檢查,飛控顯示 Ready to Arm。

錯誤計數 (fw 0.10.8,7.6        short = 4;dmaerr = 0;drop 在飛控讀取期間不增加
分鐘)

飛控 MP 訊息                   不再因偶發錯誤顯示 IMU600: x lost, y bad reads;偶發 bad read / lost 記錄於飛控
                           日誌 SNV6。


13.4 $SPNVSPI 欄位

送出 $SPNVCMD,CFG,1 或 INFO,1 後,裝置會回報以下 SPI 狀態:

 $SPNVSPI,mode=ardupilot,out=none,fmt=binary,ck=3,txn=…,ok=…,short=…,delivered=…,drop=…,dma=1,dmaerr=0,…
 *XX


       欄位                         說明                                     正常值 / 判讀
mode out fmt
                 SPI / SPIOUT / SPIMODE / SPICK 目前設定   —
ck
txn
                 SPI 交易的累計次數,以 CS 動作計                  每秒增加約為輸出率的 1.2 倍。
                 數。
ok
                 讀滿 128 bytes 的次數                      接近 txn
short
                 未讀滿 128 bytes 的累計次數;下次                測試中偶爾出現個位數。若持續增加,請檢查飛控 SCK
                 仍提供同一封包。                              速度與 CS 時序。
delivered
                 已完整交付的資料封包累計數。                        每秒增加量應接近輸出率。
drop
                 佇列已滿,因而丟棄最舊封包的累計                      飛控開始正常讀取後不應持續增加。開機到飛控開始讀
                 數。                                    取前的累計值,可與運作期間的新增值分開判斷。
dmaerr
                 0/1,是否曾發生 DMA 錯誤                      0

其他欄位(dma、lf、lt、ls、ks、kr、sp)供原廠診斷,一般解析程式可略過。新版韌體可能在訊息尾端增加欄
位。


14. ArduPilot 4.7.1 驅動 (AP_InertialSensor_SparkNavi)
IMU600 在飛控中登錄為第三組 SPI IMU(IMU3),原有兩顆內建 IMU 仍繼續使用。發行包 ArduPilot-4.7.1-
SparkNavi-IMU600.zip 包含驅動程式、修補檔(patch)、Blue2 專用板型 SparkNavi-Blue2-IMU600、測試
用 .apj 與 bootloader。




                                    SparkNavi-IMU600-V2 通訊協定說明       第 31 頁

32ページ

原資料32ページ

ページ文字を展開(コピー可)
需要完成的設定如下:

          位置                                                設定

IMU600(用 GUI 或指     必要設定:SPI,ardupilot;SPICK,3;RATE,1000。另建議設 OUT,none、AHRS,0、
令設定,完成後送            U2OUT,none,關閉不需要的串列輸出。
SAVE,1)

飛控 hwdef            SPIDEV imu600 SPI6 DEVID1 EXTERNAL_CS MODE3 2*MHZ 2*MHZ ;IMU SparkNavi SPI:imu600
                    ROTATION_NONE

飛控參數                EK3_IMU_MASK = 7;新板型的 defaults.parm 已設定。請再執行一次飛控的六面
                    加速度計校正,三組 IMU 一起校正。

 RATE 必須設為 1000 Hz 的原因:ArduPilot 的起飛前檢查
 AP_InertialSensor::pre_arm_check_gyro_backend_rate_hz 要求非串列介面陀螺的資料更新率,至少
 為主迴圈的 1.8 倍。Copter 預設主迴圈為 400 Hz,因此最低要求為 720 Hz。若 IMU600 設為 400 Hz,
 會出現 PreArm: Gyro 2 rate 400Hz < loop rate*1.8 720Hz,無法解鎖。請改用 1000 Hz,以符合檢查
 條件。

驅動程式的處理方式:

  •    開機偵測:讀取 128 bytes,檢查識別碼 SN、版本 1 與 CRC16。探測至少持續 500 ms,最晚等到飛控
       開機後 5 s;取得 50 筆 IMU 封包後,以 dt 的中位數判定輸出率,並對應到標準速率。運作中每 2 s 再
       核對一次。成功時 Mission Planner 的 Messages 顯示 IMU600 found, 1000 Hz;失敗時顯示 IMU600
       probe: rd … hdr … crc …。未接 IMU600 時會略過,內建兩顆 IMU 不受影響。
  •    模式檢查:若 IMU600 設為 SPI stream,會顯示 IMU600: SPI is in stream mode, set SPI ardupilot,
       並且不將它加入飛控的 IMU 清單。請改設 SPI,ardupilot。
  •    資料處理:將合併後的 Δθ、Δv(FRD 座標,含 coning/sculling 補償)交給
       _notify_new_delta_angle/_velocity,並使用封包的 dt 換算。若 used_mask = 0 或資料出現 NaN,會
       累計 gyro/accel 錯誤次數,不交給 INS 使用;SATURATED 會增加 accel clip 計數。溫度取三顆平均,
       約每秒發布 10 次。
  •    讀取方式:間隔為輸出週期的 0.9 倍。pending > 0 時立即再讀,一次最多 5 包。重複序號直接略過;
       gap > 1 時累計 lost,CRC 錯誤時累計 bad。
  •    錯誤紀錄:偶發的 bad read 或 lost 不直接顯示在地面站(GCS)。若最近 10 s 內有發生,就寫入
       SNV6 日誌,欄位為 TimeUS、Lost、Bad、Pkts。只有 10 s 內 lost ≥ 20 或 bad ≥ 100,才在地面站顯
       示 IMU600: SPI link errors (…)。驗證時可設 LOG_DISARMED=1,讓飛控在未解鎖時也錄製日誌,再
       查看 SNV6。
ArduPilot 整合注意事項:

  •    Mission Planner 顯示的加速度單位為 mG,角速度單位為 mrad/s。SCALED_IMU2 與 SCALED_IMU3
       分開傳送,因此運動中看到的兩組時間戳可能不同。
  •    IMU600 的 ACAL 與 ArduPilot 的 INS_ACCOFFS 是兩套校正。建議選定一套進行校正;若使用
       ArduPilot 校正,IMU600 可維持 ACAL 預設值(零偏 0、比例 1.0)。若之後又透過 GUI 改動 IMU600
       校正值,必須重新執行 ArduPilot 校正。




                            SparkNavi-IMU600-V2 通訊協定說明           第 32 頁

33ページ

原資料33ページ

ページ文字を展開(コピー可)
•   Blue2 飛控重開機時,IMU600 的 5 V 供電可能波動。Blue2 的 bootloader hwdef 需將 PE2/PE3 設為
    OUTPUT HIGH。燒錄 .apj 後,還須在 Mission Planner 執行一次「Flash bootloader」,新的
    bootloader 才會實際寫入。




                      SparkNavi-IMU600-V2 通訊協定說明   第 33 頁

原資料:Protocol v1.1 Source Pages · PDFページ 1–33

このカテゴリの概要 · 設定ガイド一覧