使用 LoRaWAN 系統級封裝,加速進行遠距無線連線的設計
資料提供者:DigiKey 北美編輯群
2019-02-27
在需要低成本、遠距離、低功率無線連線的遙測應用中,LoRa 技術比藍牙及 Wi-Fi 等替代技術更受青睞。儘管如此,開發人員仍在努力精進 RF 設計的細節,以快速經濟地實作 LoRa 設計,進而達到最大的傳輸距離和數據傳輸率,又不超出典型 IoT 系統的有限功率預算。
為了加速 LoRa 架構設計,矽晶廠商已開發出全套系統級封裝 (SiP) 模組及相關的 LoRaWAN 軟體堆疊,能提供幾乎立即可用的遠距連線解決方案。
本文將簡略探討 LoRa 方法,然後介紹適合的軟硬體解決方案,以及設計人員如何使用這些資源來快速進行設計並進行操作。
遠距 IoT 網路
LoRa 是遠距離 (long-range) 的簡稱,定義為超高效率、低成本、低功率的專有展頻無線電。此技術能支援電池供電式感測器及其他低功率應用,因此特別適合用於操作距離超出 Wi-Fi 或藍牙範圍的 IoT 應用。LoRa 架構設計僅需一顆小型電池就能運作好幾年,而且還能為橫跨數公里的超大型網路提供安全的連線能力。
LoRaWAN 是位於 LoRa 無線電介面之上的媒體存取控制 (MAC) 層,可定義網路的運作方式並設定數據傳輸率 (通常最高 50 Kbit/s) (請參閱《LoRaWAN 第 1 篇:如何讓 IoT 達到 15 公里無線傳輸範圍以及 10 年電池續航力》)。LoRaWAN 廣域網路架構以星狀網路拓撲運作,使用閘道器在多個終端裝置之間 (如 IoT 感測器和主機伺服器) 轉送訊息 (圖 1)。LoRa 無線電可搭配 LoRaWAN 的替代 MAC 層進行個別使用,但此介面並不符合 LoRaWAN 規格。
圖 1:LoRaWAN 規格能在終端裝置與網路伺服器間提供經過驗證及加密的通訊,並可使用閘道器與終端裝置建立遠距連線,以及與雲端或專用環境中的網路主機建立廣域連線。(圖片來源:LoRa 聯盟)
在此架構下,終端裝置與主機伺服器會透過閘道器裝置進行通訊,而閘道器可設定成單純的通訊橋接器。若要與主機伺服器進行通訊,閘道器會使用 Wi-Fi、乙太網路或蜂巢網路等傳統連線方式。若要與終端裝置進行通訊,閘道器則仰賴 Semtech 自行研發的 LoRa 實體 (PHY) 層,透過 Sub-GHz 頻段來達到可靠的遠距連線。無論是哪一種情況,LoRaWAN 都會使用網路作業階段或應用作業階段金鑰,透過 AES 加密來保護端對端通訊;這些金鑰可以在生產期間或調試期間建立,也可透過空中 (OTA) 啟用的方式來建立。
在 LoRaWAN 網路中,所有與終端裝置進行的通訊都是雙向通訊,但 LoRaWAN 協定規格提供三種不同的終端裝置類別,能讓開發人員在功耗和反應延遲之間取得平衡。A 類終端裝置只能在每次傳輸後兩個短暫的下行鏈路接收窗期內接收訊號。若將接收器的作用期間加以限制,A 類終端裝置就非常適合用於功率受限的裝置,例如 IoT 感測器。B 類裝置兼具 A 類裝置功能以及額外的接收窗期。因此,B 類裝置適用於需要降低主機請求反應延遲 (即使 Rx 功耗會增加) 的 IoT 致動器裝置。最後,C 類裝置提供幾乎持續開啟的接收窗期,因此相當適合用於 LoRaWAN 閘道器。
若想要對 LoRaWAN 安全性、功率縮減以及遠距連線能力進行最佳化,開發人員可能需要處理繁複的細節來設定硬體平台與軟體系統,因而會延誤工作進度。不過,Microchip Technology 所提供的軟硬體可簡化 LoRaWAN 網路的實作,提供幾乎立即可用的 LoRa 技術部署解決方案。
低功率整合式解決方案
Microchip 的 SAM R34/35 系統級封裝 (SiP) 模組,結合了低功率的 Arm® Cortex®-M0+、Semtech SX1276 收發器、快閃記憶體、RAM、超低功率 (LP) RAM,以及感測器系統通常需要用到的全套周邊裝置 (圖 2)。除了客製化的可配置邏輯模組,SAM 34/35 還包含多通道的 12 位元類比數位轉換器 (ADC)、類比比較器,以及多個序列通訊模組,可進行編程,即可支援 I2C、SPI 及其他序列介面。SAM R34 與 R35 SiP 只差在 R35 不提供 R34 隨附的 USB 介面。除了這項差異之外,6 x 6 mm 的 SAM R34/35 模組在三種不同的記憶體配置下皆相同:
- ATSAMR3xJ16BT-I/7JX - 具有 64 KB 快閃記憶體、8 Kbit SRAM、4 KB 低功率 SRAM
- ATSAMR3xJ17BT-I/7JX - 具有 128 KB 快閃記憶體、16 Kbit SRAM、8 KB 低功率 SRAM
- ATSAMR3xJ18BT-I/7JX - 具有 256 KB 快閃記憶體、32 Kbit SRAM、4 KB 低功率 SRAM
圖 2:Microchip Technology 的 SAM R34/R35 系統級封裝模組結合了低功率 Arm Cortex-M0+ 處理器核心、Semtech SX1276 收發器、記憶體以及多種周邊裝置 (只有 SAM R35 才有 USB)。(圖片來源:Microchip Technology)
SiP 模組專為低功率應用而設計,提供多種軟體可選選項,可在功能活動程度較低時降低功率。開發人員可以將 SAM R34/R35 設定在兩種不同的效能等級下運作。在較高效能等級 (PL2) 下,裝置核心會用最高電壓運作,能讓裝置以高時脈速度運作。在較低效能等級 (PL0) 下,核心電壓位準會透過降低運作頻率進行調整,繼而降低整體的功耗。
在指定效能等級下,開發人員還可透過編程方式將裝置切換到不同的功率模式下運作。在閒置模式下,模組僅消耗 4.5 mA 的電流,Tx 的短暫峰值需求會達到 28 mA,Rx 則達 10.3 mA。將模組置於待機模式,開發人員即可將模組功耗降至 1.4 µA;待機模式會關閉所有的時脈和功能,但經過特別編程以維持活動的功能除外。另外,此模組支援 SleepWalking 操作,能讓選定的周邊裝置以獨立於處理器的方式對事件做出回應、進行周邊裝置操作,且只在必要時喚醒處理器。若想在長時間閒置期間降低功耗,開發人員可以將模組置於睡眠模式,在此模式下僅消耗 790 nA 的電流。Microchip 建議不要將裝置置於關閉狀態,因為內部 SPI 匯流排的高阻抗會引起亞穩態情況。
設計實作
藉由模組的整合功能,硬體介面需求變得簡單。除了 SAM R34/R35 SiP 用的解耦電容之外,開發人員只需要再增添一個訊號開關 (如 Skyworks Solutions 的 SKY13373) 以及完成 RF 訊號收發路徑所需的被動元件 (圖 3)。
圖 3:有了 Microchip Technology 的 SAM R34/R35 模組,除了 RF 訊號路徑所需元件及相關 RF 開關 (如 Skyworks Solutions 的 SKY13373) 之外,開發人員只需要再使用額外幾個元件即可。(圖片來源:Microchip Technology)
若使用 Microchip Technology 的 DM320111 SAM R34 Xplained Pro 評估套件,開發人員甚至不必考量這些額外的簡易硬體需求。開發人員可使用這款套件立即開始評估 SAM R34,或是延伸硬體公版設計來客製化自己的裝置。
此外,Microchip 亦提供 SAM R34/R35 模組韌體範例軟體 (Atmel Studio 7 整合式開發環境提供) 的組合,可加速軟體開發。SAM R34/R35 SiP 以 Semtech 的 SX1276 整合式 LoRa 收發器和 PHY 為基礎,可透過內建的 Microchip LoRaWAN 堆疊 (MLS) 實作通過認證的 LoRaWAN (圖 4)。
圖 4:透過一套應用程式開發介面 (API),Microchip 的 LoRaWAN 堆疊 (MLS) 能為開發人員提供 MAC、PHY、永久儲存以及電源管理等層面的韌體服務。(圖片來源:Microchip Technology)
MLS 韌體以 Microchip 進階軟體架構 (ASF) 的裝置驅動程式及核心模組為基礎,可針對其各項服務提供應用程式開發介面 (API),服務包含:
- LoRaWAN MAC - 提供 LoRaWAN MAC 層功能
- LoRaWAN 無線電層 (TAL) - 可用來存取 LoRa 收發器
- 永久資料伺服器 (PDS) - 提供快閃記憶體的服務層,可縮短擷取 MLS 參數所需的存取時間及存取循環
- 電源管理器模組 (PMM) - 讓處理器在閒置期間進入睡眠模式
- 硬體抽象層 (HAL) - 讓程式碼不用觸及硬體方面的細節
- 計時器庫
- 排程器 - 將處理器資源分配給不同的模組
開發人員可使用 API 函數來精細控制模組功能的各個層面。例如,開發人員調用 PMM_Sleep() 這個 PMM API 函數,即可讓模組進入睡眠模式。此函數會使用睡眠請求結構,其中包含了睡眠時間、睡眠模式 (閒置、待機、睡眠或關閉) 以及完成回調函數 (列表 1)。在應用程式中,開發人員通常會在每次任務之後調用此函數。例如,Microchip 的 ASF 發行版包含的終端裝置範例應用程式,就在無限迴圈中使用了此作法 (列表 2)。每個 MLS API 均提供與 MLS 韌體服務類似的入口點。
複製 /* Structure of sleep request */ typedef struct _PMM_SleepReq_t { /* Sleep time requested to PMM.Unit is milliseconds */ uint32_t sleepTimeMs; /* Sleep Modes */ HAL_SleepMode_t sleep_mode; /* Callback from sleep request */ void (*pmmWakeupCallback)(uint32_t sleptDuration); } PMM_Sleep
列表 1:Microchip 進階軟體架構 (ASF) 發行版提供的範例軟體展示了關鍵的設計模式和資料架構,例如上述結構體就能讓 Microchip Technology 的 SAM R34/R35 模組進入睡眠狀態。(程式碼來源:Microchip Technology)
複製 ...while (1) { serial_data_handler(); SYSTEM_RunTasks(); #ifdef CONF_PMM_ENABLE if (false == certAppEnabled) { if(bandSelected == true) { PMM_SleepReq_t sleepReq; /* Put the application to sleep */ sleepReq.sleepTimeMs = DEMO_CONF_DEFAULT_APP_SLEEP_TIME_MS; sleepReq.pmmWakeupCallback = appWakeup; sleepReq.sleep_mode = CONF_PMM_SLEEPMODE_WHEN_IDLE; if (CONF_PMM_SLEEPMODE_WHEN_IDLE == SLEEP_MODE_STANDBY) { deviceResetsForWakeup = false; } if (true == LORAWAN_ReadyToSleep(deviceResetsForWakeup)) { app_resources_uninit(); if (PMM_SLEEP_REQ_DENIED == PMM_Sleep(&sleepReq)) { HAL_Radio_resources_init(); sio2host_init(); /*printf("\r\nsleep_not_ok\r\n");*/ } } } } #endif } ...
列表 2:Microchip 的範例軟體說明了開發人員如何使用一些 API 調用讓 Microchip Technology 的 SAM R34/R35 模組在閒置期間回到低功率狀態。(程式碼來源:Microchip Technology)
無論範例程式碼是由 Studio 7 隨附還是 ASF 發行版個別提供,都完整展示了如何利用 MLS API 調用來實作 LoRaWAN 應用。終端裝置實作範例展示了一些重要的高階作業,包括從 PDS 永久資料伺服器服務擷取先前儲存的 MLS 屬性和參數,來進行裝置的初始化 (列表 3)。其他範例軟體提供了一套測試常式,能讓開發人員詳盡檢查 LoRaWAN 的效能特徵,以及擷取這些值所用的 MLS API 調用。在 Microchip 軟體範例與 SAM R34 Xplained Pro 評估套件的搭配下,開發人員可快速累積一般 LoRaWAN 作業的相關經驗,尤其是 Microchip 韌體服務。
複製 /*********************************************************************//** \brief Initialization the Demo application *************************************************************************/ void mote_demo_init(void) { bool status = false; /* Initialize the resources */ resource_init(); /* Read DEV EUI from EDBG */ dev_eui_read(); startReceiving = false; /* Initialize the LORAWAN Stack */ LORAWAN_Init(demo_appdata_callback, demo_joindata_callback); printf("\n\n\r*******************************************************\n\r"); printf("\n\rMicrochip LoRaWAN Stack %s\r\n",STACK_VER); printf("\r\nInit - Successful\r\n"); status = PDS_IsRestorable(); if(status) { static uint8_t prevBand = 0xFF; uint8_t prevChoice = 0xFF; PDS_RestoreAll(); LORAWAN_GetAttr(ISMBAND,NULL,&prevBand); for (uint32_t i = 0; i < sizeof(bandTable) -1; i++) { if(bandTable[i] == prevBand) { prevChoice = i; break; } } memset(rxchar,0,sizeof(rxchar)); sio2host_rx(rxchar,10); printf ("Last configured Regional band %s\r\n",bandStrings[prevChoice]); printf("Press any key to change band\r\n Continuing in %s in ", bandStrings[prevChoice]); SwTimerStart(demoTimerId,MS_TO_US(1000),SW_TIMEOUT_RELATIVE,(void *)demoTimerCb,NULL); } else { appTaskState = DEMO_CERT_APP_STATE; appPostTask(DISPLAY_TASK_HANDLER); } }
列表 3:此程式碼片段來自於 Microchip 的終端裝置範例應用程式,展示了與裝置初始化有關的基本設計模式,包括從 PDS 永久資料伺服器還原可用的 LoRaWAN 屬性 (PDS_IsRestorable())。(程式碼來源:Microchip Technology)
結論
LoRa 技術特別適合解決電池供電式 IoT 感測器的遠距連線需求。然而,開發人員在過去只能朝開發大量硬體和軟體子系統的方向著手。Microchip 的 SAM R34/R35 SiP 模組透過整合式硬體和韌體,就可拋棄以往作法中涉及的繁複設計需求。開發人員只需搭配 Microchip 的 LoRaWAN 架構軟硬體,便能快速實作電池供電式 IoT 裝置和低功率閘道器,成功地與雲端或專用環境中的主機伺服器進行安全的遠距通訊。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。