Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EPCQ и Serial Flash Controller II
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
djhall
Пытаюсь записать данные с помощью мастера непосредственно в EPCQ32, используя Serial Flash Controller II
Если я правильно понимаю, то сначала нужно стереть сектор. Как указанно в документации Embedded Peripherals IP User Guide -> 16. Intel FPGA Serial Flash Controller and Controller II Core просто записываю 0x02 в регистр FLASH_MEM_OP чтобы стереть нулевой сектор. В результате ничего не происходит, сектор значений не меняет.
Делаю я это с помощь System Console и JTAG to Avalon Master Bridge с помощью команды:
master_write_32 $claim_path $offset $value

Подскажите в чём может быть проблема?
doom13
BSP предоставляет замечательную функцию
Код
int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset);
djhall
Цитата(doom13 @ Jun 26 2018, 12:42) *
BSP предоставляет замечательную функцию
Код
int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset);

В системе не будет процессора, будет самописный компонент, который должен записывать данные в EPCQ32 являясь мастером. А отлаживаю я пока с использованием System Console и JTAG to Avalon Master Bridge, т.е. JTAG to Avalon Master Bridge пока является мастером.
doom13
Можете попробовать ядро Altera ASMI Parallel / Parallel II, оно для работы без Niosa.

Цитата(djhall @ Jun 26 2018, 11:58) *
В системе не будет процессора, будет самописный компонент, который должен записывать данные в EPCQ32 являясь мастером. А отлаживаю я пока с использованием System Console и JTAG to Avalon Master Bridge, т.е. JTAG to Avalon Master Bridge пока является мастером.

Зачем тогда вообще рассматривать Альтеровский контроллер, тут нужен просто SPI/QSPI и далее шлёте нужные для памяти команды и данные.
djhall
Цитата(doom13 @ Jun 26 2018, 13:52) *
Можете попробовать ядро Altera ASMI Parallel / Parallel II, оно для работы без Niosa.


Зачем тогда вообще рассматривать Альтеровский контроллер, тут нужен просто SPI/QSPI и далее шлёте нужные для памяти команды и данные.


"просто SPI/QSPI" это Generic QUAD SPI Controller II ну если так то по описанию они идентичны. Я так понимаю, что в ячейку памяти нельзя записать 1 если там 0, её нужно стереть. А вот стереть не получается.
doom13
Цитата(djhall @ Jun 26 2018, 15:58) *
"просто SPI/QSPI" это Generic QUAD SPI Controller II ну если так то по описанию они идентичны. Я так понимаю, что в ячейку памяти нельзя записать 1 если там 0, её нужно стереть. А вот стереть не получается.

Всё верно, надо стереть, потом можно записать.
Только Generic QUAD SPI Controller II не равно EPCQ Flash controller, он не знает протокол комманд для EPCQ.
Т.е. Вы отправляете по SPI комманду D8h, а флэш не трется?

djhall
Цитата(doom13 @ Jun 26 2018, 17:32) *
Т.е. Вы отправляете по SPI комманду D8h, а флэш не трется?

Нет.
Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02.
В документации Embedded Peripherals IP User Guide -> 16. Intel FPGA Serial Flash Controller and Controller II Core сказано что это команда для стирания сектора. Т.е. я пытаюсь стереть нулевой сектор.
Нажмите для просмотра прикрепленного файла

Система у меня такая:
Нажмите для просмотра прикрепленного файла


warrior-2001
Ответ был постом выше!
Цитата(doom13 @ Jun 26 2018, 16:32) *
Только Generic QUAD SPI Controller II не равно EPCQ Flash controller, он не знает протокол комманд для EPCQ.

doom13
Цитата(djhall @ Jun 26 2018, 18:42) *
Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02.

Тогда, вероятно, проблема в параметрах offset и value
Код
master_write_32 $claim_path $offset $value


Цитата(djhall @ Jun 26 2018, 18:42) *
Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02.

И теперь ещё раз посмотрите чему соответствует Offset = 0x03 в Вашей системе.

P.S. Плюс для master_write_32 оффсет будет не 3, а 12 относительно базового адреса.
djhall
Цитата(doom13 @ Jun 27 2018, 11:56) *
P.S. Плюс для master_write_32 оффсет будет не 3, а 12 относительно базового адреса.


Да, так и делаю. Смещение 12.

Короче, разобрался. Спасибо всем кто пытался помочь.
Пришлось сделать простую систему с процессором NIOS. Дело в следующем:
в функции
Код
int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset);
есть ошибка. Не знаю во всех версия Quartus или нет, у меня 17.0

Перед тем как стирать сектор, т.е. перед тем как записывать в регистр FLASH_MEM_OP[2:0] значение 3'b010 необходимо записать команду для разрешения записи, т.е. FLASH_MEM_OP[2:0] = 3'b100
Например, если нужно стереть сектор с начальным адресом 0x10000 (это первый сектор, не нулевой) сначала записываем FLASH_MEM_OP = 0x104, затем FLASH_MEM_OP = 0x102.

Дополнительный код для в функции int alt_epcq_controller2_erase_block в файле altera_epcq_controller2.c выглидит так:
Код
/* calculate current sector/block number */
sector_number = (block_offset/(epcq_flash_info->sector_size));

/* sector value should occupy bits 23:8 */
mem_op_value = (sector_number << 8) & ALTERA_EPCQ_CONTROLLER2_MEM_OP_SECTOR_VALUE_MASK;

/* write enable command */
mem_op_value |= 0x04;

/* write sector erase command to EPCQ_MEM_OP register to erase sector "sector_number" */
IOWR_ALTERA_EPCQ_CONTROLLER2_MEM_OP(epcq_flash_info->csr_base, mem_op_value);


То же самое касается и доступа к EPCQ32 с помощью любого другого мастера.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.