BSACPLD 9 29 мая, 2022 Опубликовано 29 мая, 2022 · Жалоба Добрый день, коллеги. Начал понемногу ковырять CYUSB3014. Запустил стандартный пример с FIFO из SDK. Thread 0 на запись, Thread 3 на чтение. На ПЛИС сделал мост с параллельного интерфейса GPIF2 на AXI4-STREAM. Сделал loopback со стороны AXI4-STREAM. Протестировал через C++ Streamer из SDK - все ОК. Но низкая скорость. Увеличил DMA_BUF_SIZE до 8, вместо MANUAL каналов DMA поставил AUTO (закомментировал #define MANUAL в примере из SDK). Получил порядка 97 МБ/с в каждую сторону по 16 бит шине. Т.е. почти теоретически достижимый максимум. Однако при увеличении DMA_BUF_SIZE столкнулся с непонятной проблемой. Если я отправляю через Control Center пакет меньше размера Endpoint (1024 байта), то он появляется на выходе GPIF2 сразу, если больше, то только когда полностью заполнится буфер DMA (8 КБ). Можно ли как-то сделать так чтобы данные всегда выдавались сразу? Пробовал ставить в Control Center галочку Pkt Mode - не помогло. Меньше 1024 байт флаг DMA Ready взводится сразу, больше 1024 байт только когда заполнятся все 8192 байта. И ещё вопрос. В примере из SDK только 2 Endpoint. Можно ли его как-то сконфигурировать на 4 Endpoint тем самым организовать 2 канала передачи данных в каждую сторону вместо одного? Или придется весь пример переделывать? Заранее прошу прощения за возможно глупые вопросы, т.к. с USB до этого работал только с FTDI и так глубоко не лез. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 29 мая, 2022 Опубликовано 29 мая, 2022 · Жалоба 1 hour ago, BSACPLD said: . . . Можно ли как-то сделать так чтобы данные всегда выдавались сразу? Пробовал ставить в Control Center галочку Pkt Mode - не помогло. . . . По опыту работы с CY7C68013, за принудительную отправку пакета аппаратно отвечает линия PKT_END. (CYPRESS-->PC) Если идет затяжка в пересылке (PC-->CYPRESS), то там в API/SDK должна быть аналогичная программная ф-ия или настройка. (принудительная отправка недозаполненного буфера, даже если в нем 1 байт). Утилита-монитор с IDE может не обеспечивать гибкости и полной функциональности настроек, надо раскуривать soft-API и настройки/устройство чипа. Сложность в том, что раскуривание-стыковку надо делать синхронно-одновременно и со стороны PC, и со стороны CYPRESS. Думаю, в данном случае причина - во включении "Auto". Отключить "Auto" и делать настройки "наразвес в-розницу". (те писать утилиты-код, в моем случае делалось на Win32API для гибкости и компактности). IMHO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 29 мая, 2022 Опубликовано 29 мая, 2022 · Жалоба 1 hour ago, k155la3 said: По опыту работы с CY7C68013, за принудительную отправку пакета аппаратно отвечает линия PKT_END. (CYPRESS-->PC) Это у меня уже сделано. Вопрос как раз в обратную сторону: 1 hour ago, k155la3 said: Если идет затяжка в пересылке (PC-->CYPRESS), то там в API/SDK должна быть аналогичная программная ф-ия или настройка. При беглом просмотре не нашел. Буду внимательнее смотреть. 1 hour ago, k155la3 said: Думаю, в данном случае причина - во включении "Auto". Отключить "Auto" и делать настройки "наразвес в-розницу". Auto влияет только на скорость. Изначально было с Manual и логика работы была точно такая же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 29 мая, 2022 Опубликовано 29 мая, 2022 · Жалоба 3 hours ago, BSACPLD said: Буду внимательнее смотреть. . . . Я отлаживал режимы компилируя самописные утилиты Win32/console/MSVS2008.CPP (на базе примеров), отлаженный код встраивал потом в программу. Пришлось к томуже перекомпилировать fw чипа для установки кажется, режима синхронный/асинхронный (для СУ7С68013). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 31 мая, 2022 Опубликовано 31 мая, 2022 · Жалоба On 5/29/2022 at 2:32 PM, BSACPLD said: При беглом просмотре не нашел. Буду внимательнее смотреть. Просмотрел всю библиотеку libcyusb.cpp из SDK для Linux. Нигде не нашел как принудительно отправить пакет на выход CYUSB3014 если буфер заполнен не до конца. Да и сама библиотека это просто обертка поверх стандартной libusb. Там только вызов libusb_bulk_transfer и больше ничего относящегося к отправке данных нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 9 18 июня, 2022 Опубликовано 18 июня, 2022 · Жалоба Удалось победить отправку неполного буфера :) Вместо одного большого буфера 8 КБ поставил 8 буферов по 1 КБ каждый (размер endpoint) и отправка пакетов произвольной длинны заработала автоматически. Теперь у меня следующий вопрос. В каком месте нужно править пример Slave FIFO от Cypress чтобы сделать многоканальный FIFO? Т.е. сделать с разделением потоков данных на два endpoint в каждую сторону вместо одного endpoint как сейчас. И чтобы выбирать нужный канал через линии ADDRx. Правильно ли я понимаю, что заменить CyU3PDmaChannelCreate на CyU3PDmaMultiChannelCreate при настройке endpoint недостаточно чтобы сделать многоканальный FIFO? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться