50 uint32_t curtime = HAL_GetTick();
52 while ((!
QSpiAvailable) && ((timeout==0) || ((HAL_GetTick()-curtime)<=timeout))) {};
86 uint32_t curtime = HAL_GetTick();
130 QSPI_CommandTypeDef sCommand = {0};
135 sCommand.AddressMode = QSPI_ADDRESS_NONE;
136 sCommand.DataMode = QSPI_DATA_NONE;
138#ifdef EXT_FLASH_QSPI_DMA_MODE
150 sCommand.AddressMode = QSPI_ADDRESS_NONE;
151 sCommand.DataMode = QSPI_DATA_NONE;
153#ifdef EXT_FLASH_QSPI_DMA_MODE
184QSPI_CommandTypeDef sCommand = {0};
188 sCommand.DataMode = QSPI_DATA_1_LINE;
189 sCommand.AddressMode = QSPI_ADDRESS_NONE;
190 sCommand.Address = 0;
192 sCommand.DummyCycles = 0;
194#ifdef EXT_FLASH_QSPI_DMA_MODE
226QSPI_CommandTypeDef sCommand = {0};
230 sCommand.DataMode = QSPI_DATA_1_LINE;
231 sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
232 sCommand.AddressSize = QSPI_ADDRESS_24_BITS;
233 sCommand.Address = 0;
234 sCommand.NbData = 256;
235 sCommand.DummyCycles = 8;
237#ifdef EXT_FLASH_QSPI_DMA_MODE
279 for (uint8_t k=0;k!=3;k++)
283 if (!((data[0]==
'S') && (data[1]==
'F') && (data[2]==
'D') && (data[3]==
'P')))
284 if (!((data[0]==
'S') && (data[2]==
'F') && (data[5]==
'D') && (data[7]==
'P')))
293 QSPI_CommandTypeDef sCmd_4byte = {0};
296 sCmd_4byte.AddressMode = QSPI_ADDRESS_NONE;
297 sCmd_4byte.DataMode = QSPI_DATA_NONE;
298 sCmd_4byte.InstructionMode= QSPI_INSTRUCTION_1_LINE;
302 #ifdef EXT_FLASH_QSPI_DMA_MODE
317#ifdef FLASH_QSPI_MEMORY_MAPPED
319 if (QFlash_EnableMemoryMappedMode()==
HAL_ERROR)
329#ifdef FLASH_QSPI_MEMORY_MAPPED
333 QSPI_CommandTypeDef sCommand = {0};
334 QSPI_MemoryMappedTypeDef sMemMappedCfg = {0};
346 sMemMappedCfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
355#ifdef EXT_FLASH_QSPI_DMA_MODE
380QSPI_CommandTypeDef sCommand = {0};
387 sCommand.Address = address;
388 sCommand.NbData = dataSize;
394#ifdef EXT_FLASH_QSPI_DMA_MODE
404#ifdef FLASH_QSPI_WAIT_FOR_READING_COMPLETE
426QSPI_CommandTypeDef sCommand = {0};
432 sCommand.DataMode = QSPI_DATA_NONE;
433 sCommand.AddressMode = QSPI_ADDRESS_NONE;
435#ifdef EXT_FLASH_QSPI_DMA_MODE
476 QSPI_CommandTypeDef sCommand = {0};
480 sCommand.DataMode = QSPI_DATA_NONE;
481 sCommand.AddressMode = QSPI_ADDRESS_NONE;
483#ifdef EXT_FLASH_QSPI_DMA_MODE
503QSPI_CommandTypeDef sCommand = {0};
507 sCommand.DataMode = QSPI_DATA_1_LINE;
508 sCommand.AddressMode = QSPI_ADDRESS_NONE;
509 sCommand.AddressSize = QSPI_ADDRESS_NONE;
510 sCommand.Address = 0x0;
513#ifdef EXT_FLASH_QSPI_DMA_MODE
547QSPI_CommandTypeDef sCommand = {0};
551 sCommand.DataMode = QSPI_DATA_1_LINE;
552 sCommand.AddressMode = QSPI_ADDRESS_NONE;
553 sCommand.AddressSize = QSPI_ADDRESS_NONE;
554 sCommand.Address = 0x0;
557#ifdef EXT_FLASH_QSPI_DMA_MODE
590QSPI_CommandTypeDef sCommand = {0};
594 sCommand.DataMode = QSPI_DATA_1_LINE;
595 sCommand.AddressMode = QSPI_ADDRESS_NONE;
596 sCommand.AddressSize = QSPI_ADDRESS_NONE;
597 sCommand.Address = 0x0;
600#ifdef EXT_FLASH_QSPI_DMA_MODE
632 QSPI_CommandTypeDef sCommand = {0};
639 sCommand.DataMode = QSPI_DATA_1_LINE;
640 sCommand.AddressMode = QSPI_ADDRESS_NONE;
641 sCommand.AddressSize = QSPI_ADDRESS_NONE;
642 sCommand.Address = 0x0;
645#ifdef EXT_FLASH_QSPI_DMA_MODE
677 QSPI_CommandTypeDef sCommand = {0};
684 sCommand.DataMode = QSPI_DATA_1_LINE;
685 sCommand.AddressMode = QSPI_ADDRESS_NONE;
686 sCommand.AddressSize = QSPI_ADDRESS_NONE;
687 sCommand.Address = 0x0;
690#ifdef EXT_FLASH_QSPI_QDMA_MODE
731 if (!((sr & 1)==0)) {
733 }
else if (!((sr & 2)==0)) {
763 QSPI_CommandTypeDef sCommand = {0};
768QSPI_AutoPollingTypeDef sConfig;
772 sCommand.AddressMode = QSPI_ADDRESS_NONE;
773 sCommand.DataMode = QSPI_DATA_1_LINE;
777 sConfig.MatchMode = QSPI_MATCH_MODE_AND;
778 sConfig.StatusBytesSize = 1;
779 sConfig.Interval = 0x10;
780 sConfig.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE;
782#ifdef EXT_FLASH_QSPI_DMA_MODE
828 QSPI_CommandTypeDef sCommand = {0};
835 sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
837 sCommand.NbData = dataSize;
838 sCommand.Address = addr;
840#ifdef EXT_FLASH_QSPI_DMA_MODE
898 if(quota>=67108864 - 211200){
907 if (dataSize-quota) {
931 QSPI_CommandTypeDef sCommand = {0};
939 sCommand.DataMode = QSPI_DATA_NONE;
940 sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
942 sCommand.Address = addr;
944#ifdef EXT_FLASH_QSPI_DMA_MODE
969 QSPI_CommandTypeDef sCommand = {0};
977 sCommand.DataMode = QSPI_DATA_NONE;
978 sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
980 sCommand.Address = addr;
982#ifdef EXT_FLASH_QSPI_DMA_MODE
1009 QSPI_CommandTypeDef sCommand = {0};
1017 sCommand.DataMode = QSPI_DATA_NONE;
1018 sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
1019 sCommand.NbData = 0;
1020 sCommand.Address = addr;
1022#ifdef EXT_FLASH_QSPI_DMA_MODE
1046 QSPI_CommandTypeDef sCommand = {0};
1055 sCommand.DataMode = QSPI_DATA_NONE;
1056 sCommand.AddressMode = QSPI_ADDRESS_NONE;
1058#ifdef EXT_FLASH_QSPI_DMA_MODE
1082 QSPI_CommandTypeDef sCommand = {0};
1088 sCommand.DataMode = QSPI_DATA_NONE;
1089 sCommand.AddressMode = QSPI_ADDRESS_NONE;
1091#ifdef EXT_FLASH_QSPI_DMA_MODE
1113 QSPI_CommandTypeDef sCommand = {0};
1119 sCommand.DataMode = QSPI_DATA_NONE;
1120 sCommand.AddressMode = QSPI_ADDRESS_NONE;
1122#ifdef EXT_FLASH_QSPI_DMA_MODE
1142QSPI_CommandTypeDef sCommand = {0};
1146 sCommand.DataMode = QSPI_DATA_1_LINE;
1147 sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
1148 sCommand.AddressSize = QSPI_ADDRESS_24_BITS;
1149 sCommand.Address = 0;
1150 sCommand.NbData = 1;
1151 sCommand.DummyCycles = 0;
1153#ifdef EXT_FLASH_QSPI_DMA_MODE
1184QSPI_CommandTypeDef sCommand = {0};
1188 sCommand.DataMode = QSPI_DATA_1_LINE;
1189 sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
1190 sCommand.AddressSize = QSPI_ADDRESS_24_BITS;
1191 sCommand.Address = 0;
1192 sCommand.NbData = 2;
1193 sCommand.DummyCycles = 0;
1195#ifdef EXT_FLASH_QSPI_DMA_MODE
1235#ifdef FLASH_QSPI_MEMORY_MAPPED
1236 memcpy(buffer, (
void *)0x90000000+address24, length);
1245#ifdef FLASH_QSPI_MEMORY_MAPPED
1246 memcpy(buffer, (
void *)0x90000000+address24, length);
void HAL_QSPI_TxCpltCallback(QSPI_HandleTypeDef *l_hqspi)
void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *l_hqspi)
void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *l_hqspi)
void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *l_hqspi)
#define EXT_FLASH_PAGE_SIZE
256 bytes per programmable page.
HAL_StatusTypeDef QFlash_Reset()
HAL_StatusTypeDef QFlash_ReadSR3(uint8_t *dataptr)
HAL_StatusTypeDef QFlash_PowerDown()
HAL_StatusTypeDef QFlash_ReadSR2(uint8_t *dataptr)
HAL_StatusTypeDef QFlash_CheckSR1()
HAL_StatusTypeDef QFlash_PowerUp()
HAL_StatusTypeDef QFlash_ReadSR1(uint8_t *dataptr)
HAL_StatusTypeDef QFlash_WaitForWritingComplete()
HAL_StatusTypeDef QFlash_ReadDevID(uint8_t *dataptr)
HAL_StatusTypeDef QFlash_ReadManufactutrerAndDevID(uint16_t *dataptr)
read id of the winbond
HAL_StatusTypeDef QFlash_ReadJedecID(uint8_t *dataptr)
HAL_StatusTypeDef QFlash_ReadSFDP(uint8_t *dataptr)
HAL_StatusTypeDef QFlash_Init()
#define QFLASH_DEF_TIMEOUT
#define QFLASH_INSTRUCTION_MODE
#define W25_ENTER_4B_ADDR
#define QFLASH_WRITE_COMMAND
#define QFLASH_ADDRESS_SIZE
#define QFLASH_ALTERNATE_BYTE_MODE
#define QFLASH_READ_DUMMYC
#define W25_MAN_DEVICE_ID
#define QFLASH_ADDRESS_MODE
#define QFLASH_DUMMY_CYCLES
#define W25_B_ERASE64K_4B
#define QFLASH_READ_COMMAND
#define QFLASH_ALT_BYTES_M
#define QFLASH_ALT_BYTES_S
#define QFLASH_DDR_HOLD_HALF_CYCLE
#define QFLASH_BSY_TIMEOUT
#define QFLASH_WDATA_MODE
HAL_StatusTypeDef QFlash_BErase32k(uint32_t addr)
HAL_StatusTypeDef QFlash_SErase4k(uint32_t addr)
HAL_StatusTypeDef QFlash_BErase64k(uint32_t addr)
HAL_StatusTypeDef QFlash_ChipErase()
HAL_StatusTypeDef QFlash_Write(uint32_t addr, uint8_t *data, uint32_t dataSize)
HAL_StatusTypeDef QFlash_Read(uint32_t address, uint8_t *buffer, uint32_t dataSize)
HAL_StatusTypeDef QFlash_WaitForDataAvailable(uint32_t timeout)
HAL_StatusTypeDef QFlash_WaitForQSPIAvailable(uint32_t timeout)
HAL_StatusTypeDef QFlash_WriteSR2(uint8_t data)
writes to register 2
uint8_t QFlash_IsQSPIAvailable()
void QFlash_DefaultCmd(QSPI_CommandTypeDef *sCommand)
HAL_StatusTypeDef QFlash_WriteDisable()
disables writes
HAL_StatusTypeDef QFlash_WriteSR3(uint8_t data)
writes to register 3
uint8_t QFlash_IsDataAvailable()
HAL_StatusTypeDef QFlash_WriteEnable()
enables writes
void DataReader_ReadData(uint32_t address24, uint8_t *buffer, uint32_t length)
void DataReader_WaitForReceiveDone()
void DataReader_StartDMAReadData(uint32_t address24, uint8_t *buffer, uint32_t length)
: Header for main.c file. This file contains the common defines of the application.
static volatile uint8_t QSpiAvailable
static volatile uint8_t QSpiReadDataAvailable
QSPI_HandleTypeDef FLASH_QSPI_PORT
HAL_StatusTypeDef QFlash_WriteASinglePage(uint32_t addr, uint8_t *dataptr, uint32_t dataSize)
Driver for W25Qxxx series Quad-SPI NOR Flash memory.
HAL_StatusTypeDef
HAL Status structures definition.