Здравствуйте.
Разбираюсь с USB. Конкретнее с CDC (виртуальный COM порт), реализую на микроконтроллере STM32(L). Библиотека от ST это просто кошмар, поэтому решил написать свою на основе библиотеки от keil. У keil есть реализация HID устройства, а CDC нет.
Читая Агурова и статьи в интернете, уже кое-чего добился проходит инициализация – читаются дескрипторы, на ПК подключается драйвер и даже можно найти новый COM порт и открыть его в терминале. А вот с передачей и приемом у меня проблемы – я никак не пойму с какого момента заканчивается общение с нулевой конечной точкой и начинается общение с другими конечными точками.
При отладке последовательность запросов у меня такая:
1. GET_DESCRIPTOR_DEVICE (дескриптор устройства)
2. SET_ADRESS
3. GET_DESCRIPTOR_DEVICE (дескриптор конфигурации)
4. SET_CONFIGURATION
5. SET_LINE_CODING
6. GET_LINE_CODING
7. SET_CONTROL_LINE_STATE
8. При открытии виртуального порта в терминале опять SET_LINE_CODING
А далее ничего не происходит, даже когда я передаю данные через терминал. Хотя USB не отваливается и продолжает работать дальше.
У меня такие вопросы.
1. Что должно происходить дальше? Какие запросы обрабатываться?
2. Что нужно сделать при запросе SET_CONFIGURATION? Я при этом запросе только включаю/настраиваю остальные(не конфигурационные) конечные точки и то не уверен, что правильно?
3. Как и когда правильно настраивать не конфигурационные конечные точки – по дескрипторам конечных точек или нужно учитывать какую-то информацию при запросе с ПК?
Вроде пока больше вопросов не вспомню.
Заранее благодарю за любую помощь.
P.S. Может у кого есть пример для cdc usb, хотя-бы даже для другого микроконтроллера.