toweroff 1 7 февраля, 2014 Опубликовано 7 февраля, 2014 · Жалоба Добрый день! У меня есть старый проект, под LPC24xx Уж коли так случилось, что LPC177x пин-в-пин, решил перетащить под этот камень, да и цена кортексов значительно дешевле на сегодняшний день Все бы хорошо, но загвоздка вышла с USB Device. Я использовал когда-то USB стек от Кейла, повыбрасывал MSC и использовал чистую Bulk передачу. Посмотрел примеры для кортекса - ничего не поменялось, значит контроллер USB внутри тот же самый остался. Ну и вроде бы все хорошо, я просто переделал инициализацию пинов под кортекс и обращение к регистрам. В диспетчере устройств появляется неизвестный девайс с VID=0E0F, PID=0001 - это не мое В аттаче приложил лог USB Trace Не пойму, куда девается запрос дескриптора USB_DeviceDescriptor, потому что из лога видно, что спрашивается только USB_ConfigDescriptor И откуда винда тогда взяла VID/PID, если устройство их вообще не сообщало? Еще раз повторю, что исходники модифицировались только в части обращений к регистрам кортекса и инициализации пинов, сама логика никак не менялась usbtrace.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 7 февраля, 2014 Опубликовано 7 февраля, 2014 · Жалоба 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 7 17 февраля, 2014 Опубликовано 17 февраля, 2014 · Жалоба Пардон за некропост, но у LPC17xx область памяти, где лежит буфер USB, жёстко прибита гвоздями (подробности - в юзер мануале). В кейловском примере это не учитывается, если я ничего не путаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 18 февраля, 2014 Опубликовано 18 февраля, 2014 · Жалоба Пардон за некропост, но у LPC17xx область памяти, где лежит буфер USB, жёстко прибита гвоздями (подробности - в юзер мануале). В кейловском примере это не учитывается, если я ничего не путаю. там ларчик оказался более простым... С этими кейловскими подстановками членов структур в конце прерывания сбрасывался не DevIntClr, а EpIntClr :) банальная опечатка, теперь все работает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться