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

    

djhall

Свой
  • Публикаций

    168
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о djhall

  • Звание
    Частый гость

Посетители профиля

1 483 просмотра профиля
  1. 1. Я использую Altera Serial Flash Controller 2. Reset Vector Offset устанавливаю сам и оно равно 0x00380000 Я использую 5CEFA5U19C7 и прошивка не помещается в EPCQ32 без компрессии. Значение Reset Vector Offset = 0x00380000 выбрано примерно зная размер сжатого битстрима. Путём долгих манипуляций получил рабочий скрипт: quartus_cpf -c --device=EPCQ32 -m ASx4 -o auto_create_rpd=on -o rpd_little_endian=off -o bitstream_compression=on fw_image.sof fw_image.pof nios2-elf-objcopy -I binary -O srec --srec-forceS3 --srec-len 32 fw_image_auto.rpd fw_image.flash nios2-elf-objcopy -I ihex -O srec epcq_controller_0.hex epcq_controller_0.flash cat fw_image.flash epcq_controller_0.flash > hw_sw_image.flash nios2-elf-objcopy -I srec -O ihex hw_sw_image.flash hw_sw_image.hex quartus_cpf -c hw_sw_image.cof nios2-elf-objcopy -I srec -O binary hw_sw_image.flash hw_sw_image.bin epcq_controller_0.hex - получен путём Make Targets - Build - mem_init_generate - Build в NiosII SBT hw_sw_image.cof - это файл для преобразования hw_sw_image.hex в hw_sw_image.jic hw_sw_image.bin - это файл можно записывать непосредственно в EPCQ32 А есть ли способ получить выходные файлы без генерации fw_image_auto.rpd?
  2. Я использую Altera Serial Flash Controller с параметрами EPCQ32 и QUAD В Nios выставленны следующие параметры: Reset vector memory - epcq_controller_0.avl_mem (Он имеет базовый адрес 0x05400000) Reset vector offset - 0x00380000 Reset vector - 0x05780000 Так же не работает, хотя бы потому, что Reset vector offset не равен 0 Ещё раз как я делал раньше: sof2flash --epcs --input="firmware_data.sof" --output="firmware_data.flash" elf2flash --epcs --after="firmware_data.flash" --input="software_data.elf" --output="software_data.flash" cat firmware_data.flash software_data.flash > hw_sw_image.flash nios2-elf-objcopy -I srec -O ihex hw_sw_image.flash hw_sw_image.hex nios2-elf-objcopy -I srec -O binary hw_sw_image.flash hw_sw_image.bin Далее из hw_sw_image.hex получал .jic файл, а hw_sw_image.bin можно было передавать в ПЛИС и Nios перепрошивал прошивку. Так что я решил пока упростить задачу до получения файла hw_sw_image.hex, чтобы его преобразовать в .jic Проделал следующее: 1. Если следовать Embedded Design Handbook -> Nios II Processor Application Copied from EPCQ Flash to RAM Using Boot Copier и делать .jic файл из .sof и .hex(который сгенерирован mem_init_generate), то всё работает. 2. Если сделать два файла .jic один из .sof другой из .hex(который сгенерирован mem_init_generate), то тоже всё работает. Как сгенерировать единый файл hw_sw_image.flash из которого можно было бы сделать hw_sw_image.hex и далее .jic?
  3. Задача такая - необходимо создать файл с прошивкой для Cyclone V, который процессор Nios сможет записать в память EPCQ32, тем самым обновив прошивку. Как я это делал для EPCS16 и Cyclone 3 в SOPC Builder: sof2flash --epcs --input="firmware_data.sof" --output="firmware_data.flash" elf2flash --epcs --after="firmware_data.flash" --input="software_data.elf" --output="software_data.flash" cat firmware_data.flash software_data.flash > hw_sw_image.flash nios2-elf-objcopy -I srec -O binary hw_sw_image.flash hw_sw_image.bin Т.е. hw_sw_image.bin это бинарный файл где программа для Nios записана непосредственно после прошивки для ПЛИС. Далее файл hw_sw_image.bin мог использовать NIOS для записи в EPCS16 начиная с offset = 0. Кстати интересно как Nios находит это место, где начинается программа ведь Reset vector offset = 0? Теперь используется EPCQ32, Cyclone V и Qsys. В настройках Nios выставленно Reset vector offset = 0x00380000. Подскажите как мне создать бинарный файл для EPCQ32 с прошивкой и программой для Nios?
  4. А не могли бы вы скинуть названия необходимых документов и для взрывозащиты и для пожаробезопасности? Ну пока требования формулируются так - обеспечить взрыво и пожаро безопасность. Кстати интересно чем отличается взрыво и пожаро безопасность ведь во взрывоопасной среде пожар означает взрыв? Имеет ли смысл обеспечение взрыво и пожаро безопасности при разработке печатных плат или эти понятия относятся только к собранным приборам или модулям?
  5. Есть требование обеспечить взрыво и пожаро безопасность электронного модуля. В состав модуля входят несколько печатных плат с ПЛИС, АЦП и пр. Подскажите как это сделать?
  6. Да, так и делаю. Смещение 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 с помощью любого другого мастера.
  7. Нет. Я записываю в регистр FLASH_MEM_OP (Offset = 0x03) значение равное 0x02. В документации Embedded Peripherals IP User Guide -> 16. Intel FPGA Serial Flash Controller and Controller II Core сказано что это команда для стирания сектора. Т.е. я пытаюсь стереть нулевой сектор. Система у меня такая:
  8. "просто SPI/QSPI" это Generic QUAD SPI Controller II ну если так то по описанию они идентичны. Я так понимаю, что в ячейку памяти нельзя записать 1 если там 0, её нужно стереть. А вот стереть не получается.
  9. В системе не будет процессора, будет самописный компонент, который должен записывать данные в EPCQ32 являясь мастером. А отлаживаю я пока с использованием System Console и JTAG to Avalon Master Bridge, т.е. JTAG to Avalon Master Bridge пока является мастером.
  10. Пытаюсь записать данные с помощью мастера непосредственно в 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 Подскажите в чём может быть проблема?
  11. Подскажите есть ли у кого-нибудь опыт приёма данных с помощью MAX10 от такого устройства - AFE5803. Как это делать? С помощью SERDES?
  12. Разобраля. Процедура следующая: Код- Создаём .jam файл из .jic файла     - Открываем .jic файл     - Заходим File -> Create / Update -> Create JAM, JBC, SVF, or ISC File...     - Выбираем создание .jam файла и жмём OK. - Заходим в консоль и выполняем     - quartus_jli -c1 -aconfigure -edo_epcs_unprotect <filename>.jam     - quartus_jli -c1 -aprogram -edo_epcs_unprotect <filename>.jam
  13. Ситуация следующая - вдруг перестала программироваться микросхема флешь памяти EPCQ32. При попытке запрограммировать .jic файл выдаёт следующую ошибку: Error (209077): Can't erase or program protected sectors in the EPCS/EPCQ device Может я что-то не так нажал или галку где-то случайно поставил. Подскажите как это исправить?
  14. Цитата(Raven @ Nov 27 2017, 15:48) Или, например, выделить регистры, с которыми работает DMA, в отдельный slave. В принципе я так и сделал, но ощущение такое что проблемы ещё будут. Например, Nios записывает настроечные параметры в регистры, затем настраивает DMA, затем запускает внешнее устройство и ждёт окончания работы DMA. Вроде всё нормально, но что будет если что-то пойдет не так и мне нужно будет прервать DMA? При работе с Flow control я мог это сделать. А вот при работе с waitrequest пока не ясно, ведь нельзя прервать транзакцию на половине.
  15. Цитата(alexadmin @ Nov 27 2017, 14:34) Вроде не должно зависать. Waitrequest устанавливается только при обращении к dma-регистру устройства? Если со стороны процессора все транзакции закончены, то не очень понятно с чего бы ему реагировать на waitrequest... Как только процессор записал последние данные для настройки DMA, DMA тут же пытается считать данные из моего компонента, а так как компонент требует дальнейшей настройки, то связка master-dma и slave-мой_компонент зависает. Почему зависает Nios не ясно может из-за того, что следующая команда в программе идёт именно продолжение настройки моего компонента, т.е. обращение к занятому компоненту. Как я понял разницу между Flow control и waitrequest: Flow control - не производит чтение или запись если устройство не готово waitrequest - производится, чтение или запись даже если устройство не готово и зависает в режиме ожидания пока устройство не будет готово. При этом занятый Slave нельзя нельзя ни записать ни прочитать другому мастеру, т.к. нельзя прервать транзакцию.