普冉PY32系列(九) GPIO模擬和硬體SPI方式驅動無線收發晶元XL2400

来源:https://www.cnblogs.com/milton/archive/2023/10/15/17765440.html
-Advertisement-
Play Games

前面介紹了 XN297LBW, 順帶再介紹一個非常類似的型號 XL2400, 生產商是深圳芯嶺技術, 同時市面上還有一個 WL2400, 從數據手冊看和 XL2400 是一模一樣的. XL2400 和XN297LBW 一樣都是 SOP8 封裝的2.4GHz頻段無線收發晶元, 但是零售價格更便宜, 在... ...


目錄

XL2400

前面介紹了 XN297LBW, 順帶再介紹一個非常類似的型號 XL2400, 生產商是深圳芯嶺技術, 同時市面上還有一個 WL2400, 從數據手冊看和 XL2400 是一模一樣的. XL2400 和XN297LBW 一樣都是 SOP8 封裝的2.4GHz頻段無線收發晶元, 但是零售價格更便宜, 在0.7元左右. 寄存器設置也存在大量 NRF24L01 的痕跡, 但是有一些區別.

產品頁地址: http://www.xinlinggo.com/pd.jsp?id=1

芯嶺對 XL2400 的介紹: "XL2400 系列晶元是工作在 2.400~2.483GHz 世界通用 ISM 頻段的單片無線收發晶元. 該晶元集成射頻收發機、頻率收生器、晶體振蕩器、數據機等功能模塊, 並且支持一對多組網和帶 ACK 的通信模式. 發射輸出功率、工作頻道以及通信數據率均可配置. 晶元已將多顆外圍貼片阻容感器件集成到晶元內部. 容易過 FCC 等認證."

XL2400 主要特性

  • 無線
    • 通信頻段:2.400GHz~2.483GHz
    • 數據速率:2Mbps,1Mbps,250Kbps,125Kbps
    • 調製方式:GFSK
  • 發射器
    • 輸出功率:最高8dBm
  • 接收器
    • -90dBm@2Mbps
    • -92dBm@1Mbps
    • -95dBm@250Kbps
    • -96.5dBm@125Kbps
  • 協議引擎
    • 支持最大數據長度為 128 位元組(4 級 FIFO)
    • 支持一對多組網和帶 ACK 的通信模式
  • 電源管理
    • 工作電壓:1.7V~3.6V
    • 發射模式(0dBm)工作電流 13.7mA
    • 接收模式工作電流 12.3mA
    • 休眠電流 2uA
  • 主機介面
    • 支持3引腳SPI, SPI介面速率最高支持 4Mbps
  • 封裝
    • SOP8
    • 1M/2Mbps模式需要晶振精度 ±40ppm&C L =12pF
    • 125K/250kbps模式需要晶振精度 ±20ppm&C L =12pF
    • BLE 廣播包模式需要晶振精度 ±10ppm&C L =12pF
    • 工作溫度支持-40~+125℃

與XN297L相比

  1. 發射功率低2個dbm, 但是支持125Kbps速率, 有更高的靈敏度. 因為存在虛標的可能性, 需要在實際使用中驗證
  2. 4級FIFO, 最大數據長度128位元組, 支持更大的單組數據
  3. 支持BLE, 因為手冊和SDK都未涉及這部分, 暫無法驗證

PIN腳定義和應用電路

PIN腳定義和應用電路

XL2400 的PIN腳定義和 XN297LBW 是完全一樣的

  • VDD 和 VSS 分別接 VCC 和 GND
  • XC1 和 XC2 接晶振
  • ANT 接天線
  • 用於MCU介面通信的只有 CSN, SCK 和 DATA 這三個PIN

推薦電路與XN297LBW相比更簡單. 實際上外圍電路只需要一個16MHz晶振.

模塊實物

