【问题标题】:Retry sending a packet until it has been delivered重试发送数据包,直到它被传递
【发布时间】:2013-03-20 04:32:11
【问题描述】:

我正在使用带有 NRF24l01+ 芯片的 Arduino。不幸的是,Mirf 库的“发送”方法并没有告诉你它是否成功。

此外,有这样的循环:

Mirf.send(data);

while(Mirf.isSending()){
 //Wait.
}

即使数据包尚未交付,也只会恢复。现在,看来我不必重新发明轮子了,因为阅读 nrf24l01 datasheet (page 27/78)

增强型 ShockBurst™ 具有自动数据包事务处理功能 用于轻松实现可靠的双向数据链路。 [snip] 自动数据包事务处理的工作原理如下:

  1. 您通过从 PTX 传输数据包开始事务 到 PRX。增强型 ShockBurst™ 自动将 PTX 设置为接收模式以等待 ACK 数据包。
  2. 如果 PRX 接收到数据包,增强型 ShockBurst™ 自动组装和 在返回接收模式之前向 PTX 发送一个确认包(ACK 包)。
  3. 如果 PTX 没有立即收到 ACK 数据包,增强 ShockBurst™ 自动重传原始数据包 经过可编程延迟并将 PTX 设置为接收模式等待 用于 ACK 数据包。

要启用此功能(数据表第 57 页):

看来我需要写 00011111 之类的东西来在芯片上注册 0x01。有什么想法可以实现吗?

【问题讨论】:

  • 您的 NRF24l01+ 芯片通过 SPI 连接到 Arduino,对吗?数据表第 51 页描述了W_REGISTER 命令(写入寄存器命令)。还是我误解了你的问题?
  • @angelatlarge 是的,谢谢。问题是,如何通过 Arduino SPI 发送带有参数的命令以将其写入芯片?我再看一些教程。
  • 看的地方是Mirf库源码。在最基本的情况下,您可以使用MirfHardwareSpiDriver::transfer(),但看起来您可能需要围绕它做一些事情。见Mirf.cpphere

标签: c++ c arduino


【解决方案1】:

使用Mirf::writeRegister() 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多