STM43F4发现:如何通过SPI读取闪存设备?

时间:2017-02-27 08:11:19

标签: stm32f4discovery

我需要读取闪存设备W25Q32FV的设备ID。 在W25Q32FV文档中写道:“读取制造商/设备ID指令是从掉电/设备释放的替代方案 ID指令,提供JEDEC分配的制造商ID和特定的设备ID。 读取制造商/设备ID指令非常类似于从掉电/设备ID释放 指令。通过将/ CS引脚驱动为低电平并移位指令代码“90h”来启动该指令 然后是24位地址(A23-A0)为000000h。之后,Winbond的制造商ID(EFh) 并且器件ID在CLK的下降沿移出,最高有效位(MSB)首先如图所示 在图39中,W25Q32FV的设备ID值列在制造商和设备标识中 表。通过驱动/ CS高电平完成指令。“

Figure 39

我的STM32F4 Dicovery代码(STM32F407VGTx):

#define spi_enable HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_RESET)
#define spi_disable HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET)

spi_enable;
uint8_t read_id = 0x90;
HAL_SPI_Transmit(&hspi1, &read_id, 1, 1000);

address[0] = 0x00;address[1] = 0x00;address[2] = 0x00;
HAL_SPI_Transmit(&hspi1, address, 3, 1000);

HAL_SPI_Receive(&hspi1, &manualId, 1, 1000);
HAL_SPI_Receive(&hspi1, &deviceId, 1, 1000);    

spi_disable;

init函数:

static 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_8BIT;
    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_LSB;
    hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
    hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
    hspi1.Init.CRCPolynomial = 10;
    if (HAL_SPI_Init(&hspi1) != HAL_OK)
}

不起作用:(

1 个答案:

答案 0 :(得分:0)

序列应首先是MSB。所以替换

hspi1.Init.FirstBit = SPI_FIRSTBIT_LSB;

通过

hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
void MX_SPI1_Init(void)中的

。 最好的方法是更新STMCube。