Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC, USB
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
toweroff
Добрый день!

У меня есть старый проект, под LPC24xx
Уж коли так случилось, что LPC177x пин-в-пин, решил перетащить под этот камень, да и цена кортексов значительно дешевле на сегодняшний день

Все бы хорошо, но загвоздка вышла с USB Device. Я использовал когда-то USB стек от Кейла, повыбрасывал MSC и использовал чистую Bulk передачу. Посмотрел примеры для кортекса - ничего не поменялось, значит контроллер USB внутри тот же самый остался. Ну и вроде бы все хорошо, я просто переделал инициализацию пинов под кортекс и обращение к регистрам.
В диспетчере устройств появляется неизвестный девайс с VID=0E0F, PID=0001 - это не мое
В аттаче приложил лог USB Trace
Не пойму, куда девается запрос дескриптора USB_DeviceDescriptor, потому что из лога видно, что спрашивается только USB_ConfigDescriptor
И откуда винда тогда взяла VID/PID, если устройство их вообще не сообщало?

Еще раз повторю, что исходники модифицировались только в части обращений к регистрам кортекса и инициализации пинов, сама логика никак не менялась

Нажмите для просмотра прикрепленного файла
toweroff
UPD
Проверил этот кусок в usbcore.c
Код
  
...
switch (SetupPacket.bmRequestType.BM.Recipient) {
    case REQUEST_TO_DEVICE:
      switch (SetupPacket.wValue.WB.H) {
        case USB_DEVICE_DESCRIPTOR_TYPE:
          EP0Data.pData = (U8 *)USB_DeviceDescriptor;
          len = USB_DEVICE_DESC_SIZE;
              set_LED_state(BLINK_COUNT_GREEN, 1);
          break;
        case USB_CONFIGURATION_DESCRIPTOR_TYPE:
          pD = (U8 *)USB_ConfigDescriptor;
          for (n = 0; n != SetupPacket.wValue.WB.L; n++) {
            if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bLength != 0) {
              pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
            }
          }
          if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bLength == 0) {
            return (__FALSE);
          }
          EP0Data.pData = pD;
          len = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
          break;
        case USB_STRING_DESCRIPTOR_TYPE:
          pD = (U8 *)USB_StringDescriptor;
...

добавил индикацию светодиодом при запросе дескриптора устройства.
И ведь моргает ...
Значит данные должны отправляться. Ничего не понимаю
esaulenka
Пардон за некропост, но у LPC17xx область памяти, где лежит буфер USB, жёстко прибита гвоздями (подробности - в юзер мануале). В кейловском примере это не учитывается, если я ничего не путаю.
toweroff
Цитата(esaulenka @ Feb 17 2014, 15:14) *
Пардон за некропост, но у LPC17xx область памяти, где лежит буфер USB, жёстко прибита гвоздями (подробности - в юзер мануале). В кейловском примере это не учитывается, если я ничего не путаю.

там ларчик оказался более простым... С этими кейловскими подстановками членов структур в конце прерывания сбрасывался не DevIntClr, а EpIntClr sm.gif банальная опечатка, теперь все работает
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.