目录

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通信的示例中可以通过设置XN297L_MODE2可以启用快速发送模式

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

相关内容

  • STC8H开发(十六): GPIO驱动XL2400无线模块

    这是去年写的一篇STC8H驱动XL2400的文章, 当时还没有跑通硬件SPI方式的驱动. 另外测试结论的性能偏低, 可能与8位MCU的性能有关. 在PY32F002A上, 1Mbps速率时实测传输可以达到17KBps, 每秒17K字节, 这个速度已经可以传输双声道音频了.

普冉PY32系列(九) GPIO模拟和硬件SPI方式驱动无线收发芯片XL2400的更多相关文章

  1. 普冉PY32系列(七) SOP8, SOP10和SOP16封装的PY32F003/PY32F002A管脚复用

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  2. 普冉PY32系列(四) PY32F002/003/030的时钟设置

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  3. 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 PY32F0系列上市其实相 ...

  4. 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 以下介绍PY32F0系列在 ...

  5. 普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  6. 普冉PY32系列(五) 使用JLink RTT代替串口输出日志

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  7. 普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  8. java多线程系列(九)---ArrayBlockingQueue源码分析

    java多线程系列(九)---ArrayBlockingQueue源码分析 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 j ...

  9. S5PV210之GPIO模拟I2c时序之pcf8591与at24xx linux3.0.8驱动

    目录:一. 说明 二. 驱动程序说明及问题 三. 案例一       四. 案例二 一. 说明 mini210开发板上带了at24c08, 看了linux内核自带的at24.c的驱动程序,编译下载到看 ...

  10. GPIO模拟IIC接口信号质量分析

    信号质量有问题的波形001: 信号质量有问题的波形002: 从上图可以看出,GPIO口模拟的I2C接口,电平都存在半高的情况. 因为I2C的接口是通过GPIO模拟实现的,该时钟信号线SCL内部默认为下 ...

随机推荐

  1. 一文掌握设计模式(定义+UML类图+应用)

    一.引子 从学编程一开始就被告知,要想做一名优秀的程序员两大必要技能:1.源码阅读(JDK.C等底层语言封装) 2.设计模式(使用某种语言优雅的落地典型场景功能).一般随着工作年限的增长,被迫对底层语 ...

  2. 精选Golang高频面试题和答案汇总

    大家好,我是阳哥. 之前写的< GO必知必会面试题汇总>,已经阅读破万,收藏230+. 也欢迎大家收藏.转发本文. 这篇文章给大家整理了17道Go语言高频面试题和答案详解,每道题都给出了代 ...

  3. ChatGPT「代码解释器」正式开放,图片转视频仅需30秒!十大令人震惊的魔法揭秘

    经过超过三个月的等待,ChatGPT「代码解释器」终于全面开放.这是一大波神奇魔法的高潮. OpenAI的科学家Karpathy对这个强大的代码解释器测试版赞不绝口.他把它比作你的个人数据分析师,可以 ...

  4. 瞬间抠图!揭秘 ZEGO 绿幕抠图算法背后的技术

    抠图是图像处理中最常见的操作之一,指的是将图像中需要的部分从画面中精确的提取出来. 抠图的主要功能是为了后期的合成做准备.在 Photoshop 中,抠图的方法有很多种,最常见的有通道抠图.蒙版抠图. ...

  5. Mysql 统计标签出现次数(一行变多行)

    需求背景 需求 一张数据表 其中有sid字段,代表tag,每行数据可能有多个tag字段 统计全量数据中所有tag出现的次数(按tag分组,分别有多少数据) source table demo id s ...

  6. DC-SDK 开发文档

    https://resource.dvgis.cn/dc-docs/v2.x/zh/introduction/#%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE

  7. 在 ubuntu 中安装或升级最新版本的 Elasticsearch

    1. 安装 java 8 首先最新版本的elasticsearch需要java8的支持,那先来安装一下. $ sudo add-apt-repository -y ppa:webupd8team/ja ...

  8. 基于Word2Vec的诗词生成器

    基于Word2Vec制作的诗词生成器 1.什么是Word2Vec? Word2vec 是 Word Embedding 方式之一,属于 NLP 领域.它是从大量文本预料中以无监督方式学习语义知识的模型 ...

  9. 【AI绘画模型汇总】分享5个国内实用的AI绘画模型网站-C站AI模型平替网站

    鉴于大家未必会有魔法工具访问civitai(C站)下载AI模型,这里我搜集整理了5个实用的国内版AI模型素材库,无障碍访问下载Stable diffusion模型. 1.LiblibAI 访问速度快, ...

  10. 《SQL与数据库基础》10. 存储引擎

    目录 存储引擎 MySQL体系结构 存储引擎简介 三种经典存储引擎 InnoDB 逻辑存储结构 MyISAM Memory 区别及特点 存储引擎选择 本文以 MySQL 为例 存储引擎 MySQL体系 ...