嘉立創打樣的測試模塊 (項目地址 https://oshwhub.com/iosetting/xn297lbw-xl2400-evb)

因為電路與XN297LBW相似, 所以PCB通用, 只是焊接的元件有區別

如果只是做驗證, 可以用SOP8轉接板加焊一個16MHz晶振和一截 5~10cm 漆包線作為天線.

使用 PY32F0 驅動 XL2400

XN297L最新的SDK可以從芯嶺網站下載 下載地址 或者從百度網盤下載 下載地址. SDK中的例子使用GPIO模擬SPI方式進行驅動. 但是實際上也可以通過硬體SPI方式進行驅動.

硬體準備

  • XL2400 模塊
  • PY32F002A/PY32F003/PY32F030 系列MCU的開發板, 建議在驗證階段使用 20PIN 及以上封裝的型號, 避免PIN腳復用引起的干擾. 跑通後再遷移到低PIN型號
  • USB2TTL模塊, 用於觀察輸出
  • 以上硬體需要兩套, 測試中分別用於接收和發送

下麵以PY32F002A為例. 代碼不需調整可以直接運行於 PY32F003x 和 PY32F030x 系列的其它型號. 因為 XL2400 和 XN297LBW 的示例代碼幾乎是一模一樣, 就不仔細介紹了, 大部分代碼可以參考前面的 XN297LBW 的代碼說明, 只介紹有區別的地方.

GPIO模擬方式

接線

接線和XN297LBW一樣, 註意電源使用3.3V

PY32          XL2400 SOP8
PA1   ------> CLK/SCK
PA6   ------> CSN/NSS
PA7   ------> DATA/MOSI

              USB2TTL
PA2(TX) ----> RX
PA3(RX) ----> TX

代碼說明

XL2400 的初始化. 這部分與XN297LBW是有區別的. XL2400 的寄存器中存在大量多位元組的設置項, 設置時會需要先讀取再寫入

void XL2400_Init(void)
{
    // Analog config
    XL2400_ReadToBuf(XL2400_CMD_R_REGISTER | XL2400_REG_ANALOG_CFG0, xbuf, 13);
    *(xbuf + 4) &= ~0x04;
    *(xbuf + 12) |= 0x40;
    XL2400_WriteFromBuf(XL2400_CMD_W_REGISTER | XL2400_REG_ANALOG_CFG0, xbuf, 13);
    // Switch to software CE control, wake up RF
    XL2400_WakeUp();
    // Enable Auto ACK on all pipes
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_EN_AA, 0x3F);
    // Enable all pipes
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_EN_RXADDR, 0x3F);
    // Address Width, 5 bytes
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_SETUP_AW, 0xAF);
    // Retries and interval
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_SETUP_RETR, 0x33);
    // RF Data Rate 1Mbps
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_RF_SETUP, 0x22);
    // Number of bytes in RX payload, pipe 0 and pipe 1
    *(cbuf + 0) = XL2400_PLOAD_WIDTH;
    *(cbuf + 1) = XL2400_PLOAD_WIDTH;
    XL2400_WriteFromBuf(XL2400_CMD_W_REGISTER | XL2400_REG_RX_PW_PX, cbuf, 2);
    // Dynamic payload width: off
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_DYNPD, 0x00);
    // Other features
    //bit7&6=00 return status when send register address
    //bit5=0 long data pack off
    //bit4=1 FEC off
    //bit3=1 FEATURE on
    //bit2=0 Dynamic length off
    //bit1=0 ACK without payload
    //bit0=0 W_TX_PAYLOAD_NOACK off
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_FEATURE, 0x18);
    // Enable RSSI
    *(cbuf + 0) = 0x10;
    *(cbuf + 1) = 0x00;
    XL2400_WriteFromBuf(XL2400_CMD_W_REGISTER | XL2400_REG_RSSI, cbuf, 2);
}

設置通信頻道

void XL2400_SetChannel(uint8_t channel)
{
    if (channel > 80) channel = 80;
    // AFC reset
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_ANALOG_CFG0, 0x06);
    // AFC on
    XL2400_WriteReg(XL2400_CMD_W_REGISTER | XL2400_REG_ANALOG_CFG0, 0x0E);
    // Frequency(MHz) 2400:0x960 -> 2480:0x9B0
    *(cbuf + 0) = 0x60 + channel;
    *(cbuf + 1) = 0x09;
    XL2400_WriteFromBuf(XL2400_CMD_W_REGISTER | XL2400_REG_RF_CH, cbuf, 2);
    // AFC Locked
    *(cbuf + 1) |= 0x20;
    XL2400_WriteFromBuf(XL2400_CMD_W_REGISTER | XL2400_REG_RF_CH, cbuf, 2);
}

XL2400 的發送和接收函數和 XN297LBW 通用

完整代碼

XL2400 示例代碼的 GitHub 倉庫地址: https://github.com/IOsetting/py32f0-template/tree/main/Examples/PY32F0xx/LL/GPIO/XL2400_Wireless

運行測試

修改 main.c 中的模式設置, 0為接收, 1為發送, 分別寫入至兩個PY32F002A開發板, 觀察UART的輸出.

// 0:RX, 1:TX
#define XL2400_MODE 0

接收端在每次接收到數據時, 輸出第1,2,31個位元組的值; 發送端每發送255組數據(每組32位元組)後, 會顯示發送成功的個數(十六進位), 這個輸出可以用於計算發送成功率, 以及發送速度.

