您好您 解决了nrf24l01模块 断线必需重新上电才能连接的问题了吗

初级工程师, 积分 2201, 距离下一级还需 799 積分

0

初级工程师, 积分 2201, 距离下一级还需 799 积分

0
0
0

高级工程师, 积分 5983, 距离下一级还需 2017 积分

0

高级工程师, 积分 5983, 距离下一级还需 2017 积分

0

初级工程师, 积分 2027, 距离下┅级还需 973 积分

0

初级工程师, 积分 2027, 距离下一级还需 973 积分

0

初级工程师, 积分 2757, 距离下一级还需 243 积分

0

初级工程师, 积分 2757, 距离下一级还需 243 积分

0
我有一个nrf24l01模块模块坏了发送不出去,不知道哪的问题想修一下,楼主能知道一下吗

初级工程师, 积分 2768, 距离下一级还需 232 积分

0

初级工程师, 积分 2768, 距离下一级還需 232 积分

0
nrf24l01模块模块的资料很多的楼上的可以参考着查一下线路

中级技术员, 积分 141, 距离下一级还需 159 积分

0

中级技术员, 积分 141, 距离下一级还需 159 积分

0
期待楼主的大作,原来也移植了一下但总是感觉不是很理想,距离只有100m
0
0

初级工程师, 积分 2201, 距离下一级还需 799 积分

0

初级工程师, 积分 2201, 距离下一级還需 799 积分

0
原来也移植了一下但总是感觉不是很理想,距离只有100m

nrf24l01模块模块好像传输距离也就这么远了

中级技术员, 积分 246, 距离下一级还需 54 积分

0

Φ级技术员, 积分 246, 距离下一级还需 54 积分

0
0
0
这个芯片传输距离有多远啊100米?好像是做鼠标和遥控器用的啊距离应该不会远吧。

实习生, 积分 21, 距離下一级还需 -1 积分

0

实习生, 积分 21, 距离下一级还需 -1 积分

0
这个芯片最远可以上千米很常见的可以用这个做发射机和接收机飞固定翼

高级工程师, 積分 6825, 距离下一级还需 1175 积分

0

高级工程师, 积分 6825, 距离下一级还需 1175 积分

0
扫描二维码,随时随地手机跟帖
一个发送一个接收,两个都要偅新上电... 一个发送一个接收,两个都要重新上电

你的问题解决了没?我们做的905无线模块也遇到一样的问题了

你对这个回答的评价是

沒用过24L01,以使用CC1101的经历讨论下:无线芯片接收前想要收到数据必须把芯片设置成接收状态,CC1101的是写SRX命令每次接收后也要写此命令。好恏读读芯片的datasheet跟user guide吧那个上面很全。

你对这个回答的评价是

你对这个回答的评价是?

  1. 900nA的掉电模式电流
  1. RF遥控给其他消費级产品

要设计一个基于nrf24l01模块+的无线系统,你只需要一个MCU和一些外围元件

你可以通过SPI来操作和控制nrf24l01模块+。寄存器映射可以通过SPI控制包括所有配置寄存器,可以操作芯片所有模式

内置的基带协议引擎(Enhaced ShockBurst TM)基于包通信,支持多种模式从手动到自动协议操作。内部的FIFO会确保无線前端与MCU的平滑数据流动Enhanced ShockBurst会降低系统开销,通过处理所有高速连接层操作

无线电前端使用GFSK调制。可以通过用户配置频率通道、输出功率、空中速率nrf24l01模块+支持空中速率包括250kbps、1Mbps、2Mbps。内置的两种省电模式使得nrf24l01模块+非常适合超低功耗设计

    1. 快速AGC用以改进动态范围
    1. 没有外部环滤波器,VCO变容二极管、谐振器
    1. 1到32字节动态负载长度
    1. 空闲模式支持快速启动用于高级电源管理
    2. 26uA的待机I电流,900nA的掉电模式
    3. 最大1.5mS的启动时间从掉电模式
    4. 最大130uS的启动时间,从待机I模式

片选激活RX或TX模式

可屏蔽中断引脚,低电平有效

参考电流连接22kR到地线

内部数字电压输出,用以解耦

超过如下数值会导致永久性损坏

电源电压,如果输入信号>3.6V

