jcxz 231 23 декабря, 2014 Опубликовано 23 декабря, 2014 · Жалоба Приятно удивило, что там добрая сотня файлов, в которых мне копаться неделю надо. Пока хочу с простейшего начать. Сказать что Вы сильно преувеличиваете - значит ничего не сказать. Открываем IAR6.50 - там в USB-ядре всего 3 файла: usb_buffer.c, usb_hw.c, usb_t9.c Вам нужен: EWARM 6.50.3\arm\examples\NXP\LPC17xx\IAR-LPC-1788-SK\AudioDevice\modules\usb_hw.c ISR в нём: USB_IRQHandler() - вот в нём и разбирайтесь. На поиск у меня ушло 2 минуты... Далее - сниферы ничего не "ждут". Они фиксируют шинный трафик и отображают его в более менее понятном виде. Маленькая поправочка: снифферы не "фиксируют шинный трафик", они "фиксируют вызовы API к USB-драйверу ядра". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 31 16 февраля, 2015 Опубликовано 16 февраля, 2015 · Жалоба для чего в описании USB фигурирует I2C? В общих чертах хотелось бы узнать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Понапридумывают же... sm.gif Попробую ещё раз перечитать про USB, мошть понятнее станет. Есть такая книжка: Агуров, Интерфейс USB.Практика использования и программирования. 2004 Там по-русски и вполне понятно для начинающего объяснено про устройство USB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 31 19 февраля, 2015 Опубликовано 19 февраля, 2015 · Жалоба Вот картинка из Агурова. Правильно я понимаю, что байты команд хоста во время инициализации можно увидеть в буфере нулевой конечной точки? Или они невидимы для программиста со стороны контроллера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ДЕЙЛ 31 10 марта, 2015 Опубликовано 10 марта, 2015 · Жалоба Опять вернулся к этой теме. Почитал Агурова и описание модуля. В моём представлении вырисовывается такая картина: 1. Подключаем разъём к ноуту, хост видит, что резистор притянул линию и отсылает запрос; 2. Устройство принимает байты запроса в буфер нулевой конечной точки, смотрит эти байты и формирует массив данных, которые хостом воспринимаются как дескриптор устройства; 3. На основании данных дескриптора хост отправляет более конкретную команду устройству и т.д. до окончания инициализации соединения. Мои соображения похожи на правду? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 10 марта, 2015 Опубликовано 10 марта, 2015 · Жалоба Опять вернулся к этой теме. Почитал Агурова и описание модуля. В моём представлении вырисовывается такая картина: 1. Подключаем разъём к ноуту, хост видит, что резистор притянул линию и отсылает запрос; 2. Устройство принимает байты запроса в буфер нулевой конечной точки, смотрит эти байты и формирует массив данных, которые хостом воспринимаются как дескриптор устройства; 3. На основании данных дескриптора хост отправляет более конкретную команду устройству и т.д. до окончания инициализации соединения. Мои соображения похожи на правду? в общем да каждый запрос имеет свой идентификатор и, соответственно, структуру себя родимого и ответа делается все в switch-case для каждого типа запроса. Если что-то не реализовано, отрабатывается STALL смотреть во всех кейловских примерах (в яре, по-моему, то же самое было), файл usbcore.c, функция USB_EndPoint0 примерно так: void USB_EndPoint0 (U32 event) { switch (event) { case USB_EVT_SETUP: USB_SetupStage(); USB_DirCtrlEP(SetupPacket.bmRequestType.BM.Dir); EP0Data.Count = SetupPacket.wLength; /* Number of bytes to transfer */ switch (SetupPacket.bmRequestType.BM.Type) { case REQUEST_STANDARD: switch (SetupPacket.bRequest) { case USB_REQUEST_GET_STATUS: if (!USB_ReqGetStatus()) { goto stall_i; } USB_DataInStage(); break; case USB_REQUEST_CLEAR_FEATURE: if (!USB_ReqSetClrFeature(0)) { goto stall_i; } USB_StatusInStage(); break; case USB_REQUEST_SET_FEATURE: if (!USB_ReqSetClrFeature(1)) { goto stall_i; } USB_StatusInStage(); break; case USB_REQUEST_SET_ADDRESS: if (!USB_ReqSetAddress()) { goto stall_i; } USB_StatusInStage(); break; case USB_REQUEST_GET_DESCRIPTOR: if (!USB_ReqGetDescriptor()) { goto stall_i; } USB_DataInStage(); break; case USB_REQUEST_SET_DESCRIPTOR: /*stall_o:*/ USB_SetStallEP(0x00); /* not supported */ EP0Data.Count = 0; break; case USB_REQUEST_GET_CONFIGURATION: if (!USB_ReqGetConfiguration()) { goto stall_i; } USB_DataInStage(); break; case USB_REQUEST_SET_CONFIGURATION: if (!USB_ReqSetConfiguration()) { goto stall_i; } USB_StatusInStage(); break; ...... и так далее сама функция дергается из USB-прерывания (usbhw.c) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться