我需要读取闪存设备W25Q32FV的设备ID。 在W25Q32FV文档中写入:“读取制造商/设备ID指令是提供JEDEC分配的制造商ID和特定设备ID的ID指令的替代方案 读取制造商/设备ID指令非常类似于从掉电模式/设备ID 指令,该指令是通过将/ CS引脚驱动为低电平并将指令码“90h” 后跟24位地址(A23-A0)的000000h。之后,如图39中的 所示,Winbond(EFh) 的制造商ID和器件ID在CLK的下降沿以最高有效位(MSB)先移出.W25Q32FV的器件ID值为列于制造商和器件识别 表。该指令是由驾驶/ CS高完成“STM43F4发现:如何通过SPI读取闪存器件?
而且我的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;
初始化函数:
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)
}
它确实不工作:(
您是否在设置SPI时检查了极性和相位?为了详尽,您可以共享SPI init代码和spi_enable/disable函数的内容。 –
是:#定义SPI_ENABLE \t \t HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_RESET) 的#define SPI_DISABLE HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_SET) –
SPI INIT: 静态无效MX_SPI1_Init(无效) { 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;如果(HAL_SPI_Init(&hspi1)!= HAL_OK) } –