Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как добиться скорости в 20 Мб/с по HS USB
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Vitaliy S.
Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с?

Была идея что читалки используют несколько ендпоинтов параллельно на вывод за счёт чего получается большая скорость, но как то везде в конфигурации устройств вижу лишь 1 EP на вывод.

Изучил несколько исходников firmware LPC2888, Cortex M3, Cypress . Везде BOT режим с двум енпоинтами!!

Вобщем для меня загадка как это работает больше 4 МБ!?

Может кто знает как это делается? Буду очень благодарен за советы и ссылки?
alexkok
Цитата(Vitaliy S. @ Nov 11 2008, 16:39) *
Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с?

480Мб/сек
Цитата
Была идея что читалки используют несколько ендпоинтов параллельно на вывод за счёт чего получается большая скорость, но как то везде в конфигурации устройств вижу лишь 1 EP на вывод.

Изучил несколько исходников firmware LPC2888, Cortex M3, Cypress . Везде BOT режим с двум енпоинтами!!

Вобщем для меня загадка как это работает больше 4 МБ!?

Может кто знает как это делается? Буду очень благодарен за советы и ссылки?

Посмотрите здесь о скорости
Vitaliy S.
Цитата(alexkok @ Nov 11 2008, 20:45) *
480Мб/сек

Это понятно, это макисмальная пропускная способность шины!, а я спрашивал про один ендпоинт!, у которого придел 4,5 Мб, как мне кажется из описания шины. На шине несколько ендпоинтов от разных устройств.


Посмотрите здесь о скорости



За ссылки спасибо, читаю. Правда там нет ни слова о том как это реализовать в других контроллерах а не Cypress, на да ладно всё равно почитаю.
sergeeff
Наличие в контроллере USB 2.0 вовсе не означает, что там реализован режим high speed 480 Mbit/s (60 MB/s), как правило только full speed 12 Mbit/s (1.5 MB/s) и low speed 1.5 Mbit/s (187.5 kB/s).

Соответственно если надо заполучить васокую скорость надо выбирать контроллер, который поддерживает именно режим high speed.
Vitaliy S.
Цитата(sergeeff @ Nov 12 2008, 19:14) *
Наличие в контроллере USB 2.0 вовсе не означает, что там реализован режим high speed 480 Mbit/s (60 MB/s), как правило только full speed 12 Mbit/s (1.5 MB/s) и low speed 1.5 Mbit/s (187.5 kB/s).

Соответственно если надо заполучить васокую скорость надо выбирать контроллер, который поддерживает именно режим high speed.



Суть вопроса на FS HS, это и так понятно, вопрос в том что я читаю в спецификации что один ендпоинт может выдать на гора по шине лишь 4,6 Мб в секунду, а вся шина имеет пропускную способность 56 Мб и (480МБит), так вот чтобы заполнить в всю шину устройство должно параллельно фигачить минимум по 10 ендпоинтов, а в конфигурации всех флешек, кардридеров тольео один! HS ендпоинт, т.е они могут выдавать только 4,6 Мб, а они как-то выдают 20-30 Мб.

Вот в чём вопрос. Как они это делают имея один EP?
uriy
Vitaliy S.Я уже запутался где у вас мегабит а где мегабайт. Вроде принято писать так МБ - мегабайт (большая буква Б), Мб а лучше Мбит (соответственно маленькая буква).
Stanislav
Цитата(Vitaliy S. @ Nov 14 2008, 18:02) *
Суть вопроса на FS HS, это и так понятно, вопрос в том что я читаю в спецификации что один ендпоинт может выдать на гора по шине лишь 4,6 Мб в секунду
Где Вы это прочитали? 07.gif
Приведите ссылку, плиз.

Цитата(Vitaliy S. @ Nov 14 2008, 18:02) *
...а вся шина имеет пропускную способность 56 Мб и (480МБит)...
Вообще-то, теоретически достижимая пропускная способность HS USB составляет не 56, а 49МБайт/с.
Alex11
Что-то я не помню в спецификации, где прописано это ограничение. У меня живьем на филипсовском контроллере 20 МБ/сек на одном эндпойнте работает, причем скорость ограничена моими внешними цепями. Контроллер может больше.
galjoen
Цитата(Alex11 @ Nov 15 2008, 00:07) *
Что-то я не помню в спецификации, где прописано это ограничение. У меня живьем на филипсовском контроллере 20 МБ/сек на одном эндпойнте работает, причем скорость ограничена моими внешними цепями. Контроллер может больше.

Я тоже про ограничение впервые слышу!
Одна EP может полностью заполнить весь канал. Зарезервируется только 10% пропускной способности на контрольный канал (передачи через EP 0).
Vitaliy S.
Цитата(galjoen @ Nov 17 2008, 12:00) *
Я тоже про ограничение впервые слышу!
Одна EP может полностью заполнить весь канал. Зарезервируется только 10% пропускной способности на контрольный канал (передачи через EP 0).


Не, ну если может то я только рад. smile.gif Я прочитал про это в книжке Шины PCI, USB, FirwWire от Михаила Гука. ....

Парни! Всё понял!

