Protocol v1.1 Source Pages

For IMU600-V2 / firmware 0.11.2 / GUI v1.6.1.

Every source page is preserved, including cover, contents, revision history where present, body, figures and tables. Source language: Traditional Chinese. Click a page to enlarge, or expand text to copy it. Use page images for table alignment.

Chapter crosswalk and document differences

These pages reproduce the original text and images. Use the linked comparison page and the relevant setup guide to check differences between documents and additional operating notes.

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

Page 1

Source page 1

Expand page text (copyable)
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.

Page 2

Source page 2

Expand page text (copyable)
目錄
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頁

Page 3

Source page 3

Expand page text (copyable)
修訂紀錄

版號        日期                                內容              編輯者


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


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




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

Page 4

Source page 4

Expand page text (copyable)
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頁

Page 5

Source page 5

Expand page text (copyable)
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頁

Page 6

Source page 6

Expand page text (copyable)
位元         值        名稱        來源                 意義            資料可信度           常見原因 / 處置

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頁

Page 7

Source page 7

Expand page text (copyable)
•    合併資料時,先檢查 (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頁

Page 8

Source page 8

Expand page text (copyable)
位元        值              名稱                                      意義

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頁

Page 9

Source page 9

Expand page text (copyable)
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頁

Page 10

Source page 10

Expand page text (copyable)
位元        值            名稱                                  意義

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 頁

Page 11

Source page 11

Expand page text (copyable)
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 頁

Page 12

Source page 12

Expand page text (copyable)
板上測試紀錄(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 頁

Page 13

Source page 13

Expand page text (copyable)
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 頁

Page 14

Source page 14

Expand page text (copyable)
#           欄位                                                  說明
          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 頁

Page 15

Source page 15

Expand page text (copyable)
訊息                          格式                                         說明
$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 頁

Page 16

Source page 16

Expand page text (copyable)
訊息                           格式                                        說明
$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 頁

Page 17

Source page 17

Expand page text (copyable)
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 頁

Page 18

Source page 18

Expand page text (copyable)
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 頁

Page 19

Source page 19

Expand page text (copyable)
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 頁

Page 20

Source page 20

Expand page text (copyable)
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 頁

Page 21

Source page 21

Expand page text (copyable)
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 頁

Page 22

Source page 22

Expand page text (copyable)
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 頁

Page 23

Source page 23

Expand page text (copyable)
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 頁

Page 24

Source page 24

Expand page text (copyable)
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 頁

Page 25

Source page 25

Expand page text (copyable)
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 頁

Page 26

Source page 26

Expand page text (copyable)
設定                              流量          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 頁

Page 27

Source page 27

Expand page text (copyable)
•    裝置每秒量測實際 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 頁

Page 28

Source page 28

Expand page text (copyable)
•   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 頁

Page 29

Source page 29

Expand page text (copyable)
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 頁

Page 30

Source page 30

Expand page text (copyable)
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 頁

Page 31

Source page 31

Expand page text (copyable)
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 頁

Page 32

Source page 32

Expand page text (copyable)
需要完成的設定如下:

          位置                                                設定

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 頁

Page 33

Source page 33

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




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

Source document:Protocol v1.1 Source Pages · PDF pages 1–33

Category overview · All setup guides