首页 文章

SPI从站数据移位4位

提问于
浏览
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引脚以连接示波器 .

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

1 回答

  • 0

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

相关问题