无法使用 SPI 和 STM32F303 初始化 NRF24L01+ 寄存器
Cannot init NRF24L01+ registers using SPI and STM32F303
我正在尝试使用 SPI 初始化 NRF24L01+ 寄存器,但它们总是 return 0x00。
根据第 51 页的 datasheet、Table 20,所有写入命令的模式都是 b001x xxxx,我理解为0x2x 模式。
在我下面的快照中,我发送寄存器值,例如寄存器 0x00 将作为 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 假设你像我上面那样配置。
请注意,除了读取和写入寄存器之外,还有更多命令,还有填充和读取流水线数据的特定命令。
希望对您有所帮助。
我正在尝试使用 SPI 初始化 NRF24L01+ 寄存器,但它们总是 return 0x00。
根据第 51 页的 datasheet、Table 20,所有写入命令的模式都是 b001x xxxx,我理解为0x2x 模式。
在我下面的快照中,我发送寄存器值,例如寄存器 0x00 将作为 0x20 发送,指示对该寄存器的写入命令,然后我发送要写入该寄存器的值。
正如您在 MISO 行上看到的,即使我试图写入 0x08,该值也为 0x00,根据数据表第 57 页,这应该是默认值。
我仍然不知道为什么它 returning 0x00 即使我稍后独立尝试读取该寄存器的内容而不写入它。我仍然得到 0x00。这同样适用于所有其他试图重新初始化的寄存器。 有谁在其他地方经历过这种行为,还是我有问题?
你很接近。数据表显示写入寄存器为 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 假设你像我上面那样配置。
请注意,除了读取和写入寄存器之外,还有更多命令,还有填充和读取流水线数据的特定命令。
希望对您有所帮助。