(4)等待擦除完毕,使用automatic polling mode查询,这里还是读status register,但读的是bit0位,而且预期值bit0=0;查阅手册

- /* Configure automatic polling mode to wait for memory ready ------ */
- sCommand.InstructionMode = QSPI_INSTRUCTION_1_LINE;
- sCommand.Instruction = READ_STATUS_REG_CMD;
- sCommand.AddressMode = QSPI_ADDRESS_NONE;
- sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
- sCommand.DataMode = QSPI_DATA_1_LINE;
- sCommand.DummyCycles = 0;
- sCommand.DdrMode = QSPI_DDR_MODE_DISABLE;
- sCommand.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
- sCommand.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;
- //bit0:write in progress 0:ready 1:busy
- sConfig.Match = 0x00;
- sConfig.Mask = 0x01;
- sConfig.MatchMode = QSPI_MATCH_MODE_AND;
- sConfig.StatusBytesSize = 1;
- sConfig.Interval = 0x10;
- sConfig.AutomaticStop = QSPI_AUTOMATIC_STOP_ENABLE;
- if (HAL_QSPI_AutoPolling_IT(&QSPIHandle, &sCommand, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
(5)写使能并且写数据- /* Enable write operations ----------------------------------------- */
- QSPI_WriteEnable(&QSPIHandle);
- //QUAD INPUT FAST PROGRAM Data In:DQ[3:0];Address In:DQ0
- /* Writing Sequence ------------------------------------------------ */
- sCommand.Instruction = QUAD_IN_FAST_PROG_CMD;
- sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
- sCommand.Address = qspi_addr; //qspi_addr=0
- sCommand.DataMode = QSPI_DATA_4_LINES;
- sCommand.NbData = size; //size = QSPI_PAGE_SIZE = 256
- if (HAL_QSPI_Command(&QSPIHandle, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_QSPI_Transmit_DMA(&QSPIHandle, flash_addr) != HAL_OK) //flash_addr = (uint8_t *)(&Load$QSPI$Base);
- {
- Error_Handler();
- }
看到这里就不得不提一下scatter file文件
8.png (48.16 KB, 下载次数: 1)
下载附件
2015-9-8 21:38 上传
打开这个文件,STM32746G-DISCOVERY.sct- ; *************************************************************
- ; *** Scatter-Loading Description File generated by uVision ***
- ; *************************************************************
- LR_IROM1 0x08000000 0x00100000 { ; load region size_region
- ER_IROM1 0x08000000 0x00100000 { ; load address = execution address
- *.o (RESET, +First)
- *(InRoot$Sections)
- .ANY (+RO)
- }
- RW_IRAM1 0x20000000 0x00050000 { ; RW data
- .ANY (+RW +ZI)
- }
- QSPI 0x90000000 0x00100000 {
- *.o (.qspi)
- }
- }
|