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

alxkon

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

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

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

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

3 666 просмотров профиля
  1. Получилось, нужно было еще запустить: export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so Спасибо!
  2. Спасибо! Читал askubuntu, но видимо что-то пропустил. Точно не делал "export XIL_IMPACT_USE_LIBUSB=1", нужно добавить и попробовать.
  3. Что бы не создавать новую тему, вопрос:получилось ли у кого-либо установить драйвера ISE 14.7 USB Platform Cable II на Ubuntu (или другой Линукс кроме официально поддерживаемых RedHat/SUSE)? Сам ISE установился на Ubuntu18.04 и 22.04, но драйвер не находится "Module windrvr6 is not loaded. Please install the cable drivers". Следовал разным инструкциям схожим с этой, но результата нет: https://www.george-smart.co.uk/fpga/xilinx_jtag_linux/ Думаю попробовать одолжить для теста Digilent HS3, может получится 🤔
  4. Я использую set_property для того что бы поменять значения в top VHDL проекта. Вроде бы работает. Для проверки установок по умолчанию хотелось бы прочитать весь список generic. Но похоже это невозможно, так как почему-то возвращаются только те generic которые были установлены из set_property. Которые по умолчанию не возвращаются.
  5. Подскажите пожалуйста, есть ли возможность заполучить значение с помощью TCL. Установить начения можно с помощью set_property generic: set_property generic "G_TEST=$TEST" [current_fileset] И прочитать можно: get_property generic [current_fileset] Только почему-то читается только один , тот который до этого был установлен, G_TEST, остальных не видно 🤔 Я похоже чего-то не понимаю. Есть ли вариант прочитать все?
  6. Отвечу сам себе - глюки связаны с кривизной в rtl дизайне, не с особенностью линукса
  7. Подскажите пожалуйста по следующей проблеме: Использую XDMA на Kintex девките. Девкит в свою очередь подключен к Jetson TX2 девкиту. Создал простой AXI4 Lite Slave на 4 регистра. Slave прошел через SV AXI4 BFM тест, использвал готовый который генерит Vivado. Подключен он к 32бит BAR 0, выделен 1МБ. Работаю с Ubuntu, использовал софт по моему автора туториала по XDMA . Получается запись и чтение регистров ведется из user space, а не из ядра линукса. Могут ли быть какие то проблемы с этим? Получается только 1 раз записать и считать определенное значение, далее чтение показывает 0. sudo ./pcie_test /sys/bus/pci/devices/0000\:01\:00.0/resource0 0x00000000 w 0xDEADAB Пока разбираюсь с System ILA, посмотреть что реально просходит на шине. Железо на несколько дней недоступно, хотелось бы понять есть ли риск в том что чтение/запись в регистры из user space на самом деле не работает всегда корректно? #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <signal.h> #include <fcntl.h> #include <ctype.h> #include <termios.h> #include <sys/types.h> #include <sys/mman.h> #include <linux/pci.h> #define PRINT_ERROR \ do { \ fprintf(stderr, "Error at line %d, file %s (%d) [%s]\n", \ __LINE__, __FILE__, errno, strerror(errno)); exit(1); \ } while(0) #define MAP_SIZE 4096UL #define MAP_MASK (MAP_SIZE - 1) int main(int argc, char **argv) { int fd; void *map_base, *virt_addr; uint32_t read_result, writeval; char *filename; off_t target; int access_type = 'w'; if(argc < 3) { // pcimem /sys/bus/pci/devices/0001\:00\:07.0/resource0 0x100 w 0x00 // argv[0] [1] [2] [3] [4] fprintf(stderr, "\nUsage:\t%s { sys file } { offset } [ type [ data ] ]\n" "\tsys file: sysfs file for the pci resource to act on\n" "\toffset : offset into pci memory region to act upon\n" "\ttype : access operation type : [b]yte, [h]alfword, [w]ord\n" "\tdata : data to be written\n\n", argv[0]); exit(1); } filename = argv[1]; target = strtoul(argv[2], 0, 0); if(argc > 3) access_type = tolower(argv[3][0]); if((fd = open(filename, O_RDWR | O_SYNC)) == -1){ PRINT_ERROR; } printf("%s opened.\n", filename); printf("Target offset is 0x%x, page size is %ld map mask is 0x%lX\n", (int) target, sysconf(_SC_PAGE_SIZE), MAP_MASK); fflush(stdout); /* Map one page */ #if 0 //map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (off_t) (target & ~MAP_MASK)); //map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK); #endif printf("mmap(%d, %ld, 0x%x, 0x%x, %d, 0x%x)\n", 0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (int) (target & ~MAP_MASK)); map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (target & ~MAP_MASK)); if(map_base == (void *) -1){ printf("PCI Memory mapped ERROR.\n"); PRINT_ERROR; close(fd); return 1; } printf("mmap(%d, %ld, 0x%x, 0x%x, %d, 0x%x)\n", 0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (int) (target & ~MAP_MASK)); printf("PCI Memory mapped %ld byte region to map_base 0x%08lx.\n", MAP_SIZE, (unsigned long) map_base); fflush(stdout); virt_addr = map_base + (target & MAP_MASK); printf("PCI Memory mapped access 0x %08X.\n", (uint32_t ) virt_addr); switch(access_type) { case 'b': read_result = *((uint8_t *) virt_addr); break; case 'h': read_result = *((uint16_t *) virt_addr); break; case 'w': read_result = *((uint32_t *) virt_addr); printf("READ Value at offset 0x%X (%p): 0x%X\n", (int) target, virt_addr, read_result); break; default: fprintf(stderr, "Illegal data type '%c'.\n", access_type); exit(2); } fflush(stdout); if(argc > 4) { writeval = strtoul(argv[4], 0, 0); switch(access_type) { case 'b': *((uint8_t *) virt_addr) = writeval; read_result = *((uint8_t *) virt_addr); break; case 'h': *((uint16_t *) virt_addr) = writeval; read_result = *((uint16_t *) virt_addr); break; case 'w': *((uint32_t *) virt_addr) = writeval; read_result = *((uint32_t *) virt_addr); break; } printf("Written 0x%X; readback 0x%X\n", writeval, read_result); fflush(stdout); } if(munmap(map_base, MAP_SIZE) == -1) { PRINT_ERROR;} close(fd); return 0; }
  8. Спасибо! Пока в планах IMX. Были замыслы использовать и других производителей, но пока не решили, якобы проблемы с доставаемостью. Если получится, я напишу в эту ветку.
  9. Были ли у Вас проблемы с ядром MIPI или все заводится "из коробки"? И еще вопрос возможно ли их софт использовать на 2 компьютерах или там жёсткая привязка?
  10. На mouser.com есть FRAMOS, но там только CSI-2 киты и камеры. SLVS-EC пока нет или скорее всего не будет в принципе, так как Framos естественно хочет продать свое IP. Их SLVS-EC решения нужно покупать напрямую
  11. Кстати, а где можно купить дев. кит с камерой SLVS-EC ?
  12. Или нормальный энкодер и неколхозно-китайский двигатель с другим типом механики типа зубчатой планки или небольшой шаговый двигатель с резьбовым валом. Тогда можно бы выбросить это колесо и пружину. История банальна - один ардуинщик спелся (или спился) с механиком вместе родили устройство - устаревший 5 вольтовый процессор которого теперь днем с огнём, level-shifters к остальной 3.3в логике, китайский двигатель сомнительного исполнения. Зато дёшево. Изваял плату и программу прямо в Arduino IDE, так он и в .ino и осталось. Попробовали работает но не так как хотелось - добавили пружину. Улучшилось. Еще один умный человек на радости заказал тучу механических частей и гору моторчиков. А по факту как минимум 20% процентов этих мотров мусор - энкодеры не работают, на шестернях заусеницы, и пр. Но дёшево. Управление на новой плате нужно уложить в ПЛИС, она там всёравно будет. Можно будет использовать часть этого добра и параллельно подобрать энкодер и двигатель и запилить новую механику.
  13. Да, спасибо! Не подумал о влиянии максимального разгона и торможения на ресурс. Наверное тогда лучше не доводить до крайностей и дыма, а экспериментально выбрать приемлимую максимальную скорость на длинных участках.
  14. К сожалению не могу конкретизировать все детали в силу определенных обстоятельств. После Вашего комментария о температурном коэфициенте, стало ясно что требование точности в 2микрона скажем весьма оптимистическое. Пока не добился даных на пружину и даных о дуге/спирали Архимеда по которой двигается подшипник заставляющий шток подниматся или опускаться. Переформулирую ТЗ - плавно двигать шток с постоянной скоростью, как можно точней позиционировать, при большом заданом перемещении двигатся быстро. Шток весит около 250г, движется в цилиндре вертикально, весь путь - 3см. Пружина давит на шток для того что бы подшипник плотно касался поверности дуги по которой движется. Т.е. без установленного двигателя с редуктором, шток всегда внизу. С редуктором он стоит на месте, если двигатель выключен. Таким образом пружина помогает движению вниз и наоборот создает необходимость дополнительных усилий при подьеме штока вверх. На двигателе квадратурный энкодер, 2 датчика Холла, 7 магнитов, Pulses-Per-Rotation 7. Буду вникать понемногу как этим всем рулить.
×
×
  • Создать...