STM32 QUADSPI

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

STM32 QUADSPI

Сообщение TEPEM »

Здравствуйте товарищи!
Плата 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); // Вывести на дисплей

Помогите люди добрые, уже неделю с ней любовь делаю.
СпойлерИзображение
Добавлено after 40 minutes 9 seconds:
Сделал перестановку, в хард перестала падать.

Код: Выделить всё

 //Режим работы
   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);
Т.е. Сначала наполняю DR, там у меня регистр флешки, XIP:quad output fast read
Потом регистр размера пересылаемой информации.
А потом уже отправка инструкции.

Теперь выводит 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);  
    }
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 QUADSPI

Сообщение VladislavS »

Надеюсь, вот это до дыр зачитано DM00227538.pdf?

Ну вот что это?

Код: Выделить всё

QUADSPI->DLR |= 0xFFFFFFFF;
Ну сколько можно? Проблема, естественно, не в этом, но неужели глаз не режет?
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 QUADSPI

Сообщение Мурик »

TEPEM писал(а):Помогите люди добрые, уже неделю с ней любовь делаю.
Вниз головой? :shock: :)))
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: STM32 QUADSPI

Сообщение TEPEM »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3760336#p3760336"]Надеюсь, вот это до дыр зачитано DM00227538.pdf?

Ну вот что это?

Код: Выделить всё

QUADSPI->DLR |= 0xFFFFFFFF;
Ну сколько можно? Проблема, естественно, не в этом, но неужели глаз не режет?[/uquote]

Зря Вы так, Владислав, тут по даташиту,
СпойлерBits 31:0 DL[31:0]: Data length
Number of data to be retrieved (value+1) in indirect and status-polling modes. A value
no greater than 3 (indicating 4 bytes) should be used for status-polling mode.
All 1s in indirect mode means undefined length, where QUADSPI will continue until the
end of memory, as defined by FSIZE.
0x0000_0000: 1 byte is to be transferred
0x0000_0001: 2 bytes are to be transferred
0x0000_0002: 3 bytes are to be transferred
0x0000_0003: 4 bytes are to be transferred
...
0xFFFF_FFFD: 4,294,967,294 (4G-2) bytes are to be transferred
0xFFFF_FFFE: 4,294,967,295 (4G-1) bytes are to be transferred
0xFFFF_FFFF: undefined length -- all bytes until the end of Flash memory (as defined
by FSIZE) are to be transferred. Continue reading indefinitely if FSIZE = 0x1F.
DL[0] is stuck at ‘1’ in dual-flash mode (DFM = 1) even when ‘0’ is written to this bit, thus
assuring that each access transfers an even number of bytes.
This field has no effect when in memory-mapped mode (FMODE = 10).
This field can be written only when BUSY = 0.
Конечно до дыр, и даташит на саму флешь, и референс и этот документ

Вниз головой ее сделал местный хост для картинок
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: STM32 QUADSPI

Сообщение 240265 »

Логическое ИЛИ с 0xFFFFFFFF ===== 0xFFFFFFFF !!!

Добавлено after 1 minute 49 seconds:
Счастливой " любви".
IVL ex UA6PJ
Реклама
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: STM32 QUADSPI

Сообщение TEPEM »

[uquote="240265",url="/forum/viewtopic.php?p=3760568#p3760568"]Логическое ИЛИ с 0xFFFFFFFF ===== 0xFFFFFFFF !!!

Добавлено after 1 minute 49 seconds:
Счастливой " любви".[/uquote]


К чему это? Там и должно быть FFFF FFFF, передача до конца данных.

