Hi everyone,
we use the S25HL512T with QUAD-SPI interface and find some issue about QPI read.
some test pattern as follow:
Does somebody encounter the same problem?
Hi @Ken
Are you performing the program operation across page boundaries? I would like to inform you that the default size of the program buffer is set to 256, means page boundaries occur at every 256th memory location. If the page boundary is crossed during the page program operation, the address gets wrapped and programming starts from the starting of that particular page. Can you confirm that your program operation is not crossing page boundaries?
Regards.
Hi,
We tested these addresses
Hi @Ken
I would like to point out that there is difference between Quad SPI mode and QPI mode.
Quad mode is enabled by the below configuration register bit
QPI mode is enabled by the below configuration register bit
Could you please confirm which mode are you using?
Regards.
Hi,
Hi,
We set the output drive impedance register to 001 (120 ohms), which is normal.
Who can help explain the details about the settings?
Why does it cause it to read the failed value (read a byte is 0x0F or 0xF0)?
Hi @Ken
IOIMPD[2:0] bits are required to select the IO driver output impedance. It is used to adjust the drive strength to meet the systems signal integrity requirements.
Regards.
3. I can provide the sequence, if we don't configure the 120 ohm impedance.
The reading process became abnormal, even read ID command, because it has an 0x0F value.
the sequence
printf("Impedance\r\n");
S25HS_Write_Enable();
Data = S25HS_Read_Reg(REG_ADDR_CONG4);
Data |= (1 << 5); //used 120 ohm
S25HS_Write_Reg(REG_ADDR_CONG4, Data);
S25HS_Read_Reg(REG_ADDR_CONG4);
printf("QPI\r\n");
//Set QPI mode and 4 bytes addressing for 512M bit = 64 MB
Data = S25HS_Read_Reg(REG_ADDR_CONG2);
S25HS_Write_Enable();
Data = (Data | 0xC0); // 4 bytes
//Data = (Data | 0x40); // 3 bytes
S25HS_Write_Reg(REG_ADDR_CONG2, Data);
S25HS_Busy4_Wait();
S25HS_32Read4_Reg(REG_ADDR_STAT1);
S25HS_Write4_Enable();
S25HS_32Read4_Reg(REG_ADDR_STAT1);
printf(" Erase \r\n");
//S25HS_Erase_Sector(0x03F00000);
S25HS_Erase_Block(0x03FF0000);
//S25HS_Erase_Chip();
S25HS_Busy4_Wait();
printf("D %08X D\r\n", S25HS_QuadSPI_Read_Test256());
printf(" Read \r\n");
TIM10->CNT = 0;
S25HS_QuadSPI_Read_Test256();
TS = TIM10->CNT;
printf("~~~~ TS :%d us\r\n", TS);
Hi @Kent_Lee
Apologies for the delay in responding.
We would need some more information.
Regards.