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

Cyclone V HPS: программирование QSPI

Всем доброго времени суток.

Продолжение Циклониады V :rolleyes: В свете последних событий по загрузке baremetal приложения из SD/MMC на радостях решил на отладочной плате отработать загрузку из QSPI флеша. Собрал preloader для этих целей, залил его HPS flash programmer'ом (quartus_hps) как положено в виде 4 копий, такой вот командой (из под soc eds, 4 копии он делает сам, какой молодец):

quartus_hps -c 1 -o P -a 0x0 preloader-mkpimage.bin

Программа сказала, что флеш успешно прошит. Щелкнул питанием на плате, посмотрел, что preloader запускается вплоть до загрузки приложения, SDRAM проинитилось, можно в него подгружать что-нибудь. Следующим шагом хотелось залить на флеш простенькую прогу а-ля helloworld, чтобы preloader ее запустил. Но флеш перестала прошиваться! вот что в консоли пишет по этому поводу:

post-81866-1422956422_thumb.png

Не читается ID флеша. wtf? :05: пробовал переключить BSEL на плате - тогда он не подключается к флешу, типа "BSEL не соответствует ни QSPI ни NAND boot'у". Еще пробовал запустить альтеровский пример Altera-SoCFPGA-HardwareLib-QSPI-CV-GNU, программа выдает ошибку, подключался дебагером, вроде тоже проблема в чтении ID (функция alt_qspi_device_rdid()) на этапе инициализации QSPI интерфейса и флеш контроллера.

Кто-нибудь уже работал с загрузкой из QSPI флешки? В чем может быть проблема и как можно эту беду победить? :help:

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


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

Была такая же проблема.

Загрузился c SD карты, в u-boot почистил flash командой sf erase.

 

После этого flash стала определяться HPS flash programmer'ом.

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


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

А как запустить именно u-boot? Я попробовал с SD загрузить линух, но в нем такой команды нет. Может есть какие то альтернативы под линухом?

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


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

Все это делается в загрузчике u-boot.

 

Загрузиться с SD карты.

В консоль будет выводиться инофрмация о процессе загрузки:

U-Boot SPL 2013.01.01 (Feb 03 2015 - 12:11:52)
BOARD : Altera SOCFPGA Cyclone V Board
SDRAM: Initializing MMR registers
SDRAM: Calibrating PHY
SEQ.C: Preparing to start memory calibration
SEQ.C: CALIBRATION PASSED
SDRAM : Running simple memory test...passed
ALTERA DWMMC: 0


U-Boot 2013.01.01-00114-g9381569 (Feb 02 2015 - 14:21:51)

CPU   : Altera SOCFPGA Platform
BOARD : Altera SOCFPGA Cyclone V Board
I2C:   ready
DRAM:  1 GiB
MMC:   ALTERA DWMMC: 0
In:    serial
Out:   serial
Err:   serial
Skipped ethaddr assignment due to invalid EMAC address in EEPROM
Net:   mii0
Warning: failed to set MAC address

Hit any key to stop autoboot:  0
SOCFPGA_CYCLONE5 #

 

При появлении строки

Hit any key to stop autoboot

необходимо нажать любую клавишу.

 

Это прервет дальнейшую загрузку Linux.

 

Далее вводим команду sf probe

 

SOCFPGA_CYCLONE5 # sf probe

SF: Read data capture delay calibrated to 4 (1 - 7)

SF: Detected N25Q256 with page size 64 KiB, total 32 MiB

 

Командой sf erase очищаем QSPI flash.

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


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

COMA, спасибо, запустил u-boot.

Но вот, что пишет:

post-81866-1422967325_thumb.png

Нет доступа к флешу. Пробова для BSEL = 0x101.

Попробовал для BSEL = 0x111, таже петрушка.

Вот в исходниках убута есть такое место:

+/* Return 1 if idle, otherwise return 0 (busy). */
+static unsigned int cadence_qspi_wait_idle(void *reg_base)
+{
+    unsigned int start, count = 0;
+    /* timeout in unit of ms */
+    unsigned int timeout = 5000;
+
+    start = get_timer(0);
+    for (; get_timer(start) < timeout; ) {
+        if (CQSPI_REG_IS_IDLE(reg_base))
+            count++;
+        else
+            count = 0;
+        /*
+         * Ensure the QSPI controller is in true idle state after
+         * reading back the same idle status consecutively
+         */
+        if (count >= CQSPI_POLL_IDLE_RETRY)
+            return 1;
+    }
+
+    /* Timeout, still in busy mode. */
+    printf("QSPI: QSPI is still busy after poll for %d times.\n",
+           CQSPI_REG_RETRY);
+    return 0;
+}

Это пока всё, что может гугл об этом сказать... Такое ощущение, что проблема не во флеше а в контроллере qspi, до флеша не доходит дело, с другой стороны если BSEL = 0x111 preloader грузится, т.к. инитится SDRAM, факт. Дела.. :05:

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

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


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

R.I.P...