Выпускная способность ендпоинта зависит от размера буфера ендпоинта! И размера поля данных в кадре! Я тупо не дочитал.

При размере буфера ендпоинта в 3072 байта, ендпоинта может давать 24 Мегабайта в секунду.
При размере буфера ендпоинта в 2048 байт, ендпоинт может давать 16 Мегабайт.

56 не может давать один EP, максимум 24.

Всё, казус в моём сознании разрешился, всем спасибо! Просто в кардиридерах и прочих устройствах
мощная аппаратура с большими буферами, а в простых универсальных контроллерах типа LPC2888 EP имеют 512 байтовый буфер, посему они дают тока 3,5 Мб, что я и видел на своём макете.
-Al-
Цитата(Vitaliy S. @ Nov 17 2008, 13:09) *
Не, ну если может то я только рад. smile.gif Я прочитал про это в книжке Шины PCI, USB, FirwWire от Михаила Гука. ....

Парни! Всё понял!

Выпускная способность ендпоинта зависит от размера буфера ендпоинта! И размера поля данных в кадре! Я тупо не дочитал.

При размере буфера ендпоинта в 3072 байта, ендпоинта может давать 24 Мегабайта в секунду.
При размере буфера ендпоинта в 2048 байт, ендпоинт может давать 16 Мегабайт.

56 не может давать один EP, максимум 24.

Всё, казус в моём сознании разрешился, всем спасибо! Просто в кардиридерах и прочих устройствах
мощная аппаратура с большими буферами, а в простых универсальных контроллерах типа LPC2888 EP имеют 512 байтовый буфер, посему они дают тока 3,5 Мб, что я и видел на своём макете.

Фигня какая-то... Cypress CY7C68013A дает до 40МБайт/сек на 1 Bulk Endpoint с 2мя буферами по 512байт и стандартным драйвером.
Vitaliy S.
Цитата(-Al- @ Nov 17 2008, 14:30) *
Фигня какая-то... Cypress CY7C68013A дает до 40МБайт/сек на 1 Bulk Endpoint с 2мя буферами по 512байт и стандартным драйвером.


Вероятно имеется ввиду поле данных, в передаваемом за раз блоке, как-то так. Возможно тут и не нужен
большой EP буфер контроллера. Просто чем больше буфер EP тем больше может само ядро контроллера отправить данных на шину, как я понимаю.
mempfis_
Цитата(Vitaliy S. @ Nov 11 2008, 17:39) *
Исследую вопрос mass storage, и не могу понять как card readerы и прочие читаки и USB диски получают скорость в 20-50 Мб/сек, при том что все устройства у них сконфигурированы в HS режиме с одним! ендпоинтом, который по спецификации USB 2.0 может давать не больше 4,5 Мб/с?


В таких устройствах используется bulk-передача - пока канал не занят (например контрольными передачами) устройство может посылать буффер bulk-EP один за одним. Для сравнения в interrupt-EP передача возможна только раз в период опроса (например 1мс в USB1.1 при максимальном размере EP в 64 байта и скорость передачи в таком случае ограничивается 64kB/S). В bulk-EP таких ограничений нет (да и буффер конечной точки побольше) вот и получается нормальная скорость smile.gif
misyachniy
Нигде почему-то не упомянуто о том что endpoit-ы могут иметь один или два буфера.
Если буфер один, то перерывы в передаче обеспечены.
Кроме того со стороны компьютера нужно запрашивать передачу не по 64 или 512 байт а бОльшими блоками.

Я исследовал возможности ОС для предачи данных для режима FS(на последней странице).
В зависимости от ОС размер запрошенного блока может быть от 4 до 64 килобайт.
http://njnmnp.narod.ru/note/USB_for_programmer.pdf
mempfis_
Цитата
Нигде почему-то не упомянуто о том что endpoit-ы могут иметь один или два буфера.
Если буфер один, то перерывы в передаче обеспечены.

В документации на микросхемы USB обычно указывается возможность буферизации конечной точки.
В isp1181a например двукратная буферизация. В HS-USB-микроконтроллерах Cypress четырёхкратная (может быть и более, без документации точно не скажу). Размер конечной точки для bulk-передачи ограничен стандартом USB2.0:
An endpoint for bulk transfers specifies the maximum data payload size that the endpoint can accept from or transmit to the bus. The USB defines the allowable maximum bulk data payload sizes to be only 8, 16, 32, or 64 bytes for full-speed endpoints and 512 bytes for high-speed endpoints.

Цитата
Кроме того со стороны компьютера нужно запрашивать передачу не по 64 или 512 байт а бОльшими блоками.

Имеется ввиду запрос к драйверу на получение блока данных от 4кБ.
Драйвер заполняет буффер получая от usb-функции (вашего устройства) пакеты по 8-512байт и после заполнения возвращает его.
_4afc_
Цитата(mempfis_ @ Dec 8 2008, 12:01) *
Имеется ввиду запрос к драйверу на получение блока данных от 4кБ.
Драйвер заполняет буффер получая от usb-функции (вашего устройства) пакеты по 8-512байт и после заполнения возвращает его.


В последних WinMobile приходится читать блоками по 8кб, хотя раньше работало и на 4кб (FS, 1Мибит/сек).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.