"Новый" USB на STM32

Jan 07, 2025 16:20

Решил я еще в прошлом году "унифицировать" USB, чтобы проще было, если вдруг надумаю какое-то "эдакое" устройство сделать. Выкладываю на гитхаб помаленьку (HID, CDC и эмуляция PL2303). Пока только на F103. Если сегодня допишу составное устройство (7 USB-CDC в одном флаконе), то как-нибудь опробую всю четверку на F072 и F303 ( Read more... )

рукожопие, железяки, stm32

Leave a comment

Comments 9

mbr January 7 2025, 13:46:36 UTC
ну, он говорит, что string decriptor 0 - какой-то неправильный. Потому и перезапрашивает по несколько раз и все остальные string descriptor кривые. Посмотри что отдаешь побайтно.

Reply

eddy_em January 7 2025, 14:07:17 UTC
Я сравнил выхлоп отладки с выхлопом wireshark: похоже, по какой-то причине часть запросов элементарно "не доходит". В wireshark он есть, а в выхлопе - нет. Отключил отладку - lsusb показывает все дескрипторы правильно, однако, все равно udev симлинки не создает: просто нет свойств "interface". Ну и странно, что, судя по отладке, при подключении вообще не запрашиваются строковые дескрипторы (что должно быть после SET_CONFIGURATION): сразу переходит на SET_LINE_CODING.
И после каждого lsusb вылезает в dmesg: "clear tt 2 (81b0) error -32". Уж ХЗ, что я там "наоптимизировал", но как-то оно через задницу в итоге получилось. "Неоптимизированный" вариант лучше работал.

Reply

eddy_em January 7 2025, 15:01:22 UTC
Нашел один косяк: не проверяя SETUP_FLAG, я запускал всю тягомотину. Вот, видимо, при каких-то условиях оно пыталось предыдущий запрос повторить. Правда, все равно пропускает в отладочном режиме многое.
Надо искать, что у меня за косяк такой: ведь не должно оно ничего пропускать, USB_EPnR_STAT_RX я выставляю лишь по окончании функции, а __disable_irq(), который выполняю в суперлупе один раз в миллисекунду для отправки очередного содержимого кольцевого отладочного буфера в UART, навряд ли поспособствовал бы этому (т.к. в этом случае за очень небольшое время - пока копируется кусок в буфер передачи и запускается DMA, должно больше одного запроса прийти).

Reply

mbr January 7 2025, 15:03:11 UTC
у.... да у тебя весь setup endpoint state machine из-за этого валится будет. Там и не такое вылезет.

Reply


_luden_ January 7 2025, 14:22:34 UTC

А он не может по таймауту отваливаться?

Например если ждём слишком мало?

Reply

eddy_em January 7 2025, 14:57:28 UTC
У меня там косяк был один - я не проверял SETUP_FLAG. Однако, с включенным дебагом все равно глючило, а как только отключил - заработало. Очень странно.

Reply

_luden_ January 7 2025, 14:58:41 UTC

Хм... интересно.

Reply


Leave a comment

Up