STM32H7 SPI Nor Flash设备一直很忙IS25LP128F

时间:2019-09-16 10:09:38

标签: c embedded

我正在使用Little FS作为文件系统来开发SPI Nor Flash IC IS25LP128F。我将400Mhz设置为SPI内核时钟,我的预分频器值为8。因此,运行50 MHz的SPI时钟。在这种情况下,我的文件系统操作有时会成功进行,有时代码会在SPI例程中挂起很长时间,并指出NOR设备正忙。

根据数据表80Mhz SPI时钟,正常读取和166Mhz SPI时钟,为IS25LP128F提供了快速读取。我更改了内核clk,以获取各自的输出时钟。即使那样,问题仍然存在。

有时在50Mhz上写一行(64字节)需要4分钟才能完成。我已经尝试过使用100Mhz,80Mhz,50Mhz的所有预分频器值,但有时仅成功运行50 Mhz(并非每次都成功)

在没有设备繁忙的情况下(必须发送txData = 0),必须使用文件系统。

请帮我。 enter image description here Datasheet Output

/*Received Txdata always busy*/
uint8_t readStatusReg(void)
{
    uint8_t txData;
    CS_ACTIVE;
    txData=CMD_RDSR;
    HAL_SPI_Transmit(&hspi1, &txData, 1, 1000);
    while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);
    HAL_SPI_Receive(&hspi1,  &txData, 1, 1000);
    CS_DEACTIVE;
    return txData;
}

/*Clock Config */
static void HWI_SPI1_Init(void)
{
    /* USER CODE BEGIN SPI1_Init 0 */

    /* USER CODE END SPI1_Init 0 */

    /* USER CODE BEGIN SPI1_Init 1 */

    /* USER CODE END SPI1_Init 1 */
    /* SPI1 parameter configuration*/

    hspi1.Instance = SPI1;
    hspi1.Init.Mode = SPI_MODE_MASTER;
    hspi1.Init.Direction = SPI_DIRECTION_2LINES;
    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
    hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
    hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
    hspi1.Init.NSS = SPI_NSS_SOFT;
    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;   
    hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
    hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
    hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
    hspi1.Init.CRCPolynomial = 7;
    hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;

}

0 个答案:

没有答案