Перейти к содержанию
    

LPC, USB

Добрый день!

 

У меня есть старый проект, под LPC24xx

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

 

Все бы хорошо, но загвоздка вышла с USB Device. Я использовал когда-то USB стек от Кейла, повыбрасывал MSC и использовал чистую Bulk передачу. Посмотрел примеры для кортекса - ничего не поменялось, значит контроллер USB внутри тот же самый остался. Ну и вроде бы все хорошо, я просто переделал инициализацию пинов под кортекс и обращение к регистрам.

В диспетчере устройств появляется неизвестный девайс с VID=0E0F, PID=0001 - это не мое

В аттаче приложил лог USB Trace

Не пойму, куда девается запрос дескриптора USB_DeviceDescriptor, потому что из лога видно, что спрашивается только USB_ConfigDescriptor

И откуда винда тогда взяла VID/PID, если устройство их вообще не сообщало?

 

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

 

usbtrace.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;
...

добавил индикацию светодиодом при запросе дескриптора устройства.

И ведь моргает ...

Значит данные должны отправляться. Ничего не понимаю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пардон за некропост, но у LPC17xx область памяти, где лежит буфер USB, жёстко прибита гвоздями (подробности - в юзер мануале). В кейловском примере это не учитывается, если я ничего не путаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пардон за некропост, но у LPC17xx область памяти, где лежит буфер USB, жёстко прибита гвоздями (подробности - в юзер мануале). В кейловском примере это не учитывается, если я ничего не путаю.

там ларчик оказался более простым... С этими кейловскими подстановками членов структур в конце прерывания сбрасывался не DevIntClr, а EpIntClr :) банальная опечатка, теперь все работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...