NRF24L01——2.4GHz无线通信

本文详细介绍了Si24R1芯片在嵌入式通信中的应用,涵盖了其2.4GHz工作频段、低功耗特性、GFSK/FSK调制解调、多种工作模式(如Shutdown、Standby等)、内置ARQ协议引擎和FIFO等功能,以及如何配置进行ACK/NACK通信模式。
摘要由CSDN通过智能技术生成

对于学习嵌入式中的通信,可能会用到这个模块,该模块应用的是si24r1芯片。

一、si24r1简介:

       Si24R1 是一颗工作在 2.4GHz ISM 频段,专为低功耗无线场合设计,集成嵌
入式 ARQ 基带协议引擎的无线收发器芯片。工作频率范围为 2400MHz-2525MHz,
共有 126 个 1MHz 带宽的信道。
       Si24R1 采用 GFSK/FSK 数字调制与解调技术。数据传输速率与 PA 输出功率
都可以调节,支持 2Mbps,1Mbps,250Kbps 三种数据速率。高的数据速率可以在更
短的时间完成同样的数据收发,因此可以具有更低的功耗。
       Si24R1 针对低功耗应用场合进行了特别优化,在关断模式下,所有寄存器
值与 FIFO 值保持不变,关断电流小于 0.7uA;在待机模式下,时钟保持工作,
电流小于 15uA,并且可以在不到 130uS 时间内开始数据的收发。
       Si24R1 操作方式非常方便, 只需要微控制器(MCU)通过 SPI 接口对芯片
少数几个寄存器配置即可以实现数据的收发通信。嵌入式 ARQ 基带引擎基于包通
信原理,支持多种通信模式,可以手动或全自动 ARQ 协议操作。内部集成收发
FIFO,可以保证芯片与 MCU 数据连续传输,增强型 ARQ 基带协议引擎能处理所有
高速操作,因此大大降低了 MCU 的系统消耗。
       Si24R1 具有非常低的系统应用成本,只需要一个 MCU 和少量外围无源器件
即可以组成一个无线数据收发系统。内部集成高 PSRR 的 LDO 电源,保证 1.9-3.6V
宽电源范围内稳定工作;数字 IO 兼容 3.3V/5V 两种电压,可以与各种 MCU 接口。

二、工作模式:

状态转换图
Si24R1 芯片内部有状态机,控制着芯片在不同工作模式之间的转换。
Si24R1 可配置为 Shutdown Standby Idle-TX TX RX 五种工作模式。

Shutdown 工作模式

       在 Shutdown 工作模式下, Si24R1 所有收发功能模块关闭,芯片停止工作,
消耗电流最小,但所有内部寄存器值和 FIFO 值保持不变,仍可通过 SPI 实现对
寄存器的读写。设置 CONFIG 寄存器的 PWR_UP 位的值为 0 ,芯片立即返回到
Shutdown 工作模式。

Standby 工作模式。

       在 Standby 工作模式,只有晶体振荡器电路工作,保证了芯片在消耗较少电
流的同时能够快速启动。设置 CONFIG 寄存器下的 PWR_UP 位的值为 1 ,芯片
待时钟稳定后进入 Standby 模式。芯片的时钟稳定时间一般为 1.5~2ms ,与晶振
的性能有关。当引脚 CE=1 时,芯片将由 Standby 模式进入到 Idle-TX RX
式,当 CE=0 时,芯片将由 Idle-TX TX RX 模式返回到 Standby 模式。

Idle-TX 工作模式

       在 Idle-TX 工作模式下,晶体振荡器电路及时钟电路工作。相比于 Standby
模式,芯片消耗更多的电流。当发送端 TX FIFO 寄存器为空,并且引脚 CE=1
时,芯片进入到 Idle-TX 模式。在该模式下,如果有新的数据包被送到 TX FIFO
中,芯片内部的电路将立即启动,切换到 TX 模式将数据包发送。
Standby Idle-TX 工作模式下,所有内部寄存器值和 FIFO 值保持不变,
仍可通过 SPI 实现对寄存器的读写。

TX 工作模式

       当需要发送数据时,需要切换到 TX 工作模式。芯片进入到 TX 工作模式的
条件为: TX FIFO 中有数据, CONFIG 寄存器的 PWR_UP 位的值为 1 PRIM_RX
位的值为 0 ,同时要求引脚 CE 上有一个至少持续 10us 的高脉冲。芯片不会直接
Standby 模式直接切换到 TX 模式,而是先立即切换到 Idle-TX 模式,再由
Idle-TX 模式自动切换到 TX 模式。 Idle-TX 模式切换到 TX 模式的时间为
120us~130us 之间,但不会超过 130us 。单包数据发送完成后,如果 CE=1, 则由
TX FIFO 的状态来决定芯片所处的工作模式,当 TX FIFO 还有数据,芯片继续
保持在 TX 工作模式,并发送下一包数据;当 TX FIFO 没有数据,芯片返回 Idle-TX
模式;如果 CE=0 ,立即返回 Standby 模式。数据发射完成后,芯片产生数据发
射完成中断。