Надо понять в чём была фатальная ошибка, сделал одно прошивание, которое в eds консоли прошло как успешное. Губить флешки в один клик мышки/клавиатуры это уже слишком :(

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


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

serjj

Можно попробывать отключить QSPI в QSYS и настроить выводы как PIO, затем программно дрыгая ножками попробывать считать ID или стереть. Можно попробывать ножки перенаправить в FPGA и от туда добираться до флешки например Ниосом. К примеру Ethernet и RS232 у меня перенаправлены в FPGA.

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


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

R.I.P...

Надо понять в чём была фатальная ошибка, сделал одно прошивание, которое в eds консоли прошло как успешное. Губить флешки в один клик мышки/клавиатуры это уже слишком :(

 

Жесть... Думал уж на отладках то должно быть все дуракоустойчиво. Буду со своей платкой осторожнее....

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


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

А как вообще работоспособность контролера QSPI может зависеть от положения пинов BSEL ?

Они лишь указывают Прелестям Альтерным, откуда нужно грузить следующую фазу кодов. Даже если стоит установка на SD, читать-писать девайс QSPI должно быть возможно.

Сам девайс энергонезависимой памяти никоим образом не знает про остальную систему и раскоряки там.

Только если предыдущие стадии ПО что-то где-то перемудрили, как у Альтеры часто бывает... Но по ошибке они должны были всё вернуть в нормальное состояние, если мудрости хотят.

 

...serjj, у тебя получилось стартовать отладку HPS из DS-5 под нажатым резетом и остановиться на самой первой команде BootROM ? Чтобы никакое влияние BOOTSEL ещё не успело произойти после подачи питания ?

На странице http://www.altera.com/support/examples/soc/soc.html есть ещё один QSPI-проект "Quad SPI Porting", там обещают "support more quad SPI flash devices". Возможно, в Arrow-ките стоит какая-то не такая микросхема, а ошибка вылазит чисто из-за несоответствия ID требуемому. А успешные зашивания 4х64К просто приснились... Логов-то небось для quartus_hps нету всех от Первого Включения ? ;)

Одна работа по стандартному интерфейсу не должна испортить железо при нормальной организации, вряд ли в протоколе есть команда kill.

...Ну или под микроскопом глянуть на плату -- вдруг на неё падало что-то в последнее время.

У вас же есть вторая самодельная плата -- на ней те же грабли ?

Частоты у QSPI точно где-то можно крутить, PLL такая была.

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


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

Жесть... Думал уж на отладках то должно быть все дуракоустойчиво. Буду со своей платкой осторожнее....

AlteraHazard! :wacko:

Можно попробывать отключить QSPI в QSYS и настроить выводы как PIO, затем программно дрыгая ножками попробывать считать ID или стереть. Можно попробывать ножки перенаправить в FPGA и от туда добираться до флешки например Ниосом. К примеру Ethernet и RS232 у меня перенаправлены в FPGA.

Так можно перенаправить некоторые интерфейсы с ножек HPS на ножки FPGA, но если микросхема припаяна уже к ножкам HPS, то если я перенаправлю на другие ножки, то с ней просто не будет контакта. Тут нужно наоборот залезть из FPGA на ножки HPS, а это страшное табу (ну или я просто еще до этого не дорос :laughing: ) А про то, что вы говорите, я так на нашей борде юарт перенаправил на ножки FPGA, но это не то. Или я что то не понял?

А как вообще работоспособность контролера QSPI может зависеть от положения пинов BSEL ?

Это нужно только для утилиты quartus_hps, работать с QSPI можно при любом BSEL, эта конфигурация действительно не влияет на контроллер (что логично)

...serjj, у тебя получилось стартовать отладку HPS из DS-5 под нажатым резетом и остановиться на самой первой команде BootROM ? Чтобы никакое влияние BOOTSEL ещё не успело произойти после подачи питания ?

Есть альтеровский пример работы с QSPI флешой, я пробовал его под всякими BSEL, не работает, таймаут на этапе чтения ID, на этапе инициализации QSPI контроллера в функции alt_qspi_enable()->alt_qspi_device_rdid()->alt_qspi_stig_rd_cmd()->alt_qspi_stig_cmd_helper(), в последней висит до таймаута:

    do
    {
        reg_value = alt_read_word(ALT_QSPI_FLSHCMD_ADDR);
        if (!(reg_value & ALT_QSPI_FLSHCMD_CMDEXECSTAT_SET_MSK))
        {
            break;
        }

    } while (timeout-- || infinite);

    if (timeout == (uint32_t)-1 && !infinite)
    {
        status = ALT_E_TMO;
    }

Это похоже на ошибку чтения по QSPI. Перекликается с тем, что u-boot тоже жаловался на недоступность именно QSPI.

У вас же есть вторая самодельная плата -- на ней те же грабли ?

А на кастомной пока нет qspi, поэтому отлаживаю такую загрузку на arrow.

За ссылку спасибо, гляну. :rolleyes:

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


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

У меня пишет

No SPI flash selected. Please run `sf probe'
SOCFPGA_CYCLONE5 # sf probe
SF: Detected N25Q00 with page size 64 KiB, total 128 MiB

Хотя я еще не прикасался к процессорной флешки

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


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

Ну это нормальный октлик на команду, флеш читается.

Смотрю сейчас осцилом на qspi-й клок, который идет на флеш, при BSEL = 0x111, когда перезаливаю .sof файл вижу, что клок идет и в терминале грузится preloader с флеша. Через некоторое время (2-3 сек) в терминале вылазит вот что:

QSPI: QSPI is still busy after poll for 10000 times.
SF: Calibration failed (read)
SPI probe failed.
### ERROR ### Please RESET the board ###

После чего любые попытки обратиться к QSPI проваливаются. Если BSEL не 0х111, то клоков тоже нет.

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


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

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

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

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

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

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

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

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

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

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