0

我正在使用连接到 DW1000 模块的 nRF52832 芯片。问题是从 DW1000 请求数据时,缺少第一个字节。该芯片应该发送 0xDECA0130,但我收到的是 0xCA0130FF。当我使接收缓冲区变大时,会出现丢失的 0xDE(传输从最低字节开始)。我的问题是,这是如何以及为什么会发生的。

配置

SPI 配置是根据 DW1000 的数据表进行的,使用 nRF SPI 驱动程序。这包括

  • SPI 默认频率设置为 1MHz
  • SPI 片选引脚配置为低电平有效
  • 使用 SPI 模式 0
  • MSB 优先传输

在开始通信之前,DW1000 通过将其复位引脚拉低来复位,并在释放之前保持低电平足够长的时间。复位后,主机等待一段时间让模块启动。之后,第一件事是将所述值作为 32 位寄存器值读取。

nRF 设置

nRF 设置包括

  • 启用 SPI 和 SPI0
  • SPI0 easyDMA 禁用
  • 读取值包括nrf_drv_spi_transfer所述配置和 4 字节的缓冲区长度

采取的步骤

我已经尝试了以下事情,但没有解决任何问题:

  • 更改 SPI 频率
  • 更改 SPI 模式*
  • 重置后等待时间增加
  • 传输之间的等待时间增加
  • 更改 MISO 上拉配置*
  • 手动片选(包括上拉配置*)

标有 (*) 的步骤我知道它们不应该解决问题。

不幸的是,它是一个嵌入式设备,所以我无法访问 CLK 和 MISO 引脚来连接示波器。

我感谢您对此事的任何意见。

4

1 回答 1

0

显然,问题在于 SPI 从设备响应特定请求的方式。由于 SPI 是同步协议,从机必须从第一个时钟周期开始传输数据。由于它至少在传输第一个字节之前不知道要发送什么(如果以这种方式配置),它必须发送一些东西,因此主机应该(至少)忽略正在传输的第一个字符。如果读取请求的长度已知,则传输必须比请求的数据本身长一个字节。

于 2018-03-20T14:59:23.323 回答