RX 工作模式

         当需要接收数据时,需要切换到 RX 工作模式。芯片进入到 RX 工作模式的
条件为:设置寄存器 CONFIG PWR_UP 位的值为 1 PRIM_RX 位的值为 1
并且引脚 CE=1 。芯片由 Standby 模式切换到 RX 模式的时间为 120~130us。当接
收到数据包的地址与芯片的地址相同,并且 CRC 检查正确时,数据会自动存入
RX FIFO ,并产生数据接收中断。芯片最多可以同时存三个有效数据包,当 FIFO
已满,接收到的数据包被自动丢掉。
        在接收模式下,可以通过 RSSI 寄存器检测接收信号功率。当接收到的信号
强度大于 -60dBm 时, RSSI 寄存器的 RSSI 位的值将被设置为 1 。否则, RSSI=0。
RSSI 寄存器的更新方法有两种:当接收到有效的数据包后, RSSI 会自动更新,
此外,将芯片从 RX 模式换到 Standby 模式时 RSSI 也会自动更新。 RSSI 的值会
随温度的变化而变化,范围在± 5dBm 以内

三、数据包处理协议

       Si24R1 基于包通信,支持停等式 ARQ 协议。芯片内部 ARQ 协议基带处理引
擎,可以不需要外部微控制器干预下,自动实现 ACK 和 NO_ACK 数据包的处理。
ARQ 协议基带处理单元支持 1 到 32 字节动态数据长度,数据长度在数据包内。
也可以采用固定数据长度,通过寄存器指定;基带处理单元完成数据的自动解包、
打包、自动回复 ACK 确认信号以及自动重发。该处理单元内部有 6 个通信管道,
可以直接支持 1:6 星型网络。

ARQ 包格式

       一个完整的 ARQ 数据包包括前导码、地址、包控制字、负载数据以及 CRC。
       前导码字段主要用于接收数据同步,发射时芯片自动附上,接收时芯片自动
去掉,对用户不可见。
       地址字段为接收数据方地址,只有当该地址与芯片的地址寄存器中地址相同
时才会接收。地址长度可以通过配置寄存器 AW 配置为 3、或 4、或 5 字节。

ARQ 通信模式

       在 TX 模式下,发送端自动将前导码、地址、包控制字、负载数据、 CRC 打包。
通过射频模块将信号调制通过天线发射。
RX 模式下,接收端在接收到的解调信号中不断侦测有效地址,一旦侦测到
地址与接收地址相同,开始接收数据,如果接收到的数据有效,则将负载数据部
分存放入 RX FIFO 中,并产生中断通知 MCU MCU 通过 SPI 接口可随时访问
RX FIFO 寄存器,进行数据读取。

ACK 模式

       当用 W_TX_PAYLOAD 命令对发送端 TX FIFO 写数据时,将数据打包后,数
据包中包控制字段 NO_ACK 标志位复位。接收端接收到一帧有效数据后 , 产生
RX_DR 中断后,会自动发送一帧 ACK 信号,发送端接收到 ACK 信号,则自动
清除 TX FIFO 数据并产生 TX_DS 发射中断,表明此次通信成功。
接收端在发送 ACK 信号时,取接收管道地址作为目标地址来发送 ACK 信号,
所以发送端需要设置接收管道 0 地址与自身发送地址相同,以便接收 ACK 信号。
如果发送端在 ARD 时间内没有接收到 ACK 信号,则重新发送上一帧数据。当
重发次数达到最大,仍没有收到确认信号时,发送端产生 MAX_RT 中断。
MAX_RT 中断在清除之前不能进行下一步的数据发送。所有中断通过对状态寄
存器进行写操作来清除。 PLOS_CNT 寄存器在每产生一个 MAX_RT 中断后加 1
用来记录当前频段下,丢失的数据包的数量。 ARC_CNT 寄存器记录当前数据重
发的次数,在发送一包新数据时使其复位。最大重发次数与 ARD 时间通过
SETUP_RETR 寄存器来进行配置。接收端开启自动回复 ACK 信号由 EN_AA
存器来控制。
模式一: ACK 通信
//发射方配置:
 spi_rw_reg(SETUP_AW, 0x03); // 设置地址宽度为 5bytes 
 spi_write_buf(TX_ADDR, TX_ADDRESS, 5); // 写入发送地址,5 字节 
 spi_write_buf(RX_ADDR_P0, TX_ADDRESS, 5); //接收通道 0 地址和发射地址相同
 spi_write_buf(W_TX_PAYLOAD, buf, TX_PLOAD_WIDTH); // 写 TX FIFO 
 spi_rw_reg(FEATURE, 0x04); //使能动态负载长度
 spi_rw_reg(DYNPD, 0x01); //开启 DPL_P0 
 spi_rw_reg(SETUP_RETR, 0x15); //自动重发延时等待 500us,自动重发 5 次
 spi_rw_reg(RF_CH, 0x40); // 选择射频信道
 spi_rw_reg(RF_SETUP, 0x0e); // 数据传输率 2Mbps 及功率 
 spi_rw_reg(CONFIG, 0x0e); //配置为发射模式、CRC、可屏蔽中断
 CE = 1; 
//接收方配置:
 spi_write_buf(RX_ADDR_P0, TX_ADDRESS, 5); //接收通道 0 地址和发射地址相同
 spi_rw_reg(EN_RXADDR, 0x01); // 使能接收通道 0 
 spi_rw_reg(RF_CH, 0x40); // 选择射频信道
 spi_rw_reg(RX_PW_P0, TX_PLOAD_WIDTH); //设置负载长度,使用 PIPE0 接收
 spi_rw_reg(SETUP_AW, 0x03); // 设置地址宽度为 5bytes 
 spi_rw_reg( FEATURE, 0x04); //使能动态负载
 spi_rw_reg(DYNPD, 0x01); //开启 DPL_P0 
 spi_rw_reg(RF_SETUP, 0x0e); // 数据传输率 2Mbps 及功率 
 spi_rw_reg(CONFIG, 0x0f; //配置为发射模式、CRC、可屏蔽中断
 CE = 1;
模式二: NOACK 通信
//发射方配置:
 spi_write_buf( TX_ADDR, TX_ADDRESS, 5); // 写入发送地址
 spi_rw_reg( FEATURE, 0x01); // 使能 W_TX_PAYLOAD_NOACK 命令 
 spi_write_buf(W_TX_PAYLOAD_NOACK, buf, TX_PLOAD_WIDTH); // 写 FIFO 
 spi_rw_reg(SETUP_AW, 0x03); // 5 byte Address width 
 spi_rw_reg( RF_CH, 0x40); // 选择射频通道 0x40 
 spi_rw_reg(RF_SETUP, 0x08); // 数据传输率 2Mbps 
 spi_rw_reg( CONFIG, 0x0e); //配置为发射模式、CRC 为 2Bytes 
 CE = 1; 
//接收方配置:
 spi_write_buf( RX_ADDR_P0, TX_ADDRESS, 5); // 接收地址 
 spi_rw_reg( EN_RXADDR, 0x01); // 使能接收通道 0
 spi_rw_reg( RF_CH, 0x40); // 选择射频信道
 spi_rw_reg( RX_PW_P0, TX_PLOAD_WIDTH); //设置接收通道 0 负载数据宽度
 spi_rw_reg( RF_SETUP, 0x08); // 数据传输率 2Mbps,-18dbm TX power 
 spi_rw_reg( CONFIG, 0x0f); // 配置为接收方、CRC 为 2Bytes 
 CE = 1;
模式三:接收方开启多个通道
//动态负载:
 spi_rw_reg(FEATURE, 0x04); 
 spi_rw_reg(DYNPD, 0x3F) ; //开启所有通道动态负载长度
 spi_rw_reg(EN_RXADDR, 0x3F); //开启所有通道
 spi_rw_reg(RF_CH, 0x40); // 选择射频通道 0x40 
 spi_rw_reg(SETUP_AW, 0x03); // 5 byte Address width 
 spi_rw_reg(CONFIG, 0x0B); //配置为接收方
 CE = 1; 
//静态负载:
 spi_rw_reg(RX_PW_P0, 0x20); //设置通道 0 接收数据宽度
 spi_rw_reg(RX_PW_P1, 0x20); 
 spi_rw_reg(RX_PW_P2, 0x20); 
 spi_rw_reg(RX_PW_P3, 0x20); 
 spi_rw_reg(RX_PW_P4, 0x20); 
 spi_rw_reg(RX_PW_P5, 0x20); 
 spi_rw_reg(EN_RXADDR, 0x3F); //开启所有通道
 spi_rw_reg(RF_CH, 0x40); // 选择射频通道 0x40 
 spi_rw_reg(SETUP_AW, 0x03); // 设置地址宽度
 spi_rw_reg(CONFIG, 0x0F); //配置为接收方
 CE = 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值