本章描述nrf24l01模块+无线收发器的操作模式和控制参数

nrf24l01模块+有内置的状态机来控淛收发器的工作模式。状态机接收用户定义的寄存器数值和内部信号作为输入

可配置的工作模式:掉电、待机、RX、TX模式。

如下状态图展礻了操作模式及其功能。有三种类型的严格状态

  1. 推荐操作模式:就是推荐的状态,在正常操作
  2. 可能的操作模式:有可能的操作模式泹在正常操作中不会用到
  3. 过渡状态(transition state):有时间限制的状态,用于晶振启动以及设置PLL

当VDD到达1.9V或更高,nrf24l01模块+进入上电复位状态并保持直到进叺掉电模式。

在掉电模式nRFL24L01+被禁用,并消耗最少的电流所有寄存器值会保留,SPI保持活跃允许修改配置和传输数据寄存器。掉电模式通過CONFIG.PWR_UP=0来进入

通过设置CONFIG.PWR_UP=1,设备进入待机1模式该模式用于最小化电源消耗的同时最短的启动时间。此模式只有一部分晶振有效进入活跃状態仅在CE变为高电平。而CE变低的过程无论之前是TX还是RX模式,都会进入待机I模式

此模式外部时钟缓冲有效,以及更加节电仅在PTX设备上空TX_FIFO苴CE保持高电平。如果有新的包上传到TX_FIFOPLL立即启动,并发送包在特定的PLL设置延迟(130uS)之后。

寄存器值会保留SPI可以激活两种待机模式。

RX模式是莋为接收机的模式要进入这个模式,需要PWR_UP=1、PRIM_RX=1、CE=1

在RX模式接收机解调RF频道的信号处理基带协议引擎。基带协议引擎会搜索有效的包如果找到了有效的包(匹配地址和有效的CRC),包的载荷就会先发送到一个RX_FIFO的空槽如果RX_FIFO已经满了,接受到的包会被丢弃

nrf24l01模块+在MCU配置进入待机I模式戓掉电模式之前会一直保持在RX模式。如果自动协议功能被启用则nrf24l01模块+可以进入其他模式来执行协议。

在RX模式RPD信号有效。当接收到的信號大于-64dBm则RPD=1内部的RPD信号会在进入RPD寄存器之前进行滤波。RF信号必须持续超过40uS才会影响RPD信号

在发送完成数据包以后,会停留在TX模式如果CE=0则囙到待机I模式。如果CE=1则TX_FIFO的状态决定了下一步动作如果TX_FIFO不为空则会继续在TX模式发送数据。如果TX_FIFO为空则进入待机II模式TX模式下发射器的PLL工作茬开环。注意不要保持TX模式超过4mS如果在Enhanced ShockBurst功能则TX模式不会持续超过4mS。

如上的两种模式对于CE持续为高,则发送完成TX_FIFO里所有东西后会立即進入待机II模式。此模式下如果上传数据到TX_FIFO并CSN重新拉高,则立即会继续发送数据

如果CE为一个大于10uS的高电平脉冲。则允许发送一个数据包这是平常的操作模式。在包发送完成后进入待机I模式。

这里的时序信息是关于模式之间过渡的以及CE引脚。从TX到RX模式的过渡或相反(vice versa),以及待机模式与TX/RX模式之间的过渡都是相同的时间最大130uS。

要葱掉电模式进入TX/RX模式必须先经过待机模式。延时至少要达到Tpd2stby从离开掉电模式到CE设置为高。

如果掉电时VDD也关闭了则重新进入TX/RX之前需要重新配置。

就是调制信号的速率用以发射和接收。可以是250kbps、1Mbps、2Mbps使用较低嘚速率会有更好的接收灵敏度。但更高的速率使得功耗降低并降低空中碰撞的机率。

空中速率通过RF_SETUP.RF_DR来设置发射机和接收机必须使用相哃的速率才能通信。

RF频道是指实际使用的频道重心频道占用的带宽在250kbps和1Mbps时小于1MHz,在2Mbps时小于2MHz可操作频率范围在2.400GHz到2.525GHz。编程控制的分辨率是1MHz

在2Mbps时,频道占用比实际设置的要宽要确保在2Mbps时频道之间不要重叠,频道空间至少留出2MHz或更多在1Mbps和250kbps,频道带宽与RF设置的分辨率相同

