Перейти к содержанию
    

Переключение QSPI из Memory Mapped mode в обычный режим.

Память 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 - из него уже не переключается.

Что я делаю не так?

 

Изменено пользователем zheka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите, а режим DualFlash - он дает двукратное преимущество в скорости или же только в объеме? 

Я так понял, что должен быть прирост скорости при линейном чтении, а при случайном - скажем читаем мы  байт по некому адресу - нам нужно 8 бит, а читается 16 из обеих микросхем, при этом 8 нам нужны, а еще 8 бесполезны. Для того, чтоб прочесть следующий байт, контроллеру придется обратиться еще раз по тому же ФИЗИЧЕСКОМУ адресу флеши, так ведь?

Изменено пользователем zheka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...