Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103 вопросы по USB
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
uriy
Имеется устройство с USB хост стороннего производителя.
Также имеются стандартные USB устройтсва клиенты того же производителя.
Они вместе взаимодействуют.
Мне нужно сделать подобное устройство. Документация на протокол имеется.

Но никак не получается начать обмен по USB.
Раньше с USB работал (использовал CDC и libusb) но всегда все сразу работало даже не разбирался в USB стеке.

Хост запрашивает дескрипторы я на них отвечаю.
В регистр USB_DADDR записывается 0x81.
Вроде этого достаточно чтобы сказать что энумерация прошла успешно.

Дескриптор эндпойнтов вот такой
Код
bLength = 0x07
     bDescriptorType = 0x05
                       ENDPOINT
    bEndpointAddress = 0x02
                  D7 : Direction
                     0 = OUT endpoint
              D6...4 : Reserved
                     000
              D3...0 : The endpoint number
                     2
        bmAttributes = 0x02
              D7...6 : Reserved
                     00
              D5...4 : Usage Type
                     00 = Data endpoint
              D3...2 : Synchronization Type
                     00 = No Synchronization
              D1...0 : Transfer Type
                     10 = Bulk
      wMaxPacketSize = 64
           bInterval = 0

             bLength = 0x07
     bDescriptorType = 0x05
                       ENDPOINT
    bEndpointAddress = 0x81
                  D7 : Direction
                     1 = IN endpoint
              D6...4 : Reserved
                     000
              D3...0 : The endpoint number
                     1
        bmAttributes = 0x02
              D7...6 : Reserved
                     00
              D5...4 : Usage Type
                     00 = Data endpoint
              D3...2 : Synchronization Type
                     00 = No Synchronization
              D1...0 : Transfer Type
                     10 = Bulk
      wMaxPacketSize = 64
           bInterval = 0

Из него я вижу что у нас EP1_IN и EP2_OUT.
Согласно протокола я должен отправить валидные данные хосту только после этого он мне ответит.
Для работы использую либы от ST, пишу так
Код
USB_SIL_Write(EP1_IN, answer, sizeof(answer));
SetEPTxValid(ENDP1);

Но в регистре USB_EP1R в STAT_TX статус NAK.
Похоже данные не уходят и прерыание EP2_OUT тоже не возникает.

Есть подозрение что я напутал IN и OUT ендпойнты.
Но не могу понять где хранится атрибут эндпойнта. Как понять настроен он на IN или OUT?
uriy
Разобрался. С USB все верно настроено.
На хост отправлял не те данные что нужно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.