SPI从站数据移位4位

时间:2018-03-18 16:17:52

标签: synchronization spi nrf52

我正在使用连接到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引脚以连接示波器。

我很感激有关此事的任何意见。

1 个答案:

答案 0 :(得分:0)

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