我需要读取闪存设备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高电平完成指令。“
我的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)
}
不起作用:(
答案 0 :(得分:0)
序列应首先是MSB。所以替换
hspi1.Init.FirstBit = SPI_FIRSTBIT_LSB;
通过
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
void MX_SPI1_Init(void)
中的。 最好的方法是更新STMCube。