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

 
 
 
Reply to this topicStart new topic
> работа USB OHCI в LPC23xx, поясните по логике
zuy
сообщение Dec 15 2009, 09:27
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Подскажите пожалуйста по логике работы с трансфер дескрипторами в USB OHCI.
Имеется девайс, у которого кроме EP0 есть еще Bulk IN EP81 и Bulk OUT EP1. Весть трафик идет только по Bulk конечным точкам.

Я формирую связанный список из двух дескрипторов конечных точек.
Далее по мере появления транзакций на чтение и запись ставлю TD в очередь соответствующего ED и хост их обрабатывает.

А как правильно потом обрабатывать завершение этих транзакций?
Что делать с теми которые завершились с ошибкой? Удалять их из списка ED или хост их сам убрал?
Если транзакция на чтение долго не завершается т.к. нет данных в девайсе для передачи, мне нужно самому убрать ее по таймауту?
Если хост не завершил транзакцию на чтение, будет ли он обрабатывать транзакцию на запись по другой конечной точке?
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Dec 17 2009, 06:46
Сообщение #2


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



В документации на OHCI все достаточно подробно описано. Хотя для нормальной реализации все же приходится экспериментировать. Попробую ответить на те вопросы, которые еще помню.
Все выполненные транзакции добавляются в соответствующий список. При каждом добавлении возникает прерывание.
Транзакцию на чтение можно и не убирать. Я реализовывал частино на кол-бэках, поэтому запрос на чтение у меня висел до победного.
Хост поочередно перебирает все конечные точки. Если прочитать не удалось переходит к следующей. Естественно токи должны быть в соответствующем состоянии.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
zuy
сообщение Mar 10 2010, 13:49
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Допустим мой девайс имеет две Bulk конечные точки на вход и выход. Обзовем из BulkIN, BulkOUT и соответствуют дескрипторы конечных точек BulkIN_ED, BulkOUT_ED
Я их соединяю в список и цепряю к HcBulkHeadED.
Получаю HcBulkHeadED указывает на BulkIN_ED, BulkiIN_ED.NextED указывает на BulkOUT_ED, а BulkiOUT_ED.NextED=0;
Далее я планирую цеплять трансфер дескрипторы к нужным дескрипторам конечных точек и ожидаю, что хост контроллер будет бегать по ED и передавать данные в соответствии с TD.

Теперь к сути вопроса.
Девайс может как иметь данные для передачи хосту так может и не иметь.
Если он не имеет данных, я делаю TD для IN транзакции и цепляю ее к BulkIN_ED, хост ее запускает, но т.к. девайс не имеет данных для передачи,
эта транзакция висит не исполненная. В это время возникает необходимость сделать OUT транзакцию, я создаю TD и цепляю ее к BulkOUT_ED.
Хост исполнит транзакцию OUT несмотря на то, что по другой EP есть незавершенная IN ?
Если исполнит, и в ответ на нее у девайса появятся данные для передачи, то хост примет эти данные в незавершенную IN или надо ее как-то убирать и делать новую?
Go to the top of the page
 
+Quote Post
zuy
сообщение Apr 19 2010, 05:55
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Необходимо заставить хост на LPC23xx читать из изохронной точки девайса по 64 байта с периодом 1мс.
Хост сконфигурировани и работает с точками Control и Bulk.
Мне нужен простой пример конфигурирования, чтобы он начал еще и запросы на чтение из изохронной точки отправлять.

В доке по OHCI написано что ED для Iso точек должны быть последними в списках ED таблицы прерываний в HCCA.
Для начала начал с прерываний.
Сделал ED для точки прерывания, прицепил к нему TD и для каждого элемента таблицы прерываний в HCCA поставил адрес этого ED.
Я расчитываю, что при такой конфигурации, хост каждый фрейм будет брать указатель на один и тот-же ED и т.о. я получу запросы на чтение из точки прерывания с периодом 1мс.
Далее в HcControl устанавливаю бит PLE. И ничего не происходит. Хост не делает ни одного запроса для чтения из точки.

Я смотрю активность на шине анализатором УСБ. Пока не получилось заставить хост выдать в шину запрос на чтение из точек прерывания или изохронной :-(
Go to the top of the page
 
+Quote Post
zuy
сообщение Apr 19 2010, 07:01
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Странно, как-то склеились темы. Моя старая из другой ветки, с созданной сегодня.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 12:47
Рейтинг@Mail.ru


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