目錄
- 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU簡介
- 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode開發(fā)環(huán)境
- 普冉PY32系列(三) PY32F002A資源實(shí)測 - 這個(gè)型號不簡單
- 普冉PY32系列(四) PY32F002A/003/030的時(shí)鐘設(shè)置
- 普冉PY32系列(五) 使用JLink RTT代替串口輸出日志
- 普冉PY32系列(六) 通過I2C接口驅(qū)動(dòng)PCF8574擴(kuò)展的1602LCD
- 普冉PY32系列(七) SOP8,SOP10,SOP16封裝的PY32F002A/PY32F003管腳復(fù)用
- 普冉PY32系列(八) GPIO模擬和硬件SPI方式驅(qū)動(dòng)無線收發(fā)芯片XN297LBW
- 普冉PY32系列(九) GPIO模擬和硬件SPI方式驅(qū)動(dòng)無線收發(fā)芯片XL2400
XL2400
前面介紹了 XN297LBW, 順帶再介紹一個(gè)非常類似的型號 XL2400, 生產(chǎn)商是深圳芯嶺技術(shù), 同時(shí)市面上還有一個(gè) WL2400, 從數(shù)據(jù)手冊看和 XL2400 是一模一樣的. XL2400 和XN297LBW 一樣都是 SOP8 封裝的2.4GHz頻段無線收發(fā)芯片, 但是零售價(jià)格更便宜, 在0.7元左右. 寄存器設(shè)置也存在大量 NRF24L01 的痕跡, 但是有一些區(qū)別.
產(chǎn)品頁地址: http://www.xinlinggo.com/pd.jsp?id=1
芯嶺對 XL2400 的介紹: "XL2400 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 頻段的單片無線收發(fā)芯片. 該芯片集成射頻收發(fā)機(jī)、頻率收生器、晶體振蕩器、調(diào)制解調(diào)器等功能模塊, 并且支持一對多組網(wǎng)和帶 ACK 的通信模式. 發(fā)射輸出功率、工作頻道以及通信數(shù)據(jù)率均可配置. 芯片已將多顆外圍貼片阻容感器件集成到芯片內(nèi)部. 容易過 FCC 等認(rèn)證."
XL2400 主要特性
- 無線
- 通信頻段:2.400GHz~2.483GHz
- 數(shù)據(jù)速率:2Mbps,1Mbps,250Kbps,125Kbps
- 調(diào)制方式:GFSK
- 發(fā)射器
- 輸出功率:最高8dBm
- 接收器
- -90dBm@2Mbps
- -92dBm@1Mbps
- -95dBm@250Kbps
- -96.5dBm@125Kbps
- 協(xié)議引擎
- 支持最大數(shù)據(jù)長度為 128 字節(jié)(4 級 FIFO)
- 支持一對多組網(wǎng)和帶 ACK 的通信模式
- 電源管理
- 工作電壓:1.7V~3.6V
- 發(fā)射模式(0dBm)工作電流 13.7mA
- 接收模式工作電流 12.3mA
- 休眠電流 2uA
- 主機(jī)接口
- 支持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相比
- 發(fā)射功率低2個(gè)dbm, 但是支持125Kbps速率, 有更高的靈敏度. 因?yàn)榇嬖谔摌?biāo)的可能性, 需要在實(shí)際使用中驗(yàn)證
- 4級FIFO, 最大數(shù)據(jù)長度128字節(jié), 支持更大的單組數(shù)據(jù)
- 支持BLE, 因?yàn)槭謨院蚐DK都未涉及這部分, 暫無法驗(yàn)證
PIN腳定義和應(yīng)用電路
PIN腳定義和應(yīng)用電路
XL2400 的PIN腳定義和 XN297LBW 是完全一樣的
- VDD 和 VSS 分別接 VCC 和 GND
- XC1 和 XC2 接晶振
- ANT 接天線
- 用于MCU接口通信的只有 CSN, SCK 和 DATA 這三個(gè)PIN
推薦電路與XN297LBW相比更簡單. 實(shí)際上外圍電路只需要一個(gè)16MHz晶振.
模塊實(shí)物
嘉立創(chuàng)打樣的測試模塊 (項(xiàng)目地址 https://oshwhub.com/iosetting/xn297lbw-xl2400-evb)
因?yàn)殡娐放cXN297LBW相似, 所以PCB通用, 只是焊接的元件有區(qū)別
如果只是做驗(yàn)證, 可以用SOP8轉(zhuǎn)接板加焊一個(gè)16MHz晶振和一截 5~10cm 漆包線作為天線.
使用 PY32F0 驅(qū)動(dòng) XL2400
XN297L最新的SDK可以從芯嶺網(wǎng)站下載 下載地址 或者從百度網(wǎng)盤下載 下載地址. SDK中的例子使用GPIO模擬SPI方式進(jìn)行驅(qū)動(dòng). 但是實(shí)際上也可以通過硬件SPI方式進(jìn)行驅(qū)動(dòng).
硬件準(zhǔn)備
- XL2400 模塊
- PY32F002A/PY32F003/PY32F030 系列MCU的開發(fā)板, 建議在驗(yàn)證階段使用 20PIN 及以上封裝的型號, 避免PIN腳復(fù)用引起的干擾. 跑通后再遷移到低PIN型號
- USB2TTL模塊, 用于觀察輸出
- 以上硬件需要兩套, 測試中分別用于接收和發(fā)送
下面以PY32F002A為例. 代碼不需調(diào)整可以直接運(yùn)行于 PY32F003x 和 PY32F030x 系列的其它型號. 因?yàn)?XL2400 和 XN297LBW 的示例代碼幾乎是一模一樣, 就不仔細(xì)介紹了, 大部分代碼可以參考前面的 XN297LBW 的代碼說明, 只介紹有區(qū)別的地方.
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是有區(qū)別的. XL2400 的寄存器中存在大量多字節(jié)的設(shè)置項(xiàng), 設(shè)置時(shí)會(huì)需要先讀取再寫入
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);
}
設(shè)置通信頻道
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 的發(fā)送和接收函數(shù)和 XN297LBW 通用
完整代碼
XL2400 示例代碼的 GitHub 倉庫地址: https://github.com/IOsetting/py32f0-template/tree/main/Examples/PY32F0xx/LL/GPIO/XL2400_Wireless
運(yùn)行測試
修改 main.c 中的模式設(shè)置, 0為接收, 1為發(fā)送, 分別寫入至兩個(gè)PY32F002A開發(fā)板, 觀察UART的輸出.
// 0:RX, 1:TX
#define XL2400_MODE 0
接收端在每次接收到數(shù)據(jù)時(shí), 輸出第1,2,31個(gè)字節(jié)的值; 發(fā)送端每發(fā)送255組數(shù)據(jù)(每組32字節(jié))后, 會(huì)顯示發(fā)送成功的個(gè)數(shù)(十六進(jìn)制), 這個(gè)輸出可以用于計(jì)算發(fā)送成功率, 以及發(fā)送速度.
硬件SPI方式
接線
接線和XN297LBW的硬件SPI方式一樣, 使用4線制全雙工, PY32的MOSI和MISO都接到XL2400的DATA, 但是在MOSI(PA7)上串一個(gè)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
運(yùn)行測試
和GPIO模擬方式的一樣, 修改 main.c 中的模式設(shè)置, 0為接收, 1為發(fā)送, 分別寫入至兩個(gè)PY32F002A開發(fā)板, 觀察UART的輸出.
// 0:RX, 1:TX, 2:TX_FAST
#define XL2400_MODE 0
利用FIFO隊(duì)列提升發(fā)送速度
XL2400 也可以使用直接寫入 FIFO 隊(duì)列的方式提升發(fā)送速度, 發(fā)送相比普通發(fā)送方式有10%的性能提升.文章來源:http://www.zghlxwxcb.cn/news/detail-710719.html
在硬件SPI通信的示例中可以通過設(shè)置XL2400_MODE
為2
可以啟用快速發(fā)送模式文章來源地址http://www.zghlxwxcb.cn/news/detail-710719.html
// 0:RX, 1:TX, 2:TX_FAST
#define XL2400_MODE 2
相關(guān)內(nèi)容
-
STC8H開發(fā)(十六): GPIO驅(qū)動(dòng)XL2400無線模塊
這是去年寫的一篇STC8H驅(qū)動(dòng)XL2400的文章, 當(dāng)時(shí)還沒有跑通硬件SPI方式的驅(qū)動(dòng). 另外測試結(jié)論的性能偏低, 可能與8位MCU的性能有關(guān). 在PY32F002A上, 1Mbps速率時(shí)實(shí)測傳輸可以達(dá)到17KBps, 每秒17K字節(jié), 這個(gè)速度已經(jīng)可以傳輸雙聲道音頻了.
到了這里,關(guān)于普冉PY32系列(九) GPIO模擬和硬件SPI方式驅(qū)動(dòng)無線收發(fā)芯片XL2400的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!