我需要讀取閃存設備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) } –