Добавлено after 2 hours 4 minutes 2 seconds:
Расписал используемые регистры и инструкции
СпойлерQUADSPI->CR|= QUADSPI_CR_EN;
// Включаем режим qspi - mem map
////////////////////////////////////////////////////////////////////////////////
QUADSPI->DCR|= (QUADSPI_DCR_FSIZE_0 | QUADSPI_DCR_FSIZE_1 | QUADSPI_DCR_FSIZE_3 | QUADSPI_DCR_FSIZE_4 | QUADSPI_DCR_CSHT_0);
//Задаем размер флешь - 128мб // nCS остается высоким два цикла между командами флешь
////////////////////////////////////////////////////////////////////////////////
QUADSPI->DR = 0x0602; //bit11:9 xip mode: 011-xip:quad output fast read
QUADSPI->DLR|= 0x00000003;// 4 байта должны быть переданы
////////////////////////////////////////////////////////////////////////////////
QUADSPI->CCR|= (QUADSPI_CCR_IMODE_0 | QUADSPI_CCR_ADSIZE_0 | QUADSPI_CCR_DMODE_0 | 0xB1);
//IMODE 01: инструкция на одной строке
//ADSIZE 01: 16-битный адрес
//DMODE 01: данные по 1 строкам
//0xB1 Запись энергонезависсимых регистров
////////////////////////////////////////////////////////////////////////////////
QUADSPI->CCR|= ( 0xB );
QUADSPI->CCR|= ( 0x6B );
QUADSPI->CCR|= ( 0xEB );
//0xEB QUAD INPUT/OUTPUT FAST READ
////////////////////////////////////////////////////////////////////////////////
QUADSPI->CCR|= (QUADSPI_CCR_FMODE_0 | QUADSPI_CCR_FMODE_1);
//FMODE 11: режим отображения памяти
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 QUADSPI

Сообщение VladislavS »

Во-первых, в AN4760 раздел 5.2.1 прямо код есть как всё включить. Ничего похожего я в твоём коде не наблюдаю.
Во-вторых, оператор присваивания в языке Си это "=". Не "|=", не "&=" и даже не "=:".
В-третьих, X | 0xFFFFFFFF ====== 0xFFFFFFFF. Точно так же как Y & 0x00000000 ====== 0x00000000.
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: STM32 QUADSPI

Сообщение TEPEM »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3760667#p3760667"]Во-первых, в AN4760 раздел 5.2.1 прямо код есть как всё включить. Ничего похожего я в твоём коде не наблюдаю.
Во-вторых, оператор присваивания в языке Си это "=". Не "|=", не "&=" и даже не "=:".
В-третьих, X | 0xFFFFFFFF ====== 0xFFFFFFFF. Точно так же как Y & 0x00000000 ====== 0x00000000.[/uquote]

Вроде не '=:', а ':=' постоянно подмывает написать)

Добавлено after 29 minutes 55 seconds:
Стараюсь использовать "или", чтобы по запаре не затереть инфу, которая доселе могла бы быть в регистре.
Ведь если там уже есть что то, = сотрет все остальное. Конечно, не в случае с ffff ffff.
Это как выходя из тира, спускать курок в воздух, понимаешь, что ружье разряжено но так спокойнее, я кстати на работе в тире два раза запиздярил так в потолок
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 QUADSPI

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3760686#p3760686"]Стараюсь использовать "или", чтобы по запаре не затереть инфу, которая доселе могла бы быть в регистре.[/uquote]Регистры периферии это не просто переменные, в которых что-то хранится. Не только изменение, но и каждое чтение-запись вызывает какие-то изменения/действия в периферийном модуле. Нельзя с ними работать "по запаре". Спешка нужна только при ловле блох. Так что, открываем AN4760, подсматриваем в stm32f4xx_hal_qspi.c и методичненько шаг за шагом... Желательно с контролем ЛА и осциллоглядом.
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 QUADSPI

Сообщение jcxz »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3760686#p3760686"]Стараюсь использовать "или", чтобы по запаре не затереть инфу, которая доселе могла бы быть в регистре.[/uquote]"Затереть" - боитесь, а вписать туда лишнее этой "|=" - не боитесь?
Как уже сказали - в общем случае использовать нужно "=".
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: STM32 QUADSPI

Сообщение 240265 »

Чтобы не затереть нужно |=0x00000000 или &=0xFFFFFFFF. Логические функции.

Добавлено after 3 minutes 6 seconds:
Блин , Ещё и рейтинг понижаешь.
IVL ex UA6PJ
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: STM32 QUADSPI

