Jump to content

    

xxxmatrixxx

Участник
  • Content Count

    121
  • Joined

  • Last visited

Everything posted by xxxmatrixxx


  1. У нас есть SVN, есть GitLab, есть незакоммиченные версии на компах сотрудников - поэтому хочется знать, что именно с этих исходников были скомпилены данный sof и jic файлы, исключить человеческий фактор
  2. Здравствуйте, уважаемые форумчане возникла такая необходимость, чтобы идентифицировать прошивку Плис, т.е. какие поля в прошивке, либо при генерации прошивки необходимо иметь и что они должны содержать, чтобы четко понимать, что именно из этих исходников была собрана данная версия прошивка Сейчас решили ввести - идентификатор(версия ПО, типо 01.02.03), crc, номер ревизии в svn, подгружаемый через tcl скрипт при компиляции, и хэш-ссылку - сделали много полей, т.к. при компиляции проекта даже из одних и тех же исходников, развестись может по-разному может кто подскажет, какие поля лучше иметь для решения этой задачи? и как получить с Quartus, или еще откуда данную инфу( например, пытались найти crc в rbf файле, но так и не выяснили, какое в нем поле) спасибо, буду рад любой помощи)
  3. Здравствуйте, уважаемые форумчане стоит задача внедрить в разработанные модули интерфейс Arinc-818 может кто поделиться: 1. стандартом на Arinc 818 2. есть ли у кого IP Core под Arinc 818 3. есть ли у кого пример реализации схемотехники для Arinc-818 спасибо, буду рад любой помощи
  4. так вот сейчас я и посмотрел, что хоть библиотеку находит, но вот функции не подгружает... я скачал с официального сайта, подо что скомпилирована библиотека не помню... тогда вопрос следующие: 1. есть ли возможность использования EmWin под NiosII? 2. просмотрев просторы интернета, я наткнулся на библиотеку китайцев uGUI, на основе которой получилась EmWin: - был ли у кого опыт с ней? - есть ли у кого исходники, чтобы можно скомпилить? 3. какие библиотеки для отрисовки графики и получения координат с тачскрина использовали?
  5. Здравствуйте, уважаемые форумчане встала задача, чтобы выводить изображение с ПЛИС EP3C25Q240, а так же отслеживать нажатие на экране через тачскрин я имел опыт работы с библиотекой StEmWin под STM32L496, хочу в первую очередь использовать ее родоначальника EmWin в проекте Скачал библиотеку EmWin с официального сайта Segger, собираю проект в Eclipse NIOS версии 13.1 без использования ОС, подключил библиотеку, сейчас при компиляции вижу следующее: C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/GUIConf.c:58: undefined reference to `GUI_ALLOC_AssignMemory' obj/default/GUI/Config/LCDConf.o: In function `LCD_X_Config': C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:99: undefined reference to `GUIDRV_Win_API' C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:99: undefined reference to `GUIDRV_Win_API' C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:99: undefined reference to `LCD_API_ColorConv_M8888I' C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:99: undefined reference to `LCD_API_ColorConv_M8888I' C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:99: undefined reference to `GUI_DEVICE_CreateAndLink' C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:103: undefined reference to `LCD_SetSizeEx' C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:104: undefined reference to `LCD_SetVSizeEx' C:\PROJECTS\Neptun\bukvaverilog_new\software\bukvaverilog_de0nano/GUI/Config/LCDConf.c:105: undefined reference to `LCD_SetVRAMAddrEx' у меня следующие вопросы: 1. был ли у кого опыт использование EmWin библиотеки под Nios II без использования ОС??? 2. кто какие использовал библиотеки для отрисовки и получения координат с тачскрина под Nios II? очень прошу поделиться опытом, если есть проект под Nios II, то буду очень признателен
  6. Решил проблему очисткой статусных регистров и контрольных(записью в низ 0х0), а так же перезаписью на каждую транзакцию длины, адресов чтения и записи, ну и записи в контрольный регистр INTEL_DMA_CTRL_SET_LEEN_WORD_GO_IEN = INTEL_DMA_CTRL_WORD_MSK | INTEL_DMA_CTRL_GO_MSK | INTEL_DMA_CTRL_I_EN_MSK | INTEL_DMA_CTRL_LEEN_MSK = 0х9С
  7. Здравствуйте, уважаемые форумчане Использовал стандартный DMA Controller, именно стандартный(https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_embedded_ip.pdf, пункт 29), а не msgdma... с одной стороны он связан с флэш памятью Max10, с другой OnChipMemory - служит для передачи данных из памяти во флэш и наоборот я написал модуль на verilog, который конфигурирует DMA Controller и запускает транзакцию пересылки данных через DMA модуль MCU реализует инструкции, которые заданы в массиве значений, и выдает их на шину Avalon через avm_master typedef struct packed { t_operation operation; logic [31:0] address; logic [7:0] register; logic [31:0] data; } t_op_array; t_op_array init_array[21]; t_op_array work_array[25]; // Write from Flash to Memory init_array[7]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_RD_ADDRESS[7:0], FLASH_DATA_AMM_ADDRESS[31:0] }; // write Read address init_array[8]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_WR_ADDRESS[7:0], MEMORY_AMM_ADDRESS[31:0]}; // write Write address init_array[9]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_LENGTH[7:0], MEM_FLASH_SIZE[31:0] }; // write Lenght init_array[10]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_CONTROL[7:0], INTEL_DMA_CTRL_SET_LEEN_WORD_GO_IEN[31:0] }; // write control register (start DMA) init_array[11]= { OP_READ, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_STATUS[7:0], 32'h00}; // read status register (wait DMA Done) // Set Address and Lenght to Write from Memory to Flash init_array[12]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_RD_ADDRESS[7:0], MEMORY_AMM_ADDRESS[31:0] }; // write Read address init_array[13]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_WR_ADDRESS[7:0], FLASH_DATA_AMM_ADDRESS[31:0]}; // write Write address init_array[14]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_LENGTH[7:0], MEM_FLASH_SIZE[31:0] }; // write Lenght // MEM_FLASH work_array[10]= { OP_READ, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_STATUS[7:0], 32'h00}; // read status register (wait DMA Done) work_array[11]= { OP_WRITE, FLASH_CSR_AMM_ADDRESS[31:0], MAX_FLASH_CONTROL[7:0], MAX_FLASH_CTRL_SET_SE_CLR_WP_SECTOR_ID1[31:0] }; // enable write to Sector ID1 and erase Sector ID1 work_array[12]= { OP_READ, FLASH_CSR_AMM_ADDRESS[31:0], MAX_FLASH_STATUS[7:0], 32'h00}; // read status register (wait erase Sector ID1) work_array[13]= { OP_WRITE, DMA_CSR_AMM_ADDRESS[31:0], INTEL_DMA_CONTROL[7:0], INTEL_DMA_CTRL_SET_LEEN_WORD_GO_IEN[31:0] }; // write control register (start DMA) при старте пробегаюсь по массиву инициализации(init_array), как видно из него, я записываю адреса чтения, записи и длину пакета, равную 128, и стартую DMA транзакцию на 128 слов, причем у меня поставлена галочка Burst режим При инициализации данные передаются из FLASH -> MEMORY, и транзакция проходит успешно INTEL_DMA_CTRL_SET_LEEN_WORD_GO_IEN = INTEL_DMA_CTRL_WORD_MSK | INTEL_DMA_CTRL_GO_MSK | INTEL_DMA_CTRL_I_EN_MSK | INTEL_DMA_CTRL_LEEN_MSK = 0х9С жду окончания транзакции DMA и записываю рабочие адреса записи и чтения, а также длину затем в рабочем цикле(массив work_array) я запускаю DMA транзакцию, проверяя перед этим, что предыдущая транзакция по DMA завершена, когда выставлен контрольный бит в моем контрольном регистре, но DMA не запускается В итоге получается: 1. при инициализации(массив init_array) DMA отрабатывает нормально(правда 1 раз) 2. в рабочем цикле при запуске DMA, я не вижу по сигналтабу, что транзакция DMA стартует вообще, хотя все значения адресов, длины и контрольный регистр записаны т.к. я адреса записи и чтения, а также длину выставил заранее, а потом только запускал DMA, надо ли их каждый раз перезаписывать, либо может стирать или записывать какие-то другие надо регистры, чтобы запустить DMA повторно??? спасибо, жду вашего ответа
  8. Если использовать Terasic Usb-Blaster, то в Ubuntu работает все на ура - и программатор, и сигналтаб...
  9. Пробовал менять usb-blaster на другой, перезапускать jtagserver - ситуация не изменилась
  10. Здравствуйте, уважаемые форумчане Установил Quartus 18.1 Standart(такая же проблема в 20.1) на Ubuntu 18.04.5 LTS(полная установка, не на виртуалку) Сразу появились проблемы с Usb-Blaster, я использую WareShare Usb-Blaster 2.0, посмотрел в рекомендация от Альтеры: https://rocketboards.org/foswiki/Documentation/UsingUSBBlasterUnderLinux После этих манипуляций стала прошиваться ПЛИС через Programmer... Перенес проект, скомпиленный в Windows 10, на Ubuntu, запустил Signaltab, появились следующие проблемы(все делаю через Signaltab): 1. Определяется ПЛИС через раз 2. прошивается ПЛИС(sof файл) еще реже 3. При запуске снятия картинки Signaltab, он виснет, ни разу не получилось получить хоть какую-то картинку Перезагрузился на Windows 10, это же проделал с тем же самым проектом - все работает, как часы... Перекомпилил в Ubuntu проект, что был собран в Windows, все равно те же самые проблемы с Signaltab Хочется добиться, чтобы хотя бы осциллограмма появлялась при запуске снятия картинки Signaltab кто как решил эту проблему??? поделитесь опытом Спасибо, буду рад любой помощи
  11. сделал в итоге, как я хотел, опишу, чтобы у других не вызывало трудностей настройка FT4232H: 1. порт A настроил для работы по JTAG с использованием драйвера от Марсохода(https://marsohod.org/prodmbftdi/mbftdiq2drv), сделал именно так, как описано, программатор нашелся в Quartus Но так как у меня стояли 2е версии Quartus(18.1.1 и 13.1, причем последнюю ставил 13.1), то не учел, что Jtag Server запускается той версии Quartus, которая была поставлена последней, т.е. драйвер надо переносить в папки Quartus 13.1, тогда все увидится, у меня же был закинут в папку только 18.1.1, что по понятным причинам не обнаруживался... 2. настроил 2й порт для работы через OpenOCD с STM32F103 через JTAG, делал, как описано вот здесь https://marsohod.org/projects/proekty-dlya-platy-marsokhod3/mipsfpga/365-m3-mipsfpga-gdb и http://microsin.net/programming/arm/getting-started-openocd-with-ft2232h-for-swd-debugging.html скачал новую скомпилированную версию OpenOCD, написал скрипт ft4232h-jtag-portb.cfg: # # FTDI MiniModule # # http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT4232H_Mini_Module.pdf # # -f \interface\jlink.cfg -f \target\stm32f1x.cfg # -f \interface\ftdi\ft4232h-jtag-portb.cfg -f \target\stm32f1x.cfg adapter driver ftdi transport select jtag ftdi_vid_pid 0x0403 0x6011 ftdi_channel 1 adapter speed 1000 #Config Command: ftdi_layout_init data direction #Specifies the initial values of the FTDI GPIO data and direction registers. #Each value is a 16-bit number corresponding to the concatenation of the high and low FTDI GPIO registers. #The values should be selected based on the schematics of the adapter, such that all signals are set to safe levels with minimal impact on the target system. #Avoid floating inputs, conflicting outputs and initially asserted reset signals. # Bit MPSSE FT4232 JTAG Type Description # Bit0 TCK BDBUS0 TCK Out Clock Signal Output # Bit1 TDI BDBUS1 TDI Out Serial Data Out # Bit2 TDO BDBUS2 TDO In Serial Data In # Bit3 TMS BDBUS3 TMS Out Select Signal Out # Bit4 GPIOL0 BDBUS4 nTRST In/Out General Purpose I/O # Bit5 GPIOL1 BDBUS5 SW_PORTA In/Out General Purpose I/O # Bit6 GPIOL2 BDBUS6 SW_PORTB In/Out General Purpose I/O # data MSB..LSB direction (1:out) MSB..LSB( 0 - input, 1 - output) # 0000'0000'0XX1'0000 0000'0000'0111'1011 ftdi_layout_init 0x0038 0x007b ftdi_layout_signal nTRST -ndata 0x0010 #SW_PORTA=0 => Jtag 2е ПЛИС #SW_PORTA=1 => Jtag 1 ПЛИС(ПВВ) #SW_PORTB=0 => Jtag STM32 #SW_PORTB=1 => не допустимо, т.к. подключен будет UART Спутника и разместил его в папке \interface\ftdi\ в данном пакете. для старта его из Eclipse необходимо в настройках запуска отладки через OpenOCD вбить: -f \interface\ftdi\ft4232h-jtag-portb.cfg -f \target\stm32f1x.cfg 3. остальные порты не менял, они у меня как UART задействованы Отладил все на FT4232H MiniModule, пока все заработало, перенес порты, определяющие конфигурацию переключателей, с порта А на порт В, т.к. там они мне доступны будут через OpenOCD, а вот через драйвер от Марсохода нет... еще раз всем спасибо за помощь, надеюсь кому-нибудь эта информация пригодится
  12. для конфигурации порта А Ft4232 Mini Module я использовал драйвер марсохода, но долго парился с ним из-за того, что у меня установленно 2 Quartus- 18.1 и 13.1, причем последнюю установил именно 13.1, в итоге драйвер скинул в папку 18.1, а jtag server был запущен от 13.1 - поэтому не находился устройство mfbti 2.0, пока не положил в 13.1 папку этот драйвер кстати, через этот драйвер получилось прошить Плис, сигналтаб запустить, но вот tcl console не работает, виснет при посылке 1й команды я хотел порт B настроить и использовать для прошивки STM32F103 через JTAG с использованием JLINK под Eclipse, но пока нашел что-то ясное по описанию только для openocd вторая проблема у меня еще в том, что мне необходимо управлять оставшимися портами ввода/вывода порта А и В, т.е. переключать их во время, например, работы драйвера марсохода mfbti 2.0 (вообще в моем случае допустимо изменять конфигурацию этих портов ввода/вывода до начала работы драйвера) пока с конфигурацией портов ввода/вывода и реализацией драйвера для работы через JTAG(либо определения его через существующие средства) по JLINK не разобрался
  13. после конфигурации данных портов через программу, взаимодействующую с библиотекой D2xx, на JTAG, у меня порт А и В сконфигурируются и определятся через Диспетчер устройств, как устройства, к которым я смогу подключить драйвер USB-Blaster, я правильно понимаю?
  14. сейчас пришел ft4232h mini module, запустил программу FT_Prog, но я не увидел там возможность переключение портов A и В в режим MPSE(JTAG), да и конфигурацию каждого порта и его пинов в зависимости от режимов Как все таки возможно сконфигурировать отдельные порты FT4232 через FT_Prog, либо это невозможно? Какие пути есть для конфигурации портов A и B в JTAG, портов C и D в UART?
  15. Здравствуйте, уважаемые форумчане Возникла такая задача, чтобы 2е Плис Cyclone4, которые разнесены по 2м модулям, объединить в JTAG цепочку и программировать их как с внешнего разъема, так и с микросхемы FT4232HL к этой микросхеме будут в сумме подключены: 1. шина ADBUS - JTAG 2х ПЛИС Сyclone4 2. шина BDBUS - JTAG от STM32, переключаемый с UART от спутника 3. шина СDBUS - UART от STM32 4. шина DDBUS - UART от IMX6 схему структурную я прилагаю вопросы следующие: 1. так как я с этой микросхемой FT4232HL не работал раньше, предполагается, что при подключении и конфигурации ее через FtProg я буду видеть 4 интерфейса на компе - 2а jtag, на которые я могу ставить свои отдельные дрова, и 2а виртуальных uart, так ли это? 2. могу ли я управлять gpioL на adbus и bdbus, когда они сконфигурированы как jtag, при этом, если я сконфигурирую порт, как uart они мне будут не доступны? 3. пробовал ли кто-нибудь объединять ПЛИС и STM32 в JTAG цепочку, какие были проблемы с таким подключением, в частности интересует вопрос с драйверами, т.к. на одном jtag висят и плис и stm32, которые требуют своих драйверов, будут ли они работать одновременно, либо хотя бы по раздельности(поставил драйвер для usb-blaster, то работаешь с Плис, поставил драйвер jlink, то работаешь с stm32? 4. так как у меня стоят и стандартные внешние разъемы для отдельной возможности программирования и Плис и Stm32, при этом сигналы Jtag у меня завязаны с FT4232HL, то не подсадит ли мне эта микросхема сигналы JTAG, если к ней со стороны Usb ничего подключено не будет, а я буду прошивать только через внешний соединитель выкладываю структурную схему, чтобы было понятнее о чем я говорю.. спасибо, буду рад любой помощи KOMPAS - JTAG_UART_BMS2.pdf
  16. не могли бы выложить часть схемы, где PHY DP83869 соединена с SFP, и насколько хорошо показала себя эта микросхема(DP83869) в работе на разных скоростях, в том числе и на 1Ггбит/с (были ли ошибки при передачи данных, поддерживаемые пакеты и т.д.) скорее всего я перейду на 1Ггбит/с - вот думаю, какую брать PHY, в этом проекте взяли KSZ8041FTLI потому что уже был опыт работы с ней, но вот только не я писал под нее прошивку и использовались отдельные приемники и передатчики фирмы оптроникс(не SFP модули)...
  17. решил проблему с помощью вот такой схемы: все, что стоит справа от кондеров, находится внутри SFP, поэтому поставил только соотвествуюшие подтяжки к +3.3В и земле
  18. Неужели никто PHY не подключал к SFP модулям??? может скините ссылку на стандартную схему подключения, которая является рабочей???
  19. Здравствуйте, уважаемые форумчане сейчас отлаживаю свой проект под ПЛИС для сетевой карты, где осуществлена связка: ПЛИС(5CGXFC5C6F23I7N, использую TSE, Small MAC 100Мбит/с, MII)<->PHY(KSZ8041FTLI)<->SFP(Optronic TRSF13-20-155LC-3c) я замыкаю через кабель SFP модуль сам на себя (RX на TX) одномодовым кабелем, скорость выставляю 100Мбит/с затем через tcl скрипт в System Console Quartus вкл передатчик SFP, настраиваю PHY и МАС, генерирую пакет(записываю его во внутреннюю память, а затем через MSGDMA контроллер передаю пакет через TSE) так вот в итоге получается так: 1. линк устанавливается 2. через Signaltab(стробирование идет по ETH0_TX_CLK) я вижу пакет, уходящий на сторону PHY 3. по приему я вижу кучу ошибок если сделать вкл Loopback на PHY, то видно, что транзакция передача-прием осуществляется абсолютно верно первое мое предположение, что неверно сделано подключение SFP модуля к PHY, т.к. Loopback PHY работает корректно, вот электрика: интересует вопрос, верно ли осуществлено подключение линий port_XS1_SFP_TD_P, port_XS1_SFP_TD_N, port_XS1_SFP_RD_P, port_XS1_SFP_RD_N от PHY(KSZ8041FTLI) к SFP? вот как осуществлено подключение SFP в одном из китов от Micrell: я с оптикой никогда не работал, это первый раз, схема не моя, я пишу только ПО для ПЛИС, но по схеме видно, что не хватает развязывающих кондеров на линиях, а так же подтяжек линий на 49.9 Ом, а также 130 Ом RX на землю... так как дорабатывать будет уже изготовленную плату гемморойно, то хотел сначала убедиться, что буду делать все верно... был ли у кого опыт работы с SFP модулями и как подключали их к PHY? спасибо, буду рад любой помощи...
  20. я смотрю вопрос касался одного, а переключился опять в использование куба или нет... я всегда буду его использовать, т.к. точка входа в программирование STM32, благодаря ему, у меня заняло около 30 мин, я начал практически сразу писать функционал, при этом: 1. мне не надо было лезть в изучение всей периферии контроллера 2. изменение конфигурации и состава периферии при неизменном функциональном коде проходит за 1 мин 3. очень удобно, когда работаешь сразу с несколькими контроллерам STM32 разных семейств(у меня, например, STM32F103, STM32F107, STM32F407,STM32L496) согласен, что надо понимать, что и откуда берется, но лезть туда надо: 1. когда не работает задуманое 2. работает, но с косяками, либо слишком медленно к такому же подходу я стремлюсь при разработке IP Core на ПЛИС, чтобы была универсальность при написании драйвера под ОС для работы с модулями, реализованных на ПЛИС самое главное, что вы экономите время, CUBE имеет косяки, например, пришлось мне обходить косяк с работой по SDMMC, сгенерированный кубом, но я на это убил 2 дня, да пришлось во всем разобраться, но ничего страшного...
  21. Решил проблему следующим образом: #define uart_printf(...) { while(huart1.gState != HAL_UART_STATE_READY); printf(__VA_ARGS__); } int _write (int fd, char *ptr, int len){ HAL_UART_Transmit_DMA(&huart1, (uint8_t*) ptr, len); return len; } вместо printf использую у себя в основной программе uart_printf, причина была в подмене данных printf, т.к. данные передавались в функцию int _write (int fd, char *ptr, int len) по указателю всем спасибо за помощь!!!
  22. STMCube все верно отрабатывает, прерывание возникает по окончании передачи всей пачки, а не одного байта (функция HAL_UART_TxCpltCallback) модифицировал код следующим образом и все заработало: volatile static uint8_t Uart_Tx_Cmpl = 1; int _write (int fd, char *ptr, int len){ Uart_Tx_Cmpl = 0; HAL_UART_Transmit_DMA(&huart1, (uint8_t*) ptr, len); while(Uart_Tx_Cmpl == 0); return len; } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { Uart_Tx_Cmpl = 1; } но я при этом не добиваюсь того, что хотел, а именно освободить на время передачи по UART процессор от ожидания окончания транзакции по UART, как раз именно while(Uart_Tx_Cmpl == 0); когда стоял в самом начале функции int _write() позволял задерживать выполнение, если транзакция еще не завершена(например, идут 2 или 3 printf подряд), а когда этого не требуется, то просто пропускал...
  23. я делал вот так: volatile static uint8_t Uart_Tx_Cmpl = 1; int _write (int fd, char *ptr, int len){ while(Uart_Tx_Cmpl == 0); Uart_Tx_Cmpl = 0; HAL_UART_Transmit_DMA(&huart1, (uint8_t*) ptr, len); return len; } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { Uart_Tx_Cmpl = 1; } не помогло...