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

Viwon

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

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

  • Посещение

Весь контент Viwon


  1. 1) Когда разбирался с драйверами(полтора года назад) не видел рекомендаций об отказе от файлов в /dev, были рекомендации не использовать функцию ioctl для управления настройками устройства/драйвера, в пользу управления настойками через файлы в /sys 2) Device - это устройство, в вашем случае "лампочки", Driver - это программа управляющая этим устройством, которую вы разрабатываете. Platform - значит, что усройство встоенное, т.е. всегда подключено. Т.е. это две разные сущности - встроенное устройство(железо) и драйвер для встроенного устойства(программа). 3) Я бы сказал написание драйвера это написание функций-обработчиков чтения/записи и т.д файлов. Создание файла устойства и связь его с устойством(драйвером) сейсас дело пару сток, в вашем случае это делает функция proc_create(). 4) base_addr - связан с регистрами устойства "лампочки", если у этого устойства несколько подряд идущих регистров(и это описано в конфигурационных файлах), то да, к ним можно обращаться смещаясь относитльно base_addr.
  2. Из особенностей UPP, описание которых не нашел в документации, могу отметить(может что изменилось, давно было): 1. Толи модуль UPP, толи его DMA работают от внешнего клока UP_CHx_CLOCK, т.е. его нужно подавать, даже когда данные с АЦП не поступают. 2. При повторном запуске, DMA может в начало скопировать "старые" данные из буфера. Поэтому перед пуском нужно делать сброс UPP. А так подготовка UPP к работе отлично расписана по шагам в SPRUH77A в секциях: 33.2.7.1; 33.2.6.1 и 9.3.2; Проверте может, что-то пропустили.
  3. То, что снаружи ни какой реакции нет - это ясно. Предполагаем, что с железом все хорошо. Процессор сам по себе ни чего не делает. Тогда вопрос встает следующим образом, пытается ли программа "выдать команду reset на NAND"? Может она завершается раньше. В эксперименте с подачей на все ножки 1-0 в бесконечном цикле, есть уверенность, что программа на вашей плате заходит в этот цикл? Если гарантированно заходит, в таком случае надо убедиться, что 1. Подача тактового сигнала на модуль GPIO разрешена 2. Что выводы сконфигурированы как GPIO В случае NAND надо убедится, что 1. тактовая частота EMIFA в допустимом диапазоне 2. разрешена подача тактового сигнала на модуль EMIFA 3. EMIFA сконфигурирован верно Может еще что-то... если все соблюдено значит дело в железе.
  4. Ревизию можете посмотреть в Memory Browser по адресу 0xFFFD0000, режим Caracter. Увидите что то типо d800k00*, где * - 2,4,6,8 Посмотрите, также значение по адресу 0x68000000, режим 32-bit hex, он должен содержать 0x40000205. Это регистр EMIFA.MIDR. И расшифруйте "не может выдать команду reset на NAND", в идеале должно быть "после чтении/записи такого-то региста/адреса..."
  5. Раз есть исходники, то подключитесь отладчиком и отследите процесс выполнения программы
  6. Получается программа чистки NAND зависает по не понятным причинам. Вы какой-нибудь другой код на процессоре запускали, работал?
  7. Теперь он ругается, что не может найти ножку названую CLOCK. Вы пишите, что В таком случае нужно указать выход PLL, что-то типа -source {pll|altpll_component|auto_generated|pll1|inclk[0]}, точное название смотрите в консоле во время компиляции. Подробнее об описании клоков посмотрите здесь. А в общем вам правильно говорят, не плодите клоки, если можно обойтись без них.
  8. Компилятор ругается что не может найти регистр DOUT1, нужно указать полный путь к нему замените [get_registers DOUT1], на [get_registers {*|DOUT1}], если регистр с таким именем у вас в проекте один, иначе вместо * указать весь путь
  9. У меня ножки выбора загрузки(MSEL) посажены на землю, что соответствует режиму загрузки Active Serial, видимо поэтому ASDO и nCSO недоступны, вне зависимости от того, что указано в прошивке. Был не прав. Получить доступ к ASDO удалось, с помощью мегафункции JTAG-accessable Extensions -> Serial Flash Loader. В ее настройках надо поставить галочку "Share ASMI interface in your design". Однако, доступ только на вывод, да и способ на мой взгляд убогий. В общем, чтобы работать с ножкой ASDO Cyclone II, как с обычной ножкой (на ввод и вывод), необходимо чтобы MSEL0 = 1(режим Passive Serial) Источник
  10. С другимм ножками работает. А вы какую ПЛИС используете, Cyclone II EP2C5T144?
  11. Вот, проект(Quartus II v13.0). FPGA_CLK - входная частота Модуль CLOCKS - делитель входной частоты LED - в данном случае меандр, подается на вывод ASDO 1 Ножка "висит в воздухе" 2 Точно CIII_Design_Security_Load__copy_.zip
  12. Доброго времени суток! Пытаюсь выдать сигнал на вывод ASDO, но на выходе всегда высокий уровень. ПЛИС - Cyclone II. Необходимые настройки сделал. Может кто сталкивался с подобной проблемой?
  13. nill Да, нужно просто передать, и преобразования можно осуществить на стороне DSP, как вариант так и сделаю. Но мне кажется, что преобразование данных в удобный для человека/железа вид, проверка допустимости входных параметров, и другая мелочь — это работа для драйвера, а DSP пусть занимается основной математикой. Lagman Что касается передачи набора байт, то хочется придерживаться правила, что все параметры в /sys должны быть в текстовом виде. Это очень удобно, можно управлять устройством стандартными командами типа echo, cat. jcxz Про PRUSS посмотрю, пока даже не знаю что это. Общение ARM<->DSP у меня происходит через общую память, при обновлении данных вызывается прерывание и адресат их забирает. С ядром маленькое недоразумение, я имел ввиду ядро ОС Linux, не ARM-ядро. А ядро Linux не использует стандартные библиотеки, а в нем отключена поддержка float.
  14. Там функции для работы с целыми числами(ими я и пользуюсь), но нужны функции и для действительных.
  15. Доброго времени суток! Подскажите, пожалуйста, функции перевода. Нашел только для преобразования строка->float, нужна еще и в обратную сторону. Нужно для драйвера, который принимает параметры в текстовом виде(через файлы в /sys), преобразует их в бинарный вид и располагает в определенной области памяти, откуда их забирает DSP. Часть параметров действительные числа, как и результат вычислений. Процессор OMAP-L138(ARM + DSP)
  16. Разобрался с altera-stapl - это модуль переводящий Compressed JAM файл(*.jbc) в "виртуальное" дерганье JTAG ножек. Для прошивки ПЛИС нужно просто реализовать функцию переводящую "виртуальное" дерганье ног в физическое. int (*jtag_io) (void *dev, int tms, int tdi, int tdo); Прошивка осуществляется вызовом единственной экспортируемой функцией, данного модуля, altera_init. Она принимает в качестве параметров файл прошивки(struct firmware), и указатель на нашу функцию (struct altera_config, поле jtag_io). Вырезка из кода драйвера, для примера: static char *firmware_name = "fpga_firmware.jbc"; module_param( firmware_name, charp, S_IRUGO ); MODULE_PARM_DESC(firmware_name, "Name of FPGA firmware file in /lib/firmware (if not specified defaults to 'fpga_firmware.jbc')"); static int fpgaup_jtag_io(void *device, int tms, int tdi, int read_tdo) { int tdo = 0; // Устанавливаем TMS gpio_set_value(TMS_PIN, tms); // Устанавливаем TDI gpio_set_value(TDI_PIN, tdi); // Считываем TDO, если нужно if (read_tdo) { tdo = gpio_get_value(TDO_PIN); } // Формируем строб сигнала TCK gpio_set_value(TCK_PIN, 1); gpio_set_value(TCK_PIN, 0); return tdo; } /** * fpgacii_fw_load() - configure a FPGA * * Returns 0 on success, and an appropriate error value otherwise. */ static int fpgacii_fw_load(struct device *dev) { const struct firmware *fw; int ret; char *action = "configure";// Выполняемое действие - конфигурирование struct altera_config fpgaup_config = { .dev = dev, .action = action, .jtag_io = fpgaup_jtag_io, }; // load firmware ret = request_firmware(&fw, firmware_name, dev); if (ret < 0) { dev_err(dev, "%s: request_firmware failed: %d\n", __func__, ret); return ret; } // configure FPGA ret = altera_init(&fpgaup_config, fw); release_firmware(fw); return ret; }
  17. Плата уже изготовлена, не думал что с JTAG будут сложности, думал все давно обкатано. Если с JTAG не разберусь, то так и сделаю. В исходниках ядра нашел altera-stapl, как я понял, тот самый JAM Player переделанный в драйвер, правда JTAG реализован на LPT, вместо GPIO. Буду изучать. Спасибо за помощь.
  18. Доброго времени суток! Имеется процессор(OMAP-L138) архитектуры ARM с ОС Linux, к GPIO которого подключена ПЛИС Cyclone II по интерфейсу JTAG. Продскажите, пожалуйста, готовый драйвер для прошивки ПЛИС или как это делается?
  19. Доброго времени суток! Кто-нибудь собирал u-Boot и Linux с поддержкой device tree, без всяких MACH_TYPE_ID, под плату с процессором DA850/OMAP-L138/AM18x? Или все берут за основу mcsdk_1_01_00_02 и не парятся?
  20. Написано же, что по указаным Вами путям приложения "arm-linux-gnueabihf-g++" не найдено. Посмотрите где оно находится и укажите верный путь, например: PATH=[/usr/work/kernel_bild/compiler/gcc-linaro-4.9-2015.02-3-x86_64_arm-linux-gnueabihf/bin]
  21. Да, спасибо, кажется то что нужно. Правда, механизм рассчитан на множество подписчиков, а у меня только один, есть некая избыточность.
  22. У них почти все ресурсы общие, в частности ОЗУ. В пространстве пользователя будет работать демон, ждущий, когда появятся данные АЦП, после чего он запросит физический адрес и размер буфера у драйвера АЦП, и передаст их драйверу ДСП, ну а последний уже передаст указатель на обработку в сам ДСП, т.е копирования не происходит. Как вариант, без промежуточного звена в виде демона, надумал воспользоваться softirq. В драйвере АЦП - вызов, а в ДСП - обработка. Номер отложенного прерывания будет задаваться драйверам при загрузке. Но не представляю как в обработчик передать адрес и размер буфера. Поэтому пока буду делать через «демон», спасибо за наводку на сигналы.
×
×
  • Создать...