无法使用 SPI 和 STM32F303 初始化 NRF24L01+ 寄存器

Cannot init NRF24L01+ registers using SPI and STM32F303

我正在尝试使用 SPI 初始化 NRF24L01+ 寄存器,但它们总是 return 0x00。

根据第 51 页的 datasheet、Table 20,所有写入命令的模式都是 b001x xxxx,我理解为0x2x 模式。

在我下面的快照中,我发送寄存器值,例如寄存器 0x​​00 将作为 0x20 发送,指示对该寄存器的写入命令,然后我发送要写入该寄存器的值。

正如您在 MISO 行上看到的,即使我试图写入 0x08,该值也为 0x00,根据数据表第 57 页,这应该是默认值。

我仍然不知道为什么它 returning 0x00 即使我稍后独立尝试读取该寄存器的内容而不写入它。我仍然得到 0x00。这同样适用于所有其他试图重新初始化的寄存器。 有谁在其他地方经历过这种行为,还是我有问题?

我试图在这里编程的 NRF24 就是这种类型 from sparkfun

你很接近。数据表显示写入寄存器为 001A AAAA,读取为 000A AAAA,其中 5 个 A 代表您要写入的寄存器。规范指出,在发送命令(读取、写入、读取有效载荷、写入有效载荷、刷新、激活等)时,设备将 return 状态寄存器。在您的数据中,设备以 0x0E 响应,这是正确的;解码是说没有错误,没有收到或等待传输的数据。如果你想看看你发送的命令是否被接受,你需要先写入数据,然后再读取数据。例如,假设我们要写入配置寄存器以启用设备作为接收器,启用 Rx 中断的 2 字节 CRC。
首先,您将发送 0b00100000 (0x20)、0b00111111 (0x3F)。设备将响应 0b00001110 (0x0e)、0b00000000 (0x00)。这就是你所看到的。如果要验证配置寄存器,则需要发送 0b00000000 (0x00),这是读取配置寄存器的命令,然后发送 0b00000000 (0x00),这是一个用于时钟输出数据的虚拟字节。设备将响应 0x0e,这是状态,然后 0x3F 假设你像我上面那样配置。 请注意,除了读取和写入寄存器之外,还有更多命令,还有填充和读取流水线数据的特定命令。

希望对您有所帮助。