硬體SPI方式

接線

接線和XN297LBW的硬體SPI方式一樣, 使用4線制全雙工, PY32的MOSI和MISO都接到XL2400的DATA, 但是在MOSI(PA7)上串一個1K的電阻.

PY32                XL2400 SOP8
PA0   ------------> DATA/MOSI
PA7   ---> 1KR ---> DATA/MOSI
PA1   ------------> CLK/SCK
PA6   ------------> CSN/NSS

                    USB2TTL
PA2(TX) ----------> RX
PA3(RX) ----------> TX

代碼說明

參考XN297LBW的代碼說明, 兩者是一樣的.

完整代碼

XL2400 示例代碼的 GitHub 倉庫地址: https://github.com/IOsetting/py32f0-template/tree/main/Examples/PY32F0xx/LL/SPI/XL2400_Wireless

運行測試

和GPIO模擬方式的一樣, 修改 main.c 中的模式設置, 0為接收, 1為發送, 分別寫入至兩個PY32F002A開發板, 觀察UART的輸出.

// 0:RX, 1:TX, 2:TX_FAST
#define XL2400_MODE 0

利用FIFO隊列提升發送速度

XL2400 也可以使用直接寫入 FIFO 隊列的方式提升發送速度, 發送相比普通發送方式有10%的性能提升.

在硬體SPI通信的示例中可以通過設置XL2400_MODE2可以啟用快速發送模式

// 0:RX, 1:TX, 2:TX_FAST
#define XL2400_MODE 2

相關內容

  • STC8H開發(十六): GPIO驅動XL2400無線模塊
    這是去年寫的一篇STC8H驅動XL2400的文章, 當時還沒有跑通硬體SPI方式的驅動. 另外測試結論的性能偏低, 可能與8位MCU的性能有關. 在PY32F002A上, 1Mbps速率時實測傳輸可以達到17KBps, 每秒17K位元組, 這個速度已經可以傳輸雙聲道音頻了.

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基本數據類型 標準數據類型 常見數據類型: Number(數字) String(字元串) bool(布爾類型) List(列表) Tuple(元組) Set(集合) Dictionary(字典) 六個標準數據類型中: 不可變數據(3 個):Number(數字)、String(字元串)、Tuple(元 ...
  • 本文介紹在Anaconda中,為Python的虛擬環境安裝第三方庫與Spyder等配套軟體的方法。 在文章創建Anaconda虛擬Python環境的方法中,我們介紹了在Anaconda環境下,創建、使用與刪除Python虛擬環境的方法;而創建虛擬環境後,就需要在對應的環境內配置各類庫與軟體,本文就對 ...
  • 代碼地址: https://gitee.com/Aes_yt/middleware-demo/tree/master/rabbitmq 安裝RabbitMq 1. docker拉取鏡像 docker pull rabbitmq:3.9.29-management 2. 創建rabbitmq容器 do ...
  • 自從開始搞YouTube中文配音以來,我們一直是7*24小時,夜以繼日的在批量處理一些優質的學習資源,一方面是翻譯,另一方面是配音。這樣用戶在打開的時候,就能獲得經過我們優化的翻譯和配音了。 這次我們剛剛處理完一個油管上非常火爆的​IT類學習頻道:Edureka。 該頻道內全是IT行業的免費學習視頻 ...
  • math庫常用函數+產生隨機數總結 1.對x開平方 double sqrt(x);//返回值為double類型,輸入的x類型隨意,只要是數的類型 2.求常數e的x次方 double exp(x);//返回值為double類型,輸入的x類型隨意,只要是數的類型 3.求x的y次方 double pow( ...
  • TLS雙向認證的基本原理及示意流程圖,幫助更好的理解TLS的加密功能,及安全能力,此外還給出了部分源碼的實現及Token實現在的方案及能力 ...
  • 在我們WPF應用端的時候,和WInform開發或者Vue前端開發一樣,有時候也需要對內容進行轉義處理,如把一些0,1數值轉換為具體含義的文本信息,或者把一些布爾變數轉換為是否等,都是常見的轉換處理,本篇隨筆介紹在WPF應用端對內容使用Converter類實現內容的轉義處理的操作。 ...
  • 目錄構建riscv64-unknown-linux-musl編譯工具鏈直接下載官方工具鏈嘗試自己編譯T-head Gcc下載編譯binutils編譯交叉gcc編譯musl手動合成fip.bin和boot.sd編譯u-boot生成cvi_board_memmap.h,cvipart.h和imgs.h繼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...