【问题标题】:SPI fails to read first 6 bytesSPI 无法读取前 6 个字节
【发布时间】:2015-04-19 17:38:35
【问题描述】:

我的 STM32F051 MCU 上的 SPI 模块有很多问题。我已将其配置为主设备以驱动从属闪存模块(这并不重要)。

我正在尝试从内存中读取 8 个字节,这就是“读取数据”消息的结构:

消息的前 4 个字节被发送,接下来的 8 个字节被接收。 第一个字节是“读取数据”操作码,后面三个是数据地址,在这种情况下等于 0。

代码:

memset(out, 0x00, 256);
memset(in, 0x00, 256);
out[0] = OPCODE_READ;
out[1] = 0x00;
out[2] = 0x00;
out[3] = 0x00;
uint32_t len = 4 + size;  // size == 8

spi_select(M25P80);
HAL_SPI_TransmitReceive(&hspi1, out, in, len, TIMEOUT);
delay_ms(BYTE_SPEED_MS * 5); // Needed because ^ finishes before physically 
                             // transmitting the data. Nevermind the 5, it 
                             // was picked experimentally 
spi_deselect(M25P80);

信号(黄色 - 时钟,红色 - 味噌):

以 488 位/秒传输 4 个字节需要 4 * 1E3 / (488 / 8) = 65.5 毫秒。然后接待开始。内存立即开始传输 [0xFF...0xFF],但“in”缓冲区的内容是:

[0x00 0x00 0x00 0x00] [0x00 0x00 0x00 0x00 0x00] 0xFF 0xFF 0x00...0x00
^ zero because this   ^ should be 0xFF           ^ correct data
  is the part where
  data was being sent
  to the memory

所以前六个字节的数据只是丢失了。 STM 的 SPI 模块只有我一个人这么难受吗?

编辑:

我给自己买了一块不同的评估板,它的 MCU (STM32F030) 略有不同,它变得更加奇怪:

[0x02 0x02 0x02 0x02] 
0x00 0x02 0x00 0x00 0xFF 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00...0x00

虽然我必须提到我在这个 MCU 上使用了不同的编译器。

编辑 2:

我部分让它工作的方式是使用 16 位模式和 SPI。这修复了这个特定的错误,但 STM32 的 SPI 有更多类似的奇怪之处。

编辑 3:

SPI初始化代码:

void MX_SPI1_Init(void)
{

  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLED;
  HAL_SPI_Init(&hspi1);

}

【问题讨论】:

    标签: stm32 spi


    【解决方案1】:

    你确定SPI的初始化是对的吗? 也许您的时钟极性或相位设置在主从之间不匹配? 带手表到ClockSettings

    请出示您的 SPI 初始化代码!

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2019-09-05
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      相关资源
      最近更新 更多