Сообщение TEPEM »

[uquote="240265",url="/forum/viewtopic.php?p=3760926#p3760926"]Чтобы не затереть нужно |=0x00000000 или &=0xFFFFFFFF. Логические функции.

Добавлено after 3 minutes 6 seconds:
Блин , Ещё и рейтинг понижаешь.[/uquote]

Мне почему то кажется, что вы издеваетесь :dont_know:

Заработало сие чудо.
Код из документа про QUADSPI кривой до ужаса, и не функциональный, в режиме отладки видно что он работает через раз(
Когда в голове уже нарисовалось все что надо было сделать регистрами, оставалось дело за малым - расставить их в нужной последовательности и с обработкой обратной связи, которая кстати говоря очень тонкая и может флешка на том конце просто лечь и молчать.
Последовательность спер из халовского примера в режиме отладки, по другому там хуже чем с дисплеем.
Как то так, красиво оформлю положу.
Да пойду почитаю К&Р, пока Владислав меня ей по голове бить не начал)
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: STM32 QUADSPI

Сообщение 240265 »

Не нужно по каждому "затыку" орать СПАСИТЕ-ПОМОГИТЕ !

Детский сад бл....
Скоро отдельную ветку на форуме создавать придется " ТЕРЕМ ".
IVL ex UA6PJ
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: STM32 QUADSPI

Сообщение TEPEM »

[uquote="240265",url="/forum/viewtopic.php?p=3761077#p3761077"]Не нужно по каждому "затыку" орать СПАСИТЕ-ПОМОГИТЕ !

Детский сад бл....
Скоро отдельную ветку на форуме создавать придется " ТЕРЕМ ".[/uquote]
Я уже начал переживать, что со мной что то не так, а потом не поленился изучил вашу историю постов...
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 QUADSPI

Сообщение VladislavS »

[uquote="TEPEM",url="/forum/viewtopic.php?p=3761011#p3761011"]Код из документа про QUADSPI кривой до ужаса, и не функциональный,[/uquote]Извини за прямоту, но тебе ещё рановато оценивать чужой код. Всё там нормально написано, ну кроме "мэджик намберс".

[uquote="TEPEM",url="/forum/viewtopic.php?p=3761011#p3761011"]Когда в голове уже нарисовалось все что надо было сделать регистрами, оставалось дело за малым - расставить их в нужной последовательности[/uquote]Кхм. Там же в 5.2.1 последовательность чётко определена. Не думаю, что хорошей идеей будет отступать от неё.
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: STM32 QUADSPI

Сообщение TEPEM »

Не в коем разе, я не говорю что он плохой, я говорю что он не работает) По отладчику видно, что whil не отрабатывают, и половина флагов не успевают записаться в регистры( И там код, только инициализации, сбрасывания внутренних регистров, запись новых volantil регистров. А основная фишка в записи non valantil регистров, и их не надо сбрасывать каждый раз. Volantil в дефолте вполне подходят для моих задач. Я бы мог не верно интропретировать отладчик, но в примере хала все регистры успевают записаться по ходу работы кода. И у меня была большая проблема в этом, когда регистры стали успевать ложиться - все заработало.

Хотя я конечно могу ошибаться, не надо в меня кидать тапками)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 QUADSPI

Сообщение Мурик »

TEPEM писал(а):По отладчику видно, что whil не отрабатывают, и половина флагов не успевают записаться в регистры
Какая частота ядра и периферийных шин?
Аватара пользователя
TEPEM
Нашел транзистор. Понюхал.
Сообщения: 153
Зарегистрирован: Чт дек 05, 2019 16:28:11
Откуда: Самара

Re: STM32 QUADSPI

Сообщение TEPEM »

74мГц. У Flash заявлено чуть более 100мГц
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: STM32 QUADSPI

Сообщение AVI-crak »

https://bitbucket.org/AVI-crak/system_f ... S25FL256S/
Внимательно прочитать доку на свой чип, и заменить не соответствия. Алгоритм для всех внешних чипов памяти - одинаков.
Ответить

Вернуться в «ARM»