伱必须确保发射机和接收机使用相同的频道来通信。

RPD可以在接收模式的任何时间读取这提供了当前频率接收功率级别的信息。当接到无效包时RDP状态会锁存,指出从发射机获得的信号强度如果没有收到包,则RPD是上次接收结果即MCU设置CE=0而RX超时。

Enhanced ShockBurst是基于包的数据链路层支歭自动包组装和计时,自动应答和重发允许实现超低功耗,和高性能的通信在低成本的MCU。功能允许显著改善功效无论是单向还是双姠通信系统,而无需增加唉上位机的复杂性

  1. 1~32自己诶动态负载长度

用于自动包处理和时序。在发射时会组装包,并时钟输出数据包的每個位来发射在接收时,会在调制信号搜索有效地址当找到有效地址,会处理包剩余的部分并验证CRC。如果包有效载荷会移动到空的RX_FIFO。所有高速位处理和时序都由ShockBurst控制

Enhanced ShockBurst功能的自动包事务管理,使得实现双向灵活数据连接变得简单一个包事务是在两个收发器之间的数據包交换,包括一个收发器作为主接收机(PRX=Primary Receiver)以及其他收发器作为主发射机(PTX=Primary Transmitter)。一个包事务总是通过一次PTX的包发送来初始化事务在发射机接箌PRX的应答包后完成。PRX可以在ACK包附加用户数据来实现双向数据连接

自动包事务管理工作如下:

  1. 如果PRX收到数据包,Enhanced ShockBurst会自动组装和发送应答包ACK箌PTX然后才会回到接收模式
  2. 如果PTX没有立即接到ACK包,会在可编程的时延后自动重发原始数据包并设置PTX到接收模式来等待ACK包

Enhanced ShockBurst可以配置的参数洳最大重传次数,以及重发延迟时间所有自动处理都会自动完成,而无需MCU的介入

Enhanced ShockBurst的包按照如下格式,包含包头、地址、包控制、载荷、CRCMSB优先在左侧。

有两个自动包事务处理功能:自动应答和自动重传

自动应答是接收端收到有效数据包后,自动发送一个ACK包给PTX自动应答功能降低了MCU的系统负载,并可以去掉对专用SPI硬件的需求折页降低了成本和功耗。自动应答功能通过EN_AA寄存器启用

如果收到的包有NO_ACK标识,自动应答就不会执行

上图展示了PRX种TX_FIFO种如何处理应答包载荷的。MCU将载荷用W_ACK_PAYLOAD命令传入地址解码器和缓冲控制器确保了载荷存储在空的TX_FIFO。當收到了包地址解码器和缓冲控制器会通知PTX地址。这确保了正确的载荷会被传入ACK生成器

如果TX_FIFO包含了多于一个到PTX的载荷,载荷会使用先叺先出原则处理TX_FIFO会阻塞,如果所有到PTX的载荷但连接却丢失了。此时MCU应该清空TX_FIFO通过FLUSH_TX命令。

自动重传是一个功能来在没收到ACK时重新发射數据包用于PTX的自动应答系统。当一个数据包没有得到应答你可以设置SETUP_RETR.ARC来决定重传多少次。每次重传后PTX进入接收模式来等待应答包PTX进叺RX模式的周期基于如下条件:

  1. 在接收到数据包后(CRC正确与否)

nrf24l01模块+在TX模式里没有更多需要传输的数据而CE=0时,就进入待机1模式如果ACK包还没收到,则nrf24l01模块+在ARD延迟后进入TX模式并重传数据这会持续,直到接到应答或到达重传限制ARC。

有两个丢包计数器会在丢包时自增ARC_CNT和PLOS_CNT,在OBSERVE_TX寄存器ARC_CNT会统计当前事务种重传的次数。开始新的事务会自动对ARC_CNT复位PLOS_CNT则统计改变通道以来重传的总次数。通过写RF_CH来复位PLOS_CNT可以用OBSERVE_TX来评估频道的質量。

ARD定义了重传的事件延迟通过SETUP_RETR设置,步幅是250uSPTX没收到ACK就重传。

使用带载荷的ACK时有个ARD限制ARD事件必须不能短于ACK的启动时间和空中时间:

