Crazy-Geeks / STM32-W25Q-QSPI

STM32 Winbond W25Q memory Quad SPI Driver
https://crazy-geeks.github.io/STM32-W25Q-QSPI/
MIT License
82 stars 29 forks source link

Fast Read QUAD IO error #4

Open leonreucher251 opened 2 years ago

leonreucher251 commented 2 years ago

Hey,

thank you very much for the amazing library. Everything is working fine, but when I try to read data using the Fast Read QUAD SPI 4IO I only receive the first few bytes. I am using a W25Q64JV. I tried using the single line read mode and it works fine.

In your read function you use 6 dummy cycles. The datasheet mentions that only 4 dummy cycles are needed. But also with changing that value I still receive wrong data. Do you have any idea what could cause this behavior? Is the fast read working for you?

Im using a Nucleo F767ZI discovery board running at 216 MHz with the QSPI clock prescaler set two 2 (should be 108 MHz on the QUAD SPI clock, which is fine).

MISU-RSG commented 1 year ago

HI

The clock prescaler is right because the amount adds with one. CS cycle must be 6 clocks as mentioned in the datasheet. the command needs one alternate byte, its value is 0xFF. The dummy cycle must be 4 clocks as you mentioned. But it still doesn't work? :-(

leonreucher251 commented 1 year ago

Hey,

thank you for your answer. I understood now why you are using 6 dummy cycles instead of 4 dummy cycles + 2 alternate cycles (8 bits) for the 0xFF alternate bytes - it should be the same, correct?

Even when decreasing the clock speed, I am still not able to receive data in QUAD mode. Receiving data on a single line is working fine.

I checked all connections multiple times and reduced the cable length, because at the moment the flash is connected using jumper wires to the Nucleo board for development purposes.

Do you have any idea what I could check next? Connecting a signal analyzer results in problems, even when using the single line mode.

leonreucher251 commented 1 year ago

This is my current HAL config for the QSPI:

hqspi.Init.ClockPrescaler = 2;
hqspi.Init.FifoThreshold = 1;
hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
hqspi.Init.FlashSize = 22;
hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
hqspi.Init.FlashID = QSPI_FLASH_ID_1;
hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;

I tried changing the ChipSelectHighTime, but it is still not working.

akashpraan commented 4 weeks ago

Hey, @leonreucher251 any update on this I am using W25Q16JVSS with STM32F767 and I am also not able to read anything back with similar settings

hqspi.Instance = QUADSPI; hqspi.Init.ClockPrescaler = 2; hqspi.Init.FifoThreshold = 1; hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE; hqspi.Init.FlashSize = 20; hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE; hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0; hqspi.Init.FlashID = QSPI_FLASH_ID_1; hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;