【发布时间】:2013-03-20 04:32:11
【问题描述】:
我正在使用带有 NRF24l01+ 芯片的 Arduino。不幸的是,Mirf 库的“发送”方法并没有告诉你它是否成功。
此外,有这样的循环:
Mirf.send(data);
while(Mirf.isSending()){
//Wait.
}
即使数据包尚未交付,也只会恢复。现在,看来我不必重新发明轮子了,因为阅读 nrf24l01 datasheet (page 27/78):
增强型 ShockBurst™ 具有自动数据包事务处理功能 用于轻松实现可靠的双向数据链路。 [snip] 自动数据包事务处理的工作原理如下:
- 您通过从 PTX 传输数据包开始事务 到 PRX。增强型 ShockBurst™ 自动将 PTX 设置为接收模式以等待 ACK 数据包。
- 如果 PRX 接收到数据包,增强型 ShockBurst™ 自动组装和 在返回接收模式之前向 PTX 发送一个确认包(ACK 包)。
- 如果 PTX 没有立即收到 ACK 数据包,增强 ShockBurst™ 自动重传原始数据包 经过可编程延迟并将 PTX 设置为接收模式等待 用于 ACK 数据包。
要启用此功能(数据表第 57 页):
看来我需要写 00011111 之类的东西来在芯片上注册 0x01。有什么想法可以实现吗?
【问题讨论】:
-
您的 NRF24l01+ 芯片通过 SPI 连接到 Arduino,对吗?数据表第 51 页描述了
W_REGISTER命令(写入寄存器命令)。还是我误解了你的问题? -
@angelatlarge 是的,谢谢。问题是,如何通过 Arduino SPI 发送带有参数的命令以将其写入芯片?我再看一些教程。
-
看的地方是Mirf库源码。在最基本的情况下,您可以使用
MirfHardwareSpiDriver::transfer(),但看起来您可能需要围绕它做一些事情。见Mirf.cpp源here