zheka 1 12 февраля, 2020 Опубликовано 12 февраля, 2020 (изменено) · Жалоба Память N25Q128A Стираю сектор, пишу что-то в сектор, затем читаю его в режиме MemoryMappedMode. В этот режим загоняю контроллер так void QUADSPI_MappedMode() { QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DDRMode = QUADSPI_ComConfig_DDRMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_Ins = IO_READ_QUAD_CMD; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DummyCycles = 10; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_SIOOMode = QUADSPI_ComConfig_SIOOMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABSize = QUADSPI_ComConfig_ABSize_8bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABMode = QUADSPI_ComConfig_ABMode_NoAlternateByte; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_FMode = QUADSPI_ComConfig_FMode_Memory_Mapped; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADMode = QUADSPI_ComConfig_ADMode_4Line; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADSize = QUADSPI_ComConfig_ADSize_24bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DMode = QUADSPI_ComConfig_DMode_4Line; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_IMode = QUADSPI_ComConfig_IMode_1Line; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); } Затем хочу записать в память что-то. ИНформирован, что в MappedMode нельзя писать во флеш. Перевожу обратно, запускаю функцию WriteEnable void QSPI_WriteEnable(void) { sprintf((char *)str, "0x%08X : JUST ENTER WRITE_ENABLE_FUNCTION (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_FMode = QUADSPI_ComConfig_FMode_Indirect_Write; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DDRMode = QUADSPI_ComConfig_DDRMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_SIOOMode = QUADSPI_ComConfig_SIOOMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DummyCycles = 0; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABSize = QUADSPI_ComConfig_ABSize_8bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADSize = QUADSPI_ComConfig_ADSize_24bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DMode = QUADSPI_ComConfig_DMode_NoData; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADMode = QUADSPI_ComConfig_ADMode_NoAddress; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABMode = QUADSPI_ComConfig_ABMode_NoAlternateByte; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_IMode = QUADSPI_ComConfig_IMode_1Line; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); sprintf((char *)str, "0x%08X : SETUP WRITE_ENABLE PARAMETRES COMPLETE (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_SetFIFOThreshold(0); QUADSPI_SetDataLength(0); sprintf((char *)str, "0x%08X : TRY WRITE ENABLE (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_Ins = WRITE_ENABLE_CMD ; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); sprintf((char *)str, "0x%08X : WAITING FOR FLAG(WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_BUSY)==SET); sprintf((char *)str, "0x%08X : WRITE ENABLE OK (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_AutoPollingMode_Config(0x02,0x02,QUADSPI_PMM_AND); QUADSPI_AutoPollingModeStopCmd(ENABLE); QUADSPI_SetDataLength(0x00); sprintf((char *)str, "0x%08X : TRY TO SET READ (WE) \r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_FMode = QUADSPI_ComConfig_FMode_Auto_Polling; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADMode = QUADSPI_ComConfig_ADMode_NoAddress; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DMode = QUADSPI_ComConfig_DMode_1Line; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_Ins = READ_STATUS_REGISTER_CMD; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); sprintf((char *)str, "0x%08X : READ IS SETTED (WE) \r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_SM)==RESET); QUADSPI_ClearFlag(QUADSPI_FLAG_SM); QUADSPI_ClearFlag(QUADSPI_FLAG_TC); while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_BUSY)==SET); sprintf((char *)str, "0x%08X : WE7 \r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); } И на команде while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_BUSY)==SET); которая идет после строки, где я в UART вывожу "WAITING ROF FLAG" контроллер виснет. С помощью функции QUADSPI_GetMode() я легко перевожу FMode из режима в режим, но как только он попадает в MappedMode - из него уже не переключается. Что я делаю не так? Изменено 12 февраля, 2020 пользователем zheka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MasterElectric 0 12 февраля, 2020 Опубликовано 12 февраля, 2020 · Жалоба BUSY goes high as soon as the first memory-mapped access occurs. Because of the prefetch operations, BUSY does not fall until there is a timeout, there is an abort, or the peripheral is disabled. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 12 февраля, 2020 Опубликовано 12 февраля, 2020 · Жалоба Спасибо! Вот это помогло QUADSPI_Cmd(DISABLE); QUADSPI_Cmd(ENABLE); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 20 февраля, 2020 Опубликовано 20 февраля, 2020 (изменено) · Жалоба Скажите, а режим DualFlash - он дает двукратное преимущество в скорости или же только в объеме? Я так понял, что должен быть прирост скорости при линейном чтении, а при случайном - скажем читаем мы байт по некому адресу - нам нужно 8 бит, а читается 16 из обеих микросхем, при этом 8 нам нужны, а еще 8 бесполезны. Для того, чтоб прочесть следующий байт, контроллеру придется обратиться еще раз по тому же ФИЗИЧЕСКОМУ адресу флеши, так ведь? Изменено 20 февраля, 2020 пользователем zheka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться