Плата STM32F412G Disco
По протоколу QSPI подключена Флешка N25Q128A13EF840F.
Пытаюсь запустить режим отображения Memory-mapped mode.
При попытке чтения по адресу 0х90000000 падает в хард.
Реализую так.
Код: Выделить всё
RCC->AHB3ENR |= RCC_AHB3ENR_QSPIEN; //Тактирование QSPI
RCC->AHB1ENR |= (RCC_AHB1ENR_GPIOFEN | RCC_AHB1ENR_GPIOBEN | RCC_AHB1ENR_GPIOGEN);
GPIOG->AFR[0] |= 0xA0C0000;
GPIOB->AFR[0] |= 0x900;
GPIOF->AFR[0] |= 0x99000000;
GPIOF->AFR[1] |= 0xAA;
GPIOF->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR6_1 | GPIO_OSPEEDER_OSPEEDR7_1 | GPIO_OSPEEDER_OSPEEDR8_1 | GPIO_OSPEEDER_OSPEEDR9_1 );
GPIOB->OSPEEDR |= ( GPIO_OSPEEDER_OSPEEDR2_1 );
GPIOG->OSPEEDR |= ( GPIO_OSPEEDER_OSPEEDR6_1 );
//параметры QuadSpi
QUADSPI->CR|= QUADSPI_CR_EN; //QUADSPI_CR_EN - Включаем QuadSPI
//параметры внешней Flash
QUADSPI->DCR|= (QUADSPI_DCR_FSIZE_0 | QUADSPI_DCR_FSIZE_1 | QUADSPI_DCR_FSIZE_3 | QUADSPI_DCR_FSIZE_4 | QUADSPI_DCR_CSHT_0);// Размер флешь и что то с цикламми CLK
//Режим работы
QUADSPI->CCR|= (QUADSPI_CCR_IMODE_0 | QUADSPI_CCR_ADSIZE_1 | QUADSPI_CCR_DMODE_0 | QUADSPI_CCR_DMODE_1 | 0xB1);
//QUADSPI_CCR_IMODE_0 инструкции на одной строке
//QUADSPI_CCR_ADSIZE_1 24 битный адрес
//QUADSPI_CCR_DMODE данные по 4 строкам
//0x6B инструкция QSPI чтение
// FMODE 00 - режим indirect
QUADSPI->DLR|= 0xFFFFFFFF;
QUADSPI->DR = 0x0600;
QUADSPI->CCR|= (QUADSPI_CCR_FMODE_0 | QUADSPI_CCR_FMODE_1 | 0x06B ); //QUAD OUTPUT FAST READ
uint32_t address =0x90000000;
i1 = (*(__IO uint32_t*)address);
Ciferki(145, 220, i1, 0x0000); // Вывести на дисплей
Спойлер

Сделал перестановку, в хард перестала падать.
Код: Выделить всё
//Режим работы
QUADSPI->DR = 0x0600;QUADSPI->DLR|= 0xFFFFFFFF;
QUADSPI->CCR|= (QUADSPI_CCR_IMODE_0 | QUADSPI_CCR_ADSIZE_1 | QUADSPI_CCR_DMODE_0 | QUADSPI_CCR_DMODE_1 | 0xB1);Потом регистр размера пересылаемой информации.
А потом уже отправка инструкции.
Теперь выводит 10 нулей таким кодом, хотя на флешке по адрессу 90000000h - 8 8
Код: Выделить всё
for ( i = 0; i < 10; i++ )
{
address=address+1;
volatile uint32_t var = *(uint32_t*)address;
Ciferki(239, 220 - (i*19), var, 0x0000);
}

