реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LPC, USB, энумерация
toweroff
сообщение Feb 7 2014, 08:47
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день!

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

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

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

Прикрепленный файл  usbtrace.html ( 108.9 килобайт ) Кол-во скачиваний: 240
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 7 2014, 09:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

добавил индикацию светодиодом при запросе дескриптора устройства.
И ведь моргает ...
Значит данные должны отправляться. Ничего не понимаю
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Feb 17 2014, 11:14
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 18 2014, 11:27
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

там ларчик оказался более простым... С этими кейловскими подстановками членов структур в конце прерывания сбрасывался не DevIntClr, а EpIntClr sm.gif банальная опечатка, теперь все работает
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 19:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01281 секунд с 7
ELECTRONIX ©2004-2016