對250kbps和5字节地址,如下值的限制:

与其自动重传还可以手工重传。通过REUSE_TX_PL命令实现MCU必须初始化每个包的发送,以及在该命令后给CE一个高脉沖

如下是PTX在待机I模式后的操作:

通过CE=1激活PTX模式。如果TX_FIFO中有包需要发送则进入TX模式并发射数据包。如果自动重传启用了则状态机会检查NO_ACK标识,如果=0则nrf24l01模块+进入RX模式等待ACK包。如果收到的ACK包为空则只要设置TX_DS事件。如果ACK包包含载荷则同时设置TX_DS和RX_DR事件,之后才会让nrf24l01模块+回箌待机I模式

如果ACK包在超时前没收到,则nrf24l01模块+回到待机II模式会持续在待机II模式知道ARC到达。如果重传次数还没到ARC则会进入TX模式来发射上佽的包。

当执行自动重传功能时重传次数可以达到最大ARC次。如果这发生了则nrf24l01模块+会设置MAX_RT事件,并返回待机I模式

如下时PRX在待机I模式后嘚操作:

CE=1来激活PRX模式。nrf24l01模块+进入RX模式并开始搜索包如果收到的有效的包,且自动应答启用了则nrf24l01模块+决定包是否是新的,或者是之前收箌包的拷贝如果包是新的,载荷会进入RX_FIFO且设置RX_DR事件。如果上次收到的包是应答包且包含ACK载荷,TX_DS会指出PTX收到的ACK包有载荷如果收到的包没有NO_ACK标识,PRX会进入TX模式如果有未决的载荷在TX_FIFO,则会自动附加到ACK包里在ACK包发送后,nrf24l01模块+回到RX模式

一个之前收到包的拷贝会被直接丢棄。此时PRX丢弃接到的包并重新发射ACK包随后回到RX模式。

MultiCeiver是一个RX模式的功能包含了一组6个并行数据通道,每个有独立的地址一个数据通噵是个逻辑通道,在物理RF通道之内每个数据通道都有自己的物理地址。

配置位PRX后可以接收最多6个数据通道地址的数据在同一频率通道。每个数据通道都有独立地址并可以配置为独立的行为。

最高留个PTX可以与这个PRX模块通信所有数据通道都会同时搜索。同一时间只有一個数据通道可以接收数据包所有数据通道都可以作为Enhanced ShockBurst功能。

如下设置对所有数据通道共用的:

通过EN_RXADDR可以启用数据通道缺省时只有通道0囷1是启用的。每个数据通道地址通过RX_ADDR_P<N>来配置

每个通道最高5字节地址。数据通道0拥有唯一的5字节地址数据通道1~5共享后4字节地址。LSB字节必須与其他留个不同

一个数据通道拿到完整的包以后,其他数据通道才会开始接收数据当多个PTX一起发送到PRX时,ARD可以用于歪斜自动重发洇此他们只是互相阻塞。

自动包处理的脚本下载(Download=DL)是包到MCU,而上传(Upload=UL)是将负载送入发射机

如下包含自动应答。在包被PTX发送并接到PRX的ACK包之后PRX的RX_DR被设置,而PTX接收到ACK并设置TX_DS

如下是包含重传的,第一个包丢了在包被发送之后,PTX进入RX模式来接收ACK包第一次发送后,PTX等待ACK包超时僦会重新发送这个包。

当一个地址发现PTX在RX模式直到接到数据包当重发的包被PRX接收到,RX_DR事件就发生并发出ACK到PTX。当ACK被PTX收到就发生TX_DS事件。

丟失ACK包之后还要重传对应中断也是现在的。

如下是基本的自动应答包含载荷在PTX发送数据包,PRX接收数据包后ACK+载荷就会从PRX发到PTX。之后PRX的RX_DR財被设置而PTX的TX_DS在接到应答包后,新的包被接收了才设置具体事件取看对应的IRQ。

MAX_RT是在ARC_CNT到达ARC时被设置的包重传以MAX_RT结束。TX_FIFO种的载荷不会倍刪除而由MCU决定下一步如何处理。一个CE的翻转会重新开始发射序列FLUSH_TX可以删除TX_FIFO种的内容。

数据和控制接口允许访问nrf24l01模块+的所有功能使用6個5V容忍的数字信号:

  1. IRQ:低电平有效,由3个可屏蔽中断源来控制
  2. CE:高电平有效用以激活RX或TX模式

使用1字节SPI命令,可以激活nrf24l01模块+的数据FIFO或寄存器映射在任何模式。

  1. 指定SPI命令用以快速访问大部分常用功能

SPI命令如下表每个新的命令必须以CSN的下降沿开始。

STATUS寄存器的值会在SPI命令字輸入的同时输出。

串行的SPI命令格式如下:

  1. 数据字节:LSB到MSB每个字节中MSB

读取命令和STATUS寄存器,AAAAA为5bit的寄存器地址

写入命令和STATUS寄存器AAAAA为5bit的寄存器哋址, 仅在掉电和待机可用

读取RX载荷1~32字节,读出后自动删除FIFO用于RX模式

写入TX载荷,1~32字节用于TX模式

清空RX FIFO,用于RX模式不应该在传输期间執行,否则无应答

用于PTX设备复用上次发送载荷,TX载荷被复用直到 W_TX_PAYLOAD或FLUSH_TX被执行不能在传输期间改变复用状态

用于RX模式,写载荷供发送以忣ACK包到管道PPP(PPP在000~101间), 最大3个ACK包载荷可以在未决相同PPP的载荷按先入先出规则

用于TX模式,禁用AUTOACK在这个特定的包

无操作用以读取STATUS寄存器

W_REGISTER和R_REGISTER命令基于单字节或多字节寄存器。当访问多字节寄存器时读写是LSB优先。你可以在所有字节写入前终止写入此时离开会保持后续的MSB部分字节鈈变。例如RX_ADDR_P0的LSB可以通过修改一个字节来改变而STATUS寄存器总是在CSN拉低后首次SPI通信输出。

STATUS寄存器的3bit管道信息会在IRQ的下降沿更新在IRQ从高到低转換过程中STATUS寄存器的管道信息是不可信的。

SPI操作和时序如下图nrf24l01模块+必须在待机或掉电模式才能哪过写配置寄存器。

  1. Dn:数据位LSB到MSB,每个字節里MSB优先

@page 53-55 后续是一堆表格展示各种时序对应的时间

这两个FIFO都有控制器,并通过SPI访问使用特定的SPI命令。一个PRXTX FIFO可以存储ACK包载荷对应三个不哃的PTX设备如果TX_FIFO包含多余一个载荷,载荷使用先入先出策略处理PRX的TX_FIFO在地址到管道连接的PTX丢失时会阻塞。此时MCU可以清空TX_FIFO,通过FLUSH_TX命令

PRX的RX_FIFO鈳以包含载荷,来自最高3个不同的PTX设备一个PTX的TX_FIFO可以最高存储3个载荷。

nrf24l01模块+有个低电平有效的IRQ引脚可以通过TX_DS、RX_DR、MAX_RT来激活。IRQ通过STATUS寄存器设置为高IRQ会在MCU写1到STATUS对应的中断源为1时复位。IRQ屏蔽在CONFIG寄存器用以选择允许哪些事件来激活IRQ。通过设置MASK位对应的中断源可以被禁用。缺省所有中断源都启用

STATUS的3bit管道信息在IRQ的下降沿更新。在IRQ的下降沿时读取STATUS不可信

通过SPI访问如下寄存器映射来控制和访问。

所有未定义的位都昰多余的读出的值都是0。

地址0x18到0x1b都保留供测试目的修改他们可能导致芯片功能异常。

Reserved对应的位如果需要写则必须写0。

  1. EN_CRC:启用CRC如果EN_AAΦ任意一位为高,则自动启用

地址0x03默认值0x03,应用于所有数据通道

如果地址长度低于5字节,则优先使用LSB

  1. ARD:自动重发的延迟,uSuS,uS继續向上每次递增250uS,直到uS
  2. ARC:自动重发次数0000=禁用,0001=1次重发继续向上,1111=15次重发

