int FLASHPlugin_DoProgramSync(unsigned startOffset, const void *pData, int bytesToWrite) { uint8_t result = BSP_QSPI_Write((uint8_t *)pData, startOffset, bytesToWrite); if (result != QSPI_OK) return 0; return bytesToWrite; }
/** * @brief QSPI Demo * @param None * @retval None */ void QSPI_demo (void) { uint8_t status; QSPI_SetHint(); /*##-1- Configure the QSPI device ##########################################*/ /* QSPI device configuration */ status = BSP_QSPI_Init(); if (status == QSPI_NOT_SUPPORTED) { BSP_LCD_DisplayStringAt(20, 100, (uint8_t*)"QSPI Initialization : FAILED.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"QSPI Test Aborted.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 145, (uint8_t*)"Check the hardware configuration :", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 160, (uint8_t*)" refer to the UM of the board", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 175, (uint8_t*)" for the hardware modifications", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 190, (uint8_t*)" to connect the QSPI memory", LEFT_MODE); } else if (status == QSPI_ERROR) { BSP_LCD_DisplayStringAt(20, 100, (uint8_t*)"QSPI Initialization : FAILED.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"QSPI Test Aborted.", LEFT_MODE); } else { BSP_LCD_DisplayStringAt(20, 100, (uint8_t*)"QSPI Initialization : OK.", LEFT_MODE); /*##-2- Read & check the QSPI info #######################################*/ /* Clear the structure */ QspiInfo.FlashSize = (uint32_t)0x00; QspiInfo.EraseSectorSize = (uint32_t)0x00; QspiInfo.EraseSectorsNumber = (uint32_t)0x00; QspiInfo.ProgPageSize = (uint32_t)0x00; QspiInfo.ProgPagesNumber = (uint32_t)0x00; QspiInfo.ManufID = (uint8_t)0x00; /* Read the QSPI memory info by filling QSPIInfo struct */ BSP_QSPI_GetInfo(&QspiInfo); /* Test the correctness */ if (CompareInfo() !=QSPI_OK) { BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"QSPI GET INFO : FAILED.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 130, (uint8_t*)"QSPI Test Aborted.", LEFT_MODE); } else { if (QspiInfo.ManufID == QSPI_S25FL512S) { BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"QSPI GET INFO : OK. S25FL512S detected ", LEFT_MODE); } else { BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"QSPI GET INFO : OK. N25Q512A detected ", LEFT_MODE); } /*##-3- Erase QSPI memory ################################################*/ if(BSP_QSPI_Erase_Block(WRITE_READ_ADDR) != QSPI_OK) { BSP_LCD_DisplayStringAt(20, 130, (uint8_t*)"QSPI ERASE : FAILED.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 145, (uint8_t*)"QSPI Test Aborted.", LEFT_MODE); } else { BSP_LCD_DisplayStringAt(20, 130, (uint8_t*)"QSPI ERASE : OK. ", LEFT_MODE); /*##-4- QSPI memory read/write access #################################*/ /* Fill the buffer to write */ Fill_Buffer(qspi_aTxBuffer, BUFFER_SIZE, 0xD20F); /* Write data to the QSPI memory */ if(BSP_QSPI_Write(qspi_aTxBuffer, WRITE_READ_ADDR, BUFFER_SIZE) != QSPI_OK) { BSP_LCD_DisplayStringAt(20, 145, (uint8_t*)"QSPI WRITE : FAILED.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 160, (uint8_t*)"QSPI Test Aborted.", LEFT_MODE); } else { BSP_LCD_DisplayStringAt(20, 145, (uint8_t*)"QSPI WRITE : OK. ", LEFT_MODE); /* Read back data from the QSPI memory */ if(BSP_QSPI_Read(qspi_aRxBuffer, WRITE_READ_ADDR, BUFFER_SIZE) != QSPI_OK) { BSP_LCD_DisplayStringAt(20, 160, (uint8_t*)"QSPI READ : FAILED.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 175, (uint8_t*)"QSPI Test Aborted.", LEFT_MODE); } else { BSP_LCD_DisplayStringAt(20, 160, (uint8_t*)"QSPI READ : OK. ", LEFT_MODE); /*##-5- Checking data integrity ############################################*/ if(Buffercmp(qspi_aRxBuffer, qspi_aTxBuffer, BUFFER_SIZE) > 0) { BSP_LCD_DisplayStringAt(20, 175, (uint8_t*)"QSPI COMPARE : FAILED.", LEFT_MODE); BSP_LCD_DisplayStringAt(20, 190, (uint8_t*)"QSPI Test Aborted.", LEFT_MODE); } else { BSP_LCD_DisplayStringAt(20, 175, (uint8_t*)"QSPI Test : OK. ", LEFT_MODE); } } } } } } while (1) { if(CheckForUserInput() > 0) { return; } } }