int FLASHPlugin_Unload() { BSP_QSPI_DeInit(); HAL_DeInit(); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; for (int i = 0; i < sizeof(NVIC->ICER) / sizeof(NVIC->ICER[0]); i++) NVIC->ICER[0] = -1; return 0; }
/** * @brief QSPI Demo * @param None * @retval None */ void QSPI_demo (void) { /* QSPI info structure */ static QSPI_Info pQSPI_Info; 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 #######################################*/ /* Initialize the structure */ pQSPI_Info.FlashSize = (uint32_t)0x00; pQSPI_Info.EraseSectorSize = (uint32_t)0x00; pQSPI_Info.EraseSectorsNumber = (uint32_t)0x00; pQSPI_Info.ProgPageSize = (uint32_t)0x00; pQSPI_Info.ProgPagesNumber = (uint32_t)0x00; /* Read the QSPI memory info */ BSP_QSPI_GetInfo(&pQSPI_Info); /* Test the correctness */ if((pQSPI_Info.FlashSize != 0x2000000) || (pQSPI_Info.EraseSectorSize != 0x1000) || (pQSPI_Info.ProgPageSize != 0x100) || (pQSPI_Info.EraseSectorsNumber != 8192) || (pQSPI_Info.ProgPagesNumber != 131072)) { 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 { BSP_LCD_DisplayStringAt(20, 115, (uint8_t*)"QSPI GET INFO : OK. ", 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) { BSP_QSPI_DeInit(); return; } } }