Alex_AZ 0 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба Добрый день! Только начинаю осваивать Zynq. Пытаюсь запустить USB Device на плате MYIR Z-turn board (xc7z020, usb phy USB3320) в baremetal. Сгенерировал BSP, в качестве основы для проекта использовал поставляемую библиотеку xusbps и пример работы с ней xusbps_intr_example.c. На этом этапе вроде все нормально. Затем в этом примере подправил дескрипторы под стандартные от Cypress и пытаюсь работать с устройством из Cypress Control Center. Передача по BulkOut (из ПК в Zynq) работает нормально. С передачей BulkIn возникли вопросы, которые решить пока не получилось. Вкратце, что я пытаюсь делать: после инициализации и ренумерации USB посылаю по BulkOut посылку, которая служит сигналом для начала передачи из Zynq в ПК по BulkIn. Со стороны ПК из Cypress Control Center начинаю инициировать чтение единичных пакетов по BulkIn. До какого-то момента такие передачи проходят, затем возникает исключение - отсутствие ответа на BulkIn-запрос от ПК. Количество успешно переданных пакетов до возникновения ошибки случайно. Вопрос - что я делаю не так? Как правильно работать с библиотекой xusbps? На первый взгляд все что в ней написано - правильно и соответствует документации Zynq TRM(ug585). После того как попали в ошибочное состояние соответствующий дескриптор dTD находится в активном состоянии (т.е. выполнена запись в регистр XUSBPS_EPRIME_OFFSET и мы "отдали" железу этот дескриптор), но передача не проходит. Есть подозрение, что это может быть связано с неправильной работой с кэшем. В приложении - код с которым работаю. По сравнению с оригиналом изменил настройки enpoint1 в main, основной цикл в main и обработчик Ep1EventHandler. Мои настройки Endpoint1 DeviceConfig.EpCfg[1].Out.Type = XUSBPS_EP_TYPE_BULK; DeviceConfig.EpCfg[1].Out.NumBufs = 2;//16; DeviceConfig.EpCfg[1].Out.BufSize = 64;//512; DeviceConfig.EpCfg[1].Out.MaxPacketSize = 512; DeviceConfig.EpCfg[1].In.Type = XUSBPS_EP_TYPE_BULK; DeviceConfig.EpCfg[1].In.NumBufs = 1;//16; DeviceConfig.EpCfg[1].In.MaxPacketSize = 64;//512; Новый основной цикл XUsbPs_EpIn *Ep1In; Ep1In = &UsbInstancePtr->DeviceConfig.Ep[1].In; while (NumReceivedFrames < 1) //There was no errors { if (flagRcv == 1) // Ep1 BulkIn operations are enabled { //XUsbPs_dTDInvalidateCache(Ep1In->dTDHead); if (!XUsbPs_dTDIsActive(Ep1In->dTDHead)) { memset(sendBuf1,cnt,64); Status = XUsbPs_EpBufferSend(UsbInstancePtr, 1, sendBuf1, 64); cnt++; } } } xusbps_intr_example.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба Не подскажете какая скорость bulk out? Может кто zynq us+ usb скорость проверял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_AZ 0 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба С ходу получилось около 8Мбайт/с. Но за скоростью пока не гонюсь, хочу получить стабильную работу. После этого можно будет и пооптимизировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dmitry-tomsk 0 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба 6 minutes ago, Alex_AZ said: С ходу получилось около 8Мбайт/с. Но за скоростью пока не гонюсь, хочу получить стабильную работу. После этого можно будет и пооптимизировать. Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба Неплохо бы при этом указывать используемый ULPI phy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_AZ 0 18 июля, 2019 Опубликовано 18 июля, 2019 · Жалоба USB3320C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_AZ 0 17 сентября, 2019 Опубликовано 17 сентября, 2019 · Жалоба Забыл сразу написать, но может кому-то пригодится. Все заработало нормально после замены кабеля USB. Причем сбоил тот, который шел в комплекте с платой :-) Со штатным драйвером скорость bulk out удалось получить на уровне 10МБ/с, bulk in - 8..9 МБ/с. Думается, что скорость можно еще увеличить, если переписать драйвер под собственное применение без проверок на ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться