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

 
 
> как передать максимум данных по USB ?, с наибольшей скоростью!!!
NikP
сообщение Dec 15 2012, 17:57
Сообщение #1


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

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



В описании работы USB в режиме Bulk сказано, что макс. размер пакета 64 байта для этого режима. Мне надо передать 4 К данных. Так как данные передаются фреймами 1 мс, то получается, что на передачу 64 байтов уходит 2 мс (фрейм 1 мс - запрос от хоста, фрейм 1 мс - пакет данных), т.е. на 4096 байтов -128 мс. Другими словами, максимальная реальная скорость передачи данных - 32 К / сек. И это всё, что можно выжать из заявленных 12 Мбит/с для full speed? Явно что-то я не учёл, где ошибка, как на практике передавать данные с максимальной скоростью?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
NikP
сообщение Dec 16 2012, 17:08
Сообщение #2


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

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Я делаю устройство на SiLabs C8051F320 (для определённости). В принципе, там есть ЕР3 с буфером 512 байт (можно использовать двойную буферизацию - 2х256). Прошу подсказать , как организуется передача нескольких пакетов за фрейм? И что за это отвечает - драйвер или компьтерная программа , которая работает с устройством? Я считал до сих пор, что передачу инициирует хост своим запросом. В ответ устройство передаёт из In Еndpoint пакет данных объёмом , который задаётся при конфигурировании устройства, т.е. это задаёт программист . И объём этот не может быть больше величины фифо Еndpoint, из которой идёт передача. Или это не так?
Задача возникла из того, что сделали систему сбора информации, где 4 К данных собираются за 10 мкс в микросхему памяти. Как то обидно , когда основное время устройство тратит на передачу, а не на сбор и первичную обработку данных. Фирмвару и программу писали по образцу примера, который был приведён фирмой Cygnal (непосредственным разработчиком C8051F320).

Сообщение отредактировал NikP - Dec 16 2012, 17:47
Go to the top of the page
 
+Quote Post
=AK=
сообщение Dec 16 2012, 21:24
Сообщение #3


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(NikP @ Dec 17 2012, 03:38) *
там есть ЕР3 с буфером 512 байт (можно использовать двойную буферизацию - 2х256).

Вот и используйте двойную, режим "пинг-понг". Тогда ваш проц автоматически будет по очереди подставлять буфера по мере поступления запросов.

Цитата(NikP @ Dec 17 2012, 03:38) *
как организуется передача нескольких пакетов за фрейм? И что за это отвечает - драйвер или компьтерная программа , которая работает с устройством?

Хост контроллер. Это организовано на программном и аппаратном уровне, максимально близко к железу. Еще до всяких драйверов, на более низком уровне. Пользователя к этому ни под каким видом не подпускают.

Цитата(NikP @ Dec 17 2012, 03:38) *
Я считал до сих пор, что передачу инициирует хост своим запросом. В ответ устройство передаёт из In Еndpoint пакет данных объёмом , который задаётся при конфигурировании устройства, т.е. это задаёт программист . И объём этот не может быть больше величины фифо Еndpoint, из которой идёт передача. Или это не так?

Это так. Вот только запросов за один фрейм может быть много, на FS - до 19 штук, см. спецификацию USB 2.0 Table 5-9. Full-speed Bulk Transaction Limits. И если устройство в ответ на запрос мгновенно начинает выдавать пакет, то планировщик хоста не выкидывает его из очереди, а перекачивает пакет и дает новый запрос. А пока пакет перекачивается, устройство должно успеть заполнить второй буфер. Если не успеет, то в ответ на очередной запрос хоста оно (т.е. его SIU, тоже на низком уровне, аппаратно) ответит NACK-ом, и планировщик хоста в этом фрейме данных с него больше запрашивать не будет.

При 12 Мбит/сек пакет в 64 байта передается за 42.6 мкс. Если ваш девайс жует сопли и не успевает заполнять второй буфер за это время, то вместо 1.2 Мбайт в секунду будете иметь скорость перекачки 64 кбайт в секунду, или даже меньше.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- NikP   как передать максимум данных по USB ?   Dec 15 2012, 17:57
- - aaarrr   Цитата(NikP @ Dec 15 2012, 21:57) Явно чт...   Dec 15 2012, 18:18
- - Xenia   Цитата(NikP @ Dec 15 2012, 21:57) В описа...   Dec 15 2012, 18:26
|- - NikP   Ну эксперименты с размером пакета мы начали после ...   Dec 19 2012, 11:46
|- - =AK=   Цитата(NikP @ Dec 19 2012, 22:16) Ну эксп...   Dec 19 2012, 12:08
- - Pat   Цитата(NikP @ Dec 15 2012, 19:57) Так как...   Dec 15 2012, 22:29
- - =AK=   Цитата(NikP @ Dec 16 2012, 04:27) В описа...   Dec 15 2012, 23:36
- - Alex11   И еще надо учитывать, как работает верхняя програм...   Dec 17 2012, 14:33
- - NikP   Спасибо за советы! Дело сдвинулось после конфи...   Dec 18 2012, 17:02
|- - =AK=   Цитата(NikP @ Dec 19 2012, 03:32) комп па...   Dec 18 2012, 23:06
|- - геннадий75   Цитата(=AK= @ Dec 19 2012, 07:06) Наверня...   Dec 19 2012, 02:59
|- - =AK=   Цитата(геннадий75 @ Dec 19 2012, 13:29) А...   Dec 19 2012, 05:32
- - NikP   Мы пробовали передавать пакеты по 128 и 256 байт. ...   Dec 19 2012, 03:58
- - NikP   Все варианты сделаны честно: при переходе на друго...   Dec 19 2012, 09:36
|- - =AK=   Цитата(NikP @ Dec 19 2012, 20:06) Все вар...   Dec 19 2012, 10:09
- - NikP   =АК= Спасибо за науку: установили размер пакета 6...   Dec 20 2012, 16:42
- - Ten04   Цитата(NikP @ Dec 20 2012, 20:42) =АК= С...   Feb 20 2013, 10:59
- - Ten04   Не могу сделать режим двойной буферизации. Отправл...   Feb 21 2013, 07:33


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

 


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


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