djhall 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Пытаюсь записать данные с помощью мастера непосредственно в 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 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба BSP предоставляет замечательную функцию int alt_epcq_controller2_erase_block(alt_flash_dev *flash_info, int block_offset); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба 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 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Можете попробовать ядро Altera ASMI Parallel / Parallel II, оно для работы без Niosa. В системе не будет процессора, будет самописный компонент, который должен записывать данные в EPCQ32 являясь мастером. А отлаживаю я пока с использованием System Console и JTAG to Avalon Master Bridge, т.е. JTAG to Avalon Master Bridge пока является мастером. Зачем тогда вообще рассматривать Альтеровский контроллер, тут нужен просто SPI/QSPI и далее шлёте нужные для памяти команды и данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Можете попробовать ядро Altera ASMI Parallel / Parallel II, оно для работы без Niosa. Зачем тогда вообще рассматривать Альтеровский контроллер, тут нужен просто SPI/QSPI и далее шлёте нужные для памяти команды и данные. "просто SPI/QSPI" это Generic QUAD SPI Controller II ну если так то по описанию они идентичны. Я так понимаю, что в ячейку памяти нельзя записать 1 если там 0, её нужно стереть. А вот стереть не получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба "просто SPI/QSPI" это Generic QUAD SPI Controller II ну если так то по описанию они идентичны. Я так понимаю, что в ячейку памяти нельзя записать 1 если там 0, её нужно стереть. А вот стереть не получается. Всё верно, надо стереть, потом можно записать. Только Generic QUAD SPI Controller II не равно EPCQ Flash controller, он не знает протокол комманд для EPCQ. Т.е. Вы отправляете по SPI комманду D8h, а флэш не трется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Т.е. Вы отправляете по 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 0 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба Ответ был постом выше! Только Generic QUAD SPI Controller II не равно EPCQ Flash controller, он не знает протокол комманд для EPCQ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02. Тогда, вероятно, проблема в параметрах offset и value master_write_32 $claim_path $offset $value Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02. И теперь ещё раз посмотрите чему соответствует Offset = 0x03 в Вашей системе. P.S. Плюс для master_write_32 оффсет будет не 3, а 12 относительно базового адреса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба 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 с помощью любого другого мастера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться