フラッシュデバイスW25Q32FVのデバイスIDを読み取る必要があります。 W25Q32FVドキュメントの書き込み:「製造元/デバイスIDの読み取り命令」は、JEDECの割り当てられた製造元IDと特定のデバイスIDの両方を提供する、電源切断/デバイス解除コマンド ID命令の代替品です。 製造元/命令は、/ CSピンをローに駆動し、命令コード "90h" の後に24ビットのアドレス(A23-A0)をシフトすることによって開始される、パワーダウン/デバイスIDからの解放の命令と非常に似ています。 000000h。その後、Winbond(EFh) の製造者IDとデバイスIDは、図39の のように、最上位ビット(MSB)を先頭にしてCLKの立下りエッジでシフトアウトされます。W25Q32FVのデバイスID値は製造元とデバイス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;
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)
}
それがないと動作しません:(
SPIの設定時に極性と位相を確認しましたか?網羅的であるために、SPI initコードとspi_enable/disable機能の内容を共有できますか? –
有ります。#define 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; if(HAL_SPI_Init(&hspi1)!= HAL_OK) } –