Good news everyone!
Цитата
Жесть... Думал уж на отладках то должно быть все дуракоустойчиво. Буду со своей платкой осторожнее....
alexPec, можете записывать на флешку любой хлам, нашёл решение проблемы.
Проблема как обычно в
голове preloader'e. Необходимо было его пересобрать
с нуля после добавления в Qsys проекте QSPI контроллера (добавление его в периферии HPS компонента). Preloader'ы, которые я зашивал до этого не имели никакой информации о том, что у меня будет QSPI контроллер использоваться, все попытки программно к нему обратиться из системы, запущенной таким preloader'ом не давали результата. Отсюда недоступность QSPI контроллера, про которую я тут писал. Простая проверка: если взять невалидный preloader и попробовать прочитать регистр по адресу 0xff705000 (регистр конфигурации QSPI), то он вернёт 0x00000000, т.к. модуль не доступен. Если использовать preloader с поддержкой QSPI, то при чтении этого адреса возвращается значение 0x80780000 или 0x00780000 (старший бит = флаг idle).
Лечение. Пересобрал preloader с нуля после добавления QSPI в Qsys. Подгрузил его через JTAG. Запустил пример от альтеры Altera-SoCFPGA-HardwareLib-QSPI-CV-GNU. В нем нужна инициализация (DMA можно закоментировать) и функция стирания. Запускаю, вот что в дебаг консоли выходит:
Код
Configuration register = 80780000
INFO: System Initialization.
INFO: Setting up Global Timer.
INFO: Setting up interrupt system.
INFO: Populating page table and enabling MMU.
INFO: Enabling caches.
INFO: Configuring DMA.
INFO: Allocating DMA channel.
INFO: Initializing QSPI.
INFO: Enabling QSPI.
INFO: Checking QSPI is idle.
INFO: Querying device characteristics.
INFO: Checking supported manufacturer.
INFO: Device is 1 Gib or 128 MiB.
INFO: Using random seed = 0x10d6852b.
INFO: Erasing 524288 bytes at address 0x00000000.
INFO: Erasing 64KB sector at address 0x00000000.
INFO: Erasing 64KB sector at address 0x00010000.
INFO: Erasing 64KB sector at address 0x00020000.
INFO: Erasing 64KB sector at address 0x00030000.
INFO: Erasing 64KB sector at address 0x00040000.
INFO: Erasing 64KB sector at address 0x00050000.
INFO: Erasing 64KB sector at address 0x00060000.
INFO: Erasing 64KB sector at address 0x00070000.
INFO: Erasing completed successfully.
Скорее всего если пересобрать также uboot, то можно сделать стирание в нём с помощью sf erase команды. Я, т.к. нацелен на baremetal, делаю всё сразу на низком уровне.
После этого выключил плату, выставил BSEL = 0x111 и теперь, читая Silicon ID, получаю правильный отклик от флешки:
Теперь с ней можно возиться дальше