天线|RF射频
直播中

杨平

7年用户 151经验值
私信 关注
[问答]

24L01+发送端PTX收不到ACK数据包怎么解决?

接收和发送配置基本采用参考例程
[C] 纯文本查看 复制代码

发送端主体
[C] 纯文本查看 复制代码

接收端主体
[C] 纯文本查看 复制代码
  
每次PTX发送 PRX端能接收到数据,但是PTX端收不到PRX发出的ACK数据,PTX的STATUS寄存器为0x2E,说明发送成功,收到了ACK,但是没有ACK中的数据
不知道时什么问题,也不知道如果确认
//PRX发送ACK数据包
void NRF24L01_TxPacket_AP(u8 *ackbuf)
{
NRF24L01_CE=0;
NRF24L01_Write_Buf(CMD_W_ACK_PAYLOAD(0),ackbuf,RX_PLOAD_WIDTH);
NRF24L01_CE=1;
}
有没有起作用
已自行解决!

回帖(2)

王俊

2020-6-4 07:30:38
检查了PRX端的TX FIFO
TX_FULL
TX_EMPTY
TX_FULL 始终为零,正常
TX_EMPTY在FIFO写入ack数据之前(NRF24L01_TxPacket_AP(tmp_buf))为1,写入后为0,TX_DS也会置位,说明也正常
看来问题还是在PTX端
举报

单雅丽

2020-6-4 07:40:05
昨天自己找到原因了,使用Enhanced ShockBurst™,ACK packet包含payload,PTX、PRX都必须Enable dynamic payload length,设置寄存器DYNPD、FEATURE
手册中有如下描述
Enhanced ShockBurst™ provides two alternatives for handling payload lengths; static and dynamic.
An ACK packet can contain an optional payload from PRX to PTX. In order to use this feature, the
Dynamic Payload Length (DPL) feature must be enabled.  
说明静态长度也是可以的,PTX能接收到ACK packet。
但是ACK packet要包含payload的话就必须使能动态payload长度
举报

更多回帖

发帖
×
20
完善资料,
赚取积分