BSACPLD 17 February 15, 2023 Posted February 15, 2023 · Report post Народ, а кто-нибудь пробовал реализовать на CH569W мост USB-FIFO по типу CYUSB3014? Или может быть есть у кого-нибудь грамотный пример приёма и отправки пакетов по USB3.0 на CH569W? Quote Share this post Link to post Share on other sites More sharing options...
makc 300 February 15, 2023 Posted February 15, 2023 · Report post 1 час назад, BSACPLD сказал: Народ, а кто-нибудь пробовал реализовать на CH569W мост USB-FIFO по типу CYUSB3014? Проект https://hydrabus.com/hydrausb3-v1-0-specifications/?v=ea8a1a99f6c9 и их репозитории на github смотрели? Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 15, 2023 Posted February 15, 2023 · Report post 14 minutes ago, makc said: Проект https://hydrabus.com/hydrausb3-v1-0-specifications/?v=ea8a1a99f6c9 и их репозитории на github смотрели? Да. Сложилось впечатление, что это пример очень далёкий от реального применения. В купе с отсутствием документации на USB3.0 периферию данный пример весьма проблематично применить в реальном проекте. Quote Share this post Link to post Share on other sites More sharing options...
makc 300 February 15, 2023 Posted February 15, 2023 · Report post 1 час назад, BSACPLD сказал: В купе с отсутствием документации на USB3.0 периферию данный пример весьма проблематично применить в реальном проекте. На сколько я понял, там один общий USB-контроллер и его регистры описаны в ДШ и есть в заголовочных файлах от производителя и в проекте Hydra. Поэтому проблемы с отладкой неизбежно будут, но мне это видится преодолимыми трудностями. Дополнение: я ошибся, это два разных периферийных блока и у них разные базовые адреса, но для SS нет описания регистров. Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 15, 2023 Posted February 15, 2023 · Report post 1 minute ago, makc said: На сколько я понял, там один общий USB-контроллер и его регистры описаны в ДШ и есть в заголовочных файлах от производителя и в проекте Hydra. Поэтому проблемы с отладкой неизбежно будут, но мне это видится преодолимыми трудностями. На USB2.0 есть описание регистров, а на USB3.0 описание отсутствует. В разделе про USB3.0 написано "используйте нашу библиотеку", а где её брать неизвестно. Quote Share this post Link to post Share on other sites More sharing options...
makc 300 February 15, 2023 Posted February 15, 2023 · Report post 1 час назад, BSACPLD сказал: На USB2.0 есть описание регистров, а на USB3.0 описание отсутствует. Вы правы, мне показалось что это один блок и у них одни и те же регистры. Но это не так. 1 час назад, BSACPLD сказал: В разделе про USB3.0 написано "используйте нашу библиотеку", а где её брать неизвестно. https://github.com/openwch/ch569/tree/main/EVT/EXAM/USBSS У них там много примеров и для другой периферии. Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 15, 2023 Posted February 15, 2023 · Report post 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 в котором и должны быть данные функции. Quote Share this post Link to post Share on other sites More sharing options...
makc 300 February 16, 2023 Posted February 16, 2023 · Report post 8 часов назад, BSACPLD сказал: Как будто среда не находит libCH56x_usb30.a в котором и должны быть данные функции. Нужно смотреть строку запуска линковщика и тогда будет понятно где что ищется и почему не находится. Покажите, как запускается линковщик. Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 16, 2023 Posted February 16, 2023 · Report post 5 hours ago, makc said: Нужно смотреть строку запуска линковщика и тогда будет понятно где что ищется и почему не находится. Покажите, как запускается линковщик. Уже нашел. В проекте почему-то был неправильно прописан путь к папке в которой лежит libCH56x_usb30.a. Но теперь другая проблема. Проект собрался, но не получается прошить ch569 из под Linux. Прошивальщик упорно не видит устройство, хотя в /dev оно есть. Запускал естественно от sudo по инструкции. Ещё меня смутило, что в документации устройство названо /dev/ch37x, а по факту появляется устройство /dev/ch37x1. Из под Windows плата прошивается без проблем, но хотелось бы прошивать сразу из под Linux. Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 17, 2023 Posted February 17, 2023 · Report post Либо там нерабочая библиотека, либо я в упор не понимаю, что я делаю не так. Сделал 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); } Пакет действительно отправляется обратно, но это происходит бесконечно вместо однократной отправки. Что я делаю не так? Может кто-нибудь поделиться рабочим примером для отправки пакетов в направлении "устройство->ПК"? Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 18, 2023 Posted February 18, 2023 · Report post UPD. Попробовал HYDRAUSB - не запускается отладка по UART. Пробовал и через printf и через UART1_SendString - в приемной консоли тишина. При этом через OpenWCH printf работает без проблем. Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 19, 2023 Posted February 19, 2023 · Report post UPD2. Взял библиотеку USB 3.0 от HYDRAUSB и создал проект с нуля. В направлении "ПК->Устройство" все ОК. В направлении "Устройство->ПК" как только я вызываю libusb_bulk_transfer устройство тут же возвращает мне пакет данных. Насколько я понял, в библиотеке реализована мгновенная отправка данные по запросу от ПК даже если передавать нечего. А мне нужно сделать как на CYUSB3014 с бесконечным ожиданием по вызову libusb_bulk_transfer пока не появятся данные для отправки. Опыта с USB на столь низком уровне у меня не много - буду признателен если кто-нибудь поможет допилить библиотеку для CH569 для отправки пакета по наличию данных для отправки. Проект прилагается. ch569w_fw.7z Quote Share this post Link to post Share on other sites More sharing options...
BSACPLD 17 February 19, 2023 Posted February 19, 2023 · Report post 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... Quote Share this post Link to post Share on other sites More sharing options...
makc 300 April 28, 2023 Posted April 28, 2023 · Report post Подниму тему. Кому-нибудь удалось добиться работы USB 2.0 интерфейса (в моём случае хост) при работе МК на частоте, отличной от 120 МГц? Судя по дереву сигналов тактирования проблем быть не должно и рабочая частота ядра и шины не должна влиять на работу контроллера и USB PHY, но по факту я вижу, что при настройке на частоту 60 МГц или 80 МГц транзакция запроса дейскриптора в процессе энумерации отваливается по тайм-ауту. Все примеры от производителя настроены на 120 МГц, HydraUSB тоже на 120. Но для меня эта частота избыточна. Quote Share this post Link to post Share on other sites More sharing options...
Alexey_77 0 May 10, 2023 Posted May 10, 2023 · Report post Что-бы включилась отладка в проекте 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Мбод я не нашёл переходник на ЮСБ). Quote Share this post Link to post Share on other sites More sharing options...