ARD延迟的定义是上次发送结束到下次发送之前的时间ARD是PTX在重传の前等待ACK包的时间,如果PTX在RX模式有250uS()等待地址匹配如果检测到地址匹配,会保持RX模式一直到包结束除非ARD到达。然后进入待机II模式来等待剩余的ARD在ARD之后进入TX模式,然后重传包

  1. RF_CH:设置频率通道
  1. PLL_LOCK:强制PLL锁定信号,仅用于测试

地址0x07默认值0x0e。在SPI命令模式输入命令字的时候输絀的就是STATUS的值。

  1. TX_DS:数据发送出去了TX_FIFO中断,如果AUTO_ACK被激活当收到ACK后才会设置为1,写1清零
  2. MAX_RT:达到最大重发次数中断写1清零,如果达到了则必须清零后才能继续通信

RX_DR事件断言新的包到达事件处理这个中断的流程是:

  1. 如果RX_FIFO中还有数据,就继续回到1读取
  1. PLOS_CNT:对丢包计数最高到15来溢出保护,知道复位前不会继续写RF_CH来复位计数器
  2. ARC_CNT:对重发计数,计数器在新的包开始后复位

最大允许5字节地址LSB优先,有效地址长度由SETUP_AW決定

仅用于PTX设备,LSB优先设置RX_ADDR_P0等于这个地址来处理自动包应答,如果这个设备也支持Enhanced ShockBurst

无地址,无默认值长度256bit。只能写不能读

用W_ACK_PAYLOAD来寫入到数据通道PPP。仅用于RX模式最大3个ACK包载荷可以在未决状态。相同PPP的载荷先入先出。

无地址无默认值。长度256bit只能写不能读。

用W_TX_PAYLOAD来寫入1~32字节这个寄存器实现为FIFO,有3级仅用于TX模式。

无地址无默认值。长度256bit只能读不能写。

  1. EN_DPL:启用动态载荷长度

如果ACK包载荷被激活(EN_ACK_PAY)ACK包哟你欧冠有动态载荷长度,以及动态载荷长度应该在PTX和PRX设备的pipe0启用这确保了他们可以接收到带有载荷的ACK包。如果ACK载荷多于15字节在2Mbps模式,ARD必须是500uS或以上如果ACK载荷多于5字节,在1Mbps模式ARD必须在500uS或以上。在250kbps模式(哪怕载荷不在ACK中)ARD也必须在500uS以上。

外设电路与PCB布局需求这些都會影响nrf24l01模块+的性能。

只有单端匹配网络晶振偏置电阻和解耦电容:

  1. 把接收端地址TX_ADDR和载荷数据TX_PLD通过SPI写入nrf24l01模块+,发送数据宽度会在写入TX FIFO时自動计数;TX_PLD在CSN=0时必须持续写入TX_ADDR如果没有改变则不用重新写入;如果PTX设备要接收应答,配置数据通道0为接收ACK包;RX_ADDR_P0必须等于TX_ADDR
  2. 一个CE上的高电平脉沖会开启发送脉冲最小宽度10uS
    1. 16MHz内部时钟启动
  3. 如果自动应答开启了(ENAA_P0=1),芯片会立即进入RX模式除非接收包使用了NO_ACK位;如果收到有效的包并在有效应答时间内,发送会看做成功STATUS.TX_DS=1,TX_FIFO被清空;如果没能在时间窗口内收到有效的ACK包载荷会被重新发送(启用了自动重发);如果自动重发计數器ARC_CNT到达最大值ARC,STATUS.MAX_RT=1TX_FIFO中的载荷不会被清空;如果MAX_RT或TX_DS为高,则IRQ会激活要关闭IRQ,写STATUS对应中断源;如果重发后还没收到ACK则MAX_RT中断被清除之前不會发送任何包了;丢包计数器PLOS_CNT会在每次MAX_RT中断时自增;这是因为ARC_CNT对重发计数,需要通过一个包PLOS_CNT计数没有在最大重发后通过的包数量
  4. 如果nrf24l01模塊+在待机II模式,CE=0时会立刻进入待机I模式
  1. 让CE进入高电平激活RX模式
  2. 如果启用了自动应答会自动发送ACK包,除非接收到的包有NO_ACK位如果TX_PLD FIFO中有载荷,载荷会自动添加ACK包
  3. MCU设置CE进入低电平进入待机I模式(低电流模式)

我要回帖

更多关于 nrf24l01 的文章

 

随机推荐