serjj1333 0 3 февраля, 2015 Опубликовано 3 февраля, 2015 · Жалоба Всем доброго времени суток. Продолжение Циклониады 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 ее запустил. Но флеш перестала прошиваться! вот что в консоли пишет по этому поводу: Не читается ID флеша. wtf? :05: пробовал переключить BSEL на плате - тогда он не подключается к флешу, типа "BSEL не соответствует ни QSPI ни NAND boot'у". Еще пробовал запустить альтеровский пример Altera-SoCFPGA-HardwareLib-QSPI-CV-GNU, программа выдает ошибку, подключался дебагером, вроде тоже проблема в чтении ID (функция alt_qspi_device_rdid()) на этапе инициализации QSPI интерфейса и флеш контроллера. Кто-нибудь уже работал с загрузкой из QSPI флешки? В чем может быть проблема и как можно эту беду победить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
COMA 1 3 февраля, 2015 Опубликовано 3 февраля, 2015 · Жалоба Была такая же проблема. Загрузился c SD карты, в u-boot почистил flash командой sf erase. После этого flash стала определяться HPS flash programmer'ом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 3 февраля, 2015 Опубликовано 3 февраля, 2015 · Жалоба А как запустить именно u-boot? Я попробовал с SD загрузить линух, но в нем такой команды нет. Может есть какие то альтернативы под линухом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
COMA 1 3 февраля, 2015 Опубликовано 3 февраля, 2015 · Жалоба Все это делается в загрузчике 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 3 февраля, 2015 Опубликовано 3 февраля, 2015 (изменено) · Жалоба COMA, спасибо, запустил u-boot. Но вот, что пишет: Нет доступа к флешу. Пробова для 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: Изменено 3 февраля, 2015 пользователем serjj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
COMA 1 4 февраля, 2015 Опубликовано 4 февраля, 2015 · Жалоба У меня BSEL = 0x101, флешка доступна. Попробуй запустить команду sf erase. Может прокатит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 4 февраля, 2015 Опубликовано 4 февраля, 2015 · Жалоба Пишет: SOCFPGA_CYCLONE5 # sf erase No SPI flash selected. Please run `sf probe' Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
COMA 1 4 февраля, 2015 Опубликовано 4 февраля, 2015 · Жалоба Остаётся выпаять и заменить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 4 февраля, 2015 Опубликовано 4 февраля, 2015 · Жалоба R.I.P... Надо понять в чём была фатальная ошибка, сделал одно прошивание, которое в eds консоли прошло как успешное. Губить флешки в один клик мышки/клавиатуры это уже слишком :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tvcam 0 4 февраля, 2015 Опубликовано 4 февраля, 2015 · Жалоба serjj Можно попробывать отключить QSPI в QSYS и настроить выводы как PIO, затем программно дрыгая ножками попробывать считать ID или стереть. Можно попробывать ножки перенаправить в FPGA и от туда добираться до флешки например Ниосом. К примеру Ethernet и RS232 у меня перенаправлены в FPGA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 4 февраля, 2015 Опубликовано 4 февраля, 2015 · Жалоба R.I.P... Надо понять в чём была фатальная ошибка, сделал одно прошивание, которое в eds консоли прошло как успешное. Губить флешки в один клик мышки/клавиатуры это уже слишком :( Жесть... Думал уж на отладках то должно быть все дуракоустойчиво. Буду со своей платкой осторожнее.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WitFed 1 5 февраля, 2015 Опубликовано 5 февраля, 2015 · Жалоба А как вообще работоспособность контролера 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 такая была. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 5 февраля, 2015 Опубликовано 5 февраля, 2015 · Жалоба Жесть... Думал уж на отладках то должно быть все дуракоустойчиво. Буду со своей платкой осторожнее.... AlteraHazard! Можно попробывать отключить 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosu-art 0 5 февраля, 2015 Опубликовано 5 февраля, 2015 · Жалоба У меня пишет No SPI flash selected. Please run `sf probe' SOCFPGA_CYCLONE5 # sf probe SF: Detected N25Q00 with page size 64 KiB, total 128 MiB Хотя я еще не прикасался к процессорной флешки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 5 февраля, 2015 Опубликовано 5 февраля, 2015 · Жалоба Ну это нормальный октлик на команду, флеш читается. Смотрю сейчас осцилом на 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, то клоков тоже нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться