BSACPLD 14 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба Народ, а кто-нибудь пробовал реализовать на CH569W мост USB-FIFO по типу CYUSB3014? Или может быть есть у кого-нибудь грамотный пример приёма и отправки пакетов по USB3.0 на CH569W? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 214 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба 1 час назад, BSACPLD сказал: Народ, а кто-нибудь пробовал реализовать на CH569W мост USB-FIFO по типу CYUSB3014? Проект https://hydrabus.com/hydrausb3-v1-0-specifications/?v=ea8a1a99f6c9 и их репозитории на github смотрели? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба 14 minutes ago, makc said: Проект https://hydrabus.com/hydrausb3-v1-0-specifications/?v=ea8a1a99f6c9 и их репозитории на github смотрели? Да. Сложилось впечатление, что это пример очень далёкий от реального применения. В купе с отсутствием документации на USB3.0 периферию данный пример весьма проблематично применить в реальном проекте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 214 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба 1 час назад, BSACPLD сказал: В купе с отсутствием документации на USB3.0 периферию данный пример весьма проблематично применить в реальном проекте. На сколько я понял, там один общий USB-контроллер и его регистры описаны в ДШ и есть в заголовочных файлах от производителя и в проекте Hydra. Поэтому проблемы с отладкой неизбежно будут, но мне это видится преодолимыми трудностями. Дополнение: я ошибся, это два разных периферийных блока и у них разные базовые адреса, но для SS нет описания регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба 1 minute ago, makc said: На сколько я понял, там один общий USB-контроллер и его регистры описаны в ДШ и есть в заголовочных файлах от производителя и в проекте Hydra. Поэтому проблемы с отладкой неизбежно будут, но мне это видится преодолимыми трудностями. На USB2.0 есть описание регистров, а на USB3.0 описание отсутствует. В разделе про USB3.0 написано "используйте нашу библиотеку", а где её брать неизвестно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 214 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба 1 час назад, BSACPLD сказал: На USB2.0 есть описание регистров, а на USB3.0 описание отсутствует. Вы правы, мне показалось что это один блок и у них одни и те же регистры. Но это не так. 1 час назад, BSACPLD сказал: В разделе про USB3.0 написано "используйте нашу библиотеку", а где её брать неизвестно. https://github.com/openwch/ch569/tree/main/EVT/EXAM/USBSS У них там много примеров и для другой периферии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба 2 hours ago, makc said: Вы правы, мне показалось что это один блок и у них одни и те же регистры. Но это не так. https://github.com/openwch/ch569/tree/main/EVT/EXAM/USBSS У них там много примеров и для другой периферии. При попытке собрать пример вылезает куча ошибок типа такой: Description Resource Path Location Type /home/sergey/Work/WCH/ch569/EVT/EXAM/USBSS/USBD/CH372Device/obj/../USB30/CH56x_usb30.c:528: undefined reference to `USB30_OUT_Set' CH372Device C/C++ Problem Причем изначально вообще была ругань на отсутствие некоторых include - китайцы накосячили с верхним/нижним регистром в именах файлов. Я это поправил, но не знаю как победить выше описанную ошибку. Как будто среда не находит libCH56x_usb30.a в котором и должны быть данные функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 214 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба 8 часов назад, BSACPLD сказал: Как будто среда не находит libCH56x_usb30.a в котором и должны быть данные функции. Нужно смотреть строку запуска линковщика и тогда будет понятно где что ищется и почему не находится. Покажите, как запускается линковщик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба 5 hours ago, makc said: Нужно смотреть строку запуска линковщика и тогда будет понятно где что ищется и почему не находится. Покажите, как запускается линковщик. Уже нашел. В проекте почему-то был неправильно прописан путь к папке в которой лежит libCH56x_usb30.a. Но теперь другая проблема. Проект собрался, но не получается прошить ch569 из под Linux. Прошивальщик упорно не видит устройство, хотя в /dev оно есть. Запускал естественно от sudo по инструкции. Ещё меня смутило, что в документации устройство названо /dev/ch37x, а по факту появляется устройство /dev/ch37x1. Из под Windows плата прошивается без проблем, но хотелось бы прошивать сразу из под Linux. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 17 февраля, 2023 Опубликовано 17 февраля, 2023 · Жалоба Либо там нерабочая библиотека, либо я в упор не понимаю, что я делаю не так. Сделал loopback. В EP1_OUT_Callback подтверждаю запись текущего пакета и инициирую обратную передачу. void EP1_OUT_Callback(void) { PRINT("EP1_OUT_Callback\n"); UINT16 rx_len, i; UINT8 nump; UINT8 status; USB30_OUT_Status(ENDP_1, &nump, &rx_len, &status); for(int i=0 ; i<rx_len ; i++) { PRINT("endp1RTbuff[%u] = %x\n", i, endp1RTbuff[i]); } USB30_OUT_ClearIT(ENDP_1); USBSS->UEP1_RX_DMA = (UINT32)(UINT8 *)endp1RTbuff; USB30_IN_Set(ENDP_1, DISABLE, ACK, 1, 1024); PRINT("USB30_Send_ERDY(ENDP_1 | IN, 1)\n"); USB30_Send_ERDY(ENDP_1 | IN, 1); USB30_OUT_Set(ENDP_1, ACK, 1); PRINT("USB30_Send_ERDY(ENDP_1 | OUT, 1)\n"); USB30_Send_ERDY(ENDP_1 | OUT, 1); } В EP1_IN_Callback обрабатываю передачу ответного пакета. void EP1_IN_Callback(void) { PRINT("EP1_IN_Callback\n"); UINT8 nump; nump = USB30_IN_Nump(ENDP_1); //nump: 剩余待发送包数量 for(int i=0 ; i<8 ; i++) { PRINT("endp1RTbuff[%u] = %x\n", i, endp1RTbuff[i]); } PRINT("nump = %u\n", nump); USBSS->UEP1_TX_DMA = (UINT32)(UINT8 *)endp1RTbuff; USB30_IN_ClearIT(ENDP_1); USB30_IN_Set(ENDP_1, ENABLE, ACK, 1, 1024); PRINT("USB30_Send_ERDY(ENDP_1 | IN, 1)\n"); USB30_Send_ERDY(ENDP_1 | IN, 1); } Пакет действительно отправляется обратно, но это происходит бесконечно вместо однократной отправки. Что я делаю не так? Может кто-нибудь поделиться рабочим примером для отправки пакетов в направлении "устройство->ПК"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 18 февраля, 2023 Опубликовано 18 февраля, 2023 · Жалоба UPD. Попробовал HYDRAUSB - не запускается отладка по UART. Пробовал и через printf и через UART1_SendString - в приемной консоли тишина. При этом через OpenWCH printf работает без проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба UPD2. Взял библиотеку USB 3.0 от HYDRAUSB и создал проект с нуля. В направлении "ПК->Устройство" все ОК. В направлении "Устройство->ПК" как только я вызываю libusb_bulk_transfer устройство тут же возвращает мне пакет данных. Насколько я понял, в библиотеке реализована мгновенная отправка данные по запросу от ПК даже если передавать нечего. А мне нужно сделать как на CYUSB3014 с бесконечным ожиданием по вызову libusb_bulk_transfer пока не появятся данные для отправки. Опыта с USB на столь низком уровне у меня не много - буду признателен если кто-нибудь поможет допилить библиотеку для CH569 для отправки пакета по наличию данных для отправки. Проект прилагается. ch569w_fw.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 14 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба UPD3. Пока изыскания следующие: Чтобы начать отправку пакета, после того как данные готовы, нужно изменить состояние конечной точки: USB30_IN_set(ENDP_1, ENABLE, ACK, DEF_ENDP1_IN_BURST_LEVEL, 1024); USB30_send_ERDY(ENDP_1 | IN, DEF_ENDP1_IN_BURST_LEVEL); После этого начинает вызываться EP1_IN_Callback(). Когда данные закончились, нужно поменять состояние конечной точки на NRDY: USB30_IN_set(ENDP_1, ENABLE, NRDY, DEF_ENDP1_IN_BURST_LEVEL, 1024); USB30_send_ERDY(ENDP_1 | IN, DEF_ENDP1_IN_BURST_LEVEL); И вот тут как раз и возникает проблема как определить момент, когда данные уже отправлены... Я пробовал отслеживать изменение nump: nump = USB30_IN_nump(ENDP_1); //nump: number of remaining packets to be sent status = ACK; if(prev_nump != nump) { status = NRDY; } prev_nump = nump; Но при таком подходе у меня успевает отправиться несколько пакетов прежде чем изменится nump... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 214 28 апреля, 2023 Опубликовано 28 апреля, 2023 · Жалоба Подниму тему. Кому-нибудь удалось добиться работы USB 2.0 интерфейса (в моём случае хост) при работе МК на частоте, отличной от 120 МГц? Судя по дереву сигналов тактирования проблем быть не должно и рабочая частота ядра и шины не должна влиять на работу контроллера и USB PHY, но по факту я вижу, что при настройке на частоту 60 МГц или 80 МГц транзакция запроса дейскриптора в процессе энумерации отваливается по тайм-ауту. Все примеры от производителя настроены на 120 МГц, HydraUSB тоже на 120. Но для меня эта частота избыточна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey_77 0 10 мая, 2023 Опубликовано 10 мая, 2023 · Жалоба Что-бы включилась отладка в проекте HydraUSB, надо в makefile раскомментировать одну строчку. С ЮСБ 3.0 из примера HydraUSB заработало быстро, то с ЮСБ 2.0 проблемы. Там сохраняется статус ACK и если его не поменять на NAK, то хост считает ещё раз(и много раз). Если не поставить опцию RB_UEP_T_AUTOTOG, то через пакет не отправляются данные. С опцией RB_UEP2_BUF_MOD то же не заработало. Да и нормального примера, где один эндпоинт IN , а второй OUT я не нашёл. И описание ЮСБ2.0 - просто издевательство. Где-то в комментариях видел. что можно разогнать ядро до 160МГц, но будут проблемы с ЮСБ 3.0. На 120МГц ЮАРТ работает на 7.5Мбод(3Мбод и 5Мбод тоже ) с CH347 (для 15Мбод я не нашёл переходник на ЮСБ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться