cancel
Showing results for 
Search instead for 
Did you mean: 

LCD display line noise issue while using QSPI with STM32F469BIT

shinjinoji
Associate II

Our R&D is developing LCD GUI product using QSPI memory and faced some noise issue.

When certain image from QSPI memory is displaying, some noise lines is shown in certain area on the LCD. Please refer to the attached video.

Any advise will be appreciated.

Development conditions are below.

-      CPU: STM32F469BIT

-      QSPI memory: MT25QL256ABA (256MB)

-      Used original source: N25Q512A of STM32469I-EVAL board

-      Revised part of source

-------------------------------------------------------------

 /* Initialize the QSpi NOR */

 BSP_QSPI_Init();

BSP_QSPI_EnableMemoryMappedMode();

.

.

.

.

.

uint8_t BSP_QSPI_Init(void)

{

 QSPIHandle.Instance = QUADSPI;

 

 /* Call the DeInit function to reset the driver */

 if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK)

 {

   return QSPI_ERROR;

 }

       

 /* System level initialization */

 BSP_QSPI_MspInit(&QSPIHandle, NULL);

 

 /* QSPI initialization */

 /* Init typedef is the same for both S25FL256S and N25Q256A memories, as they have the same FLASH size */

 QSPIHandle.Init.ClockPrescaler    = 1; /* QSPI Freq= 180 MHz / (1+1) = 90 MHz */

 QSPIHandle.Init.FifoThreshold     = 1;

 QSPIHandle.Init.SampleShifting    = QSPI_SAMPLE_SHIFTING_HALFCYCLE;

 QSPIHandle.Init.FlashSize         = POSITION_VAL(S25FL256S_FLASH_SIZE) - 1; /* same size on both memory types */

 QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE; /* Min 50ns for nonRead on both memory types */

 QSPIHandle.Init.ClockMode         = QSPI_CLOCK_MODE_0;

 QSPIHandle.Init.FlashID           = QSPI_FLASH_ID_1;

 QSPIHandle.Init.DualFlash         = QSPI_DUALFLASH_DISABLE;

  

 if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK)

 {

   return QSPI_ERROR;

 }

 

 /* Detect the memory ID */

 if (QSPI_ReadID(&QspiInfo) != QSPI_OK)

 {

   return QSPI_NOT_SUPPORTED;

 }

 

 /* QSPI memory reset */

 if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK)

 {

   return QSPI_NOT_SUPPORTED;

 }

 

 /* Set the QSPI memory in 4-bytes address mode */

 if (QSPI_EnterFourBytesAddress(&QSPIHandle) != QSPI_OK)

 {

   return QSPI_NOT_SUPPORTED;

 }

 

 /* Configuration of the dummy cucles on QSPI memory side */

 if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK)

 {

   return QSPI_NOT_SUPPORTED;

 }

 

 return QSPI_OK;

}

.

.

.

.

.

uint8_t BSP_QSPI_EnableMemoryMappedMode(void)

{

 QSPI_CommandTypeDef s_command;

 QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;

 

 /* Configure the command for the read instruction */

 s_command.InstructionMode = QSPI_INSTRUCTION_1_LINE;

 s_command.Instruction = QUAD_OUT_FAST_READ_CMD;

 s_command.AddressMode = QSPI_ADDRESS_1_LINE;

 s_command.AddressSize = QSPI_ADDRESS_32_BITS;

 s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;

 s_command.DataMode = QSPI_DATA_4_LINES;

 s_command.DummyCycles = QspiInfo.DummyCyclesRead;

 s_command.DdrMode = QSPI_DDR_MODE_DISABLE;

 s_command.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;

 s_command.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;

 

 /* Configure the memory mapped mode */

 s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;

 

 if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK)

 {

   return QSPI_ERROR;

 }

 

 return QSPI_OK;

}

1 REPLY 1
Nbaşa.1
Associate II

You may need to set dummy cycles. Which chip are you using for QSPI?