LoRa網關項目——SX1278開發(一)


#前言

​ 最近在做一個LoRa物聯網網關的項目,網關的作用主要是管理連接的LoRa傳感器終端,將傳感數據通過協議轉換向上轉發到Internet,當然,也要處理下行的數據。

​ 使用到的LoRa射頻芯片是SX1278,MCU為STM32F103RCT6,連接Internet用的是ESP8266+AT,且移植了FreeRTOS(單純是為了學習),開發環境是STM32CubeMX+Keil 5。由於之前沒負責過整個系統的開發,所以開此貼記錄一下開發過程,由於本人上學以來語文一直不好,所以文筆正在努力進步中,如果此文章有您覺得我說的不明白的地方,可以發送郵件到wanglu082@yeah.net,或者在文章下方評論,我看到會盡快回復您,多謝諒解!

您也可以無聊當個故事看,我主要是記錄一下也防止以后看不懂自己寫的代碼,哈哈哈~

所以我將從大概三個方面大概記錄:

  1. SX1278的開發
  2. FreeRTOS的使用
  3. 整個項目總結

話不多說,直接開摟~


LoRa網關項目——SX1278開發(一)

一. SX1278介紹

​ SX1278是一款經典且性價比高的LoRa射頻芯片,非常適合初學者學習使用,由於我不是特別會畫PCB,所以還是選擇別家的模塊來的方便還不容易出錯。

​ 正點原子的LoRa模塊是和一個MCU封裝到一起的,所以可以用串口通信,很無腦,很多參數沒法修改已被正點原子給寫死,只能通過它家的上位機來配置模塊,遂PASS。最后選擇了安信可的LoRa Ra-02模塊,02是郵票孔接口的還比較容易焊接。這個就不像正點原子家的那樣無腦,它就是將SX1278和其外圍電路集成到了一起而已,使用SPI接口通信,有用的引腳也都引出了,目前來看比較不錯。唯一的問題是他的天線接口是ipex接口的,不如SMA的好看(其實是我有很多SMA接口的天線用不上了)。

​ 配置SX1278是通過SPI接口對寄存器操作實現的,某些寄存器在LoRa模式和FSK模式有不同的作用,我這個項目只用LoRa模式,所以FSK有關的我也懶得看(話說很多寄存器我真的不看懂是啥意思,不是通信專業的對射頻不是很了解,只能百度百度再百度)。


二. 開發之前的准備工作

​ 安信可的LoRa模塊共引出了16個管腳(如下圖),這么多的引腳加之這么多看不懂的寄存器,在這里不得不吐槽一下SX1278的官方手冊真的是很不全,很多操作的邏輯都沒有解釋明白,要讓我自己寫驅動的話我估計會直接放棄,不過還好安信可提供了幾個Demo可供咱們參考。

image-20210426211515458

​ 選了一個點對點控制LED的Demo,果斷將驅動復制出來,驅動的結構有必要說一下。我個人習慣把嵌入式項目分為5層架構,由上到下分別是:應用層、中間件層、操作系統層、板級支持包、硬件層。這個是我看知乎上一篇文章總結的,覺得跟我自己的想法高度一致,也不知道說的對不對。

  • 硬件層就是單片機內部外設的驅動,像GPIO,SPI等等,這一層一般是跟單片機走的,像這個項目的硬件層就是STM32提供的HAL庫。

  • 板級支持包這個概念是從大學的書本上看到的,Linux開發用的比較多吧,單片機沒怎么看到大家談(火哥好像用這個概念)。這一層大概就是對外部硬件的初始化和一些基本操作的封裝,通常調用的是硬件層的API來實現。就比如這個SX1278,它的初始化、片選、復位等操作就是屬於板級支持包要實現的。驅動文件中的 sx1276-board.csx1276-board.h 就是屬於板級支持包的。

  • 操作系統層是最容易理解的,於此項目而言就是FreeRTOS嘛。系統的初始化、任務、列表、隊列等數據結構的創建都是在這層實現的。操作系統層不光使用板級支持包提供的接口,顯然也調用硬件層的接口,所以這個層的位置其實比較尷尬,我的理解或許也有錯誤,歡迎討論!

  • 中間件層的作用是實現所需的功能函數。它與應用層的區別是:應用層負責解決整個系統何時該調用哪個功能函數;而中間件層就是實現這些功能函數的。這些功能函數可能調用了不同模塊對應的板級支持包的接口,組合來實現一項功能。例如,網關在接收到感知層結點的數據時,在接收回調函數中可能調用MQTT_publish()將數據轉發給上層應用,同時,也會調用OLED_display()顯示消息到顯式模塊上。

    驅動文件中的sx1276.csx1276.h 就是屬於中間件層的。

  • 應用層的工作是從整個系統的調度層面來講的,這個后面再說吧~


    官方的驅動中還剩下幾個文件,在這里介紹一下它們作用:

文件名 功能
radio.h 聲明了很重要的兩個結構體
sx1276Regs-Fsk.h FSK模式下的寄存器宏定義
sx1276Regs-LoRa.h LoRa模式下的寄存器宏定義

​ 將驅動文件復制到一個確定沒其它問題的MDK工程中,我用的是正點原子開發板中的SPI章節Demo(HAL庫),大差不差,選擇一個自己覺得舒服的就行。然后可以建一個文件夾放SX1278的驅動文件,完成在Keil中建立Group、添加INCLUDE path等常規操作。

​ 之后就可以開始改錯了,這其中主要是改以下部分內容:

  1. 引腳定義;根據你的原理圖來改。
  2. GPIO、SPI初始化函數。官方給的驅動是用標准庫來寫的,我用的STM32CubeMX只支持HAL庫,所以暫時要先把它改成對應的HAL庫函數。

這里差不多就改完了,編譯應該是0 error,這一章就介紹完了,明天開始記錄SX1278的初始化函數部分的內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM