作者:ZeroGrid 實驗室
🎯 本篇目標
- 透視信封:看懂 LoRa 封包的五大結構與 Header 內部秘密。
- 看見聲音:想像 Preamble 在頻譜上的形狀。
- 鏡像世界:理解 IQ Inverted 的原理與用途。
- 錯誤診斷:當 Sync Word 錯、Header 爛掉或 CRC 失敗時,晶片會怎麼反應?
1. 前言:你寫的不是你發的
在軟體工程師眼裡,發送 Hello 只是送出 5 個 Bytes。 但在無線電工程師眼裡,這 5 個 Bytes 被層層包裹。SX1262 的物理層 (PHY) 會自動加上四層包裝,就像一個標準的快遞信封。

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 (顯式表頭) 模式下,這張單子包含了三個重要資訊:
- Payload Length (1 Byte):
- 告訴接收端:「後面跟著的資料有幾個 Byte」。
- 最大值:255 Bytes。這是 LoRa 單一封包的物理極限。
- Coding Rate (CR):
- 告訴接收端:「這包肉裡面混了多少骨頭 (修復碼)」。
- 為什麼要放在 Header? 因為不同的 CR (如 4/5 vs 4/8),Payload 的實際編碼內容是完全不同的。接收端必須先知道 CR,才能正確地將修復碼剝離,還原出原始資料。
- 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 訊號的路徑對調了。
- Standard IQ (False):發送的是 Up-Chirps (頻率由低到高
- 用途: 由於 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
下一課預告
我們現在完全看懂了這個信封。 但如果空氣中充滿了別人的信封(Preamble),我們貿然發射就會撞車。 下一篇 #6 禮貌的通訊者,我們將探討 CAD (通道活動檢測),教你的 ZeroGrid 如何「先聽後說」,在開口前先確認空氣是乾淨的。

