SX1262 實驗室 #5:解剖無線電信封 —— Preamble、IQ Inverted 與 CRC 機制

更新 發佈閱讀 8 分鐘

作者:ZeroGrid 實驗室

🎯 本篇目標

  1. 透視信封:看懂 LoRa 封包的五大結構與 Header 內部秘密。
  2. 看見聲音:想像 Preamble 在頻譜上的形狀。
  3. 鏡像世界:理解 IQ Inverted 的原理與用途。
  4. 錯誤診斷:當 Sync Word 錯、Header 爛掉或 CRC 失敗時,晶片會怎麼反應?

1. 前言:你寫的不是你發的

在軟體工程師眼裡,發送 Hello 只是送出 5 個 Bytes。 但在無線電工程師眼裡,這 5 個 Bytes 被層層包裹。SX1262 的物理層 (PHY) 會自動加上四層包裝,就像一個標準的快遞信封。

Packet Format

Packet Format

我們必須透過 SetPacketParams 指令來定義這個信封的規格。


2. Preamble (前導碼):頻譜上的鋸齒

Preamble 是一連串重複的標準 Chirp 訊號。

  • 頻譜長什麼樣? 如果你用 SDR (軟體無線電) 去看 LoRa 的 Preamble,你會看到一排整齊的、向右上方傾斜的斜線 /// (Up-Chirps)。 這就像是無線電裡的「連續音階」,從低音掃到高音。
  • 為什麼預設是 8 Symbols? 接收端的晶片需要時間從睡眠中醒來、對齊這些斜線 (Time Synchronization) 並鎖定頻率 (Frequency Lock)。
    • < 4 Symbols:接收端來不及鎖定,直接錯過。
    • > 12 Symbols:雖然穩,但浪費時間。
    • ZeroGrid 選擇8 Symbols

3. Sync Word (同步字):沈默的守門員

聽到了 Preamble 鬧鐘後,SX1262 會醒來檢查 Sync Word。 Sync Word 通常是由兩個反向 Chirp (Down-Chirps) 組成的特殊圖樣。

  • 反應機制:錯了會怎樣?
    • Preamble 沒收到:晶片根本不會醒來,繼續睡。
    • Sync Word 錯誤:晶片醒來了,但發現「這不是我的網段」,直接丟棄封包,繼續回去睡,完全不通知 MCU (沒有中斷)。這就是為什麼我們用私有 Sync Word (0x1424) 可以過濾掉別人的干擾。

4. Header (表頭):快遞單的秘密

過了 Sync Word 這一關,接下來就是讀取「快遞單 (Header)」。 在 Explicit Header (顯式表頭) 模式下,這張單子包含了三個重要資訊:

  1. Payload Length (1 Byte)
    1. 告訴接收端:「後面跟著的資料有幾個 Byte」。
    2. 最大值255 Bytes。這是 LoRa 單一封包的物理極限。
  2. Coding Rate (CR)
    • 告訴接收端:「這包肉裡面混了多少骨頭 (修復碼)」。
    • 為什麼要放在 Header? 因為不同的 CR (如 4/5 vs 4/8),Payload 的實際編碼內容是完全不同的。接收端必須先知道 CR,才能正確地將修復碼剝離,還原出原始資料。
  3. Header CRC

這是隱形的。Header 自己也有一個 CRC 校驗。如果 Header 壞了(例如長度讀錯),接收端會直接報錯 IRQ_HEADER_ERR 並丟棄封包,因為它根本不知道後面該怎麼讀。


5. Payload 與 CRC:最後的防線

Header 讀懂了,終於可以讀 Payload (資料本體)。 在 Payload 的最後面,SX1262 會自動附上 2 Bytes 的 Payload CRC (如果開啟 crc_on)。

  • 反應機制:CRC 錯了會怎樣?
    • 情況:資料傳輸途中被雜訊干擾,導致內容損壞。
    • 動作:SX1262 會計算收到的資料 CRC,跟封包尾巴的 CRC 比對。
    • 結果:如果不符,晶片會產生 IRQ_CRC_ERR 中斷,並在 Status Register 中標記 PayloadCrcError
    • ZeroGrid 策略:我們收到 CRC_ERR 會直接丟棄該包資料,絕不把錯誤的指令交給上層處理。

6. 進階概念:IQ Inverted (倒立的世界)

在 SetPacketParams 中,有一個神秘的參數叫 IQ Inverted

  • 原理
    • Standard IQ (False):發送的是 Up-Chirps (頻率由低到高 ///)。
    • Inverted IQ (True):發送的是 Down-Chirps (頻率由高到低 \\\)。這就像是把 I/Q 訊號的路徑對調了。
  • 用途: 由於 Up-Chirps 和 Down-Chirps 是正交的(互不干擾),這通常用於 LoRaWAN Gateway 場景。
    • Gateway -> Node (下行):使用 Inverted IQ。
    • Node -> Gateway (上行):使用 Standard IQ。
    • 目的:防止節點聽到彼此的發射訊號(因為節點只聽 Inverted),避免同頻干擾。
  • ZeroGrid 設定: 因為我們是 P2P (對等通訊),大家地位平等,所以一律關閉 IQ Inverted (false),大家都用 Standard IQ。

7. ZeroGrid 實驗室:故障模擬分析

我們用指令來驗證晶片對錯誤的反應。

案例 A:Sync Word 不符 (模擬被拒絕)

  • 模擬操作:接收端使用 /reg 指令將 Sync Word 修改為錯誤的值(例如 0x3444)。
  • 晶片反應無反應 (Silent Drop)
  • 解讀:即使 Preamble 正確,硬體也會在 Sync Word 階段攔截封包。MCU 完全不會收到中斷通知,這是最底層的過濾。

案例 B:CRC 錯誤 (模擬訊號損壞)

  • 模擬操作:將兩台設備拉開到極限距離,或使用干擾源。
  • 晶片反應:觸發 IRQ_CRC_ERR 中斷。
  • 解讀:ZeroGrid 韌體會偵測到此錯誤,印出 [RX] CRC Error 並丟棄該封包。這證明 Header 是好的(長度已知),但內容壞了。

案例 C:Preamble 偵測 (模擬干擾源)

  • 模擬操作:發射端輸入 /jammer preamble
  • 晶片反應:接收端解不出任何封包。
  • 解讀:雖然沒有資料,但在下一篇講的 CAD (通道活動檢測) 中,這種訊號會被判定為 "Activity Detected" (頻道忙碌)。
Long Preamble Signal

Long Preamble Signal


下一課預告

我們現在完全看懂了這個信封。 但如果空氣中充滿了別人的信封(Preamble),我們貿然發射就會撞車。 下一篇 #6 禮貌的通訊者,我們將探討 CAD (通道活動檢測),教你的 ZeroGrid 如何「先聽後說」,在開口前先確認空氣是乾淨的。

留言
avatar-img
ZeroGrid 實驗室
0會員
13內容數
專注於災難復原通訊與 LoRa 網狀網絡實驗。尋找倖存者。
ZeroGrid 實驗室的其他內容
2026/01/18
作者:ZeroGrid 實驗室 🎯 本篇目標 破解迷思:為什麼 LoRa 可以傳得比 WiFi 遠?不是因為魔術,是因為數學。 黃金三角:掌握 SF (展頻因子)、BW (頻寬)、CR (編碼率) 之間的交換關係。 實戰應用:什麼時候該用 SF7?什麼時候該用 SF12? ZeroGri
2026/01/18
作者:ZeroGrid 實驗室 🎯 本篇目標 破解迷思:為什麼 LoRa 可以傳得比 WiFi 遠?不是因為魔術,是因為數學。 黃金三角:掌握 SF (展頻因子)、BW (頻寬)、CR (編碼率) 之間的交換關係。 實戰應用:什麼時候該用 SF7?什麼時候該用 SF12? ZeroGri
2026/01/18
作者:ZeroGrid 實驗室 🎯 本篇目標 地圖導航:看懂 Datasheet (v2.2) 的 狀態機流轉圖 (State Machine)。 啟動 SOP:詳解從 NRESET 到 Ready 的標準步驟(含 DC-DC 與時脈源的硬體陷阱)。 模式禁忌:解釋 Sleep / Sta
Thumbnail
2026/01/18
作者:ZeroGrid 實驗室 🎯 本篇目標 地圖導航:看懂 Datasheet (v2.2) 的 狀態機流轉圖 (State Machine)。 啟動 SOP:詳解從 NRESET 到 Ready 的標準步驟(含 DC-DC 與時脈源的硬體陷阱)。 模式禁忌:解釋 Sleep / Sta
Thumbnail
2026/01/18
作者:ZeroGrid 實驗室 前言:這不是讀記憶體,這是「下訂單」 上一篇我們解剖了 SX1262 的內部構造,知道它裡面住了一個「管理員」(協同處理器)。這造成了它與傳統感測器(如加速度計、溫濕度計)在程式寫法上的巨大差異。 傳統感測器 (Memory Mapped):你給地址,它馬上把資
Thumbnail
2026/01/18
作者:ZeroGrid 實驗室 前言:這不是讀記憶體,這是「下訂單」 上一篇我們解剖了 SX1262 的內部構造,知道它裡面住了一個「管理員」(協同處理器)。這造成了它與傳統感測器(如加速度計、溫濕度計)在程式寫法上的巨大差異。 傳統感測器 (Memory Mapped):你給地址,它馬上把資
Thumbnail
看更多