哪位大神知道24l01的ack packets功能。。。。
哪位大神知道24l01的ack packets功能。。。。匿名四轴上使用了这个功能,但是数据手册里寄存器找不全,这是为什么? ack packet 是应答包,接收端表示确认收到,发送端如果没得到应答包回复的话可以选择重发。
您说的是dynamic ack么,这个在手册的中文翻译版里没写,英文文档有说明,大概是和dynamic payload对应使用的。 K.O.Carnivist 发表于 2013-11-2 19:49 static/image/common/back.gif
ack packet 是应答包,接收端表示确认收到,发送端如果没得到应答包回复的话可以选择重发。
您说的是dynami ...
是应答的时候带着用户数据,实现比较快速的半双工通信 要么翻译的偷懒 要么翻译的。。 把某些东西略去了 英文说明书中有,1C,1D寄存器,设置好后,使用W_ACK_PAYLOAD(0xA8)命令发送应答数据 yuangaoping 发表于 2013-11-3 00:43 static/image/common/back.gif
英文说明书中有,1C,1D寄存器,设置好后,使用W_ACK_PAYLOAD(0xA8)命令发送应答数据 ...
恩,我不明白的是为啥匿名四轴程序里有这个
NRF_Write_Reg(FLUSH_TX,0xff);
NRF_Write_Reg(FLUSH_RX,0xff);
NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断开启,16位CRC,主接收
Spi_RW(0x50);
Spi_RW(0x73);
NRF_Write_Reg(NRF_WRITE_REG+0x1c,0x01);
NRF_Write_Reg(NRF_WRITE_REG+0x1d,0x07);
Spi_RW(0x50);
Spi_RW(0x73);这东西哪来的
就是主发送发送数据后主接收发送的ack不是专门的ack而是带有数据的ack从而实现双工 Spi_RW(0x50);
Spi_RW(0x73);
这两条指令是为了重新开启动态载荷功能的。
看我的代码
#if DYNAMIC_PAYLOAD//使用动态载荷方式时
if((config & 0x01) == 0)//发射下模式需要清除,接收模式下不能清除。//因为指令要放在接收前进行模式转换,清楚缓冲区会导致收不到数据
{
nRF24L01_Write_Reg(nRF_WRITE_REG | nRF_FLUSH_TX, 0xff);
nRF24L01_Write_Reg(nRF_WRITE_REG | nRF_FLUSH_RX, 0xff);
}
nRF24L01_Write_Reg(nRF_WRITE_REG | FEATURE, 0x07); //动态载荷写入参数
if(nRF24L01_Read_Reg(FEATURE) == 0x00) //检查动态载荷参数是否正确写入
{
nRF24L01_Write_Reg(Activate, Code_Activate); //重新使能
}
#if nRF_PTX
nRF24L01_Write_Reg(nRF_WRITE_REG | DYNPD, 0x01); //发射模式下仅使能通道0
#else
nRF24L01_Write_Reg(nRF_WRITE_REG | DYNPD, 0x3f); //接收模式下使能全部通道
#endif
nRF24L01_Write_Reg(nRF_WRITE_REG | FEATURE, 0x07); //动态载荷,EN_DPL使能动态载荷|EN_ACK_PAY使能带载荷的ACK应答|EN_DYN_ACK使能nRF_W_TX_PAYLOAD_NOACK发送载荷
#else//使用静态数据载荷
nRF24L01_Write_Reg(nRF_WRITE_REG | RX_PW_P0, RX_PLOAD_WIDTH);//指定接收数据长度
#if !nRF_PTX//接收模式下全部通道使能
nRF24L01_Write_Reg(nRF_WRITE_REG | RX_PW_P1, RX_PLOAD_WIDTH);//指定接收数据长度
nRF24L01_Write_Reg(nRF_WRITE_REG | RX_PW_P2, RX_PLOAD_WIDTH);//指定接收数据长度
nRF24L01_Write_Reg(nRF_WRITE_REG | RX_PW_P3, RX_PLOAD_WIDTH);//指定接收数据长度
nRF24L01_Write_Reg(nRF_WRITE_REG | RX_PW_P4, RX_PLOAD_WIDTH);//指定接收数据长度
nRF24L01_Write_Reg(nRF_WRITE_REG | RX_PW_P5, RX_PLOAD_WIDTH);//指定接收数据长度
#endif
#endif
yuangaoping 发表于 2013-11-3 10:30 static/image/common/back.gif
Spi_RW(0x50);
Spi_RW(0x73);
这两条指令是为了重新开启动态载荷功能的。
我再仔细研究一下,真的非常感谢您耐心的讲解! chenjiawei7 发表于 2013-11-3 08:38 static/image/common/back.gif
就是主发送发送数据后主接收发送的ack不是专门的ack而是带有数据的ack从而实现双工 ...
恩,就是这个功能,就是我自己写的代码不能用 mazhenyu 发表于 2013-11-3 19:36 static/image/common/back.gif
恩,就是这个功能,就是我自己写的代码不能用
看英文手册。。。这个是主接收发送给主发送数据的函数,也就是利用ack发送数据,这个指令是中文手册里没有的 chenjiawei7 发表于 2013-11-3 20:39 static/image/common/back.gif
看英文手册。。。这个是主接收发送给主发送数据的函数,也就是利用ack发送数据,这个指令是中文手册里没 ...
恩,还有那个250k的设置中文也没有 chenjiawei7 发表于 2013-11-3 20:39 static/image/common/back.gif
看英文手册。。。这个是主接收发送给主发送数据的函数,也就是利用ack发送数据,这个指令是中文手册里没 ...
这个函数应该不是在接收中断里调用吧 还有啥不清楚的,可以看我之前的一个帖子基于STM32的nRF24L01驱动,经过验证测试 yuangaoping 发表于 2013-11-3 23:07 static/image/common/back.gif
还有啥不清楚的,可以看我之前的一个帖子基于STM32的nRF24L01驱动,经过验证测试 ...
谢谢。。。
页:
[1]