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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Отправка пакета через USB из LPC1778 в ПК
jcxz
сообщение Dec 23 2014, 06:21
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ДЕЙЛ @ Dec 23 2014, 01:18) *
Приятно удивило, что там добрая сотня файлов, в которых мне копаться неделю надо. Пока хочу с простейшего начать.

Сказать что Вы сильно преувеличиваете - значит ничего не сказать.
Открываем 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 минуты...

Цитата(ig_z @ Dec 23 2014, 02:15) *
Далее - сниферы ничего не "ждут". Они фиксируют шинный трафик и отображают его в более менее понятном виде.

Маленькая поправочка: снифферы не "фиксируют шинный трафик", они "фиксируют вызовы API к USB-драйверу ядра".
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Feb 16 2015, 12:45
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



для чего в описании USB фигурирует I2C? В общих чертах хотелось бы узнать.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Feb 17 2015, 05:03
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
Понапридумывают же... sm.gif Попробую ещё раз перечитать про USB, мошть понятнее станет.

Есть такая книжка: Агуров, Интерфейс USB.Практика использования и программирования. 2004
Там по-русски и вполне понятно для начинающего объяснено про устройство USB
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Feb 19 2015, 08:48
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Вот картинка из Агурова. Правильно я понимаю, что байты команд хоста во время инициализации можно увидеть в буфере нулевой конечной точки? Или они невидимы для программиста со стороны контроллера?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ДЕЙЛ
сообщение Mar 10 2015, 14:06
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 234
Регистрация: 7-11-13
Пользователь №: 79 085



Опять вернулся к этой теме. Почитал Агурова и описание модуля. В моём представлении вырисовывается такая картина:
1. Подключаем разъём к ноуту, хост видит, что резистор притянул линию и отсылает запрос;
2. Устройство принимает байты запроса в буфер нулевой конечной точки, смотрит эти байты и формирует массив данных, которые хостом воспринимаются как дескриптор устройства;
3. На основании данных дескриптора хост отправляет более конкретную команду устройству и т.д. до окончания инициализации соединения.
Мои соображения похожи на правду?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 10 2015, 20:36
Сообщение #21


Гуру
******

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



Цитата(ДЕЙЛ @ Mar 10 2015, 17:06) *
Опять вернулся к этой теме. Почитал Агурова и описание модуля. В моём представлении вырисовывается такая картина:
1. Подключаем разъём к ноуту, хост видит, что резистор притянул линию и отсылает запрос;
2. Устройство принимает байты запроса в буфер нулевой конечной точки, смотрит эти байты и формирует массив данных, которые хостом воспринимаются как дескриптор устройства;
3. На основании данных дескриптора хост отправляет более конкретную команду устройству и т.д. до окончания инициализации соединения.
Мои соображения похожи на правду?

в общем да
каждый запрос имеет свой идентификатор и, соответственно, структуру себя родимого и ответа
делается все в switch-case для каждого типа запроса. Если что-то не реализовано, отрабатывается STALL
смотреть во всех кейловских примерах (в яре, по-моему, то же самое было), файл usbcore.c, функция USB_EndPoint0
примерно так:
CODE
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)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:17
Рейтинг@Mail.ru


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